I-LVM ne-Matryoshka abafana ngani?

Sanibonani.
Ngingathanda ukwabelana nomphakathi ngolwazi lwami olusebenzayo lokwakha isistimu yokugcina idatha ye-KVM ngisebenzisa i-md RAID + LVM.

Uhlelo luzobandakanya:

  • Ukwakha i-md RAID 1 kusuka ku-NVMe SSD.
  • Ukuhlanganisa i-md RAID 6 kusuka ku-SATA SSD namadrayivu avamile.
  • Izici zokusebenza kwe-TRIM/DISCARD ku-SSD RAID 1/6.
  • Ukudala uhlu lwe-md RAID 1/6 olusebenzayo kusethi evamile yamadiski.
  • Ukufaka isistimu ku-NVMe RAID 1 uma kungekho usekelo lwe-NVMe ku-BIOS.
  • Ukusebenzisa i-LVM cache ne-LVM izacile.
  • Usebenzisa izifinyezo ze-BTRFS futhi uthumele/wamukele ukuze wenze ikhophi yasenqolobaneni.
  • Kusetshenziswa izifinyezo ezincane ze-LVM kanye ne-thin_delta yezipele zesitayela se-BTRFS.

Uma uthanda, sicela ubone ikati.

Isitatimende

Umbhali akanaso isibopho ngemiphumela yokusebenzisa noma yokungasebenzisi izinto/izibonelo/ikhodi/amathiphu/idatha yalesi sihloko. Ngokufunda noma ukusebenzisa le nto nganoma iyiphi indlela, uthwala isibopho sayo yonke imiphumela yalezi zenzo. Imiphumela engaba khona ihlanganisa:

  • Ama-NVMe SSDs athosiwe.
  • Kusetshenziswe ngokuphelele isisetshenziswa sokuqopha kanye nokwehluleka kwamadrayivu e-SSD.
  • Ukulahlekelwa okuphelele kwayo yonke idatha kuwo wonke amadrayivu, okuhlanganisa namakhophi ayisipele.
  • Izingxenyekazi zekhompuyutha ezinephutha.
  • Isikhathi esichithwe, izinzwa nemali.
  • Noma yimiphi eminye imiphumela engabhaliwe ngenhla.

I-Iron

Ayetholakala:

I-Motherboard yango-2013 ene-chipset ye-Z87, iphelele nge-Intel Core i7 / Haswell.

  • Iphrosesa 4 cores, 8 imicu
  • 32 GB DDR3 RAM
  • 1 x 16 noma 2 x 8 PCIe 3.0
  • 1 x 4 + 1 x 1 PCIe 2.0
  • 6 x 6 GBps SATA 3 izixhumi

I-adaptha ye-SAS i-LSI SAS9211-8I ikhanyise kumodi ye-IT / HBA. I-firmware enikwe amandla i-RAID ithathelwe indawo ngamabomu nge-HBA firmware ukuze:

  1. Ungalahla le-adaptha nganoma yisiphi isikhathi futhi esikhundleni sayo ufake noma iyiphi enye ohlangane nayo.
  2. I-TRIM/Lahla isebenze ngokujwayelekile kumadiski, ngoba... ku-firmware ye-RAID le miyalo ayisekelwe nhlobo, futhi i-HBA, ngokuvamile, ayinandaba ukuthi yimiphi imiyalo ethunyelwa ngebhasi.

Amadrayivu aqinile - izingcezu eziyi-8 ze-HGST Travelstar 7K1000 ezinomthamo ongu-1 TB endaweni engu-2.5, njengamakhompyutha aphathekayo. Lawa madrayivu ngaphambilini abekuhlu lwe-RAID 6. Bazoba nokusetshenziswa ohlelweni olusha. Ukugcina izipele zendawo.

Kwengezwe:

6 izingcezu SATA SSD imodeli Samsung 860 QVO 2TB. Lawa ma-SSD adinga ivolumu enkulu, ukuba khona kwenqolobane ye-SLC, ukwethembeka, kanye nenani eliphansi bekufunwa. Ukusekela kokulahla/uziro bekudingeka, okuhlolwa umugqa ku-dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

Izingcezu ezi-2 zemodeli ye-NVMe SSD Samsung SSD 970 EVO 500GB.

Kulawa ma-SSD, isivinini sokufunda/sokubhala esingahleliwe kanye nomthamo wensiza wezidingo zakho kubalulekile. I-radiator kubo. Impela. Nakanjani. Uma kungenjalo, zithose zize zibe crispy ngesikhathi sokuvumelanisa kwe-RAID yokuqala.

I-adaptha ye-StarTech PEX8M2E2 ye-2 x NVMe SSD efakwe ku-PCIe 3.0 8x slot. Lokhu, futhi, kuyi-HBA nje, kodwa eye-NVMe. Ihlukile kuma-adaptha ashibhile ngoba ayidingi ukwesekwa kwe-PCIe bifurcation kusuka ebhodini lomama ngenxa yokuba khona kweswishi ye-PCIe eyakhelwe ngaphakathi. Izosebenza ngisho nasohlelweni lwakudala kakhulu nge-PCIe, noma ngabe i-x1 PCIe 1.0 slot. Ngokwemvelo, ngesivinini esifanele. Awekho ama-RAID lapho. Ayikho i-BIOS eyakhelwe ngaphakathi ebhodini. Ngakho-ke, uhlelo lwakho ngeke lufunde ngomlingo ukuqalisa nge-NVMe, kancane kancane ukwenza i-NVMe RAID sibonge kule divayisi.

Le ngxenye yayingenxa nje yokuba khona kwe-8x PCIe 3.0 eyodwa yamahhala ohlelweni, futhi, uma kunezikhala zamahhala ezi-2, ingashintshwa kalula ngepeni ezimbili ze-PEX4M2E1 noma ama-analogues, angathengwa noma kuphi ngentengo engu-600. ama-ruble.

Ukwenqatshwa kwazo zonke izinhlobo zehadiwe noma i-chipset/BIOS RAID eyakhelwe ngaphakathi kwenziwa ngamabomu, ukuze ukwazi ukufaka esikhundleni ngokuphelele uhlelo lonke, ngaphandle kwe-SSD/HDD ngokwayo, kuyilapho kugcinwa yonke idatha. Okufanelekile, ukuze ukwazi ukusindisa ngisho nesistimu yokusebenza efakiwe lapho uthuthela kuhadiwe entsha/ehlukile ngokuphelele. Into esemqoka ukuthi kukhona amachweba we-SATA ne-PCIe. Kufana ne-CD ebukhoma noma i-flash drive ebhuthayo, eshesha kakhulu kuphela futhi incane kakhulu.

IhlazoUma kungenjalo, uyazi ukuthi kwenzekani - kwesinye isikhathi udinga ngokuphuthumayo ukuthatha lonke uhlu uhambe nalo. Kodwa angifuni ukulahlekelwa idatha. Ukwenza lokhu, yonke imidiya eshiwo itholakala kalula kuma-slides kuma-bays angu-5.25 wecala elijwayelekile.

Yebo, futhi, vele, ngokuzama izindlela ezahlukahlukene zokugcinwa kwesikhashana kwe-SSD kuLinux.

Ukuhlasela kwezingxenyekazi zekhompuyutha kuyabhora. Ivule. Iyasebenza noma ayisebenzi. Futhi nge-mdadm kukhona njalo izinketho.

I-soft

Ngaphambilini, i-Debian 8 Jessie yayifakwe ku-hardware, eseduze ne-EOL. I-RAID 6 ihlanganiswe kusukela kuma-HDD ashiwo ngenhla abhangqwe ne-LVM. Yasebenzisa imishini ebonakalayo ku-kvm/libvirt.

Ngoba Umbhali unolwazi olufanele ekudaleni ama-flash drive aphathwayo e-SATA/NVMe, futhi, ukuze angaphuli ithempulethi evamile, i-Ubuntu 18.04 yakhethwa njengohlelo oluqondiwe, oseluvele luzinzile ngokwanele, kodwa luseneminyaka engu-3 ukwesekwa esikhathini esizayo.

Uhlelo olushiwo luqukethe zonke izishayeli zehadiwe esizidingayo ngaphandle kwebhokisi. Asiyidingi isofthiwe yomuntu wesithathu noma izishayeli.

Ukulungiselela ukufakwa

Ukufaka uhlelo sidinga Ubuntu Desktop Image. Isistimu yeseva inohlobo oluthile lwesifaki esinamandla, okubonisa ukuzimela ngokweqile okungenakuvinjelwa ngokusunduza ukuhlukaniswa kwesistimu ye-UEFI kwenye yamadiski, konakalise bonke ubuhle. Ngakho-ke, ifakwe kuphela kumodi ye-UEFI. Ayinikezi noma yiziphi izinketho.

Aseneme ngalokhu.

Kungani?Ngeshwa, i-UEFI boot ayihambisani kabi nesoftware ye-boot RAID, ngoba... Akekho osinikeza ukubhukha kwengxenye ye-UEFI ESP. Kukhona izindlela zokupheka ku-inthanethi eziphakamisa ukubeka ukwahlukanisa kwe-ESP ku-flash drive echwebeni le-USB, kodwa leli iphuzu lokwehluleka. Kukhona izindlela zokupheka ezisebenzisa isoftware i-mdadm RAID 1 enenguqulo yemethadatha engu-0.9 engavimbeli i-UEFI BIOS ukuthi ibone lokhu kuhlukaniswa, kodwa lokhu kuphila kuze kube umzuzu ojabulisayo lapho i-BIOS noma enye i-hardware OS ibhala okuthile ku-ESP futhi ikhohlwe ukuyivumelanisa kwezinye. izibuko.

Ngaphezu kwalokho, i-UEFI boot incike ku-NVRAM, engeke ihambisane namadiski ohlelweni olusha, ngoba iyingxenye yebhodi lomama.

Ngakho-ke, ngeke sisungule kabusha isondo elisha. Sesivele sinebhayisikili likamkhulu eselenziwe ngomumo, elihlolwe isikhathi, manje elibizwa nge-Legacy/BIOS boot, elinegama eliziqhenyayo le-CSM kumasistimu ahambisana ne-UEFI. Sizovele siyikhiphe eshalofini, siyigcobe, simpompa amathayi bese siwasula ngendwangu emanzi.

Inguqulo yedeskithophu ye-Ubuntu nayo ayikwazi ukufakwa kahle nge-bootloader ye-Legacy, kodwa lapha, njengoba besho, okungenani kunezinketho.

Ngakho-ke, siqoqa ihadiwe bese silayisha uhlelo kusuka ku-Ubuntu Live bootable flash drive. Sizodinga ukulanda amaphakheji, ngakho sizosetha inethiwekhi ekusebenzelayo. Uma kungasebenzi, ungalayisha amaphakheji adingekayo ku-flash drive kusengaphambili.

Singena endaweni yedeskithophu, sethule i-emulator yetheminali, bese siyahamba:

#sudo bash

Kanjani…?Umugqa ongenhla uyinhlamvu ye-canonical yama-holiwars mayelana ne-sudo. C bΠΎamathuba amakhulu eze futhiΠΎumthwalo wemfanelo omkhulu. Umbuzo uthi ungazithathela wena. Abantu abaningi bacabanga ukuthi ukusebenzisa i-sudo ngale ndlela okungenani akunaki. Nokho:

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

Kungani kungenjalo iZFS...?Uma sifaka isofthiwe kukhompuyutha yethu, empeleni siboleka izingxenyekazi zekhompuyutha zethu kubathuthukisi bale software ukuze bayishayele.
Uma sithemba le softhiwe ngokuphepha kwedatha yethu, sithatha imali ebolekiwe elingana nezindleko zokubuyisela le datha, okuzodingeka siyikhokhe ngolunye usuku.

Ngokwaleli phuzu lokubuka, i-ZFS iyiFerrari, futhi i-mdadm+lvm ifana nebhayisikili.

Ngokuzithoba, umbhali ukhetha ukuboleka ibhayisikili ngesikweletu kubantu abangaziwa esikhundleni seFerrari. Lapho, intengo yenkinga ayikho phezulu. Asikho isidingo samalungelo. Ilula kunemithetho yomgwaqo. Ukupaka kumahhala. Ikhono lokuwela izwe lingcono. Ungakwazi njalo ukunamathisela imilenze ebhayisikilini, futhi ungakwazi ukulungisa ibhayisikili ngezandla zakho.

Kungani-ke i-BTRFS...?Ukuze siqalise isistimu yokusebenza, sidinga isistimu yefayela esekelwa ku-Legacy/BIOS GRUB ngaphandle kwebhokisi, futhi ngesikhathi esifanayo isekela izifinyezo ezibukhoma. Sizoyisebenzisela ukwahlukanisa kwe-/boot. Ngaphezu kwalokho, umbhali ukhetha ukusebenzisa le FS ye / (impande), ungakhohlwa ukuqaphela ukuthi kunoma iyiphi enye isoftware ungakha ama-partitions ahlukene ku-LVM futhi uwafake kuzinkomba ezidingekayo.

Ngeke sigcine noma yiziphi izithombe zemishini ebonakalayo noma isizindalwazi kule FS.
Le FS izosetshenziswa kuphela ukudala izifinyezo zesistimu ngaphandle kokuyivala bese idlulisela lezi zifinyezo kudiski eyisipele usebenzisa ukuthumela/ukuthola.

Ukwengeza, umbhali ngokuvamile ukhetha ukugcina ubuncane besofthiwe ngqo ku-hardware futhi asebenzise yonke enye isofthiwe emishinini ebonakalayo esebenzisa izinto ezinjengokudlulisa ama-GPU kanye nezilawuli Zokusingatha I-PCI-USB ku-KVM nge-IOMMU.

Okuwukuphela kwezinto ezisele ku-hardware ukugcinwa kwedatha, ukwenziwa nge-virtualization kanye nokwenza ikhophi yasenqolobaneni.

Uma uthemba i-ZFS ngaphezulu, khona-ke, ngokuyisisekelo, ngohlelo olucacisiwe ziyashintshana.

Kodwa-ke, umbhali uziba ngamabomu i-mirroring/RAID eyakhelwe ngaphakathi kanye nezici zokuphindaphinda i-ZFS, BRTFS kanye ne-LVM.

Njengempikiswano eyengeziwe, i-BTRFS inamandla okuguqula okubhaliwe okungahleliwe kube okulandelanayo, okunomthelela omuhle kakhulu esivinini sokuvumelanisa izifinyezo/izipele ku-HDD.

Masiskene kabusha zonke izisetshenziswa:

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

Ake sibheke nxazonke:

#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

Isakhiwo sediski

I-NVMe SSD

Kodwa ngeke sizimake nganoma iyiphi indlela. Noma kunjalo, i-BIOS yethu ayiwaboni la madrayivu. Ngakho-ke, bazoya ngokuphelele ku-software ye-RAID. Ngeke size sidale izigaba lapho. Uma ufuna ukulandela "i-canon" noma "ikakhulukazi", dala ingxenye eyodwa enkulu, njenge-HDD.

I-HDD ye-SATA

Asikho isidingo sokusungula noma yini ekhethekile lapha. Sizodala isigaba esisodwa sayo yonke into. Sizokwakha ukwahlukanisa ngoba i-BIOS ibona lawa madiski futhi ingase izame nokuwaqalisa kuwo. Sizofaka ne-GRUB kulawa madiski kamuva ukuze uhlelo lukwazi ukwenza lokhu ngokuzumayo.

#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

Yilapho izinto ziba ezithakazelisayo kithi.

Okokuqala, amadrayivu ethu angu-2 TB ngosayizi. Lokhu kungaphakathi kwebanga elamukelekayo le-MBR, okuyilona esizolisebenzisa. Uma kunesidingo, ingashintshwa nge-GPT. Amadiski e-GPT anongqimba oluhambisanayo oluvumela amasistimu ahambisana ne-MBR ukuthi abone ama-partitions angu-4 okuqala uma atholakala phakathi kwama-terabytes angu-2 okuqala. Into esemqoka ukuthi ukuhlukaniswa kwe-boot kanye nokuhlukaniswa kwe-bios_grub kulawa madiski kufanele kube ekuqaleni. Lokhu kukuvumela nokuthi uqalise kumadrayivu e-GPT Legacy/BIOS.

Kodwa lokhu akulona icala lethu.

Lapha sizodala izigaba ezimbili. Eyokuqala izoba ngu-1 GB ngosayizi futhi isetshenziselwe i-RAID 1 /boot.

Eyesibili izosetshenziselwa i-RAID 6 futhi izothatha yonke indawo yamahhala esele ngaphandle kwendawo encane engabelwe ekugcineni kwedrayivu.

Ithini le ndawo engamakiwe?Ngokwemithombo ekunethiwekhi, ama-SATA SSD ethu anenqolobane ye-SLC enwebekayo esukela ngosayizi ukusuka ku-6 kuye ku-78 gigabytes. Sithola amagigabhayithi angu-6 β€œmahhala” ngenxa yomehluko phakathi β€œkwegigabhayithi” kanye β€œnamagibhibhayithi” eshidini ledatha ledrayivu. Amagigabhayithi angu-72 asele abelwe endaweni engasetshenzisiwe.

Lapha kufanele kuqashelwe ukuthi sinenqolobane ye-SLC, futhi isikhala sithathwe kumodi ye-4 bit MLC. Okusho ukuthi kithina ngokuphumelelayo kusho ukuthi kuwo wonke amagigabhayithi angu-4 esikhala samahhala sizothola kuphela i-gigabyte engu-1 yenqolobane ye-SLC.

Phindaphinda 72 gigabytes ngo 4 futhi uthole 288 gigabytes. Lesi isikhala samahhala esingeke sisiphawule ukuze sivumele amadrayivu ukuthi asebenzise ngokugcwele inqolobane ye-SLC.

Ngakho-ke, sizofinyelela ngempumelelo kufikela ku-312 gigabytes we-cache ye-SLC kusuka kungqikithi yamadrayivu ayisithupha. Kuwo wonke amadrayivu, angu-2 azosetshenziswa ku-RAID ukuze asetshenziswe kabusha.

Leli nani lenqolobane lizosivumela ukuthi empilweni yangempela kuqabukela sihlangabezane nesimo lapho ukubhala kungayi kunqolobane. Lokhu kunxephezela kahle kakhulu ukuhlehla okudabukisayo kwenkumbulo ye-QLC - isivinini sokubhala esiphansi kakhulu lapho idatha ibhalwa ngokudlula inqolobane. Uma imithwalo yakho ingahambisani nalokhu, ngakho-ke ngincoma ukuthi ucabange kanzima ngokuthi i-SSD yakho izohlala isikhathi esingakanani ngaphansi komthwalo onjalo, ucabangela i-TBW evela eshidini 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 ama-Arrays

Okokuqala, sidinga ukuqamba kabusha umshini. Lokhu kuyadingeka ngoba igama lomsingathi liyingxenye yegama lamalungu afanayo endaweni ethile ngaphakathi kwe-mdadm futhi lithinta okuthile ndawana thize. Yebo, ama-arrays angaqanjwa kabusha kamuva, kodwa lesi isinyathelo esingadingekile.

#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

Kungani-ucabanga-uhlanzekile...?Ukuze ugweme ukuqalisa ama-array. Kuwo womabili amazinga e-RAID 1 no-6 lokhu kuvumelekile. Yonke into ingasebenza ngaphandle kokuqaliswa uma kuwuhlelo olusha. Ngaphezu kwalokho, ukuqalisa uhlelo lwe-SSD ekudalweni kuwukumosha insiza ye-TBW. Sisebenzisa i-TRIM/DISCARD lapho kungenzeka khona ezinhlelweni ze-SSD ezihlanganisiwe ukuze β€œsiziqalise”.

Kumalungu afanayo e-SSD, i-RAID 1 DISCARD isekelwa ngaphandle kwebhokisi.

Kumalungu afanayo we-SSD RAID 6 DISCARD, kufanele uyinike amandla kumapharamitha wemojula ye-kernel.

Lokhu kufanele kwenziwe kuphela uma wonke ama-SSD asetshenziswa ezingeni 4/5/6 lamalungu afanayo kulolu hlelo anosekelo olusebenzayo lwedatha yokulahla_zeroes. Kwesinye isikhathi uhlangana namadrayivu angajwayelekile atshela i-kernel ukuthi lo msebenzi uyasekelwa, kodwa empeleni awukho, noma umsebenzi awusebenzi ngaso sonke isikhathi. Okwamanje, ukwesekwa kuyatholakala cishe yonke indawo, noma kunjalo, kukhona amadrayivu amadala kanye ne-firmware enamaphutha. Ngalesi sizathu, usekelo lwe-DISCARD lukhutshaziwe ngokuzenzakalela ku-RAID 6.

Qaphela, umyalo olandelayo uzocekela phansi yonke idatha kumadrayivu e-NVMe "ngokuqalisa" uhlu oluno-"zero".

#blkdiscard /dev/md0

Uma kukhona okungahambi kahle, zama ukucacisa isinyathelo.

#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

Kungani inkulu kangaka...?Ukwandisa usayizi we-chunk kunomthelela omuhle kusivinini sokufunda okungahleliwe kumabhulokhi afika kusayizi we-chunk ohlanganisiwe. Lokhu kwenzeka ngoba ukusebenza okukodwa kosayizi ofanelekile noma omncane kungaqedelwa ngokuphelele kudivayisi eyodwa. Ngakho-ke, i-IOPS evela kuwo wonke amadivayisi iyafingqwa. Ngokwezibalo, u-99% we-IO aweqi ku-512K.

I-RAID 6 IOPS ngokubhala ngakunye njalo ngaphansi noma okulingana ne-IOPS yedrayivu eyodwa. Lapho, njengokufundwa okungahleliwe, i-IOPS ingaba mkhulu ngokuphindwe kaningana kunaleyo yedrayivu eyodwa, futhi lapha usayizi webhulokhi ubaluleke kakhulu.
Umbhali akaliboni iphuzu ekuzameni ukuthuthukisa ipharamitha engalungile ku-RAID 6-by-design futhi esikhundleni salokho ulungiselela lokho i-RAID 6 enhle kukho.
Sizonxephezela ukubhalwa okungahleliwe okungahleliwe kwe-RAID 6 ngenqolobane ye-NVMe namaqhinga okunikeza.

Okwamanje asikaniki amandla okuthi DISCARD ku-RAID 6. Ngakho-ke ngeke β€œsiqalise” la malungu afanayo okwamanje. Sizokwenza lokhu kamuva, ngemva kokufaka i-OS.

I-HDD ye-SATA

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

I-LVM ku-NVMe RAID

Ngesivinini, sifuna ukubeka uhlelo lwefayela lempande ku-NVMe RAID 1 okuyi/dev/md0.
Kodwa-ke, sisazodinga lolu hlu olusheshayo kwezinye izidingo, njengokushintshanisa, imethadatha kanye ne-LVM-cache kanye ne-LVM-thin metadata, ngakho sizodala i-LVM VG kulolu hlu.

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

Ake sakhe ukwahlukanisa kwesistimu yefayela lempande.

#lvcreate -L 128G --name root root

Masidale ukwahlukanisa ukuze kushintshwe ngokuya ngosayizi we-RAM.

#lvcreate -L 32G --name swap root

Ukufakwa kwe-OS

Sekukonke, sinakho konke okudingekayo ukufaka uhlelo.

Yethula iwizadi yokufaka isistimu kusuka endaweni ye-Ubuntu Live. Ukufakwa okuvamile. Kuphela esigabeni sokukhetha amadiski azofakwa, udinga ukucacisa okulandelayo:

  • /dev/md1, - mount point/boot, FS - BTRFS
  • / dev / impande / impande (aka / dev / mapper / impande-impande), - mount point / (impande), FS - BTRFS
  • / dev/root/swap (aka / dev/mapper/root-swap), - sebenzisa njenge-swap partition
  • Faka i-bootloader ku/dev/sda

Uma ukhetha i-BTRFS njengohlelo lwefayela eliyimpande, isifaki sizodala ngokuzenzakalelayo amavolumu amabili e-BTRFS aqanjwe ngokuthi "@" for / (root), kanye "@home" for /home.

Asiqale ukufaka...

Ukufakwa kuzophela ngebhokisi lengxoxo le-modal elibonisa iphutha ekufakeni i-bootloader. Ngeshwa, ngeke ukwazi ukuphuma kule ngxoxo usebenzisa izindlela ezijwayelekile futhi uqhubeke nokufaka. Siphuma ohlelweni bese singena futhi, sigcina sikwi-Ubuntu Live desktop ehlanzekile. Vula itheminali, futhi futhi:

#sudo bash

Dala indawo ye-chroot ukuze uqhubeke nokufaka:

#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

Ake silungiselele inethiwekhi negama lomethuleli ku-chroot:

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

Masingene endaweni ye-chroot:

#chroot /mnt/chroot

Okokuqala, sizoletha amaphakheji:

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

Ake sihlole futhi silungise wonke amaphakheji afakwe ngokugwegwile ngenxa yokufakwa kwesistimu okungaphelele:

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

Uma okuthile kungasebenzi, ungase udinge ukuhlela /etc/apt/sources.list kuqala

Masilungise amapharamitha emojula ye-RAID 6 ukuze sikwazi i-TRIM/DISCARD:

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

Ake silungise uhlu lwethu kancane:

#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

Bekuyini..?Senze isethi yemithetho ye-udev ezokwenza lokhu okulandelayo:

  • Setha usayizi wenqolobane ye-block ye-RAID 2020 ukuthi yanele ngo-6. Inani elizenzakalelayo, kubonakala sengathi alishintshile kusukela ekudalweni kwe-Linux, futhi belinganele isikhathi eside.
  • Gcina ubuncane be-IO ngesikhathi sokuhlola/ukuvumelanisa. Lokhu okokuvikela amalungu akho afanayo ukuthi angabambeki esimeni sokuvumelanisa kwaphakade ngaphansi komthwalo.
  • Khawulela umkhawulo we-IO ngesikhathi sokuhlola/ukuvumelanisa kwamalungu afanayo. Lokhu kuyadingeka ukuze ukuvumelanisa/ukuhlola ama-SSD RAID kungathosi amadrayivu akho abe crisp. Lokhu kuyiqiniso ikakhulukazi ku-NVMe. (Uyakhumbula nge-radiator? Bengingadlali.)
  • Vimbela amadiski ekumiseni ukujikeleza kwe-spindle (HDD) nge-APM futhi usethe isikhathi sokulala sezilawuli zediski sibe amahora angu-7. Ungakwazi ukukhubaza ngokuphelele i-APM uma amadrayivu akho engakwenza (-B 255). Ngevelu ezenzakalelayo, amadrayivu azoma ngemva kwemizuzwana emihlanu. Khona-ke i-OS ifuna ukusetha kabusha i-cache yediski, amadiski azophinde aphenduke, futhi yonke into izoqala kabusha. Amadiski anenani eliphakeme elilinganiselwe lokuzungezisa i-spindle. Umjikelezo olula onjalo ozenzakalelayo ungabulala kalula amadiski akho eminyakeni embalwa. Akuwona wonke ama-disk ahlushwa yilokhu, kodwa eyethu "i-laptop", enezilungiselelo ezifanele ezizenzakalelayo, okwenza i-RAID ibukeke njenge-mini-MAID.
  • Faka ukufunda kusengaphambili kumadiski (ajikelezayo) i-megabyte engu-1 - amabhlogo amabili alandelanayo/i-chunk RAID 6
  • Khubaza ukufunda kusengaphambili kumalungu afanayo ngokwawo.

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

Kungani kunjalo..?Sizosesha i-/boot partition nge-UUID. Ukuqamba amagama afanayo kungashintsha ngokomqondo.

Sizocinga izigaba ezisele ngamagama e-LVM ku-/dev/mapper/vg-lv notation, ngoba bahlonza ama-partitions ngendlela ehlukile.

Asisebenzisi i-UUID ye-LVM ngoba I-UUID yamavolumu e-LVM nezifinyezo zawo zingafana.Mount /dev/mapper/root-root.. kabili?Yebo. Impela. Isici se-BTRFS. Lolu hlelo lwefayela lungafakwa izikhathi ezimbalwa ngama-subvols ahlukene.

Ngenxa yalesi sici esifanayo, ngincoma ukuthi ungalokothi udale izifinyezo ze-LVM zamavolumu e-BTRFS asebenzayo. Ungathola isimanga lapho uqala kabusha.

Ake sikhiqize kabusha i-mdadm config:

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

Masilungise izilungiselelo ze-LVM:

#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

Bekuyini..?Sinike amandla ukunwetshwa okuzenzakalelayo kwamachibi amancane e-LVM lapho sifinyelela ku-90% wendawo ehlalwayo ngo-5% wevolumu.

Senyuse inani eliphezulu lamabhulokhi enqolobane yenqolobane ye-LVM.

Sivimbele i-LVM ekusesheni imiqulu ye-LVM (PV) ku:

  • amadivayisi aqukethe inqolobane ye-LVM (cdata)
  • amadivayisi afakwe kunqolobane kusetshenziswa inqolobane ye-LVM, edlula inqolobane ( _inkosi). Kulokhu, idivayisi efakwe kunqolobane ngokwayo isazoskenwa kunqolobane (nje ).
  • amadivayisi aqukethe imethadatha yenqolobane ye-LVM (cmeta)
  • wonke amadivayisi ku-VG anezithombe zamagama. Lapha sizoba nezithombe zediski zemishini ebonakalayo, futhi asifuni ukuthi i-LVM kumsingathi ivule amavolumu e-OS yesivakashi.
  • wonke amadivayisi ku-VG anekhophi yasenqolobaneni yegama. Lapha sizoba namakhophi ayisipele ezithombe zomshini obonakalayo.
  • wonke amadivayisi amagama azo agcina ngokuthi β€œgpv” (ivolumu yesivakashi)

Sinike amandla usekelo lwe-DISCARD lapho sikhulula isikhala ku-LVM VG. Qaphela. Lokhu kuzokwenza ukususa ama-LV ku-SSD kudle isikhathi. Lokhu kusebenza ikakhulukazi ku-SSD RAID 6. Kodwa-ke, ngokusho kohlelo, sizosebenzisa ukunikezwa okuncane, ngakho-ke lokhu ngeke kusivimbele nhlobo.

Masibuyekeze isithombe se-initramfs:

#update-initramfs -u -k all

Faka futhi ulungiselele i-grub:

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

Yimaphi ama-disc okufanele uwakhethe?Bonke abangama-sd*. Isistimu kufanele ikwazi ukuqalisa kunoma iyiphi idrayivu ye-SATA esebenzayo noma i-SSD.

Kungani bengeze os-prober..?Ukuze uthole ukuzimela ngokweqile nezandla ezidlalayo.

Ayisebenzi kahle uma enye yama-RAID isesimweni esonakele. Izama ukucinga i-OS kuma-partitions asetshenziswa emishinini ebonakalayo esebenza kule hardware.

Uma uyidinga, ungayishiya, kodwa khumbula konke okungenhla. Ngincoma ukuthi ufune izindlela zokupheka zokususa izandla ezigangile ku-inthanethi.

Ngalokhu sesiqede ukufakwa kokuqala. Isikhathi sokuqalisa kabusha ku-OS esanda kufakwa. Ungakhohlwa ukukhipha i-Live CD/USB ebhuthayo.

#exit
#reboot

Khetha noma yimaphi ama-SATA SSD njengedivayisi yokuqalisa.

I-LVM ku-SATA SSD

Kuleli qophelo, sesivele singene ku-OS entsha, salungisa inethiwekhi, i-apt, savula i-emulator yokugcina, futhi sethula:

#sudo bash

Asiqhubeke.

"Qalisa" uhlu olusuka ku-SATA SSD:

#blkdiscard /dev/md2

Uma kungasebenzi, zama:

#blkdiscard --step 65536 /dev/md2
Dala i-LVM VG ku-SATA SSD:

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

Kungani enye i-VG..?Eqinisweni, sesivele sine-VG ebizwa ngokuthi impande. Kungani ungangezi yonke into ku-VG eyodwa?

Uma kunama-PV amaningana ku-VG, ukuze i-VG isebenze ngendlela efanele, wonke ama-PV kufanele abe khona (ku-inthanethi). Okuhlukile yi-LVM RAID, esingayisebenzisi ngamabomu.

Sifuna ngempela ukuthi uma kukhona ukwehluleka (funda ukulahleka kwedatha) kunoma iyiphi yamalungu afanayo e-RAID 6, isistimu yokusebenza izoqala ngokujwayelekile futhi isinike ithuba lokuxazulula inkinga.

Ukwenza lokhu, ezingeni lokuqala lokukhipha sizohlukanisa uhlobo ngalunye "lwemidiya" engokomzimba lube yi-VG ehlukile.

Ngokwesayensi, amalungu afanayo e-RAID ahlukile β€œazizizinda ezithembekile” ezihlukile. Akufanele udale iphuzu elingeziwe elivamile lokuhluleka kubo ngokulicindezela ku-VG eyodwa.

Ukuba khona kwe-LVM ezingeni elithi "hardware" kuzosivumela ukuthi sisike ngokungafanele izingcezu ze-RAID ehlukene ngokuyihlanganisa ngezindlela ezahlukene. Ngokwesibonelo - run ngasikhathi sinye bcache + LVM izacile, i-bcache + BTRFS, inqolobane ye-LVM + i-LVM izacile, ukumiswa kwe-ZFS okuyinkimbinkimbi enenqolobane, nanoma iyiphi enye ingxube yesihogo ukuze uzame ukuyiqhathanisa yonke.

Ezingeni elithi "hardware", ngeke sisebenzise enye into ngaphandle kwamavolumu amadala "aminyene" e-LVM. Okuhlukile kulo mthetho kungase kube ukwahlukanisa okuyisipele.

Ngicabanga ukuthi ngalesi sikhathi, abafundi abaningi base bevele sebeqalile ukusola okuthile ngonodoli wokuzalela.

I-LVM ku-SATA HDD

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

I-VG entsha futhi..?Sifuna ngempela ukuthi uma iqoqo lediski esizolisebenzisela ukulondoloza idatha lehluleka, isistimu yethu yokusebenza izoqhubeka nokusebenza ngokujwayelekile, kuyilapho igcina ukufinyelela kudatha engagcini ngokulondoloza njengokujwayelekile. Ngakho-ke, ukugwema izinkinga zokuvula i-VG, sakha i-VG ehlukile.

Isetha inqolobane ye-LVM

Masidale i-LV ku-NVMe RAID 1 ukuze siyisebenzise njengedivayisi yokugcina isikhashana.

#lvcreate -L 70871154688B --name cache root

Kungani kuncane kangaka...?Iqiniso liwukuthi ama-NVMe SSD ethu nawo anenqolobane ye-SLC. Amagigabhayithi angu-4 β€œamahhala” kanye namagigabhayithi angu-18 okuguquguqukayo ngenxa yesikhala esikhululekile esiku-3-bit MLC. Uma le cache isiphelile, ama-NVMe SSD ngeke asheshe kakhulu kune-SATA SSD yethu enenqolobane. Empeleni, ngenxa yalesi sizathu, akunangqondo ngathi ukwenza ukwahlukanisa kwenqolobane ye-LVM kube kukhulu kunobukhulu obuphindwe kabili benqolobane ye-SLC yedrayivu ye-NVMe. Kumadrayivu e-NVMe asetshenzisiwe, umbhali ubona kunengqondo ukwenza amagigabhayithi angama-32-64 wenqolobane.

Usayizi wokuhlukanisa onikeziwe uyadingeka ukuze uhlele amagigabhayithi angu-64 enqolobane, imethadatha yenqolobane, nesipele semethadatha.

Ukwengeza, ngiyaqaphela ukuthi ngemuva kokuvalwa kwesistimu engcolile, i-LVM izomaka yonke inqolobane njengengcolile futhi izovumelanisa futhi. Ngaphezu kwalokho, lokhu kuzophindwa njalo uma i-lvchange isetshenziswa kule divayisi kuze kube yilapho isistimu iqalwa kabusha futhi. Ngakho-ke, ngincoma ukuthi udale kabusha inqolobane ngokushesha usebenzisa iskripthi esifanele.

Masidale i-LV ku-SATA RAID 6 ukuze siyisebenzise njengedivayisi egcinwe kunqolobane.

#lvcreate -L 3298543271936B --name cache data

Kungani amaterabhayithi amathathu kuphela..?Ukuze, uma kunesidingo, ukwazi ukusebenzisa i-SATA SSD RAID 6 kwezinye izidingo. Ubukhulu besikhala esifakwe kunqolobane bunganyuswa ngokushintshashintshayo, ngokundiza, ngaphandle kokumisa uhlelo. Ukuze wenze lokhu, udinga ukumisa okwesikhashana futhi uvule kabusha inqolobane, kodwa inzuzo ehlukile ye-LVM-cache ngaphezulu, isibonelo, i-bcache ukuthi lokhu kungenziwa ngokundiza.

Masidale i-VG entsha yokugcinwa kwesikhashana.

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

Masidale i-LV kudivayisi efakwe kunqolobane.

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

Lapha sithathe ngokushesha sonke isikhala samahhala ku-/dev/data/cache ukuze zonke ezinye izingxenye ezidingekayo zidalwe ngokushesha ku-/dev/root/cache. Uma udale okuthile endaweni engafanele, ungayihambisa usebenzisa i-pvmove.

Masidale futhi sivumele inqolobane:

#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

Kungani kukhulu kangaka..?Ngokuhlola okungokoqobo, umbhali ukwazile ukuthola ukuthi umphumela ongcono kakhulu ufinyelelwa uma usayizi we-cache block ye-LVM uhambisana nosayizi webhulokhi elincanyana le-LVM. Ngaphezu kwalokho, usayizi omncane, ukucushwa kusebenza kangcono ekurekhodweni okungahleliwe.

I-64k ingusayizi omncane webhulokhi ovunyelwe ku-LVM mncane.

Qaphela ukubhala emuva..!Yebo. Lolu hlobo lwenqolobane luhlehlisa ukubhala ukuvumelanisa kudivayisi egcinwe kunqolobane. Lokhu kusho ukuthi uma inqolobane ilahleka, ungase ulahlekelwe idatha kudivayisi egcinwe kunqolobane. Kamuva, umbhali uzokutshela ukuthi yiziphi izinyathelo, ngaphezu kwe-NVMe RAID 1, ezingathathwa ukuze kunxeshezelwe le ngozi.

Lolu hlobo lwenqolobane lukhethwe ngenhloso ukuze kunxeshezelwe ukusebenza kabi kokubhala okungahleliwe kwe-RAID 6.

Ake sihlole esinakho:

#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] okufanele ibekwe ku/dev/data/cache. Uma kukhona okungalungile, sebenzisa i-pvmove.

Ungakhubaza inqolobane uma kunesidingo ngomyalo owodwa:

#lvconvert -y --uncache cache/cachedata

Lokhu kwenziwa ku-inthanethi. I-LVM izovele ivumelanise inqolobane kudiski, iyisuse, futhi iqambe kabusha i-cachedata_corig ibuyele ku-cachedata.

Ukusetha i-LVM encane

Ake silinganisele ukuthi singakanani isikhala esisidingayo kumethadatha emincane ye-LVM:

#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"

Zungezisa kufikela ku-4 gigabytes: 4294967296B

Phindaphinda kabili bese wengeza u-4194304B kumethadatha ye-LVM PV: 8594128896B
Ake sakhe ukwahlukanisa okuhlukile ku-NVMe RAID 1 ukuze sibeke imethadatha encane ye-LVM kanye nekhophi yayo eyisipele kuyo:

#lvcreate -L 8594128896B --name images root

Kwani..?Lapha umbuzo ungase uphakame: kungani ubeke imethadatha encane ye-LVM ngokuhlukana uma isazogcinwa kunqolobane ku-NVMe futhi izosebenza ngokushesha.

Nakuba ijubane libalulekile lapha, likude nesizathu esiyinhloko. Into ewukuthi i-cache iyindawo yokwehluleka. Kungenzeka okuthile kuyo, futhi uma imethadatha encane ye-LVM igcinwe kunqolobane, izobangela ukuthi yonke into ilahleke ngokuphelele. Ngaphandle kwemethadatha ephelele, cishe cishe akunakwenzeka ukuhlanganisa amavolumu amancane.

Ngokuhambisa imethadatha kuvolumu ehlukile engagciniwe, kodwa esheshayo, siqinisekisa ukuphepha kwemethadatha uma kwenzeka ukulahleka kwenqolobane noma ukonakala. Kulokhu, wonke umonakalo odalwe ukulahleka kwenqolobane uzokwenziwa endaweni ngaphakathi kwevolumu emincane, okuzokwenza kube lula inqubo yokutakula ngama-oda wobukhulu. Ngokunokwenzeka okukhulu, lo monakalo uzobuyiselwa kusetshenziswa amalogi e-FS.

Ngaphezu kwalokho, uma isifinyezo sevolumu encane sithathwe ngaphambili, futhi ngemva kwalokho i-cache yavumelaniswa ngokugcwele okungenani kanye, ngakho-ke, ngenxa yomklamo wangaphakathi we-LVM encane, ubuqotho besithombe esifinyelelwe buzoqinisekiswa uma kwenzeka ukulahleka kwenqolobane. .

Masidale i-VG entsha ezobhekana nokuhlinzekwa okuncane:

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

Masidale ichibi:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
Kungani -Z yNgaphezu kwalokho le modi ehloselwe yona ngempela - ukuvimbela idatha esuka emshinini owodwa ukuthi ingangeni komunye umshini we-virtual lapho usakaza kabusha isikhala - i-zeroing isetshenziselwa ukwandisa isivinini sokubhala okungahleliwe kumabhulokhi amancane kuno-64k. Noma yikuphi ukubhala okungaphansi kuka-64k endaweni eyayingabelwe ngaphambili yevolumu encane kuzoba ngu-64K oqondaniswe emaphethelweni kunqolobane. Lokhu kuzovumela ukuthi ukusebenza kwenziwe ngokuphelele ngenqolobane, kudlule idivayisi egcinwe kunqolobane.

Ake sisuse ama-LV siye kuma-PV ahambisanayo:

#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

Ake sihlole:

#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)

Masidale ivolumu encane yokuhlolwa:

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

Sizofaka amaphakheji okuhlola nokuqapha:

#apt-get install sysstat fio

Nansi indlela ongabona ngayo ukuziphatha kokucushwa kwesitoreji sethu ngesikhathi sangempela:

#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)'

Nansi indlela esingahlola ngayo ukucushwa kwethu:

#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

Ngokucophelela! Insiza!Le khodi izosebenzisa izivivinyo ezihlukene ezingu-36, ngalunye lusebenza imizuzwana emi-4. Uhhafu wezivivinyo ezokurekhoda. Ungarekhoda okuningi ku-NVMe ngemizuzwana emi-4. Kufika ku-3 gigabytes ngomzuzwana. Ngakho-ke, ukuhlolwa ngakunye kokubhala kungadla kufikela ku-216 gigabytes wensiza ye-SSD evela kuwe.

Ukufunda nokubhala kuxubile?Yebo. Kunengqondo ukuqhuba ukuhlolwa kokufunda nokubhala ngokwehlukana. Ngaphezu kwalokho, kunengqondo ukuqinisekisa ukuthi zonke izinqolobane ziyavunyelaniswa ukuze ukubhala okwenziwe ngaphambilini kungathinti ukufundwa.

Imiphumela izohluka kakhulu ngesikhathi sokwethulwa kokuqala kanye neminye elandelayo njengoba inqolobane nevolumu encane igcwala, futhi kuye ngokuthi uhlelo lukwazile yini ukuvumelanisa ama-cache agcwaliswe ngesikhathi sokwethulwa kokugcina.

Phakathi kwezinye izinto, ngincoma ukulinganisa isivinini kuvolumu encane egcwele kakade lapho kusanda kuthathwa khona isifinyezo. Umbhali ube nethuba lokubona ukuthi ukubhala okungahleliwe kushesha kanjani ngokushesha ngemuva kokudala isifinyezo sokuqala, ikakhulukazi lapho inqolobane ingakagcwali ngokuphelele. Lokhu kwenzeka ngenxa ye-semantics yokukopisha-phezu kokubhala, ukuqondaniswa kwenqolobane namabhulokhi evolumu emincane, kanye neqiniso lokuthi ukubhala okungahleliwe ku-RAID 6 kuphenduka ukufunda okungahleliwe kusuka ku-RAID 6 kulandelwa ukubhala kunqolobane. Ekucushweni kwethu, ukufunda okungahleliwe kusuka ku-RAID 6 kufika izikhathi ezingu-6 (inani lama-SATA SSD ohlwini) ngokushesha kunokubhala. Ngoba amabhulokhi e-CoW anikezwa ngokulandelana ukusuka echibini elincane, khona-ke ukurekhoda, ingxenye enkulu, nakho kuphenduka ukulandelana.

Zombili lezi zici zingasetshenziswa ukuze kuzuze wena.

Izifinyezo zenqolobane "ezihlangene".

Ukuze kuncishiswe ubungozi bokulahleka kwedatha uma kwenzeka umonakalo/ukulahleka kwenqolobane, umbhali uhlongoza ukwethula umkhuba wokuzungezisa izifinyezo ukuze kuqinisekiswe ubuqotho bazo kulesi simo.

Okokuqala, ngenxa yokuthi imethadatha yevolumu encane ihlala kudivayisi engagciniwe, imethadatha izofana futhi ukulahlekelwa okungaba khona kuzohlukaniswa phakathi kwamabhulokhi edatha.

Umjikelezo olandelayo wokuzungezisa isifinyezo uqinisekisa ubuqotho bedatha ngaphakathi kwezifinyezo uma kwenzeka ukulahleka kwenqolobane:

  1. Kuvolumu ngayinye encane enegama elithi <name>, dala isifinyezo ngegama elithi <name>.cached
  2. Masimise umkhawulo wokufuduka ube inani eliphezulu elinengqondo: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. Kuluphu sibheka inani lamabhulokhi angcolile kunqolobane: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' size sithole uziro. Uma uziro engekho isikhathi eside kakhulu, ingadalwa ngokushintsha okwesikhashana inqolobane ibe yimodi yokubhala. Kodwa-ke, uma ucabangela izici zesivinini ze-SATA yethu ne-NVMe SSD, kanye nensiza yabo ye-TBW, uzokwazi ukubamba ngokushesha isikhathi ngaphandle kokushintsha imodi ye-cache, noma i-hardware yakho izodla yonke insiza yayo. izinsuku ezimbalwa. Ngenxa yemikhawulo yezinsiza, isistimu, empeleni, ayikwazi ukuba ngaphansi kwe-100% yokulayisha umthwalo ngaso sonke isikhathi. Ama-NVMe SSD ethu ngaphansi komthwalo wokubhala we-100% azoqeda insiza ngokuphelele Izinsuku ezingama-3-4. Ama-SATA SSD azohlala kabili kuphela isikhathi eside. Ngakho-ke, sizocabanga ukuthi umthwalo omningi uya ekufundeni, futhi sinokuqhuma kwesikhathi esifushane somsebenzi ophakeme kakhulu kuhlanganiswe nomthwalo ophansi ngokwesilinganiso wokubhala.
  4. Ngokushesha lapho sibamba (noma senza) uziro, siqamba kabusha <name>.cached ku-<name>.committed. I-<name>.committed endala iyasuswa.
  5. Ngokuzithandela, uma i-cache igcwele ngo-100%, ingaphinda yenziwe ngeskripthi, ngaleyo ndlela isisule. Ngenqolobane engenalutho, isistimu isebenza ngokushesha kakhulu lapho ibhala.
  6. Setha umkhawulo wokufuduka ube uziro: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata Lokhu kuzovimbela okwesikhashana inqolobane ukuthi ingavumelanisi nemidiya enkulu.
  7. Silinda kuze kube yilapho izinguquko eziningi zinqwabelana kunqolobane #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' noma isibali sikhathi sizocisha.
  8. Siyaphinda futhi.

Kungani kunezinkinga ngomkhawulo wokufuduka...?Into ewukuthi ekusebenzeni kwangempela, ukuqoshwa "okungahleliwe" empeleni akuhleliwe ngokuphelele. Uma sibhale okuthile engxenyeni yamakhilobhayithi angu-4 ngosayizi, kunethuba elikhulu lokuthi emaminithini ambalwa alandelayo irekhodi lizokwenziwa kumkhakha ofanayo noma owodwa wemikhakha engumakhelwane (+- 32K).

Ngokusetha umkhawulo wokufuduka ube uziro, sihlehlisa ukubhala ukuvumelanisa ku-SATA SSD futhi sihlanganise izinguquko ezimbalwa kubhulokhi eyodwa engu-64K kunqolobane. Lokhu kusindisa kakhulu insiza ye-SATA SSD.

Iphi ikhodi..?Ngeshwa, umbhali uzibona engafaneleki ngokwanele ekuthuthukiseni imibhalo ye-bash ngoba u-100% uyazifundisa futhi wenza ukuthuthukiswa okuqhutshwa yi-"google", ngakho-ke ukholelwa ukuthi ikhodi embi ephuma ezandleni zakhe akufanele isetshenziswe yinoma ubani. okunye.

Ngicabanga ukuthi ochwepheshe kulo mkhakha bazokwazi ukuveza ngokuzimela yonke i-logic echazwe ngenhla, uma kunesidingo, futhi, mhlawumbe, ngisho nokuyiklama kahle njengesevisi yesistimu, njengoba umbhali ezame ukwenza.

Uhlelo olunjalo lokuzungezisa isifinyezo luzosivumela ukuthi singagcini nje ngokuba nesifinyezo esisodwa esivumelaniswe ngokugcwele ku-SATA SSD, kodwa futhi sizosivumela, sisebenzisa i-thin_delta utility, ukuthola ukuthi yimaphi amabhlogo ashintshiwe ngemva kokudalwa kwawo, futhi ngaleyo ndlela senze umonakalo endaweni. imiqulu eyinhloko, okwenza kube lula kakhulu ukululama .

I-TRIM/DISCARD ku-libvirt/KVM

Ngoba ukugcinwa kwedatha kuzosetshenziselwa i-KVM esebenzisa i-libvirt, khona-ke kungaba umqondo omuhle ukufundisa ama-VM ethu ukuthi angagcini nje ngokuthatha indawo yamahhala, kodwa futhi akhulule lokho okungasadingeki.

Lokhu kwenziwa ngokulingisa usekelo lwe-TRIM/DISCARD kumadiski abonakalayo. Ukuze wenze lokhu, udinga ukushintsha uhlobo lwesilawuli lube yi-virtio-scsi bese uhlela 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>

Okulahlwayo okunjalo kuma-OS esivakashi kucutshungulwa kahle yi-LVM, futhi amabhulokhi akhululwa ngendlela efanele kokubili kunqolobane kanye nasechibini elincane. Esimweni sethu, lokhu kwenzeka ikakhulukazi ngendlela yokubambezeleka, lapho kususwa isifinyezo esilandelayo.

I-BTRFS Backup

Sebenzisa izikripthi esezivele zenziwe nge ngokwedlulele ukuqapha futhi ngokuzifaka engozini. Umbhali uzibhalele yena le khodi futhi ezibhalela yena yedwa. Ngiyaqiniseka ukuthi abasebenzisi abaningi be-Linux abanolwazi banamathuluzi afanayo, futhi asikho isidingo sokukopisha owomunye umuntu.

Masidale ivolumu kudivayisi eyisipele:

#lvcreate -L 256G --name backup backup

Masiyifomethe nge-BTRFS:

#mkfs.btrfs /dev/backup/backup

Masidale izindawo zokukhweza futhi sikhweze izigatshana zempande zesistimu yefayela:

#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

Masidale izinkomba zezipele:

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

Masidale uhla lwemibhalo lwemibhalo eyisipele:

#mkdir /root/btrfs-backup

Masikopishe umbhalo:

Ikhodi ye-bash eminingi ethusayo. Sebenzisa ngokuzifaka wena engozini. Ungabhali izincwadi ezicasukile uzibhalele umbhali...#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

Kwenzenjani futhi..?Iqukethe isethi yemiyalo elula yokudala izifinyezo ze-BTRFS futhi uzikopishele kwenye i-FS usebenzisa i-BTRFS send/recieve.

Ukwethulwa kokuqala kungaba yinde, ngoba... Ekuqaleni, yonke idatha izokopishwa. Ukwethulwa okwengeziwe kuzoshesha kakhulu, ngoba... Izinguquko kuphela ezizokopishwa.

Esinye iskripthi esizosifaka ku-cron:

Enye ikhodi ye-bash eyengeziwe#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

Yenzani..?Idala futhi ivumelanise izifinyezo ezikhulayo zamavolumu asohlwini lwe-BTRFS ku-FS eyisipele. Ngemuva kwalokhu, isusa zonke izithombe ezidalwe ezinsukwini ezingama-60 ezedlule. Ngemva kokwethulwa, izifinyezo zedethi zamavolumu asohlwini zizovela kokuthi/backup/btrfs/back/remote/ subdirectories.

Ake sinikeze amalungelo okusebenzisa ikhodi:

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

Masiyihlole futhi siyifake ku-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

Isipele esincane se-LVM

Masidale ichibi elincanyana kudivayisi eyisipele:

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

Masifake i-ddrescue, ngoba... imibhalo izosebenzisa leli thuluzi:

#apt-get install gddrescue

Masidale uhla lwemibhalo lwemibhalo:

#mkdir /root/lvm-thin-backup

Masikopishe imibhalo:

I-bash eningi 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

Kwenzani...?Iqukethe isethi yemiyalo yokuguqula izifinyezo ezincane nokuvumelanisa umehluko phakathi kwezifinyezo ezimbili ezizacile ezitholwe nge-thin_delta kwenye idivayisi yebhulokhi kusetshenziswa i-ddrescue ne-blkdiscard.

Esinye iskripthi esizosifaka ku-cron:

I-bash encane#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

Kwenzani...?Isebenzisa umbhalo wangaphambilini ukuze idale futhi ivumelanise izipele zamavolumu azacile esohlwini. Umbhalo uzoshiya izifinyezo ezingasebenzi zamavolumu asohlwini, ezidingekayo ukuze kulandelelwe izinguquko kusukela ekuvunyelanisweni kokugcina.

Lesi script kufanele sihlelwe, sicacise uhlu lwevolumu emincane okufanele yenziwe amakhophi ayisipele. Amagama anikeziwe ngawezinjongo zemifanekiso kuphela. Uma uthanda, ungabhala umbhalo ozovumelanisa wonke amavolumu.

Masinikeze amalungelo:

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

Masiyihlole futhi siyifake ku-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

Ukwethulwa kokuqala kuzoba yinde, ngoba... amavolumu amancane azovunyelaniswa ngokugcwele ngokukopisha yonke indawo esetshenzisiwe. Ngenxa yemethadatha emincane ye-LVM, siyazi ukuthi yimaphi amabhlogo asetshenziswayo, ngakho-ke kuzokopishwa kuphela amabhulokhi evolumu emincane asetshenzisiwe.

Ukugijima okulandelayo kuzokopisha idatha ngokuqhubekayo ngenxa yokushintsha ukulandela ngomkhondo nge-LVM metadata encane.

Ake sibone ukuthi kwenzekeni:

#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

Lokhu kuhlangene ngani nonodoli abazalelayo?

Kungenzeka kakhulu, uma kubhekwa ukuthi amavolumu anengqondo e-LVM LV angaba amavolumu abonakalayo e-LVM PV kwamanye ama-VG. I-LVM ingaphindeka, njengonodoli abazalelayo. Lokhu kunikeza i-LVM ukuguquguquka okwedlulele.

PS

Esihlokweni esilandelayo, sizozama ukusebenzisa izinhlelo eziningana ezifanayo zesitoreji seselula/i-KVM njengesisekelo sokudala iqoqo le-geo-distributed storage/vm eline-redundancy emazwenikazi amaningana sisebenzisa amadeskithophu asekhaya, i-inthanethi yasekhaya kanye namanethiwekhi e-P2P.

Source: www.habr.com

Engeza amazwana