I-LVM kunye neMatryoshka zifana ngantoni?

Uhlobo lomhla.
Ndingathanda ukwabelana noluntu ngamava am asebenzayo okwakha inkqubo yokugcina idatha ye-KVM usebenzisa i-md RAID + LVM.

Inkqubo iya kubandakanya:

  • Ukwakha i-md RAID 1 ukusuka kwi-NVMe SSD.
  • Ukudibanisa i-md RAID 6 ukusuka kwi-SATA SSD kunye nokuqhuba rhoqo.
  • Iimpawu ze-TRIM / DISCARD yokusebenza kwi-SSD RAID 1/6.
  • Ukwenza i-md RAID ye-bootable 1/6 uluhlu kwiseti eqhelekileyo yeediski.
  • Ukufaka inkqubo kwi-NVMe RAID 1 xa kungekho nkxaso ye-NVMe kwi-BIOS.
  • Ukusebenzisa i-cache ye-LVM kunye ne-LVM encinci.
  • Ukusebenzisa ii-snapshots ze-BTRFS kwaye uthumele / ufumane ukugcinwa.
  • Ukusebenzisa izifinyezo ze-LVM ezicekethekileyo kunye ne-thin_delta yokugcinwa kwesitayile se-BTRFS.

Ukuba unomdla, nceda ubone ikati.

Ingxelo

Umbhali akanalo naluphi na uxanduva ngemiphumo yokusebenzisa okanye ukungasebenzisi izinto / imizekelo / ikhowudi / iingcebiso / idatha evela kweli nqaku. Ngokufunda okanye ukusebenzisa le mathiriyeli nangayiphi na indlela, uthatha uxanduva lwazo zonke iziphumo zezi zenzo. Iziphumo ezinokubakho ziquka:

  • Ii-NVMe SSDs eziqhotsiweyo.
  • Isetyenziswe ngokupheleleyo kwisixhobo sokurekhoda kunye nokungaphumeleli kwee-SSD drives.
  • Gqibezela ilahleko yazo zonke iinkcukacha kuzo zonke iidrive, kuquka iikopi zogcino.
  • Izixhobo zekhompyuter ezingalunganga.
  • Ixesha elichithwe, imithambo-luvo kunye nemali.
  • Naziphi na ezinye iziphumo ezingadweliswanga apha ngasentla.

Intsimbi

Zazikhona:

Ibhodi yomama ukusuka malunga no-2013 kunye ne-chipset ye-Z87, epheleleyo nge-Intel Core i7 / Haswell.

  • Iprosesa 4 cores, 8 imisonto
  • 32 GB DDR3 RAM
  • 1 x 16 okanye 2 x 8 PCIe 3.0
  • 1 x 4 + 1 x 1 PCIe 2.0
  • 6 x 6 GBps SATA 3 izihlanganisi

Iadaptha ye-SAS ye-LSI SAS9211-8I yadanyaza kwimowudi ye-IT / HBA. I-RAID-enabled firmware iye yatshintshwa ngabom ngeHBA firmware ukuze:

  1. Ungayilahla le adaptha nangaliphi na ixesha kwaye uyibuyisele ngayo nayiphi na enye odibene nayo.
  2. I-TRIM/Lahla isebenze ngokwesiqhelo kwiidiski, kuba... kwi-RAID firmware le miyalelo ayixhaswanga konke konke, kwaye i-HBA, ngokubanzi, ayikhathaleli ukuba yeyiphi imiyalelo ehanjiswa phezu kwebhasi.

I-hard drives - iziqwenga ezi-8 ze-HGST Travelstar 7K1000 ezinomthamo we-TB eyi-1 kwifom ye-2.5 yefom, njengeelaptops. Ezi drives ngaphambili bezikuluhlu lwe-RAID 6. Baya kuba nokusetyenziswa kwinkqubo entsha. Ukugcina ii-backups zendawo.

Ukongeza:

6 iziqwenga SATA SSD imodeli Samsung 860 QVO 2TB. Ezi SSD zazifuna umthamo omkhulu, ubukho be-cache ye-SLC, ukuthembeka, kunye nexabiso eliphantsi lalifunwa. Inkxaso yokulahla/u-zero ibifuneka, ejongwa ngumgca kwi-dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

Iziqwenga ze-2 ze-NVMe SSD imodeli ye-Samsung SSD 970 EVO 500GB.

Kwezi SSDs, isantya sokufunda/sokubhala ngokungakhethiyo kunye nomthamo wezibonelelo kwiimfuno zakho zibalulekile. Iradiator kubo. Ngokuyimfuneko. Ngokuqinisekileyo. Ngaphandle koko, ziqhotse de zibe crispy ngexesha lokuqala ungqamaniso lwe-RAID.

I-adapter ye-StarTech PEX8M2E2 ye-2 x NVMe SSD efakwe kwi-PCIe 3.0 8x slot. Oku, kwakhona, yi-HBA nje, kodwa ye-NVMe. Iyahluka kwiiadaptha ezitshiphu kuba ayifuni nkxaso ye-PCIe bifurcation kwi-motherboard ngenxa yobukho bokutshintsha kwePCIe eyakhelweyo. Iza kusebenza nakwinkqubo yakudala kakhulu kunye ne-PCIe, nokuba i-x1 PCIe 1.0 slot. Ngokwemvelo, ngesantya esifanelekileyo. Akukho RAIDs apho. Akukho BIOS eyakhelwe-ngaphakathi ebhodini. Ke, inkqubo yakho ayizukufunda ngomlingo ukuqala nge-NVMe, kuncinci ukwenza i-NVMe RAID enkosi kwesi sixhobo.

Eli candelo lalibangelwa kuphela kubukho be-8x PCIe 3.0 enye yasimahla kwinkqubo, kwaye, ukuba kukho iindawo zokubeka ezi-2 zasimahla, inokutshintshwa ngokulula ngeepeni ezimbini ze-PEX4M2E1 okanye ii-analogues, ezinokuthengwa naphi na ngexabiso le-600. iiruble.

Ukugatywa kwazo zonke iintlobo ze-hardware okanye i-chipset eyakhelwe ngaphakathi / i-BIOS RAIDs yenziwe ngamabomu, ukuze ikwazi ukubuyisela ngokupheleleyo inkqubo yonke, ngaphandle kwe-SSD / HDD ngokwabo, ngelixa igcina yonke idatha. Ngokufanelekileyo, ukuze ukwazi ukugcina nenkqubo yokusebenza efakiweyo xa usiya kwihardware entsha/eyahlukileyo. Into ephambili kukuba kukho i-SATA kunye ne-PCIe port. Kufana ne-CD ephilayo okanye i-flash drive ye-bootable, ngokukhawuleza kakhulu kunye ne-bulky encinane.

UthothoKungenjalo, uyayazi into eyenzekayo - ngamanye amaxesha kufuneka ukhawuleze uthathe uluhlu olupheleleyo kunye nawe ukuze uhambe. Kodwa andifuni ukuphulukana nedatha. Ukwenza oku, zonke iimidiya ezikhankanyiweyo zibekwe ngokufanelekileyo kwizilayidi kwii-5.25 bays zetyala eliqhelekileyo.

Ewe, kwaye, ewe, ukuzama iindlela ezahlukeneyo ze-SSD caching kwiLinux.

Ugqogqo lwehardware luyadika. Yilayite. Iyasebenza okanye ayisebenzi. Kwaye kunye mdadm kusoloko kukho iinketho.

Isoftware

Ngaphambili, i-Debian 8 Jessie yafakwa kwi-hardware, ekufutshane ne-EOL. I-RAID 6 yadityaniswa kwii-HDD ezikhankanywe ngasentla zidityaniswe ne-LVM. Iqhube oomatshini benyani kwi-kvm/libvirt.

Ngokuba Umbhali unamava afanelekileyo ekudaleni i-SATA/NVMe flash drives ephathekayo, kwaye kwakhona, ukuze ungaphuli itemplate eqhelekileyo ye-apt, Ubuntu 18.04 yakhethwa njengenkqubo ekujoliswe kuyo, esele izinzile ngokwaneleyo, kodwa iseneminyaka eyi-3 inkxaso kwixesha elizayo.

Inkqubo ekhankanyiweyo iqulathe bonke abaqhubi beentsimbi esizifunayo ngaphandle kwebhokisi. Asifuni nayiphi na isoftware yomntu wesithathu okanye abaqhubi.

Ilungiselela ukufakwa

Ukufakela inkqubo sifuna i-Ubuntu Desktop Image. Inkqubo yomncedisi inohlobo oluthile lwe-installer enamandla, ebonisa ukuzimela okugqithisileyo okungenakukhubazwa ngokutyhala isahlulelo se-UEFI kwenye yeediski, yonakalisa bonke ubuhle. Ngokufanelekileyo, ifakwe kuphela kwimodi ye-UEFI. Ayinikezeli naluphi na ukhetho.

Ayonwabanga yilento.

Kutheni?Ngelishwa, i-UEFI boot ayihambelani kakhulu ne-RAID yesoftware, kuba... Akukho mntu usinika ubhukisho lwe-UEFI ESP isahlulelo. Kukho iindlela zokupheka kwi-Intanethi ezicebisa ukubeka isahlulo se-ESP kwi-flash drive kwi-port ye-USB, kodwa le ngongoma yokungaphumeleli. Kukho iiresiphi usebenzisa i-software mdadm RAID 1 kunye noguqulelo metadata 0.9 ukuba musa ukuthintela UEFI BIOS ekuboneni le ulwahlulo, kodwa oku kuphila de kube ngumzuzu owonwabileyo xa BIOS okanye enye hardware OS ubhala into ESP kwaye ulibele ukuyingqamanisa kwezinye. izibuko.

Ukongeza, ukuqala kwe-UEFI kuxhomekeke kwiNVRAM, engayi kuhamba kunye neediski kwinkqubo entsha, kuba yinxalenye yebhodi yomama.

Ke, asiyi kuphinda siqalise ivili elitsha. Sele sinayo ibhayisekile katatomkhulu esele ilungisiwe, ivavanywa ixesha, ngoku ebizwa ngokuba yiLifa/BIOS boot, enegama lebhongo leCSM kwiinkqubo ezihambelana ne-UEFI. Siza kuyisusa nje kwishelufu, siyithambise, siyipompa amavili kwaye siyisule ngelaphu elimanzi.

Inguqulelo yedesktop ye-Ubuntu nayo ayinakufakwa ngokufanelekileyo kunye neLifa le-bootloader, kodwa apha, njengoko besitsho, kukho iinketho.

Kwaye ke, siqokelela izixhobo kwaye silayishe inkqubo kwi-Ubuntu Live bootable flash drive. Kuya kufuneka sikhuphele iipakethi, ke siya kuseka inethiwekhi esebenzela wena. Ukuba ayisebenzi, unokulayisha iipakethi eziyimfuneko kwi-flash drive kwangaphambili.

Singena kwindawo yeDesktop, siphehlelele i-terminal emulator, kwaye sihambe:

#sudo bash

Njani…?Umgca ongasentla sisitshixo se-canonical se-holiwars malunga ne-sudo. C bΠΎamathuba amakhulu eze kwayeΠΎuxanduva olukhulu. Umbuzo ngowokuba ungazithathela ngokwakho na. Abantu abaninzi bacinga ukuba ukusebenzisa i-sudo ngale ndlela akunankathalo. Nangona kunjalo:

#apt-get install mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc

Kutheni kungenjalo iZFS...?Xa sifaka isoftware kwikhompyuter yethu, siboleka ihardware yethu kubaphuhlisi bale software ukuyiqhuba.
Xa sithemba le software ngokhuseleko lwedatha yethu, sithatha imali-mboleko elingana neendleko zokubuyisela le datha, esiya kufuneka siyihlawule ngenye imini.

Ngokwale mbono, iZFS yiFerrari, kwaye mdadm+lvm ifana nebhayisekile.

Ngokufanelekileyo, umbhali ukhetha ukuboleka ibhayisekile ngetyala kubantu abangaziwayo endaweni yeFerrari. Apho, ixabiso lomcimbi alikho phezulu. Akukho mfuneko yamalungelo. Ilula kunemithetho yendlela. Indawo yokupaka isimahla. Isakhono sokuwela ilizwe singcono. Unokuhlala unamathele imilenze kwibhayisekile, kwaye unokulungisa ibhayisekile ngezandla zakho.

Kutheni ke BTRFS...?Ukuze uqalise inkqubo yokusebenza, sifuna inkqubo yefayile exhaswa kwiLifa/i-BIOS GRUB ngaphandle kwebhokisi, kwaye kwangaxeshanye ixhasa imifanekiso ekhawulezayo. Siza kuyisebenzisela i-/boot partition. Ukongeza, umbhali ukhetha ukusebenzisa le FS ye / (ingcambu), ungalibali ukuqaphela ukuba kuyo nayiphi na enye isoftware unokwenza izahlulo ezahlukeneyo kwi-LVM kwaye uzibeke kwizikhokelo eziyimfuneko.

Asiyi kugcina nayiphi na imifanekiso yoomatshini ababonakalayo okanye oovimba beenkcukacha kule FS.
Le FS izakusetyenziswa kuphela ukwenza imifanekiso ekhawulezayo yesixokelelwano ngaphandle kokuyicima kwaye emva koko udlulisele ezi zithombe ezikhawulezayo kwidiski egcinwayo usebenzisa i-send/recieve.

Ukongeza, umbhali ngokubanzi ukhetha ukugcina ubuncinci besoftware ngokuthe ngqo kwi-hardware kwaye aqhube yonke enye isoftware kumatshini obonakalayo usebenzisa izinto ezifana nokudlulisa ii-GPUs kunye ne-PCI-USB Host abalawuli kwi-KVM nge-IOMMU.

Ekuphela kwezinto ezisele kwi-hardware kukugcinwa kwedatha, i-virtualization kunye ne-backup.

Ukuba uyathemba iZFS ngakumbi, ngoko ke, ngokomgaqo, kwisicelo esikhankanyiweyo ziyatshintshana.

Nangona kunjalo, umbhali ngoyaba ngabom i-mirroring eyakhelwe-ngaphakathi / i-RAID kunye ne-redundancy features i-ZFS, i-BRTFS kunye ne-LVM enayo.

Njengengxabano eyongezelelweyo, i-BTRFS inamandla okuguqula i-random ebhalayo ibe yinto elandelelanayo, enefuthe elihle kakhulu kwisantya sokuvumelanisa i-snapshots / i-backups kwi-HDD.

Masiskene kwakhona zonke izixhobo:

#udevadm control --reload-rules && udevadm trigger

Makhe sijonge ngeenxa zonke:

#lsscsi && nvme list
[0:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sda
[1:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdb
[2:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdc
[3:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdd
[4:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sde
[5:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdf
[6:0:0:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdg
[6:0:1:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdh
[6:0:2:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdi
[6:0:3:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdj
[6:0:4:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdk
[6:0:5:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdl
[6:0:6:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdm
[6:0:7:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdn
Node SN Model Namespace Usage Format FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 S466NXXXXXXX15L Samsung SSD 970 EVO 500GB 1 0,00 GB / 500,11 GB 512 B + 0 B 2B2QEXE7
/dev/nvme1n1 S5H7NXXXXXXX48N Samsung SSD 970 EVO 500GB 1 0,00 GB / 500,11 GB 512 B + 0 B 2B2QEXE7

Uyilo lwediski

I-NVMe SSD

Kodwa asiyi kuwaphawula nangayiphi na indlela. Konke okufanayo, i-BIOS yethu ayiboni ezi drives. Ke, baya kuya ngokupheleleyo kwisoftware yeRAID. Asiyi kwenza amacandelo apho. Ukuba ufuna ukulandela "i-canon" okanye "inqununu", yenza isahlulo esikhulu esinye, njenge-HDD.

I-SATA HDD

Akukho mfuneko yokuyila nantoni na ekhethekileyo apha. Siza kudala icandelo elinye kuyo yonke into. Siza kwenza isahlulelo kuba i-BIOS ibona ezi diski kwaye inokuzama ukuqalisa kuzo. Siza kufaka i-GRUB kwezi diski kamva ukuze inkqubo inokwenza oku ngequbuliso.

#cat >hdd.part << EOF
label: dos
label-id: 0x00000000
device: /dev/sdg
unit: sectors

/dev/sdg1 : start= 2048, size= 1953523120, type=fd, bootable
EOF
#sfdisk /dev/sdg < hdd.part
#sfdisk /dev/sdh < hdd.part
#sfdisk /dev/sdi < hdd.part
#sfdisk /dev/sdj < hdd.part
#sfdisk /dev/sdk < hdd.part
#sfdisk /dev/sdl < hdd.part
#sfdisk /dev/sdm < hdd.part
#sfdisk /dev/sdn < hdd.part

I-SATA SSD

Kulapho izinto ziba nomdla kuthi.

Okokuqala, iidrive zethu ziyi-2 TB ngobukhulu. Oku kungaphakathi koluhlu olwamkelekileyo lwe-MBR, nto leyo esiya kuyisebenzisa. Ukuba kuyimfuneko, inokutshintshwa nge-GPT. Iidiski ze-GPT zinomaleko ohambelanayo ovumela iisistim ezihambelana ne-MBR ukuba zibone izahlulo ze-4 zokuqala ukuba zibekwe ngaphakathi kwe-2 terabytes yokuqala. Into ephambili kukuba i-partition ye-boot kunye ne-bios_grub i-partition kwezi diski kufuneka ibe ekuqaleni. Oku kukuvumela ukuba uqale kwi-GPT Legacy/BIOS drives.

Kodwa oku akusiyo imeko yethu.

Apha siza kwenza amacandelo amabini. Eyokuqala iya kuba yi-1 GB ngobukhulu kwaye isetyenziswe kwi-RAID 1 / boot.

Owesibini uya kusetyenziselwa i-RAID 6 kwaye uya kuthatha yonke indawo ekhululekile eseleyo ngaphandle kwendawo encinci engabiwanga ekupheleni kwe-drive.

Yintoni le ndawo ingaphawulwanga?Ngokwemithombo yothungelwano, ii-SATA SSD zethu zikhwele i-cache ye-SLC enwebekayo eqala ngobungakanani ukusuka kwi-6 ukuya kwi-78 gigabytes. Sifumana i-6 gigabytes "mahhala" ngenxa yokwahlukana phakathi kwe "gigabytes" kunye ne "gibibytes" kwiphepha ledatha ye-drive. Iigigabytes ezingama-72 eziseleyo zabelwa kwindawo engasetyenziswanga.

Apha kufuneka kuqatshelwe ukuba sine-cache ye-SLC, kwaye indawo ihlala kwi-4 bit MLC mode. Oko kuthi ngokusebenzayo kuthetha ukuba kuzo zonke ii-gigabytes ezi-4 zesithuba samahhala siya kufumana kuphela i-gigabyte eyi-1 ye-cache ye-SLC.

Phindaphinda-phinda ama-72 egigabytes ngo-4 kwaye ufumane ama-288 egigabytes. Esi sisithuba esikhululekileyo esingayi kuphawula ukuze sivumele iidrives ukuba zisebenzise ngokupheleleyo i-cache ye-SLC.

Ke, siya kuphumelela ukuya kuthi ga kwi-312 gigabytes ye-cache ye-SLC ukusuka kwiidrive ezintandathu zizonke. Kuzo zonke iidrives, i-2 iya kusetyenziswa kwi-RAID yokuphindaphinda.

Esi sixa se-cache siya kusivumela ukuba kunqabile kakhulu ebomini bokwenyani ukuhlangabezana nemeko apho ukubhala kungayi kwi-cache. Oku kuhle kakhulu kubuyekeze eyona nto ilusizi yenkumbulo ye-QLC-esona santya sisezantsi sokubhala xa idatha ibhalwa ngokugqitha i-cache. Ukuba imithwalo yakho ayihambelani nale nto, ke ndincoma ukuba ucinge nzima malunga nokuba i-SSD yakho iya kuhlala ixesha elingakanani phantsi komthwalo onjalo, ngokuqwalasela i-TBW esuka kwiphepha ledatha.

#cat >ssd.part << EOF
label: dos
label-id: 0x00000000
device: /dev/sda
unit: sectors

/dev/sda1 : start= 2048, size= 2097152, type=fd, bootable
/dev/sda2 : start= 2099200, size= 3300950016, type=fd
EOF
#sfdisk /dev/sda < ssd.part
#sfdisk /dev/sdb < ssd.part
#sfdisk /dev/sdc < ssd.part
#sfdisk /dev/sdd < ssd.part
#sfdisk /dev/sde < ssd.part
#sfdisk /dev/sdf < ssd.part

Ukudala ii-Arrays

Okokuqala, kufuneka siwuthiye ngokutsha umatshini. Oku kuyimfuneko kuba igama lenginginya liyinxalenye yegama loluhlu kwindawo ethile ngaphakathi kwe-mdadm kwaye lichaphazela into ethile kwenye indawo. Ngokuqinisekileyo, ii-arrays zinokuphinda zithiywe kamva, kodwa eli linyathelo elingeyomfuneko.

#mcedit /etc/hostname
#mcedit /etc/hosts
#hostname
vdesk0

I-NVMe SSD

#mdadm --create --verbose --assume-clean /dev/md0 --level=1 --raid-devices=2 /dev/nvme[0-1]n1

Kutheni-ucinga-ucocekile...?Ukunqanda ukuqalisa uluhlu. Kuwo omabini amanqanaba e-RAID 1 kunye ne-6 oku kusemthethweni. Yonke into inokusebenza ngaphandle kokuqalisa ukuba uluhlu olutsha. Ngaphezu koko, ukuqalisa uluhlu lwe-SSD ekudalweni yinkcitho yobutyebi be-TBW. Sisebenzisa i-TRIM/DISCARD apho kunokwenzeka kwii-SSD ezidityanisiweyo ukuze β€œziqalise” kuzo.

Kuluhlu lwe-SSD, i-RAID 1 DISCARD ixhaswa ngaphandle kwebhokisi.

Kwi-SSD RAID 6 DISCARD uluhlu, kufuneka uyenze kwiparameters zemodyuli yekernel.

Oku kufuneka kwenziwe kuphela ukuba zonke ii-SSD ezisetyenziswe kwinqanaba le-4/5/6 kwii-arrays kule nkqubo zinenkxaso yokusebenza ye-dicard_zeroes_data. Ngamanye amaxesha udibana needrive ezingaqhelekanga ezixelela i-kernel ukuba lo msebenzi uyaxhaswa, kodwa eneneni awukho, okanye umsebenzi awusoloko usebenza. Okwangoku, inkxaso ifumaneka phantse kuyo yonke indawo, nangona kunjalo, kukho iidrives ezindala kunye ne-firmware eneempazamo. Ngesi sizathu, inkxaso ye-DISCARD ivaliwe ngokungagqibekanga kwi-RAID 6.

Ingqalelo, lo myalelo ulandelayo uya kutshabalalisa yonke idatha kwi-NVMe drives ngokuthi "ukuqala" uluhlu oluno "zeros".

#blkdiscard /dev/md0

Ukuba kukho into engahambi kakuhle, zama ukukhankanya inyathelo.

#blkdiscard --step 65536 /dev/md0

I-SATA SSD

#mdadm --create --verbose --assume-clean /dev/md1 --level=1 --raid-devices=6 /dev/sd[a-f]1
#blkdiscard /dev/md1
#mdadm --create --verbose --assume-clean /dev/md2 --chunk-size=512 --level=6 --raid-devices=6 /dev/sd[a-f]2

Kutheni inkulu kangaka...?Ukwandisa i-chunk-size inefuthe elihle kwisantya sokufunda ngokungaqhelekanga kwiibhloko ukuya kwi-chunk-size ehlanganisiweyo. Oku kwenzeka ngenxa yokuba umsebenzi omnye wobungakanani obufanelekileyo okanye obuncinci unokugqitywa ngokupheleleyo kwisixhobo esinye. Ke ngoko, i-IOPS evela kuzo zonke izixhobo ishwankathelwa. Ngokwezibalo, i-99% ye-IO ayidluli kwi-512K.

I-RAID ine-IOPS ezi-6 ngokubhala rhoqo ngaphantsi okanye ilingana ne IOPS ye drive enye. Xa, njengofundo olungakhethiyo, i-IOPS inokuba nkulu ngokuphindwe kaninzi kunolo lwedrive enye, kwaye apha ubungakanani bebhloko bubaluleke kakhulu.
Umbhali akayiboni ingongoma ekuzameni ukwandisa iparameter engalunganga kwi-RAID 6 ngokuyila kwaye endaweni yoko wenza ukuba i-RAID 6 ilungile.
Siza kuhlawulela ukubhalwa kakubi okungahleliwe kwe-RAID 6 kunye ne-NVMe cache kunye namaqhinga okubonelela.

Asikayenzi i-DISCARD ye-RAID 6 isebenze. Ngoko ke asiyi "kuyiqalisa" olu luhlu okwangoku. Siza kukwenza oku kamva, emva kokufaka i-OS.

I-SATA HDD

#mdadm --create --verbose --assume-clean /dev/md3 --chunk-size=512 --level=6 --raid-devices=8 /dev/sd[g-n]1

I-LVM kwi-NVMe RAID

Ngesantya, sifuna ukubeka inkqubo yefayile yengcambu kwi-NVMe RAID 1 eyi/dev/md0.
Nangona kunjalo, siyakudinga olu luhlu olukhawulezayo lwezinye iimfuno, ezinje ngokutshintshwa, imetadata kunye ne-LVM-cache kunye ne-LVM-encinci yemetadata, ke siya kudala i-LVM VG kolu luhlu.

#pvcreate /dev/md0
#vgcreate root /dev/md0

Masenze ulwahlulo lwenkqubo yefayile yeengcambu.

#lvcreate -L 128G --name root root

Masenze isahlulo sokutshintshana ngokobungakanani be-RAM.

#lvcreate -L 32G --name swap root

Ufakelo lwe-OS

Lilonke, sinayo yonke into eyimfuneko yokufaka inkqubo.

Qalisa iwizadi yokufakela isixokelelwano kwimo engqongileyo ye-Ubuntu Live. Ufakelo oluqhelekileyo. Kuphela kwinqanaba lokukhetha iidiski zofakelo, kufuneka ucacise oku kulandelayo:

  • /dev/md1, -indawo yokunyuka /i-boot, FS-BTRFS
  • / dev / ingcambu / ingcambu (aka / dev / mapper / ingcambu-ingcambu), - indawo yokunyuka / (ingcambu), FS - BTRFS
  • / dev/root/ swap (aka / dev/mapper/root-swap), -sebenzisa njengesahlulelo sokutshintsha
  • Faka i-bootloader kwi /dev/sda

Xa ukhetha i-BTRFS njengenkqubo yefayile yeengcambu, umfakeli uya kwenza ngokuzenzekelayo imiqulu emibini ye-BTRFS egama lingu "@" ye / (ingcambu), kunye "@home" ye / ekhaya.

Masiqale ufakelo...

Ufako luyakuphela ngebhokisi yencoko yababini yemodal ebonisa impazamo yokuhlohla isilayidi sokuqala. Ngelishwa, awuyi kukwazi ukuphuma kule ngxoxo usebenzisa iindlela eziqhelekileyo kwaye uqhubeke nofakelo. Siphuma kwinkqubo kwaye singena kwakhona, siphelela kwi-desktop ecocekileyo ye-Ubuntu Live. Vula i-terminal, kwaye kwakhona:

#sudo bash

Yenza imeko-bume yechroot ukuqhubeka nofakelo:

#mkdir /mnt/chroot
#mount -o defaults,space_cache,noatime,nodiratime,discard,subvol=@ /dev/mapper/root-root /mnt/chroot
#mount -o defaults,space_cache,noatime,nodiratime,discard,subvol=@home /dev/mapper/root-root /mnt/chroot/home
#mount -o defaults,space_cache,noatime,nodiratime,discard /dev/md1 /mnt/chroot/boot
#mount --bind /proc /mnt/chroot/proc
#mount --bind /sys /mnt/chroot/sys
#mount --bind /dev /mnt/chroot/dev

Masiqwalasele inethiwekhi kunye negama lomninimzi kwichroot:

#cat /etc/hostname >/mnt/chroot/etc/hostname
#cat /etc/hosts >/mnt/chroot/etc/hosts
#cat /etc/resolv.conf >/mnt/chroot/etc/resolv.conf

Masingene kwindawo yechroot:

#chroot /mnt/chroot

Okokuqala, siya kuzisa iipakethe:

apt-get install --reinstall mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc debsums hdparm

Masijonge kwaye silungise zonke iipakethe ezifakwe ngokugwenxa ngenxa yokungagqitywa kofakelo lwenkqubo:

#CORRUPTED_PACKAGES=$(debsums -s 2>&1 | awk '{print $6}' | uniq)
#apt-get install --reinstall $CORRUPTED_PACKAGES

Ukuba kukho into engasebenziyo, kunokufuneka uhlele /etc/apt/sources.list kuqala

Masilungelelanise iiparamitha zemodyuli ye-RAID 6 ukwenza i-TRIM/DISCARD:

#cat >/etc/modprobe.d/raid456.conf << EOF
options raid456 devices_handle_discard_safely=1
EOF

Makhe silungise uluhlu lwethu kancinci:

#cat >/etc/udev/rules.d/60-md.rules << EOF
SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/stripe_cache_size", ATTR{md/stripe_cache_size}="32768"
SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/sync_speed_min", ATTR{md/sync_speed_min}="48000"
SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/sync_speed_max", ATTR{md/sync_speed_max}="300000"
EOF
#cat >/etc/udev/rules.d/62-hdparm.rules << EOF
SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/sbin/hdparm -B 254 /dev/%k"
EOF
#cat >/etc/udev/rules.d/63-blockdev.rules << EOF
SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/sbin/blockdev --setra 1024 /dev/%k"
SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="md*", RUN+="/sbin/blockdev --setra 0 /dev/%k"
EOF

Yayiyintoni..?Senze uluhlu lwemithetho ye-udev eya kwenza oku kulandelayo:

  • Cwangcisa ubungakanani be-cache yebhloko ye-RAID 2020 ukuba yanele ngo-6. Ixabiso elingagqibekanga, kubonakala ngathi, alitshintshanga ukususela ekudalweni kwe-Linux, kwaye ayizange yanele ixesha elide.
  • Gcina ubuncinci be-IO ngexesha lokujonga uluhlu/ungqamaniso. Oku kukuthintela ii-arrays zakho ekubeni zibambeke kwimeko yongqamaniso lwanaphakade phantsi komthwalo.
  • Nciphisa ubuninzi be-IO ngexesha lokujonga/ungqamaniso lwezixhobo. Oku kuyimfuneko ukuze ungqamaniso/ukukhangela ii-SSD RAID zingaqhotsi iidrive zakho zibe crisp. Oku kuyinyani ngakumbi kwi-NVMe. (Ukhumbula ngeradiyetha? Bendingadlali.)
  • Vimba iidiski ekumiseni ukujikeleza kwe-spindle (HDD) nge-APM kwaye usete ixesha lokulala kubalawuli bedisk kwiiyure ze-7. Unako ukukhubaza ngokupheleleyo i-APM ukuba iidrives zakho zingayenza (-B 255). Ngexabiso elingagqibekanga, iidrives ziyakuyeka emva kwemizuzwana emihlanu. Emva koko i-OS ifuna ukuseta kwakhona i-cache yediski, iidiski ziya kuphinda zijikeleze, kwaye yonke into iya kuqala kwakhona. Iidiski zinenani eliphezulu elilinganiselweyo lokujikeleza kokusonta. Umjikelo olula ongagqibekanga onjalo unokubulala ngokulula iidiski zakho kwiminyaka embalwa. Ayizizo zonke iidiski ezihluphekayo kule nto, kodwa ezethu "ziilaptop", kunye nezicwangciso ezimiselweyo ezifanelekileyo, ezenza i-RAID ibonakale njenge-mini-MAID.
  • Faka ukufunda ngaphambili kwiidiski (ezijikelezayo) i-megabyte eyi-1 - iibhloko ezimbini ezilandelelanayo / i-chunk RAID 6
  • Khubaza ukufunda kwangaphambili kuluhlu ngokwalo.

Masihlele /etc/fstab:

#cat >/etc/fstab << EOF
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
# file-system mount-point type options dump pass
/dev/mapper/root-root / btrfs defaults,space_cache,noatime,nodiratime,discard,subvol=@ 0 1
UUID=$(blkid -o value -s UUID /dev/md1) /boot btrfs defaults,space_cache,noatime,nodiratime,discard 0 2
/dev/mapper/root-root /home btrfs defaults,space_cache,noatime,nodiratime,discard,subvol=@home 0 2
/dev/mapper/root-swap none swap sw 0 0
EOF

Kutheni kunjalo..?Siza kukhangela isahlulelo se-/boot nge-UUID. Uluhlu lwamagama lunokuthiwa ngokwethiyori.

Siza kukhangela amacandelo aseleyo ngamagama e-LVM kwi-/dev/mapper/vg-lv notation, ngokuba bachonga izahlulo ngokukodwa.

Asisebenzisi i-UUID ye-LVM kuba I-UUID yomthamo we-LVM kunye ne-snapshots yazo inokufana.Mount /dev/mapper/root-root.. kabini?Ewe. Ngokuchanekileyo. Uphawu lweBTRFS. Le nkqubo yefayile inokunyuswa amaxesha amaninzi ngee subvols ezahlukeneyo.

Ngenxa yolu phawu lunye, ndincoma ukuba ungaze wenze izifinyezo ze-LVM zemithamo ye-BTRFS esebenzayo. Unokufumana isimangaliso xa uqala ngokutsha.

Masihlaziye kwakhona i-mdadm config:

#/usr/share/mdadm/mkconf | sed 's/#DEVICE/DEVICE/g' >/etc/mdadm/mdadm.conf

Masilungelelanise useto lweLVM:

#cat >>/etc/lvm/lvmlocal.conf << EOF

activation {
thin_pool_autoextend_threshold=90
thin_pool_autoextend_percent=5
}
allocation {
cache_pool_max_chunks=2097152
}
devices {
global_filter=["r|^/dev/.*_corig$|","r|^/dev/.*_cdata$|","r|^/dev/.*_cmeta$|","r|^/dev/.*gpv$|","r|^/dev/images/.*$|","r|^/dev/mapper/images.*$|","r|^/dev/backup/.*$|","r|^/dev/mapper/backup.*$|"] issue_discards=1
}
EOF

Yayiyintoni..?Sivumele ukwandiswa okuzenzekelayo kwamachibi amancinci e-LVM ekufikeleleni kwi-90% yendawo ehlalayo nge-5% yomthamo.

Sinyuse inani eliphezulu leebhloko zecache ye-LVM cache.

Sithintele i-LVM ekukhangeleni imiqulu ye-LVM (PV) kwi:

  • izixhobo eziqulathe i-cache ye-LVM (cdata)
  • izixhobo ezigcinwe kusetyenziswa i-cache ye-LVM, idlula i-cache ( _uxolo). Kulo mzekelo, isixhobo esigciniweyo ngokwaso siya kuskenwa kwi-cache (nje ).
  • izixhobo eziqulathe i-LVM cache metadata (cmeta)
  • zonke izixhobo kwi-VG ezinemifanekiso yamagama. Apha siya kuba nemifanekiso yedisk yoomatshini ababonakalayo, kwaye asifuni ukuba i-LVM kumamkeli avule imiqulu eyeyeendwendwe ze-OS.
  • zonke izixhobo kwi-VG ezinegama logcino. Apha siya kuba neekopi zogcino lwemifanekiso yomatshini.
  • zonke izixhobo ezigama lazo liphela ngo "gpv" (umthamo wondwendwelo lomzimba)

Senze inkxaso ye-DISCARD xa ukhulula indawo yasimahla kwi-LVM VG. Lumnka. Oku kuya kwenza ukucima ii-LVs kwi-SSD kudle ixesha elininzi. Oku kusebenza ngokukodwa kwi-SSD RAID 6. Nangona kunjalo, ngokwesicwangciso, siya kusebenzisa isibonelelo esincinci, ngoko oku akuyi kusithintela nonke.

Masihlaziye umfanekiso we-initramfs:

#update-initramfs -u -k all

Faka kwaye uqwalasele igrub:

#apt-get install grub-pc
#apt-get purge os-prober
#dpkg-reconfigure grub-pc

Zeziphi iidiski omele ukhethe?Bonke abangaba sd*. Inkqubo kufuneka ikwazi ukuqala kuyo nayiphi na idrayivu yeSATA okanye i-SSD.

Kutheni bongeze os-prober ..?Ukuzimela ngokugqithisileyo kunye nezandla ezidlalayo.

Ayisebenzi ngokuchanekileyo ukuba enye yee-RAID ikwimeko ethotyiweyo. Izama ukukhangela i-OS kwizahlulo ezisetyenziswa koomatshini abasebenzayo kule hardware.

Ukuba uyayifuna, ungayishiya, kodwa khumbula konke oku kungasentla. Ndincoma ukukhangela iiresiphi zokususa izandla ezingcolileyo kwi-intanethi.

Ngale nto sigqibe ufakelo lokuqala. Lixesha lokuba uqalise ngokutsha kwi-OS esanda kufakwa. Ungalibali ukususa iCD/USB eqalwayo evulelekileyo.

#exit
#reboot

Khetha nayiphi na i-SATA SSD njengesixhobo sokuqalisa.

I-LVM kwi-SATA SSD

Okwangoku, sele siqalisile kwi-OS entsha, siqwalasele inethiwekhi, kufanelekile, savula i-terminal emulator, kwaye yazisa:

#sudo bash

Masiqhubeke.

"Qalisa" uluhlu olusuka kwiSATA SSD:

#blkdiscard /dev/md2

Ukuba ayisebenzi, zama:

#blkdiscard --step 65536 /dev/md2
Yenza i-LVM VG kwi-SATA SSD:

#pvcreate /dev/md2
#vgcreate data /dev/md2

Kutheni enye i-VG..?Enyanisweni, sele sineVG ebizwa ngokuba yingcambu. Kutheni ungafaki yonke into kwi-VG enye?

Ukuba kukho ii-PV ezininzi kwi-VG, ngoko ukuze i-VG isebenze ngokuchanekileyo, zonke ii-PVs kufuneka zibekho (kwi-intanethi). Ngaphandle kwe-LVM RAID, esingayisebenzisi ngabom.

Sifuna ngokwenene ukuba kukho ukungaphumeleli (funda ukulahleka kwedatha) kuyo nayiphi na i-RAID 6 arrays, inkqubo yokusebenza iya kuqala ngokuqhelekileyo kwaye isinike ithuba lokusombulula ingxaki.

Ukwenza oku, kwinqanaba lokuqala lokukhupha siya kuhlukanisa uhlobo ngalunye lwe "media" yomzimba kwi-VG eyahlukileyo.

Xa sithetha ngokwenzululwazi, iindidi ezahlukeneyo zeRAID zezendawo ezahlukeneyo β€œzokuthembeka”. Akufuneki udale inqaku elongezelelweyo eliqhelekileyo lokungaphumeleli kubo ngokubafaka kwi-VG enye.

Ubukho be-LVM kwinqanaba "lwezixhobo" buya kusivumela ukuba sinqumle ngokungqongqo iziqwenga ezahlukeneyo zeRAID ngokuzidibanisa ngeendlela ezahlukeneyo. Umzekelo - baleka ngaxeshanye bcache + LVM ibhityile, ibcache + BTRFS, LVM cache + LVM ebhityileyo, uqwalaselo oluntsonkothileyo lweZFS enecache, okanye nawuphi na omnye umxube wesihogo ukuzama ukuthelekisa konke.

Kwinqanaba elithi "hardware", asiyi kusebenzisa nantoni na ngaphandle kwemiqulu yeLVM endala "engqingqwa". Okungaphandle kwalo mgaqo inokuba yisahlulelo sogcino.

Ndicinga ukuba ngalo mzuzu, abafundi abaninzi babesele beqalisile ukukrokrela into ethile malunga nonodoli wokuzala.

I-LVM kwi-SATA HDD

#pvcreate /dev/md3
#vgcreate backup /dev/md3

I-VG entsha kwakhona..?Sifuna ngokwenene ukuba uluhlu lwediski esiza kulusebenzisa ukugcinwa kwedatha aluphumeleli, inkqubo yethu yokusebenza iya kuqhubeka isebenza ngokuqhelekileyo, ngelixa igcina ufikelelo kwiinkcukacha ezingagcinwanga njengesiqhelo. Ke ngoko, ukunqanda iingxaki zokuvula iVG, senza iVG eyahlukileyo.

Ukuseta i-cache ye-LVM

Masenze i-LV kwi-NVMe RAID 1 ukuze siyisebenzise njengesixhobo se-caching.

#lvcreate -L 70871154688B --name cache root

Kutheni kuncinci kangaka...?Inyani yeyokuba ii-NVMe SSD zethu zikwanayo i-cache ye-SLC. I-4 gigabytes "yamahhala" kunye ne-18 gigabytes ye-dynamic ngenxa yendawo ekhululekile ehlala kwi-3-bit MLC. Nje ukuba le cache iphelelwe, ii-NVMe SSD aziyi kukhawuleza kakhulu kune-SATA SSD yethu ene-cache. Ngokwenyani, ngenxa yesi sizathu, akukho ngqiqweni kuthi ukwenza isahlulelo se-cache ye-LVM sikhulu kakhulu kunobukhulu obuphindwe kabini be-SLC cache ye-NVMe drive. Kwi-NVMe drives esetyenzisiweyo, umbhali ucinga ukuba kunengqiqo ukwenza i-32-64 gigabytes ye-cache.

Ubungakanani besahlulelo esinikiweyo siyafuneka ukuze kuququzelelwe i-64 gigabytes ye-cache, i-cache metadata, kunye ne-metadata backup.

Ukongeza, ndiqaphela ukuba emva kokuvalwa kwenkqubo emdaka, i-LVM iya kuphawula yonke i-cache njengemdaka kwaye iya kulungelelanisa kwakhona. Ngaphezu koko, oku kuya kuphindwa ngalo lonke ixesha i-lvchange isetyenziswa kwesi sixhobo de inkqubo iqaliswe kwakhona. Ke ngoko, ndincoma ukuphinda wenze kwakhona i-cache usebenzisa iskripthi esifanelekileyo.

Masenze i-LV kwi-SATA RAID 6 ukuze siyisebenzise njengesixhobo esigciniweyo.

#lvcreate -L 3298543271936B --name cache data

Kutheni iiterabytes ezintathu kuphela..?Ukuze, ukuba kuyimfuneko, ungasebenzisa i-SATA SSD RAID 6 kwezinye iimfuno. Ubungakanani bendawo efihliweyo bunokwandiswa ngokukhawuleza, kwi-fly, ngaphandle kokumisa inkqubo. Ukwenza oku, kufuneka umise okwethutyana kwaye uvule kwakhona i-cache, kodwa inzuzo eyahlukileyo ye-LVM-cache ngaphezulu, umzekelo, i-bcache kukuba oku kunokwenziwa ngokubhabha.

Masenze iVG entsha yogcino.

#pvcreate /dev/root/cache
#pvcreate /dev/data/cache
#vgcreate cache /dev/root/cache /dev/data/cache

Masenze i-LV kwisixhobo esigciniweyo.

#lvcreate -L 3298539077632B --name cachedata cache /dev/data/cache

Apha ngokukhawuleza sathatha yonke indawo yasimahla kwi/dev/data/cache ukuze zonke ezinye izahlulo eziyimfuneko zenziwe ngoko nangoko kwi/dev/root/cache. Ukuba wenze into kwindawo engalunganga, ungayihambisa usebenzisa i-pvmove.

Masidale kwaye sivule i-cache:

#lvcreate -y -L 64G -n cache cache /dev/root/cache
#lvcreate -y -L 1G -n cachemeta cache /dev/root/cache
#lvconvert -y --type cache-pool --cachemode writeback --chunksize 64k --poolmetadata cache/cachemeta cache/cache
#lvconvert -y --type cache --cachepool cache/cache cache/cachedata

Kutheni incinci kangaka..?Ngokusebenzisa iimvavanyo ezisebenzayo, umbhali wakwazi ukufumanisa ukuba esona siphumo siphumeleleyo ukuba ubungakanani bebloko ye-cache ye-LVM ihambelana nobungakanani bebloko encinci ye-LVM. Ngaphezu koko, ubungakanani obuncinci, ngcono ulungelelwaniso luqhuba ukurekhoda okungahleliwe.

I-64k yisayizi yebhloko encinci evunyelweyo kwi-LVM encinci.

Lumka ubhale emva..!Ewe. Olu hlobo lwe-cache lulibazisa ukubhala ungqamaniso kwisixhobo esigciniweyo. Oku kuthetha ukuba ukuba i-cache ilahlekile, unokuphulukana nedatha kwisixhobo esigciniweyo. Kamva, umbhali uya kukuxelela ukuba yeyiphi imilinganiselo, ngaphezu kwe-NVMe RAID 1, inokuthathwa ukuhlawulela lo mngcipheko.

Olu hlobo lwe-cache lukhethwe ngenjongo ukubuyisela ukusebenza kakubi kokubhala okungahleliwe kwe-RAID 6.

Makhe sijonge into esinayo:

#lvs -a -o lv_name,lv_size,devices --units B cache
LV LSize Devices
[cache] 68719476736B cache_cdata(0)
[cache_cdata] 68719476736B /dev/root/cache(0)
[cache_cmeta] 1073741824B /dev/root/cache(16384)
cachedata 3298539077632B cachedata_corig(0)
[cachedata_corig] 3298539077632B /dev/data/cache(0)
[lvol0_pmspare] 1073741824B /dev/root/cache(16640)

Kuphela [cachedata_corig] ekufuneka ibekwe kwi/dev/data/cache. Ukuba kukho into engalunganga, sebenzisa i-pvmove.

Ungayicima i-cache ukuba kuyimfuneko ngomyalelo omnye:

#lvconvert -y --uncache cache/cachedata

Oku kwenziwa kwi-intanethi. I-LVM iya kungqamanisa ngokulula i-cache kwidiski, iyisuse, kwaye ithiye ngokutsha i-cachedata_corig ibuyele kwi-cachedata.

Ukuseta i-LVM encinci

Masiqikelele ukuba singakanani na indawo esiyifunayo kwi-LVM metadata encinci:

#thin_metadata_size --block-size=64k --pool-size=6terabytes --max-thins=100000 -u bytes
thin_metadata_size - 3385794560 bytes estimated metadata area size for "--block-size=64kibibytes --pool-size=6terabytes --max-thins=100000"

Sondeza ukuya kwi-4 gigabytes: 4294967296B

Phindaphinda kabini kwaye wongeze i-4194304B ye-LVM yedatha ye-PV: 8594128896B
Masenze isahlulelo esahlukileyo kwi-NVMe RAID 1 ukubeka i-LVM imethadatha encinci kunye nekopi yayo yokugcina kuyo:

#lvcreate -L 8594128896B --name images root

Yantoni..?Apha umbuzo unokuvela: kutheni ubeke i-LVM yemetadata ebhityileyo ngokwahlukileyo ukuba isaza kuhlala igcinwe kwi-NVMe kwaye iza kusebenza ngokukhawuleza.

Nangona isantya sibalulekile apha, kukude nesona sizathu siphambili. Into kukuba i-cache yindawo yokungaphumeleli. Kukho into enokwenzeka kuyo, kwaye ukuba i-metadata ye-LVM encinci igcinwe kwi-cache, iya kubangela ukuba yonke into ilahleke ngokupheleleyo. Ngaphandle kwemethadatha epheleleyo, kuya kuba phantse akunakwenzeka ukudibanisa imiqulu emincinci.

Ngokuhambisa imethadatha kwindawo eyahlukileyo engagcinwanga, kodwa ngokukhawuleza, umthamo, siqinisekisa ukhuseleko lwemethadatha kwimeko yokulahleka kwe-cache okanye inkohlakalo. Kule meko, wonke umonakalo obangelwa yilahleko ye-cache uya kufakwa ngaphakathi kwimiqulu encinci, eya kwenza lula inkqubo yokubuyisela ngemiyalelo yobukhulu. Ngokunokwenzeka okuphezulu, lo monakalo uya kubuyiselwa usebenzisa iilog zeFS.

Ngaphezu koko, ukuba i-snapshot yomthamo omncinci wathathwa ngaphambili, kwaye emva koko i-cache yadityaniswa ngokupheleleyo kanye kanye, ngoko, ngenxa yoyilo lwangaphakathi lwe-LVM encinci, ukunyaniseka kwe-snapshot kuya kuqinisekiswa kwimeko yokulahleka kwe-cache. .

Masenze iVG entsha eza kuba noxanduva lokubonelela ngezinto ezincinci:

#pvcreate /dev/root/images
#pvcreate /dev/cache/cachedata
#vgcreate images /dev/root/images /dev/cache/cachedata

Masenze ichibi:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
Kutheni -Z yUkongeza koko le mowudi yenzelwe yona ngokwenene - ukuthintela idatha ukusuka kumatshini omnye wenyani ukuvuza ukuya komnye umatshini wenyani xa uhambisa kwakhona indawo - i-zeroing isetyenziselwa ukunyusa isantya sokubhala okungahleliwe kwiibhloko ezincinci kune-64k. Nakuphi na ukubhala ngaphantsi kwe-64k kwindawo ebingabiwanga ngaphambili yomthamo obhityileyo iya kuba yi-64K elungelelaniswe edge kwi-cache. Oku kuya kuvumela ukuba umsebenzi wenziwe ngokupheleleyo kwi-cache, ngokudlula isixhobo esifihliweyo.

Masihambise ii-LVs kwiiPV ezihambelanayo:

#pvmove -n images/thin-pool_tdata /dev/root/images /dev/cache/cachedata
#pvmove -n images/lvol0_pmspare /dev/cache/cachedata /dev/root/images
#pvmove -n images/thin-pool_tmeta /dev/cache/cachedata /dev/root/images

Masijonge:

#lvs -a -o lv_name,lv_size,devices --units B images
LV LSize Devices
[lvol0_pmspare] 4294967296B /dev/root/images(0)
thin-pool 274877906944B thin-pool_tdata(0)
[thin-pool_tdata] 274877906944B /dev/cache/cachedata(0)
[thin-pool_tmeta] 4294967296B /dev/root/images(1024)

Masenze ivolyum encinci yovavanyo:

#lvcreate -V 64G --thin-pool thin-pool --name test images

Siza kufaka iipakethe zovavanyo kunye nokubeka iliso:

#apt-get install sysstat fio

Nantsi indlela onokujonga ngayo ukuziphatha koqwalaselo lwethu logcino ngexesha lokwenyani:

#watch 'lvs --rows --reportformat basic --quiet -ocache_dirty_blocks,cache_settings cache/cachedata && (lvdisplay cache/cachedata | grep Cache) && (sar -p -d 2 1 | grep -E "sd|nvme|DEV|md1|md2|md3|md0" | grep -v Average | sort)'

Nantsi indlela esinokuluvavanya ngayo ubumbeko bethu:

#fio --loops=1 --size=64G --runtime=4 --filename=/dev/images/test --stonewall --ioengine=libaio --direct=1
--name=4kQD32read --bs=4k --iodepth=32 --rw=randread
--name=8kQD32read --bs=8k --iodepth=32 --rw=randread
--name=16kQD32read --bs=16k --iodepth=32 --rw=randread
--name=32KQD32read --bs=32k --iodepth=32 --rw=randread
--name=64KQD32read --bs=64k --iodepth=32 --rw=randread
--name=128KQD32read --bs=128k --iodepth=32 --rw=randread
--name=256KQD32read --bs=256k --iodepth=32 --rw=randread
--name=512KQD32read --bs=512k --iodepth=32 --rw=randread
--name=4Kread --bs=4k --rw=read
--name=8Kread --bs=8k --rw=read
--name=16Kread --bs=16k --rw=read
--name=32Kread --bs=32k --rw=read
--name=64Kread --bs=64k --rw=read
--name=128Kread --bs=128k --rw=read
--name=256Kread --bs=256k --rw=read
--name=512Kread --bs=512k --rw=read
--name=Seqread --bs=1m --rw=read
--name=Longread --bs=8m --rw=read
--name=Longwrite --bs=8m --rw=write
--name=Seqwrite --bs=1m --rw=write
--name=512Kwrite --bs=512k --rw=write
--name=256write --bs=256k --rw=write
--name=128write --bs=128k --rw=write
--name=64write --bs=64k --rw=write
--name=32write --bs=32k --rw=write
--name=16write --bs=16k --rw=write
--name=8write --bs=8k --rw=write
--name=4write --bs=4k --rw=write
--name=512KQD32write --bs=512k --iodepth=32 --rw=randwrite
--name=256KQD32write --bs=256k --iodepth=32 --rw=randwrite
--name=128KQD32write --bs=128k --iodepth=32 --rw=randwrite
--name=64KQD32write --bs=64k --iodepth=32 --rw=randwrite
--name=32KQD32write --bs=32k --iodepth=32 --rw=randwrite
--name=16KQD32write --bs=16k --iodepth=32 --rw=randwrite
--name=8KQD32write --bs=8k --iodepth=32 --rw=randwrite
--name=4kQD32write --bs=4k --iodepth=32 --rw=randwrite
| grep -E 'read|write|test' | grep -v ioengine

Ngononophelo! Isixhobo!Le khowudi iya kuqhuba iimvavanyo ezahlukeneyo ezingama-36, nganye iqhuba imizuzwana emi-4. Isiqingatha sovavanyo sesokurekhoda. Unokurekhoda kakhulu kwi-NVMe kwimizuzwana emi-4. Ukuya kuthi ga kwi-3 gigabytes ngesekhondi. Ke, uvavanyo ngalunye lokubhala lunokutya ukuya kuthi ga kwi-216 gigabytes yesixhobo se-SSD esivela kuwe.

Ukufunda nokubhala kuxutyiwe?Ewe. Iyavakala ukuqhuba ukufunda nokubhala iimvavanyo ngokwahlukeneyo. Ngaphezu koko, kunengqiqo ukuqinisekisa ukuba zonke ii-cache zilungelelaniswa ukuze ukubhala okwenziwe ngaphambili kungachaphazeli ukufunda.

Iziphumo ziya kwahluka kakhulu ngexesha lokuphehlelelwa kokuqala kunye nezilandelayo njengoko i-cache kunye nevolumu encinci igcwalisa, kwaye kuxhomekeke ekubeni inkqubo ikwazile ukuvumelanisa ii-cache ezizaliswe ngexesha lokugqibela.

Phakathi kwezinye izinto, ndincoma ukulinganisa isantya kwivolumu esele igcwele ngokupheleleyo apho i-snapshot isanda kuthathwa. Umbhali ube nethuba lokujonga indlela ukubhala okungacwangciswanga okukhawulezisa ngokukhawuleza emva kokwenza umfanekiso okhawulezayo, ngakumbi xa i-cache ingekagcwali ngokupheleleyo. Oku kwenzeka ngenxa yokukhuphela-ngokubhala ukubhala i-semantics, ukulungelelaniswa kwe-cache kunye neebhloko zevolumu ezincinci, kunye nenyaniso yokuba ukubhala okungahleliwe kwi-RAID 6 ijika ibe yinto efundwayo engahleliwe ukusuka kwi-RAID 6 elandelwa ngokubhala kwi-cache. Kuqwalaselo lwethu, ukufunda okungahleliwe ukusuka kwi-RAID 6 ukuya kumaxesha e-6 (inani le-SATA SSDs kwi-array) ngokukhawuleza kunokubhala. Ngokuba iibhloko ze-CoW zabiwa ngokulandelelana ukusuka kwidama elibhityileyo, emva koko ushicilelo, ubukhulu becala, nalo lujike lube lulandelelwano.

Zombini ezi mpawu zinokusetyenziselwa inzuzo yakho.

Cache "ehambelanayo" snapshots

Ukunciphisa umngcipheko wokulahleka kwedatha kwimeko yomonakalo / ilahleko ye-cache, umbhali ucebisa ukwazisa umkhuba wokujikeleza i-snapshots ukuqinisekisa ukuthembeka kwabo kule meko.

Okokuqala, ngenxa yokuba imethadatha yevolumu encinci ihlala kwisixhobo esingagcinwanga, imethadatha iya kuhambelana kwaye ilahleko enokwenzeka iya kubekwa yodwa ngaphakathi kweebhloko zedatha.

Lo mjikelo wokujikeleziswa kwesnapshot ulandelayo uqinisekisa intembeko yedatha ngaphakathi kwisnapshots kwimeko yokulahleka kwe-cache:

  1. Kumthamo ngamnye obhityileyo onegama <igama>, yenza umfanekiso okhawulezayo ngegama <igama> .cached
  2. Masimise umda wokufuduka kwixabiso eliphezulu elifanelekileyo: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. Kwi-loop sijonga inani leebhloko ezimdaka kwi-cache: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' side sifumane u-zero. Ukuba i-zero ilahlekile ixesha elide kakhulu, inokudalwa ngokutshintsha okwethutyana i-cache kwimowudi yokubhala. Nangona kunjalo, ukuqwalasela iimpawu zesantya se-SATA yethu kunye ne-NVMe SSD, kunye nemithombo yabo ye-TBW, uya kuba nako ukubamba ngokukhawuleza umzuzu ngaphandle kokutshintsha imo ye-cache, okanye i-hardware yakho iya kudla ngokupheleleyo yonke imithombo yayo. iintsuku ezimbalwa. Ngenxa yokunciphisa izixhobo, inkqubo, ngokomgaqo, ayikwazi ukuba phantsi kwe-100% yomthwalo wokubhala lonke ixesha. Ii-NVMe SSD zethu phantsi kwe-100% yomthwalo wokubhala ziya kuwugqiba ngokupheleleyo uvimba 3-4 yosuku. Ii-SATA SSD ziya kuhlala kabini kuphela ixesha elide. Ke ngoko, siya kucinga ukuba uninzi lomthwalo luya ekufundeni, kwaye sinokugqabhuka kwexesha elifutshane ngokwentelekiso ephezulu kakhulu edityaniswe nomthwalo ophantsi kumndilili wokubhala.
  4. Nje ukuba sibambe (okanye senze) i-zero, siqamba kwakhona igama elithi <igama> .cached ku-<igama>.committed. Elidala <igama>.elizibophelelekileyo liyacinywa.
  5. Ngokuzikhethela, ukuba i-cache igcwele i-100%, inokwenziwa kwakhona ngeskripthi, ngaloo ndlela icoca. Nge-cache enesiqingatha esingenanto, inkqubo isebenza ngokukhawuleza xa ubhala.
  6. Seta umda wemfuduko ube ngunothi: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata Oku kuya kuthintela okwethutyana i-cache ekungqamaniseni kwimidiya ephambili.
  7. Silinda de kubekho utshintsho oluninzi kwi-cache #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' okanye isibali-xesha siyacima.
  8. Siphinda kwakhona.

Kutheni kukho ubunzima bomda wokufuduka...?Into ekhoyo kukuba, ngokwenyani, ukurekhodwa β€œokungacwangciswanga” ngokwenene akwenzeki ngokupheleleyo. Ukuba sibhale into kwicandelo le-4 kilobytes ngobukhulu, kukho amathuba aphezulu okuba kwimizuzu embalwa elandelayo irekhodi liya kwenziwa kwelinye okanye elinye lamacandelo angabamelwane (+- 32K).

Ngokuseta umda wokufuduka uye kwi-zero, siyakuhlehlisa ukubhala ungqamaniso kwi-SATA SSD kwaye sihlanganise utshintsho oluninzi kwibhloko enye ye-64K kwi-cache. Oku kusindisa kakhulu ubutyebi be-SATA SSD.

Iphi ikhowudi..?Ngelishwa, umbhali uzibona engafanelekanga ngokwaneleyo ekuphuhliseni izikripthi ze-bash kuba u-100% uyazifundisa kwaye uqhuba uphuhliso oluqhutywa ngu-"google", ngoko ke ukholelwa ukuba ikhowudi embi ephuma ezandleni zakhe ayifanele isetyenziswe nabani na. enye into.

Ndicinga ukuba iingcali kule ntsimi ziya kuba nako ukuzimela ngokuzimeleyo yonke ingqiqo echazwe ngasentla, ukuba kuyimfuneko, kwaye, mhlawumbi, ukuyila kakuhle njengenkonzo yenkqubo, njengoko umbhali ezama ukwenza.

Isicwangciso esilula sokujikeleziswa kwesnapshot siya kusivumela ukuba singahlali sinesnapshot enye elungelelaniswe ngokupheleleyo kwi-SATA SSD, kodwa iya kusivumela, sisebenzisa i-thin_delta utility, ukufumanisa ukuba zeziphi iibhloko eziye zatshintshwa emva kokudalwa kwayo, kwaye ngaloo ndlela sibeka umonakalo imiqulu ephambili, yenza lula kakhulu ukuchacha .

I-TRIM/LAHLA kwi-libvirt/KVM

Ngokuba ukugcinwa kwedatha kuya kusetyenziselwa i-KVM eqhuba i-libvirt, ngoko kuya kuba yinto efanelekileyo ukufundisa ii-VM zethu kungekhona nje ukuthatha indawo ekhululekile, kodwa nokukhulula oko kungasafunekiyo.

Oku kwenziwa ngokulinganisa inkxaso ye-TRIM/DISCARD kwiidiski zenyani. Ukwenza oku, kufuneka utshintshe uhlobo lomlawuli kwi-virtio-scsi kwaye uhlele i-xml.

#virsh edit vmname
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='writethrough' io='threads' discard='unmap'/>
<source dev='/dev/images/vmname'/>
<backingStore/>
<target dev='sda' bus='scsi'/>
<alias name='scsi0-0-0-0'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>

<controller type='scsi' index='0' model='virtio-scsi'>
<alias name='scsi0'/>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</controller>

Ukulahlwa okunjalo kwii-OS zeendwendwe kucutshungulwa ngokuchanekileyo yi-LVM, kwaye iibhloko zikhululwa ngokuchanekileyo zombini kwindawo efihlakeleyo nakwichibi elibhityileyo. Kwimeko yethu, oku kwenzeka ikakhulu ngendlela yokulibaziseka, xa ucima umfanekiso olandelayo.

BTRFS Backup

Sebenzisa imibhalo esele yenziwe nge ngokugqithisileyo isilumkiso kunye ngomngcipheko wakhe. Umbhali uyibhale ngokwakhe le khowudi kwaye esenzela yena yedwa. Ndiqinisekile ukuba abasebenzisi abaninzi beLinux abanamava banezixhobo ezifanayo, kwaye akukho mfuneko yokukopa ezomnye umntu.

Masenze ivolyum kwisixhobo sogcino:

#lvcreate -L 256G --name backup backup

Masiyifomethe kwi-BTRFS:

#mkfs.btrfs /dev/backup/backup

Masenze iindawo zokunyuka kwaye sinyuse amacandelwana eengcambu zesixokelelwano sefayile:

#mkdir /backup
#mkdir /backup/btrfs
#mkdir /backup/btrfs/root
#mkdir /backup/btrfs/back
#ln -s /boot /backup/btrfs
# cat >>/etc/fstab << EOF

/dev/mapper/root-root /backup/btrfs/root btrfs defaults,space_cache,noatime,nodiratime 0 2
/dev/mapper/backup-backup /backup/btrfs/back btrfs defaults,space_cache,noatime,nodiratime 0 2
EOF
#mount -a
#update-initramfs -u
#update-grub

Masenze abalawuli bee-backups:

#mkdir /backup/btrfs/back/remote
#mkdir /backup/btrfs/back/remote/root
#mkdir /backup/btrfs/back/remote/boot

Masenze uluhlu lwezikripthi ezigcinayo:

#mkdir /root/btrfs-backup

Masikhuphele umbhalo:

Uninzi lwekhowudi ye-bash eyoyikisayo. Sebenzisa ngomngcipheko wakho. Musa ukubhala iileta ezinomsindo oya kumbhali...#cat >/root/btrfs-backup/btrfs-backup.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

LOCK_FILE="/dev/shm/$SCRIPT_NAME.lock"
DATE_PREFIX='%Y-%m-%d'
DATE_FORMAT=$DATE_PREFIX'-%H-%M-%S'
DATE_REGEX='[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
BASE_SUFFIX=".@base"
PEND_SUFFIX=".@pend"
SNAP_SUFFIX=".@snap"
MOUNTS="/backup/btrfs/"
BACKUPS="/backup/btrfs/back/remote/"

function terminate ()
{
echo "$1" >&2
exit 1
}

function wait_lock()
{
flock 98
}

function wait_lock_or_terminate()
{
echo "Wating for lock..."
wait_lock || terminate "Failed to get lock. Exiting..."
echo "Got lock..."
}

function suffix()
{
FORMATTED_DATE=$(date +"$DATE_FORMAT")
echo "$SNAP_SUFFIX.$FORMATTED_DATE"
}

function filter()
{
FORMATTED_DATE=$(date --date="$1" +"$DATE_PREFIX")
echo "$SNAP_SUFFIX.$FORMATTED_DATE"
}

function backup()
{
SOURCE_PATH="$MOUNTS$1"
TARGET_PATH="$BACKUPS$1"
SOURCE_BASE_PATH="$MOUNTS$1$BASE_SUFFIX"
TARGET_BASE_PATH="$BACKUPS$1$BASE_SUFFIX"
TARGET_BASE_DIR="$(dirname $TARGET_BASE_PATH)"
SOURCE_PEND_PATH="$MOUNTS$1$PEND_SUFFIX"
TARGET_PEND_PATH="$BACKUPS$1$PEND_SUFFIX"
if [ -d "$SOURCE_BASE_PATH" ] then
echo "$SOURCE_BASE_PATH found"
else
echo "$SOURCE_BASE_PATH File not found creating snapshot of $SOURCE_PATH to $SOURCE_BASE_PATH"
btrfs subvolume snapshot -r $SOURCE_PATH $SOURCE_BASE_PATH
sync
if [ -d "$TARGET_BASE_PATH" ] then
echo "$TARGET_BASE_PATH found out of sync with source... removing..."
btrfs subvolume delete -c $TARGET_BASE_PATH
sync
fi
fi
if [ -d "$TARGET_BASE_PATH" ] then
echo "$TARGET_BASE_PATH found"
else
echo "$TARGET_BASE_PATH not found. Synching to $TARGET_BASE_DIR"
btrfs send $SOURCE_BASE_PATH | btrfs receive $TARGET_BASE_DIR
sync
fi
if [ -d "$SOURCE_PEND_PATH" ] then
echo "$SOURCE_PEND_PATH found removing..."
btrfs subvolume delete -c $SOURCE_PEND_PATH
sync
fi
btrfs subvolume snapshot -r $SOURCE_PATH $SOURCE_PEND_PATH
sync
if [ -d "$TARGET_PEND_PATH" ] then
echo "$TARGET_PEND_PATH found removing..."
btrfs subvolume delete -c $TARGET_PEND_PATH
sync
fi
echo "Sending $SOURCE_PEND_PATH to $TARGET_PEND_PATH"
btrfs send -p $SOURCE_BASE_PATH $SOURCE_PEND_PATH | btrfs receive $TARGET_BASE_DIR
sync
TARGET_DATE_SUFFIX=$(suffix)
btrfs subvolume snapshot -r $TARGET_PEND_PATH "$TARGET_PATH$TARGET_DATE_SUFFIX"
sync
btrfs subvolume delete -c $SOURCE_BASE_PATH
sync
btrfs subvolume delete -c $TARGET_BASE_PATH
sync
mv $SOURCE_PEND_PATH $SOURCE_BASE_PATH
mv $TARGET_PEND_PATH $TARGET_BASE_PATH
sync
}

function list()
{
LIST_TARGET_BASE_PATH="$BACKUPS$1$BASE_SUFFIX"
LIST_TARGET_BASE_DIR="$(dirname $LIST_TARGET_BASE_PATH)"
LIST_TARGET_BASE_NAME="$(basename -s .$BASE_SUFFIX $LIST_TARGET_BASE_PATH)"
find "$LIST_TARGET_BASE_DIR" -maxdepth 1 -mindepth 1 -type d -printf "%fn" | grep "${LIST_TARGET_BASE_NAME/$BASE_SUFFIX/$SNAP_SUFFIX}.$DATE_REGEX"
}

function remove()
{
REMOVE_TARGET_BASE_PATH="$BACKUPS$1$BASE_SUFFIX"
REMOVE_TARGET_BASE_DIR="$(dirname $REMOVE_TARGET_BASE_PATH)"
btrfs subvolume delete -c $REMOVE_TARGET_BASE_DIR/$2
sync
}

function removeall()
{
DATE_OFFSET="$2"
FILTER="$(filter "$DATE_OFFSET")"
while read -r SNAPSHOT ; do
remove "$1" "$SNAPSHOT"
done < <(list "$1" | grep "$FILTER")

}

(
COMMAND="$1"
shift

case "$COMMAND" in
"--help")
echo "Help"
;;
"suffix")
suffix
;;
"filter")
filter "$1"
;;
"backup")
wait_lock_or_terminate
backup "$1"
;;
"list")
list "$1"
;;
"remove")
wait_lock_or_terminate
remove "$1" "$2"
;;
"removeall")
wait_lock_or_terminate
removeall "$1" "$2"
;;
*)
echo "None.."
;;
esac
) 98>$LOCK_FILE

EOF

Yintoni kanye le ayenzayo..?Iqulethe uluhlu lwemiyalelo elula yokudala imifanekiso ekhawulezayo ye-BTRFS kwaye uyikhuphele kwenye iFS usebenzisa i-BTRFS yokuthumela/yokufumana.

Ukuqaliswa kokuqala kunokuba kude, kuba ... Ekuqaleni, yonke idatha iya kukhutshelwa. Ukuqaliswa okungaphezulu kuya kukhawuleza kakhulu, kuba... Kuphela lutshintsho oluya kukotshwa.

Esinye iskripthi esiya kusifaka kwi-cron:

Enye ikhowudi ye-bash ngakumbi#cat >/root/btrfs-backup/cron-daily.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

BACKUP_SCRIPT="$SCRIPT_DIR/btrfs-backup.sh"
RETENTION="-60 day"
$BACKUP_SCRIPT backup root/@
$BACKUP_SCRIPT removeall root/@ "$RETENTION"
$BACKUP_SCRIPT backup root/@home
$BACKUP_SCRIPT removeall root/@home "$RETENTION"
$BACKUP_SCRIPT backup boot/
$BACKUP_SCRIPT removeall boot/ "$RETENTION"
EOF

Kwenza ntoni..?Yenza kwaye ingqamanise iifoto ezikhawulezayo ezidwelisiweyo zeBTRFS ezidwelisiweyo kugcino lweFS. Emva koku, isusa yonke imifanekiso eyenziwe kwiintsuku ezingama-60 ezidlulileyo. Emva kokusungulwa, izifinyezo zomhla zemithamo edwelisiweyo ziya kuvela kwi/backup/btrfs/back/remote/ subdirectories.

Masinike amalungelo okuphumeza ikhowudi:

#chmod +x /root/btrfs-backup/cron-daily.sh
#chmod +x /root/btrfs-backup/btrfs-backup.sh

Masiyijonge kwaye siyibeke kwi-cron:

#/usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/btrfs-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t btrfs-backup
#cat /var/log/syslog | grep btrfs-backup
#crontab -e
0 2 * * * /usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/btrfs-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t btrfs-backup

I-LVM yokugcina i-backup

Masenze ichibi elincinci kwisixhobo sokugcina:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T backup/thin-pool

Masifake i-ddrescue, kuba... izikripthi ziya kusebenzisa esi sixhobo:

#apt-get install gddrescue

Masenze uluhlu lwezikripthi:

#mkdir /root/lvm-thin-backup

Masikope izikripthi:

I-bash eninzi ngaphakathi ...#cat >/root/lvm-thin-backup/lvm-thin-backup.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

LOCK_FILE="/dev/shm/$SCRIPT_NAME.lock"
DATE_PREFIX='%Y-%m-%d'
DATE_FORMAT=$DATE_PREFIX'-%H-%M-%S'
DATE_REGEX='[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
BASE_SUFFIX=".base"
PEND_SUFFIX=".pend"
SNAP_SUFFIX=".snap"
BACKUPS="backup"
BACKUPS_POOL="thin-pool"

export LVM_SUPPRESS_FD_WARNINGS=1

function terminate ()
{
echo "$1" >&2
exit 1
}

function wait_lock()
{
flock 98
}

function wait_lock_or_terminate()
{
echo "Wating for lock..."
wait_lock || terminate "Failed to get lock. Exiting..."
echo "Got lock..."
}

function suffix()
{
FORMATTED_DATE=$(date +"$DATE_FORMAT")
echo "$SNAP_SUFFIX.$FORMATTED_DATE"
}

function filter()
{
FORMATTED_DATE=$(date --date="$1" +"$DATE_PREFIX")
echo "$SNAP_SUFFIX.$FORMATTED_DATE"
}

function read_thin_id {
lvs --rows --reportformat basic --quiet -othin_id "$1/$2" | awk '{print $2}'
}

function read_pool_lv {
lvs --rows --reportformat basic --quiet -opool_lv "$1/$2" | awk '{print $2}'
}

function read_lv_dm_path {
lvs --rows --reportformat basic --quiet -olv_dm_path "$1/$2" | awk '{print $2}'
}

function read_lv_active {
lvs --rows --reportformat basic --quiet -olv_active "$1/$2" | awk '{print $2}'
}

function read_lv_chunk_size {
lvs --rows --reportformat basic --quiet --units b --nosuffix -ochunk_size "$1/$2" | awk '{print $2}'
}

function read_lv_size {
lvs --rows --reportformat basic --quiet --units b --nosuffix -olv_size "$1/$2" | awk '{print $2}'
}

function activate_volume {
lvchange -ay -Ky "$1/$2"
}

function deactivate_volume {
lvchange -an "$1/$2"
}

function read_thin_metadata_snap {
dmsetup status "$1" | awk '{print $7}'
}

function thindiff()
{
DIFF_VG="$1"
DIFF_SOURCE="$2"
DIFF_TARGET="$3"
DIFF_SOURCE_POOL=$(read_pool_lv $DIFF_VG $DIFF_SOURCE)
DIFF_TARGET_POOL=$(read_pool_lv $DIFF_VG $DIFF_TARGET)

if [ "$DIFF_SOURCE_POOL" == "" ] then
(>&2 echo "Source LV is not thin.")
exit 1
fi

if [ "$DIFF_TARGET_POOL" == "" ] then
(>&2 echo "Target LV is not thin.")
exit 1
fi

if [ "$DIFF_SOURCE_POOL" != "$DIFF_TARGET_POOL" ] then
(>&2 echo "Source and target LVs belong to different thin pools.")
exit 1
fi

DIFF_POOL_PATH=$(read_lv_dm_path $DIFF_VG $DIFF_SOURCE_POOL)
DIFF_SOURCE_ID=$(read_thin_id $DIFF_VG $DIFF_SOURCE)
DIFF_TARGET_ID=$(read_thin_id $DIFF_VG $DIFF_TARGET)
DIFF_POOL_PATH_TPOOL="$DIFF_POOL_PATH-tpool"
DIFF_POOL_PATH_TMETA="$DIFF_POOL_PATH"_tmeta
DIFF_POOL_METADATA_SNAP=$(read_thin_metadata_snap $DIFF_POOL_PATH_TPOOL)

if [ "$DIFF_POOL_METADATA_SNAP" != "-" ] then
(>&2 echo "Thin pool metadata snapshot already exist. Assuming stale one. Will release metadata snapshot in 5 seconds.")
sleep 5
dmsetup message $DIFF_POOL_PATH_TPOOL 0 release_metadata_snap
fi

dmsetup message $DIFF_POOL_PATH_TPOOL 0 reserve_metadata_snap
DIFF_POOL_METADATA_SNAP=$(read_thin_metadata_snap $DIFF_POOL_PATH_TPOOL)

if [ "$DIFF_POOL_METADATA_SNAP" == "-" ] then
(>&2 echo "Failed to create thin pool metadata snapshot.")
exit 1
fi

#We keep output in variable because metadata snapshot need to be released early.
DIFF_DATA=$(thin_delta -m$DIFF_POOL_METADATA_SNAP --snap1 $DIFF_SOURCE_ID --snap2 $DIFF_TARGET_ID $DIFF_POOL_PATH_TMETA)

dmsetup message $DIFF_POOL_PATH_TPOOL 0 release_metadata_snap

echo $"$DIFF_DATA" | grep -E 'different|left_only|right_only' | sed 's/</"/g' | sed 's/ /"/g' | awk -F'"' '{print $6 "t" $8 "t" $11}' | sed 's/different/copy/g' | sed 's/left_only/copy/g' | sed 's/right_only/discard/g'

}

function thinsync()
{
SYNC_VG="$1"
SYNC_PEND="$2"
SYNC_BASE="$3"
SYNC_TARGET="$4"
SYNC_PEND_POOL=$(read_pool_lv $SYNC_VG $SYNC_PEND)
SYNC_BLOCK_SIZE=$(read_lv_chunk_size $SYNC_VG $SYNC_PEND_POOL)
SYNC_PEND_PATH=$(read_lv_dm_path $SYNC_VG $SYNC_PEND)

activate_volume $SYNC_VG $SYNC_PEND

while read -r SYNC_ACTION SYNC_OFFSET SYNC_LENGTH ; do
SYNC_OFFSET_BYTES=$((SYNC_OFFSET * SYNC_BLOCK_SIZE))
SYNC_LENGTH_BYTES=$((SYNC_LENGTH * SYNC_BLOCK_SIZE))
if [ "$SYNC_ACTION" == "copy" ] then
ddrescue --quiet --force --input-position=$SYNC_OFFSET_BYTES --output-position=$SYNC_OFFSET_BYTES --size=$SYNC_LENGTH_BYTES "$SYNC_PEND_PATH" "$SYNC_TARGET"
fi

if [ "$SYNC_ACTION" == "discard" ] then
blkdiscard -o $SYNC_OFFSET_BYTES -l $SYNC_LENGTH_BYTES "$SYNC_TARGET"
fi
done < <(thindiff "$SYNC_VG" "$SYNC_PEND" "$SYNC_BASE")
}

function discard_volume()
{
DISCARD_VG="$1"
DISCARD_LV="$2"
DISCARD_LV_PATH=$(read_lv_dm_path "$DISCARD_VG" "$DISCARD_LV")
if [ "$DISCARD_LV_PATH" != "" ] then
echo "$DISCARD_LV_PATH found"
else
echo "$DISCARD_LV not found in $DISCARD_VG"
exit 1
fi
DISCARD_LV_POOL=$(read_pool_lv $DISCARD_VG $DISCARD_LV)
DISCARD_LV_SIZE=$(read_lv_size "$DISCARD_VG" "$DISCARD_LV")
lvremove -y --quiet "$DISCARD_LV_PATH" || exit 1
lvcreate --thin-pool "$DISCARD_LV_POOL" -V "$DISCARD_LV_SIZE"B --name "$DISCARD_LV" "$DISCARD_VG" || exit 1
}

function backup()
{
SOURCE_VG="$1"
SOURCE_LV="$2"
TARGET_VG="$BACKUPS"
TARGET_LV="$SOURCE_VG-$SOURCE_LV"
SOURCE_BASE_LV="$SOURCE_LV$BASE_SUFFIX"
TARGET_BASE_LV="$TARGET_LV$BASE_SUFFIX"
SOURCE_PEND_LV="$SOURCE_LV$PEND_SUFFIX"
TARGET_PEND_LV="$TARGET_LV$PEND_SUFFIX"
SOURCE_BASE_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_BASE_LV")
SOURCE_PEND_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_PEND_LV")
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
TARGET_PEND_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_PEND_LV")

if [ "$SOURCE_BASE_LV_PATH" != "" ] then
echo "$SOURCE_BASE_LV_PATH found"
else
echo "Source base not found creating snapshot of $SOURCE_VG/$SOURCE_LV to $SOURCE_VG/$SOURCE_BASE_LV"
lvcreate --quiet --snapshot --name "$SOURCE_BASE_LV" "$SOURCE_VG/$SOURCE_LV" || exit 1
SOURCE_BASE_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_BASE_LV")
activate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
echo "Discarding $SOURCE_BASE_LV_PATH as we need to bootstrap."
SOURCE_BASE_POOL=$(read_pool_lv $SOURCE_VG $SOURCE_BASE_LV)
SOURCE_BASE_CHUNK_SIZE=$(read_lv_chunk_size $SOURCE_VG $SOURCE_BASE_POOL)
discard_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
sync
if [ "$TARGET_BASE_LV_PATH" != "" ] then
echo "$TARGET_BASE_LV_PATH found out of sync with source... removing..."
lvremove -y --quiet $TARGET_BASE_LV_PATH || exit 1
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
sync
fi
fi
SOURCE_BASE_SIZE=$(read_lv_size "$SOURCE_VG" "$SOURCE_BASE_LV")
if [ "$TARGET_BASE_LV_PATH" != "" ] then
echo "$TARGET_BASE_LV_PATH found"
else
echo "$TARGET_VG/$TARGET_LV not found. Creating empty volume."
lvcreate --thin-pool "$BACKUPS_POOL" -V "$SOURCE_BASE_SIZE"B --name "$TARGET_BASE_LV" "$TARGET_VG" || exit 1
echo "Have to rebootstrap. Discarding source at $SOURCE_BASE_LV_PATH"
activate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
SOURCE_BASE_POOL=$(read_pool_lv $SOURCE_VG $SOURCE_BASE_LV)
SOURCE_BASE_CHUNK_SIZE=$(read_lv_chunk_size $SOURCE_VG $SOURCE_BASE_POOL)
discard_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
TARGET_BASE_POOL=$(read_pool_lv $TARGET_VG $TARGET_BASE_LV)
TARGET_BASE_CHUNK_SIZE=$(read_lv_chunk_size $TARGET_VG $TARGET_BASE_POOL)
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
echo "Discarding target at $TARGET_BASE_LV_PATH"
discard_volume "$TARGET_VG" "$TARGET_BASE_LV"
sync
fi
if [ "$SOURCE_PEND_LV_PATH" != "" ] then
echo "$SOURCE_PEND_LV_PATH found removing..."
lvremove -y --quiet "$SOURCE_PEND_LV_PATH" || exit 1
sync
fi
lvcreate --quiet --snapshot --name "$SOURCE_PEND_LV" "$SOURCE_VG/$SOURCE_LV" || exit 1
SOURCE_PEND_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_PEND_LV")
sync
if [ "$TARGET_PEND_LV_PATH" != "" ] then
echo "$TARGET_PEND_LV_PATH found removing..."
lvremove -y --quiet $TARGET_PEND_LV_PATH
sync
fi
lvcreate --quiet --snapshot --name "$TARGET_PEND_LV" "$TARGET_VG/$TARGET_BASE_LV" || exit 1
TARGET_PEND_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_PEND_LV")
SOURCE_PEND_LV_SIZE=$(read_lv_size "$SOURCE_VG" "$SOURCE_PEND_LV")
lvresize -L "$SOURCE_PEND_LV_SIZE"B "$TARGET_PEND_LV_PATH"
activate_volume "$TARGET_VG" "$TARGET_PEND_LV"
echo "Synching $SOURCE_PEND_LV_PATH to $TARGET_PEND_LV_PATH"
thinsync "$SOURCE_VG" "$SOURCE_PEND_LV" "$SOURCE_BASE_LV" "$TARGET_PEND_LV_PATH" || exit 1
sync

TARGET_DATE_SUFFIX=$(suffix)
lvcreate --quiet --snapshot --name "$TARGET_LV$TARGET_DATE_SUFFIX" "$TARGET_VG/$TARGET_PEND_LV" || exit 1
sync
lvremove --quiet -y "$SOURCE_BASE_LV_PATH" || exit 1
sync
lvremove --quiet -y "$TARGET_BASE_LV_PATH" || exit 1
sync
lvrename -y "$SOURCE_VG/$SOURCE_PEND_LV" "$SOURCE_BASE_LV" || exit 1
lvrename -y "$TARGET_VG/$TARGET_PEND_LV" "$TARGET_BASE_LV" || exit 1
sync
deactivate_volume "$TARGET_VG" "$TARGET_BASE_LV"
deactivate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
}

function verify()
{
SOURCE_VG="$1"
SOURCE_LV="$2"
TARGET_VG="$BACKUPS"
TARGET_LV="$SOURCE_VG-$SOURCE_LV"
SOURCE_BASE_LV="$SOURCE_LV$BASE_SUFFIX"
TARGET_BASE_LV="$TARGET_LV$BASE_SUFFIX"
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
SOURCE_BASE_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_BASE_LV")

if [ "$SOURCE_BASE_LV_PATH" != "" ] then
echo "$SOURCE_BASE_LV_PATH found"
else
echo "$SOURCE_BASE_LV_PATH not found"
exit 1
fi
if [ "$TARGET_BASE_LV_PATH" != "" ] then
echo "$TARGET_BASE_LV_PATH found"
else
echo "$TARGET_BASE_LV_PATH not found"
exit 1
fi
activate_volume "$TARGET_VG" "$TARGET_BASE_LV"
activate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
echo Comparing "$SOURCE_BASE_LV_PATH" with "$TARGET_BASE_LV_PATH"
cmp "$SOURCE_BASE_LV_PATH" "$TARGET_BASE_LV_PATH"
echo Done...
deactivate_volume "$TARGET_VG" "$TARGET_BASE_LV"
deactivate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
}

function resync()
{
SOURCE_VG="$1"
SOURCE_LV="$2"
TARGET_VG="$BACKUPS"
TARGET_LV="$SOURCE_VG-$SOURCE_LV"
SOURCE_BASE_LV="$SOURCE_LV$BASE_SUFFIX"
TARGET_BASE_LV="$TARGET_LV$BASE_SUFFIX"
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
SOURCE_BASE_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_BASE_LV")

if [ "$SOURCE_BASE_LV_PATH" != "" ] then
echo "$SOURCE_BASE_LV_PATH found"
else
echo "$SOURCE_BASE_LV_PATH not found"
exit 1
fi
if [ "$TARGET_BASE_LV_PATH" != "" ] then
echo "$TARGET_BASE_LV_PATH found"
else
echo "$TARGET_BASE_LV_PATH not found"
exit 1
fi
activate_volume "$TARGET_VG" "$TARGET_BASE_LV"
activate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
SOURCE_BASE_POOL=$(read_pool_lv $SOURCE_VG $SOURCE_BASE_LV)
SYNC_BLOCK_SIZE=$(read_lv_chunk_size $SOURCE_VG $SOURCE_BASE_POOL)

echo Syncronizing "$SOURCE_BASE_LV_PATH" to "$TARGET_BASE_LV_PATH"

CMP_OFFSET=0
while [[ "$CMP_OFFSET" != "" ]] ; do
CMP_MISMATCH=$(cmp -i "$CMP_OFFSET" "$SOURCE_BASE_LV_PATH" "$TARGET_BASE_LV_PATH" | grep differ | awk '{print $5}' | sed 's/,//g' )
if [[ "$CMP_MISMATCH" != "" ]] ; then
CMP_OFFSET=$(( CMP_MISMATCH + CMP_OFFSET ))
SYNC_OFFSET_BYTES=$(( ( CMP_OFFSET / SYNC_BLOCK_SIZE ) * SYNC_BLOCK_SIZE ))
SYNC_LENGTH_BYTES=$(( SYNC_BLOCK_SIZE ))
echo "Synching $SYNC_LENGTH_BYTES bytes at $SYNC_OFFSET_BYTES from $SOURCE_BASE_LV_PATH to $TARGET_BASE_LV_PATH"
ddrescue --quiet --force --input-position=$SYNC_OFFSET_BYTES --output-position=$SYNC_OFFSET_BYTES --size=$SYNC_LENGTH_BYTES "$SOURCE_BASE_LV_PATH" "$TARGET_BASE_LV_PATH"
else
CMP_OFFSET=""
fi
done
echo Done...
deactivate_volume "$TARGET_VG" "$TARGET_BASE_LV"
deactivate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
}

function list()
{
LIST_SOURCE_VG="$1"
LIST_SOURCE_LV="$2"
LIST_TARGET_VG="$BACKUPS"
LIST_TARGET_LV="$LIST_SOURCE_VG-$LIST_SOURCE_LV"
LIST_TARGET_BASE_LV="$LIST_TARGET_LV$SNAP_SUFFIX"
lvs -olv_name | grep "$LIST_TARGET_BASE_LV.$DATE_REGEX"
}

function remove()
{
REMOVE_TARGET_VG="$BACKUPS"
REMOVE_TARGET_LV="$1"
lvremove -y "$REMOVE_TARGET_VG/$REMOVE_TARGET_LV"
sync
}

function removeall()
{
DATE_OFFSET="$3"
FILTER="$(filter "$DATE_OFFSET")"
while read -r SNAPSHOT ; do
remove "$SNAPSHOT"
done < <(list "$1" "$2" | grep "$FILTER")

}

(
COMMAND="$1"
shift

case "$COMMAND" in
"--help")
echo "Help"
;;
"suffix")
suffix
;;
"filter")
filter "$1"
;;
"backup")
wait_lock_or_terminate
backup "$1" "$2"
;;
"list")
list "$1" "$2"
;;
"thindiff")
thindiff "$1" "$2" "$3"
;;
"thinsync")
thinsync "$1" "$2" "$3" "$4"
;;
"verify")
wait_lock_or_terminate
verify "$1" "$2"
;;
"resync")
wait_lock_or_terminate
resync "$1" "$2"
;;
"remove")
wait_lock_or_terminate
remove "$1"
;;
"removeall")
wait_lock_or_terminate
removeall "$1" "$2" "$3"
;;
*)
echo "None.."
;;
esac
) 98>$LOCK_FILE

EOF

Kwenza ntoni...?Iqulethe iseti yemiyalelo yokuguqula umfanekiso okhawulezayo kwaye ungqamanise umahluko phakathi kwezithombe ezikhawulezayo ezimbini ezifunyenwe nge-thin_delta ukuya kwesinye isixhobo sebhloko usebenzisa i-ddrescue kunye ne-blkdiscard.

Esinye iskripthi esiya kusibeka kwi-cron:

I-bash encinci ngakumbi#cat >/root/lvm-thin-backup/cron-daily.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

BACKUP_SCRIPT="$SCRIPT_DIR/lvm-thin-backup.sh"
RETENTION="-60 days"

$BACKUP_SCRIPT backup images linux-dev
$BACKUP_SCRIPT backup images win8
$BACKUP_SCRIPT backup images win8-data
#etc

$BACKUP_SCRIPT removeall images linux-dev "$RETENTION"
$BACKUP_SCRIPT removeall images win8 "$RETENTION"
$BACKUP_SCRIPT removeall images win8-data "$RETENTION"
#etc

EOF

Kwenza ntoni...?Isebenzisa iscript sangaphambili ukwenza kunye nokulungelelanisa iikopi zemithamo emincinci edwelisiweyo. Iskripthi siya kushiya imifanekiso eqingqiweyo engasebenziyo yemithamo edwelisiweyo, efunekayo ukulandelela utshintsho ukususela kungqamaniso lokugqibela.

Le script kufuneka ihlelwe, ichaza uluhlu lwemithamo emincinci ekufuneka yenzelwe yona iikopi ezigciniweyo. Amagama anikiweyo ngawemizekeliso kuphela. Ukuba uyanqwenela, ungabhala umbhalo oza kulungelelanisa yonke imiqulu.

Masinike amalungelo:

#chmod +x /root/lvm-thin-backup/cron-daily.sh
#chmod +x /root/lvm-thin-backup/lvm-thin-backup.sh

Masiyijonge kwaye siyibeke kwi-cron:

#/usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/lvm-thin-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t lvm-thin-backup
#cat /var/log/syslog | grep lvm-thin-backup
#crontab -e
0 3 * * * /usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/lvm-thin-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t lvm-thin-backup

Ukuqaliswa kokuqala kuya kuba kude, kuba ... Umthamo obhityileyo uya kulungelelaniswa ngokupheleleyo ngokukhuphela yonke indawo esetyenzisiweyo. Enkosi kwi-LVM yemetadata ecekethekileyo, siyazi ukuba zeziphi iibhloko ezisetyenziswa ngokwenene, ngoko ke kuphela iibhloko zevolumu ezisetyenzisiweyo ziya kukhutshelwa.

Ukuqhuba okulandelayo kuya kukopa idatha ngokunyuka ngokubulela ukutshintsha umkhondo nge-LVM metadata encinci.

Makhe sibone ukuba kwenzeke ntoni:

#time /root/btrfs-backup/cron-daily.sh
real 0m2,967s
user 0m0,225s
sys 0m0,353s

#time /root/lvm-thin-backup/cron-daily.sh
real 1m2,710s
user 0m12,721s
sys 0m6,671s

#ls -al /backup/btrfs/back/remote/*
/backup/btrfs/back/remote/boot:
total 0
drwxr-xr-x 1 root root 1260 ΠΌΠ°Ρ€ 26 09:11 .
drwxr-xr-x 1 root root 16 ΠΌΠ°Ρ€ 6 09:30 ..
drwxr-xr-x 1 root root 322 ΠΌΠ°Ρ€ 26 02:00 .@base
drwxr-xr-x 1 root root 516 ΠΌΠ°Ρ€ 6 09:39 [email protected]
drwxr-xr-x 1 root root 516 ΠΌΠ°Ρ€ 6 09:39 [email protected]
...
/backup/btrfs/back/remote/root:
total 0
drwxr-xr-x 1 root root 2820 ΠΌΠ°Ρ€ 26 09:11 .
drwxr-xr-x 1 root root 16 ΠΌΠ°Ρ€ 6 09:30 ..
drwxr-xr-x 1 root root 240 ΠΌΠ°Ρ€ 26 09:11 @.@base
drwxr-xr-x 1 root root 22 ΠΌΠ°Ρ€ 26 09:11 @home.@base
drwxr-xr-x 1 root root 22 ΠΌΠ°Ρ€ 6 09:39 @[email protected]
drwxr-xr-x 1 root root 22 ΠΌΠ°Ρ€ 6 09:39 @[email protected]
...
drwxr-xr-x 1 root root 240 ΠΌΠ°Ρ€ 6 09:39 @[email protected]
drwxr-xr-x 1 root root 240 ΠΌΠ°Ρ€ 6 09:39 @[email protected]
...

#lvs -olv_name,lv_size images && lvs -olv_name,lv_size backup
LV LSize
linux-dev 128,00g
linux-dev.base 128,00g
thin-pool 1,38t
win8 128,00g
win8-data 2,00t
win8-data.base 2,00t
win8.base 128,00g
LV LSize
backup 256,00g
images-linux-dev.base 128,00g
images-linux-dev.snap.2020-03-08-10-09-11 128,00g
images-linux-dev.snap.2020-03-08-10-09-25 128,00g
...
images-win8-data.base 2,00t
images-win8-data.snap.2020-03-16-14-11-55 2,00t
images-win8-data.snap.2020-03-16-14-19-50 2,00t
...
images-win8.base 128,00g
images-win8.snap.2020-03-17-04-51-46 128,00g
images-win8.snap.2020-03-18-03-02-49 128,00g
...
thin-pool <2,09t

Ingaba le nto inento yokwenza noonodoli abazalela iindlwane?

Okunokwenzeka kakhulu, kunikwe ukuba imiqulu ye-LVM LV esengqiqweni inokuba yi-LVM PV imithamo ebonakalayo yezinye ii-VG. I-LVM inokuphinda ibuyele, njengoonodoli bendlwane. Oku kunika i-LVM ukuguquguquka okugqithisileyo.

PS

Kwinqaku elilandelayo, siya kuzama ukusebenzisa iinkqubo ezininzi ezifanayo zokugcina iifowuni/i-KVM njengesiseko sokwenza i-geo-distributed storage/vm cluster kunye nokuphindaphindeka kumazwekazi amaninzi kusetyenziswa iidesktops zasekhaya, i-Intanethi yasekhaya kunye neenethiwekhi ze-P2P.

umthombo: www.habr.com

Yongeza izimvo