Ka manawa maikaʻi o ka lā.
Makemake au e kaʻana like me ke kaiāulu i koʻu ʻike kūpono no ke kūkulu ʻana i kahi ʻōnaehana mālama ʻikepili no KVM me ka hoʻohana ʻana i ka md RAID + LVM.
E komo ka papahana:
- Ke kūkulu nei i ka md RAID 1 mai NVMe SSD.
- ʻO ka hōʻuluʻulu ʻana i ka md RAID 6 mai SATA SSD a me nā kaʻa maʻamau.
- Nā hiʻohiʻona o ka hana TRIM/DISCARD ma SSD RAID 1/6.
- Ke hoʻokumu nei i kahi pūʻulu md RAID 1/6 ma kahi hoʻonohonoho maʻamau o nā disks.
- Ke kau nei i ka ʻōnaehana ma NVMe RAID 1 inā ʻaʻohe kākoʻo NVMe i ka BIOS.
- Ke hoʻohana nei i ka LVM cache a me ka LVM lahilahi.
- Ke hoʻohana nei i nā paʻi kiʻi BTRFS a hoʻouna / loaʻa no ke kākoʻo.
- Ke hoʻohana nei i nā paʻi kiʻi lahilahi LVM a me thin_delta no nā kākoʻo kāhua BTRFS.
Inā hoihoi ʻoe, e ʻoluʻolu e ʻike i ka pōpoki.
Kālā
ʻAʻohe kuleana o ka mea kākau no ka hopena o ka hoʻohana ʻana a i ʻole ka hoʻohana ʻana i nā mea / laʻana / code / ʻōlelo aʻoaʻo / ʻikepili mai kēia ʻatikala. Ma ka heluhelu ʻana a i ʻole ka hoʻohana ʻana i kēia mea ma kekahi ʻano, ke kuleana ʻoe no nā hopena āpau o kēia mau hana. ʻO nā hopena hiki ke loaʻa:
- Nā NVMe SSD i paʻi ʻia.
- Hoʻohana piha i ka hoʻopaʻa ʻana i nā kumuwaiwai a me ka hemahema o nā drive SSD.
- Pau ka nalowale o nā ʻikepili a pau ma nā kaʻa a pau, me nā kope kope.
- Lako lolouila hewa.
- Ua pau ka manawa, nā aʻalolo a me ke kālā.
- ʻO nā hopena ʻē aʻe i helu ʻole ʻia ma luna.
ʻO ka hao
Loaʻa nā:
Motherboard mai a puni 2013 me Z87 chipset, piha me Intel Core i7 / Haswell.
- Kaʻina hana 4 cores, 8 kaula
- 32 GB DDR3 RAM
- 1 x 16 a i ʻole 2 x 8 PCIe 3.0
- 1 x 4 + 1 x 1 PCIe 2.0
- 6 x 6 GBps SATA 3 mea hoʻohui
Hoʻopili ʻo SAS adapter LSI SAS9211-8I i ke ʻano IT / HBA. Ua hoʻololi ʻia ka firmware i hiki iā RAID me HBA firmware i:
- Hiki iā ʻoe ke hoʻolei i kēia adapter i kēlā me kēia manawa a hoʻololi iā ia me nā mea ʻē aʻe āu i ʻike ai.
- Hoʻohana maʻamau ka TRIM/Discard ma nā disks, no ka mea... ma RAID firmware ʻaʻole i kākoʻo ʻia kēia mau kauoha, a ʻo ka HBA, ma ka laulā, ʻaʻole mālama i nā kauoha i hoʻouna ʻia ma luna o ke kaʻa.
Paʻa paʻa - 8 mau ʻāpana o HGST Travelstar 7K1000 me ka mana o 1 TB ma kahi ʻano kumu 2.5, e like me ka laptops. Aia ma mua kēia mau drive i kahi array RAID 6. E hoʻohana pū lākou i ka ʻōnaehana hou. No ka mālama ʻana i nā waihona kūloko.
Hoʻohui hou ʻia:
6 ʻāpana SATA SSD model Samsung 860 QVO 2TB. Pono kēia mau SSD i kahi leo nui, ke kū ʻana o kahi cache SLC, hilinaʻi, a me ke kumu kūʻai haʻahaʻa i makemake ʻia. Ua koi ʻia ke kākoʻo no ka discard/zero, i nānā ʻia e ka laina ma dmesg:
kernel: ata1.00: Enabling discard_zeroes_data
2 mau ʻāpana o NVMe SSD model Samsung SSD 970 EVO 500GB.
No kēia mau SSD, he mea koʻikoʻi ka wikiwiki heluhelu/kākau a me ka hiki ke kumu waiwai no kāu mau pono. Radiator no lākou. Pono. ʻOiaʻiʻo. A i ʻole, e hoʻomoʻa iā lākou a hiki i ka crispy i ka wā o ka hoʻonohonoho mua RAID.
StarTech PEX8M2E2 adapter no 2 x NVMe SSD i hoʻokomo ʻia ma PCIe 3.0 8x slot. ʻO kēia, he HBA wale nō, akā no NVMe. He ʻokoʻa ia mai nā mea hoʻololi liʻiliʻi no ka mea ʻaʻole ia e koi i ke kākoʻo bifurcation PCIe mai ka motherboard ma muli o ke alo o kahi hoʻololi PCIe i kūkulu ʻia. E hana ʻo ia ma ka ʻōnaehana kahiko loa me PCIe, ʻoiai inā he x1 PCIe 1.0 slot. Ma keʻano maʻamau, i ka wikiwiki kūpono. ʻAʻohe RAID ma laila. ʻAʻohe BIOS i kūkulu ʻia ma luna o ka moku. No laila, ʻaʻole e aʻo ʻia kāu ʻōnaehana e hoʻomaka me NVMe, ʻoi aku ka liʻiliʻi o NVMe RAID mahalo i kēia hāmeʻa.
ʻO kēia ʻāpana wale nō ma muli o ka loaʻa ʻana o hoʻokahi wale nō 8x PCIe 3.0 manuahi i ka ʻōnaehana, a, inā he 2 manuahi manuahi, hiki ke maʻalahi ke hoʻololi ʻia me ʻelua penny PEX4M2E1 a i ʻole nā analogues, hiki ke kūʻai ʻia ma nā wahi āpau ma ke kumu kūʻai o 600. rubles.
ʻO ka hōʻole ʻana i nā ʻano ʻano lako a i ʻole nā chipset i kūkulu ʻia / BIOS RAID i hana ʻia, i hiki ke hoʻololi piha i ka ʻōnaehana holoʻokoʻa, koe wale nō ka SSD / HDD iā lākou iho, ʻoiai e mālama ana i nā ʻikepili āpau. ʻO ke kūpono, i hiki iā ʻoe ke mālama i ka ʻōnaehana hana i hoʻokomo ʻia i ka wā e neʻe ai i kahi ʻenehana hou / ʻokoʻa. ʻO ka mea nui aia nā awa SATA a me PCIe. Ua like ia me kahi CD ola a i ʻole bootable flash drive, wikiwiki wale nō a nui iki.
HumorA i ʻole, ʻike ʻoe i ka mea e hiki mai ana - i kekahi manawa pono ʻoe e lawe i ka pūʻulu holoʻokoʻa me ʻoe e lawe. Akā ʻaʻole wau makemake e nalowale i ka ʻikepili. No ka hana ʻana i kēia, ua kūpono nā media āpau i ʻōlelo ʻia ma nā slides ma nā bays 5.25 o ka hihia maʻamau.
ʻAe, a, ʻoiaʻiʻo, no ka hoʻāʻo ʻana me nā ʻano like ʻole o SSD caching ma Linux.
ʻO ka hoʻouka ʻana i nā lako paʻa. E hoʻā. He hana a ʻaʻole paha. A me mdadm aia mau nā koho.
Pūnaewele
Ma mua, ua hoʻokomo ʻia ʻo Debian 8 Jessie ma ka hāmeʻa, kahi kokoke i EOL. Ua hōʻuluʻulu ʻia ʻo RAID 6 mai nā HDD i ʻōlelo ʻia ma luna me LVM. Ua holo ʻo ia i nā mīkini virtual ma kvm/libvirt.
No ka mea Loaʻa i ka mea kākau ka ʻike kūpono i ka hoʻokumu ʻana i nā bootable SATA / NVMe flash drive, a ʻo ia hoʻi, i ʻole e uhaʻi i ka maʻamau apt template, ua koho ʻia ʻo Ubuntu 18.04 e like me ka ʻōnaehana pahuhopu, i hoʻopaʻa pono ʻia, akā aia nō 3 mau makahiki. kākoʻo i ka wā e hiki mai ana.
Aia ka ʻōnaehana i ʻōlelo ʻia i nā mea hoʻokele hāmeʻa āpau e pono ai mākou ma waho o ka pahu. ʻAʻole pono mākou i nā polokalamu ʻaoʻao ʻekolu a i ʻole nā mea hoʻokele.
Ke hoʻomākaukau nei no ke kau ʻana
No ka hoʻokomo ʻana i ka ʻōnaehana pono mākou ʻo Ubuntu Desktop Image. Loaʻa i ka ʻōnaehana kikowaena kekahi ʻano mea hoʻonohonoho ikaika, e hōʻike ana i ke kūʻokoʻa kiʻekiʻe ʻaʻole hiki ke hoʻopau ʻia ma ka hoʻokuʻu ʻana i ka ʻōnaehana ʻōnaehana UEFI ma kekahi o nā disks, e hoʻopau i ka nani a pau. No laila, ua hoʻokomo wale ʻia ma ke ʻano UEFI. ʻAʻole hāʻawi i nā koho.
ʻAʻole mākou hauʻoli i kēia.
Почему?ʻO ka mea pōʻino, ʻaʻohe kūpono o ka boot UEFI me ka polokalamu boot RAID, no ka mea... ʻAʻohe mea e hāʻawi iā mākou i nā hoʻopaʻa ʻana no ka ʻāpana UEFI ESP. Aia nā ʻōlelo aʻoaʻo ma ka pūnaewele e manaʻo nei e kau i ka ʻāpana ESP ma kahi flash drive i loko o kahi awa USB, akā he wahi kēia o ka hemahema. Aia nā ʻōlelo aʻoaʻo e hoʻohana ana i ka polokalamu mdadm RAID 1 me ka metadata version 0.9 ʻaʻole e pale i ka UEFI BIOS mai ka ʻike ʻana i kēia ʻāpana, akā ola kēia a hiki i ka manawa hauʻoli i ka manawa e kākau ai ka BIOS a i ʻole kekahi mea lako OS i kekahi mea i ka ESP a poina e hoʻonohonoho i kekahi. nā aniani.
Eia kekahi, pili ka UEFI boot i ka NVRAM, ʻaʻole ia e neʻe pū me nā disks i ka ʻōnaehana hou, no ka mea he hapa o ka motherboard.
No laila, ʻaʻole mākou e hana hou i kahi huila hou. Loaʻa iā mākou kahi paʻa kaʻa kupuna kāne i hoʻāʻo ʻia i ka manawa, i kapa ʻia ʻo Legacy/BIOS boot, e lawe ana i ka inoa haʻaheo o CSM ma nā ʻōnaehana UEFI. Wehe wale mākou mai ka papa, lubricate, pākī i nā kaila a holoi me kahi lole pulu.
ʻAʻole hiki ke hoʻokomo pono ʻia ka papa papa o Ubuntu me ka Legacy bootloader, akā eia, e like me kā lākou e ʻōlelo nei, aia nā koho.
A no laila, ʻohi mākou i ka lako a hoʻouka i ka ʻōnaehana mai ka Ubuntu Live bootable flash drive. Pono mākou e hoʻoiho i nā pūʻolo, no laila e hoʻonohonoho mākou i ka pūnaewele e hana no ʻoe. Inā ʻaʻole hana, hiki iā ʻoe ke hoʻouka i nā pūʻolo e pono ai ma ka flash drive ma mua.
Hele mākou i ke kaiapuni Desktop, hoʻomaka i ka emulator terminal, a hele mākou:
#sudo bash
Pehea…?ʻO ka laina ma luna nei ka canonical trigger no nā holiwars e pili ana i sudo. C bоhiki mai nā manawa kūpono aоkuleana nui. ʻO ka nīnau inā hiki iā ʻoe ke lawe iā ʻoe iho. Manaʻo ka poʻe he nui ka hoʻohana ʻana i ka sudo ma kēia ala ʻaʻole ia e akahele. Eia naʻe:
#apt-get install mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc
No ke aha ʻaʻole ZFS ...?Ke hoʻokomo mākou i nā polokalamu ma kā mākou kamepiula, hāʻawi maoli mākou i kā mākou lako i nā mea hoʻomohala o kēia polokalamu e hoʻokele.
Ke hilinaʻi mākou i kēia polokalamu me ka palekana o kā mākou ʻikepili, lawe mākou i kahi hōʻaiʻē e like me ke kumukūʻai o ka hoʻihoʻi ʻana i kēia ʻikepili, a mākou e uku ai i kekahi lā.
Mai kēia manaʻo, he Ferrari ʻo ZFS, a ʻoi aku ka like me ka mdadm+lvm me ke kaʻa.
Ma ke kumu, makemake ka mea kākau e hōʻaiʻē i ke kaʻa i ka poʻe ʻike ʻole ma mua o Ferrari. Ma laila, ʻaʻole kiʻekiʻe ke kumukūʻai o ka hoʻopuka. ʻAʻole pono nā kuleana. ʻOi aku ka maʻalahi ma mua o nā lula kaʻa. He manuahi ka paka. ʻOi aku ka maikaʻi o ka hiki ke kea. Hiki iā ʻoe ke hoʻopili i nā wāwae i ke kaʻa, a hiki iā ʻoe ke hoʻoponopono i ke kaʻa me kou mau lima ponoʻī.
No ke aha ʻo BTRFS...?No ka hoʻomaka ʻana i ka ʻōnaehana hana, pono mākou i kahi ʻōnaehana faila i kākoʻo ʻia ma Legacy/BIOS GRUB ma waho o ka pahu, a ma ka manawa like e kākoʻo i nā snapshot ola. E hoʻohana mākou iā ia no ka ʻāpana / boot. Eia kekahi, makemake ka mea kākau e hoʻohana i kēia FS no / (root), me ka poina ʻole e hoʻomaopopo no kekahi polokalamu ʻē aʻe hiki iā ʻoe ke hana i nā ʻāpana kaʻawale ma LVM a kau iā lākou i nā papa kuhikuhi pono.
ʻAʻole mākou e mālama i nā kiʻi o nā mīkini virtual a i ʻole nā ʻikepili ma kēia FS.
E hoʻohana wale ʻia kēia FS no ka hana ʻana i nā kiʻi paʻi o ka ʻōnaehana me ka hoʻohuli ʻole ʻana iā ia a laila e hoʻololi i kēia mau paʻi kiʻi i kahi disk backup me ka hoʻouna / loaʻa.
Eia hou, makemake ka mea kākau e mālama pono i ka liʻiliʻi o ka lako polokalamu a holo i nā polokalamu ʻē aʻe āpau i nā mīkini virtual e hoʻohana ana i nā mea e like me ka hoʻouna ʻana i nā GPU a me nā mea hoʻokele PCI-USB Host i KVM ma o IOMMU.
ʻO nā mea wale nō i waiho ʻia ma ka hāmeʻa ʻo ka mālama ʻana i ka ʻikepili, virtualization a me ka backup.
Inā ʻoe e hilinaʻi nui iā ZFS, a laila, ma ke kumu, no ka noi i kuhikuhi ʻia ua loli lākou.
Eia naʻe, ʻaʻole ʻae ka mea kākau i nā hiʻohiʻona i kūkulu ʻia / RAID a me nā hiʻohiʻona redundancy i loaʻa iā ZFS, BRTFS a me LVM.
Ma ke ʻano he hoʻopaʻapaʻa ʻē aʻe, hiki i ka BTRFS ke hoʻohuli i nā mea kākau maʻamau i nā sequential, kahi hopena maikaʻi loa i ka wikiwiki o ka synchronizing snapshots/backups ma ka HDD.
E nānā hou kākou i nā mea hana a pau:
#udevadm control --reload-rules && udevadm trigger
E nānā kākou a puni:
#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
Hoʻolālā disk
NVMe SSD
Akā ʻaʻole mākou e hōʻailona iā lākou ma kekahi ʻano. ʻO nā mea like, ʻaʻole ʻike kā mākou BIOS i kēia mau drive. No laila, e hele holoʻokoʻa lākou i ka polokalamu RAID. ʻAʻole mākou e hana i nā ʻāpana ma laila. Inā makemake ʻoe e hahai i ka "canon" a i ʻole "principally", e hana i hoʻokahi ʻāpana nui, e like me kahi HDD.
SATA HDD
ʻAʻohe pono e haku i kekahi mea kūikawā ma ʻaneʻi. E hana mākou i hoʻokahi ʻāpana no nā mea a pau. E hana mākou i kahi ʻāpana no ka ʻike ʻana o ka BIOS i kēia mau disks a hoʻāʻo paha e kāʻei mai iā lākou. E hoʻokomo mākou iā GRUB ma kēia mau disks ma hope a hiki i ka ʻōnaehana ke hana koke i kēia.
#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
SATA SSD
ʻO kēia kahi e hoihoi ai nā mea iā mākou.
ʻO ka mea mua, ʻo kā mākou drive he 2 TB ka nui. Aia kēia i loko o ka laulā kūpono no MBR, ʻo ia ka mea a mākou e hoʻohana ai. Inā pono, hiki ke pani ʻia me ka GPT. Loaʻa i nā diski GPT kahi papa hoʻohālikelike e hiki ai i nā ʻōnaehana kūpono MBR ke ʻike i nā ʻāpana 4 mua inā aia lākou i loko o nā terabytes 2 mua. ʻO ka mea nui, ʻo ka ʻāpana boot a me ka ʻāpana bios_grub ma kēia mau disk ma ka hoʻomaka. ʻAe kēia iā ʻoe e hoʻopaʻa mai i nā drive GPT Legacy/BIOS.
Akā ʻaʻole kēia kā mākou hihia.
Maanei e hana mākou i ʻelua ʻāpana. ʻO ka mea mua he 1 GB ka nui a hoʻohana ʻia no RAID 1 / boot.
E hoʻohana ʻia ka lua no RAID 6 a e lawe i nā wahi āpau i koe koe wale no kahi wahi liʻiliʻi ʻole ma ka hopena o ka huakaʻi.
He aha kēia wahi ʻike ʻole ʻia?Wahi a nā kumu ma ka pūnaewele, aia kā mākou SATA SSD ma luna o kahi cache SLC hiki ke hoʻonui i ka nui mai 6 a 78 gigabytes. Loaʻa iā mākou he 6 gigabytes "no ka manuahi" ma muli o ka ʻokoʻa ma waena o "gigabytes" a me "gibibytes" ma ka pepa ʻikepili o ka drive. Hoʻokaʻawale ʻia ke koena 72 gigabytes mai kahi i hoʻohana ʻole ʻia.
Maanei e hoʻomaopopo ʻia aia iā mākou kahi cache SLC, a noho ʻia ka hakahaka ma ke ʻano 4 bit MLC mode. ʻO ia ka manaʻo maikaʻi no mākou no kēlā me kēia 4 gigabytes o ka hakahaka manuahi e loaʻa iā mākou he 1 gigabyte o SLC cache.
E hoonui i 72 gigabytes me 4 a loaa 288 gigabytes. ʻO kēia ka wahi kūʻokoʻa ʻaʻole mākou e kahakaha i mea e hiki ai i nā drive ke hoʻohana piha i ka cache SLC.
No laila, e piʻi maikaʻi mākou i 312 gigabytes o SLC cache mai ka huina o ʻeono mau kaʻa. ʻO nā drive a pau, e hoʻohana ʻia ʻo 2 i RAID no ka redundancy.
ʻO kēia nui o ka cache e ʻae iā mākou e ʻike pinepine i ke ola maoli i kahi kūlana kahi i hele ʻole ai kahi kākau i ka cache. Hoʻopiʻi maikaʻi kēia i ka drawback kaumaha loa o ka hoʻomanaʻo QLC - ka wikiwiki kākau haʻahaʻa loa i ka wā i kākau ʻia ai ka ʻikepili ma ke kāʻei ʻana i ka cache. Inā ʻaʻole i kūpono kāu mau ukana i kēia, a laila manaʻo wau e noʻonoʻo nui ʻoe e pili ana i ka lōʻihi o kāu SSD ma lalo o kēlā ukana, e noʻonoʻo ana i ka TBW mai ka pepa ʻikepili.
#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
Ka Hana ʻana i nā ʻAla
ʻO ka mea mua, pono mākou e hoʻololi i ka inoa o ka mīkini. Pono kēia no ka mea ʻo ka inoa host he ʻāpana o ka inoa array ma kahi o loko o mdadm a pili i kekahi mea ma kahi. ʻOiaʻiʻo, hiki ke kapa hou ʻia nā arrays ma hope, akā he hana pono ʻole kēia.
#mcedit /etc/hostname
#mcedit /etc/hosts
#hostname
vdesk0
NVMe SSD
#mdadm --create --verbose --assume-clean /dev/md0 --level=1 --raid-devices=2 /dev/nvme[0-1]n1
No ke aha -e manaʻo-maʻemaʻe ...?E pale i ka hoʻomaka ʻana i nā arrays. No nā pae RAID ʻelua 1 a me 6 kūpono kēia. Hiki i nā mea a pau ke hana me ka ʻole o ka hoʻomaka ʻana inā he ʻano hou. Eia kekahi, ʻo ka hoʻomaka ʻana i ka array SSD ma ka hana ʻana he mea ʻino ia o ka waiwai TBW. Hoʻohana mākou i ka TRIM/DISCARD inā hiki i nā hui SSD i hui ʻia e "hoʻomaka" iā lākou.
No nā SSD arrays, kākoʻo ʻia ʻo RAID 1 DISCARD ma waho o ka pahu.
No ka SSD RAID 6 DISCARD arrays, pono ʻoe e ʻae iā ia i nā ʻāpana module kernel.
Pono e hana ʻia kēia inā loaʻa nā SSD a pau i hoʻohana ʻia ma ka pae kiʻekiʻe 4/5/6 i kēia ʻōnaehana i ke kākoʻo hana no discard_zeroes_data. I kekahi manawa ʻike ʻoe i nā drive ʻē aʻe e haʻi ana i ka kernel ua kākoʻo ʻia kēia hana, akā ʻoiaʻiʻo ʻaʻole i laila, a ʻaʻole hana mau ka hana. I kēia manawa, loaʻa ke kākoʻo kokoke i nā wahi āpau, akā naʻe, aia nā drive kahiko a me nā firmware me nā hewa. No kēia kumu, ua pio ke kākoʻo DISCARD ma ka paʻamau no RAID 6.
E noʻonoʻo, e hoʻopau ke kauoha aʻe i nā ʻikepili āpau ma nā drive NVMe ma ka "hoʻomaka" i ka papa me "zeros".
#blkdiscard /dev/md0
Inā hewa kekahi mea, e ho'āʻo e kuhikuhi i kahi ʻanuʻu.
#blkdiscard --step 65536 /dev/md0
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
No ke aha i nui ai...?He hopena maikaʻi ka hoʻonui ʻana i ka nui o ka ʻāpana i ka wikiwiki o ka heluhelu ʻana i nā poloka a hiki i ka nui o ka puʻupuʻu. Hana ʻia kēia no ka mea hiki ke hoʻopau holoʻokoʻa i hoʻokahi hana o ka nui kūpono a i ʻole ka liʻiliʻi ma ka mea hoʻokahi. No laila, ua hōʻuluʻulu ʻia ka IOPS mai nā mea hana a pau. Wahi a nā ʻikepili, ʻaʻole ʻoi aku ka 99% o IO ma mua o 512K.
RAID 6 IOPS no ke kakau ana i nā manawa a pau emi iho a like paha me ka IOPS o hoʻokahi kaʻa. I ka heluhelu ʻana, hiki i ka IOPS ke ʻoi aku ka nui o nā manawa ma mua o ka hoʻokahi kaʻa, a ma ʻaneʻi ka nui o ka poloka.
ʻAʻole ʻike ka mea kākau i ka manaʻo o ka hoʻāʻo ʻana e koho i kahi ʻāpana maikaʻi ʻole i ka RAID 6 by-design a ma kahi o ka hoʻolālā ʻana i ka mea maikaʻi o RAID 6.
E hoʻopaʻi mākou no ka kākau ʻino ʻole o RAID 6 me kahi cache NVMe a me nā hoʻopunipuni kikoʻī.
ʻAʻole mākou i hiki iā DISCARD no RAID 6. No laila ʻaʻole mākou e "hoʻomaka" i kēia ʻano i kēia manawa. E hana mākou i kēia ma hope, ma hope o ke kau ʻana i ka OS.
SATA HDD
#mdadm --create --verbose --assume-clean /dev/md3 --chunk-size=512 --level=6 --raid-devices=8 /dev/sd[g-n]1
LVM ma NVMe RAID
No ka wikiwiki, makemake mākou e kau i ka ʻōnaehana faila ma NVMe RAID 1 ʻo ia /dev/md0.
Eia nō naʻe, pono mākou i kēia laina wikiwiki no nā pono ʻē aʻe, e like me ka swap, metadata a me LVM-cache a me LVM-thin metadata, no laila e hana mākou i kahi LVM VG ma kēia ʻano.
#pvcreate /dev/md0
#vgcreate root /dev/md0
E hana kākou i ʻāpana no ka ʻōnaehana waihona kumu.
#lvcreate -L 128G --name root root
E hana kākou i ʻāpana no ka hoʻololi ʻana e like me ka nui o ka RAM.
#lvcreate -L 32G --name swap root
Hoʻokomo OS
I ka huina, loaʻa iā mākou nā mea āpau e pono ai e hoʻokomo i ka ʻōnaehana.
E hoʻokuʻu i ka wizard hoʻonohonoho ʻōnaehana mai ke kaiapuni ʻo Ubuntu Live. Hoʻokomo maʻamau. Ma ke kahua o ke koho ʻana i nā disks no ka hoʻonohonoho ʻana, pono ʻoe e kuhikuhi i kēia:
- /dev/md1, - wahi mauna /boot, FS - BTRFS
- /dev/root/root (aka /dev/mapper/root-root), - wahi mauna / (root), FS - BTRFS
- /dev/root/swap (aka /dev/mapper/root-swap), - hoʻohana e like me ka ʻāpana swap
- E hoʻouka i ka bootloader ma /dev/sda
Ke koho ʻoe iā BTRFS ma ke ʻano o ka ʻōnaehana faila, e hana ʻokoʻa ka mea hoʻonohonoho i ʻelua mau puke BTRFS i kapa ʻia ʻo "@" no / (root), a me "@home" no /home.
E hoʻomaka kākou i ke kau ʻana...
E hoʻopau ka hoʻonohonoho ʻana me kahi pahu dialog modal e hōʻike ana i kahi hewa i ka hoʻokomo ʻana i ka bootloader. ʻO ka mea pōʻino, ʻaʻole hiki iā ʻoe ke haʻalele i kēia kamaʻilio me ka hoʻohana ʻana i nā ala maʻamau a hoʻomau i ke kau ʻana. Hoʻokuʻu mākou i waho o ka ʻōnaehana a komo hou, e hoʻopau ana i kahi papa maʻemaʻe ʻo Ubuntu Live. E wehe i ka pahu, a hou:
#sudo bash
E hana i kahi kaiapuni chroot e hoʻomau i ke kau ʻana:
#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
E hoʻonohonoho i ka pūnaewele a me ka inoa inoa ma chroot:
#cat /etc/hostname >/mnt/chroot/etc/hostname
#cat /etc/hosts >/mnt/chroot/etc/hosts
#cat /etc/resolv.conf >/mnt/chroot/etc/resolv.conf
E hele kāua i ke kaiapuni chroot:
#chroot /mnt/chroot
ʻO ka mea mua, e hāʻawi mākou i nā pūʻolo:
apt-get install --reinstall mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc debsums hdparm
E nānā a hoʻoponopono i nā pūʻolo a pau i hoʻokomo kekee ma muli o ka hoʻokomo ʻole ʻana o ka ʻōnaehana:
#CORRUPTED_PACKAGES=$(debsums -s 2>&1 | awk '{print $6}' | uniq)
#apt-get install --reinstall $CORRUPTED_PACKAGES
Inā maikaʻi ʻole kekahi mea, pono paha ʻoe e hoʻoponopono mua i /etc/apt/sources.list
E hoʻololi i nā ʻāpana no ka module RAID 6 e hiki ai iā TRIM/DISCARD:
#cat >/etc/modprobe.d/raid456.conf << EOF
options raid456 devices_handle_discard_safely=1
EOF
E hoʻololi liʻiliʻi i kā mākou arrays:
#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
He aha ia ..?Ua hana mākou i nā lula udev e hana i kēia:
- E hoʻonohonoho i ka nui o ka cache block no RAID 2020 i lawa no 6. ʻO ka waiwai paʻamau, me he mea lā, ʻaʻole i loli mai ka wā i hoʻokumu ʻia ai ʻo Linux, a ʻaʻole i lawa no ka manawa lōʻihi.
- E mālama i ka liʻiliʻi o ka IO no ka lōʻihi o ka nānā ʻana/ka hoʻonohonoho ʻana. ʻO kēia ka mea e pale aku ai i kāu mau arrays mai ka paʻa ʻana i kahi kūlana o ka hoʻonohonoho mau ʻana ma lalo o ka ukana.
- E kaupalena i ka IO kiʻekiʻe loa i ka wā o ka nānā ʻana/ka hoʻonohonoho pū ʻana o nā arrays. Pono kēia no ka hoʻonohonoho ʻana / nānā ʻana i nā SSD RAID ʻaʻole e hoʻomoʻa i kāu mau drive i kahi ʻoki. He ʻoiaʻiʻo kēia no NVMe. (E hoʻomanaʻo e pili ana i ka radiator? ʻAʻole wau i ʻakaʻaka.)
- E pāpā i nā diski mai ka hooki ʻana i ka spindle rotation (HDD) ma o APM a hoʻonoho i ka manawa hiamoe no nā mea hoʻokele disk i 7 mau hola. Hiki iā ʻoe ke hoʻopau loa i ka APM inā hiki i kāu mau drive ke hana ia (-B 255). Me ka waiwai paʻamau, e pau nā drive ma hope o ʻelima kekona. A laila makemake ka OS e hoʻihoʻi i ka cache disk, e wili hou nā disks, a hoʻomaka hou nā mea āpau. Loaʻa i nā diski ka helu kiʻekiʻe loa o nā kaʻina spindle. Hiki i kēlā ʻano pōʻai maʻalahi ke pepehi i kāu mau disks i loko o ʻelua mau makahiki. ʻAʻole pilikia nā disks āpau i kēia, akā ʻo kā mākou "laptop", me nā hoʻonohonoho paʻamau kūpono, e hoʻohālikelike ai iā RAID me he mini-MAID.
- E hoʻouka i ka readahead ma nā diski (ka huli ʻana) 1 megabyte - ʻelua mau poloka/chunk RAID 6
- Hoʻopau i ka heluhelu ʻana ma mua o nā arrays iā lākou iho.
E hoʻoponopono /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
No ke aha ia ..?E ʻimi mākou i ka /boot partition e UUID. Hiki ke hoʻololi ʻia ka inoa ʻo Array.
E ʻimi mākou i nā ʻāpana i koe e nā inoa LVM ma ka helu /dev/mapper/vg-lv, no ka mea ʻike ʻokoʻa lākou i nā ʻāpana.
ʻAʻole mākou hoʻohana i ka UUID no LVM no ka mea Hiki ke like ka UUID o nā puke LVM a me kā lākou mau kiʻi.Mount /dev/mapper/root-root.. ʻelua?ʻAe. Pololei. Hiʻona o BTRFS. Hiki ke kau ʻia kēia ʻōnaehana faila i nā manawa he nui me nā subvols like ʻole.
Ma muli o kēia hiʻohiʻona hoʻokahi, manaʻo wau ʻaʻole e hana i nā kiʻi paʻi LVM o nā puke BTRFS ikaika. Hiki paha iā ʻoe ke kahaha ke hoʻomaka hou ʻoe.
E hana hou i ka mdadm config:
#/usr/share/mdadm/mkconf | sed 's/#DEVICE/DEVICE/g' >/etc/mdadm/mdadm.conf
E hoʻoponopono i nā hoʻonohonoho 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
He aha ia ..?Ua hiki iā mākou ke hoʻonui maʻalahi i nā loko wai liʻiliʻi LVM i ka hiki ʻana i 90% o ka wahi i noho ʻia e 5% o ka nui.
Ua hoʻonui mākou i ka helu kiʻekiʻe o nā poloka huna no LVM cache.
Ua pale mākou iā LVM mai ka ʻimi ʻana i nā puke LVM (PV) ma:
- nā lako me LVM cache (cdata)
- nā mea i hoʻopaʻa ʻia me ka hoʻohana ʻana i ka cache LVM, ke kaʻe ʻana i ka cache ( _corig). I kēia hihia, e nānā mau ʻia ka hāmeʻa i hūnā ʻia ma o ka cache (just ).
- nā lako me LVM cache metadata (cmeta)
- nā mea hana a pau ma VG me nā kiʻi inoa. Ma ʻaneʻi e loaʻa iā mākou nā kiʻi disk o nā mīkini virtual, a ʻaʻole makemake mākou i ka LVM ma ka mea hoʻokipa e hoʻāla i nā puke no ka OS malihini.
- nā mea hana a pau ma VG me ka inoa backup. Maanei e loaʻa iā mākou nā kope kope o nā kiʻi mīkini virtual.
- nā mea hana a pau i pau ka inoa me "gpv" (ka leo kino malihini)
Ua hiki iā mākou ke kākoʻo DISCARD i ka wā e hoʻokuʻu ai i kahi kaʻawale ma LVM VG. Akahele. E hoʻopau kēia i ka holoi ʻana i nā LV ma ka SSD. E pili ana kēia i ka SSD RAID 6. Eia naʻe, e like me ka hoʻolālā, e hoʻohana mākou i ka hoʻolako kikoʻī, no laila ʻaʻole ia e keakea iki iā mākou.
E hōʻano hou i ke kiʻi initramfs:
#update-initramfs -u -k all
E hoʻouka a hoʻonohonoho i ka grub:
#apt-get install grub-pc
#apt-get purge os-prober
#dpkg-reconfigure grub-pc
He aha nā diski āu e koho ai?ʻO ka poʻe a pau sd*. Pono e hiki i ka ʻōnaehana ke hoʻomaka mai ka hana SATA a i ʻole SSD.
No ke aha lākou i hoʻohui ai i ka os-prober..?No ke kūʻokoʻa nui a me nā lima pāʻani.
ʻAʻole ia e hana pololei inā aia kekahi o nā RAID i kahi kūlana hoʻohaʻahaʻa. Ke ho'āʻo nei e ʻimi i ka OS ma nā ʻāpana i hoʻohana ʻia i nā mīkini virtual e holo ana ma kēia hāmeʻa.
Inā makemake ʻoe, hiki iā ʻoe ke haʻalele, akā e hoʻomanaʻo i nā mea a pau i luna. Paipai au i ka ʻimi ʻana i nā mea ʻai no ka hoʻopau ʻana i nā lima ʻino ma ka pūnaewele.
Me kēia ua hoʻopau mākou i ka hoʻonohonoho mua. ʻO ka manawa kēia e hoʻomaka hou ai i ka OS hou i hoʻokomo ʻia. Mai poina e wehe i ka bootable Live CD/USB.
#exit
#reboot
E koho i kekahi o nā SATA SSD ma ke ʻano he boot.
LVM ma SATA SSD
I kēia manawa, ua hoʻomaka mākou i ka OS hou, hoʻonohonoho i ka pūnaewele, apt, wehe i ka emulator terminal, a holo:
#sudo bash
E hoʻomau kāua.
"E hoʻomaka" i ka array mai SATA SSD:
#blkdiscard /dev/md2
Inā ʻaʻole pono, e hoʻāʻo:
#blkdiscard --step 65536 /dev/md2
E hana i ka LVM VG ma SATA SSD:
#pvcreate /dev/md2
#vgcreate data /dev/md2
No ke aha he VG hou..?ʻO ka ʻoiaʻiʻo, ua loaʻa iā mākou kahi VG i kapa ʻia ʻo root. No ke aha ʻaʻole e hoʻohui i nā mea āpau i hoʻokahi VG?
Inā nui nā PV i loko o kahi VG, a laila no ka ho'ā pono ʻana o ka VG, pono nā PV āpau (ma ka pūnaewele). ʻO ka ʻokoʻa ʻo LVM RAID, ʻaʻole mākou e hoʻohana.
Makemake mākou inā loaʻa kahi hemahema (heluhelu i ka nalowale o ka ʻikepili) ma kekahi o ka RAID 6 arrays, e holo maʻamau ka ʻōnaehana hana a hāʻawi iā mākou i ka manawa e hoʻoponopono ai i ka pilikia.
No ka hana ʻana i kēia, ma ka pae mua o ka abstraction e hoʻokaʻawale mākou i kēlā me kēia ʻano "media" kino i kahi VG ʻokoʻa.
Ma ka ʻōlelo ʻepekema, aia nā ʻano RAID ʻokoʻa i nā "domain hilinaʻi". ʻAʻole pono ʻoe e hana i kahi helu maʻamau o ka hāʻule ʻole no lākou ma ka hoʻopili ʻana iā lākou i hoʻokahi VG.
ʻO ka loaʻa ʻana o LVM ma ka pae "hardware" e ʻae iā mākou e ʻoki ʻoki i nā ʻāpana o nā ʻāpana RAID like ʻole ma ka hoʻohui ʻana iā lākou ma nā ʻano like ʻole. No ka laʻana - holo i ka manawa like bcache + LVM lahilahi, bcache + BTRFS, LVM cache + LVM lahilahi, kahi hoʻonohonoho ZFS paʻakikī me nā huna huna, a i ʻole nā hui hellish ʻē aʻe e hoʻāʻo a hoʻohālikelike i nā mea āpau.
Ma ka pae "paʻakikī", ʻaʻole mākou e hoʻohana i kekahi mea ʻē aʻe ma mua o nā puke LVM "mānoanoa" maikaʻi. ʻO ka ʻokoʻa i kēia lula ʻo ia paha ka ʻāpana hoʻihoʻi.
Manaʻo wau i kēia manawa, ua hoʻomaka mua ka poʻe heluhelu e kānalua i kekahi mea e pili ana i ka pēpē nesting.
LVM ma SATA HDD
#pvcreate /dev/md3
#vgcreate backup /dev/md3
VG hou hou..?Makemake mākou inā ʻaʻole i hāʻule ka papa disk a mākou e hoʻohana ai no ka hoʻihoʻi ʻana i ka ʻikepili, e hoʻomau ka hana maʻamau o kā mākou ʻōnaehana hana, me ka mālama ʻana i ke komo ʻana i ka ʻikepili hoʻihoʻi ʻole e like me ka mea maʻamau. No laila, no ka pale ʻana i nā pilikia hoʻāla VG, hana mākou i kahi VG ʻokoʻa.
Hoʻonohonoho ʻana i kahi huna LVM
E hana mākou i kahi LV ma NVMe RAID 1 e hoʻohana iā ia ma ke ʻano he mea caching.
#lvcreate -L 70871154688B --name cache root
No ke aha ka liʻiliʻi o...?ʻO ka ʻoiaʻiʻo, loaʻa i kā mākou NVMe SSDs kahi cache SLC. 4 gigabytes o "free" a me 18 gigabytes o ka ikaika ma muli o ka hakahaka o ka 3-bit MLC. Ke pau kēia cache, ʻaʻole ʻoi aku ka wikiwiki o nā NVMe SSD ma mua o kā mākou SATA SSD me kahi huna. ʻOiaʻiʻo, no kēia kumu, ʻaʻohe kumu no mākou e hana i ka ʻāpana cache LVM i ʻoi aku ka nui ma mua o ka pālua o ka nui o ka cache SLC o ka NVMe drive. No nā NVMe drive i hoʻohana ʻia, manaʻo ka mea kākau he mea kūpono ke hana i 32-64 gigabytes o ka cache.
Pono ka nui o ka ʻāpana i hāʻawi ʻia e hoʻonohonoho i 64 gigabytes o ka cache, cache metadata, a me ka metadata backup.
Hoʻohui hou, ʻike wau ma hope o ka pani ʻana o ka ʻōnaehana lepo, e hōʻailona ʻo LVM i ka cache holoʻokoʻa he lepo a hoʻonohonoho hou. Eia kekahi, e hana hou ʻia kēia i kēlā me kēia manawa e hoʻohana ʻia ai ka lvchange ma kēia hāmeʻa a hiki i ka hoʻomaka hou ʻana o ka ʻōnaehana. No laila, manaʻo wau e hana hou i ka cache me ka hoʻohana ʻana i ka palapala kūpono.
E hana kākou i LV ma SATA RAID 6 e hoʻohana iā ia ma ke ʻano he mea huna.
#lvcreate -L 3298543271936B --name cache data
No ke aha ʻekolu terabytes wale nō..?No laila, inā pono, hiki iā ʻoe ke hoʻohana iā SATA SSD RAID 6 no kekahi mau pono ʻē aʻe. Hiki ke hoʻonui ʻia ka nui o ka wahi huna, ma ka lele, me ka ʻole o ka hoʻōki ʻana i ka ʻōnaehana. No ka hana ʻana i kēia, pono ʻoe e hoʻōki no ka manawa a hoʻā hou i ka cache, akā ʻo ka pono kūʻokoʻa o LVM-cache ma luna, no ka laʻana, bcache hiki ke hana i kēia ma ka lele.
E hana kākou i VG hou no ka hoʻopaʻa ʻana.
#pvcreate /dev/root/cache
#pvcreate /dev/data/cache
#vgcreate cache /dev/root/cache /dev/data/cache
E hana kakou i LV ma ka mea huna.
#lvcreate -L 3298539077632B --name cachedata cache /dev/data/cache
Maanei mākou i lawe koke ai i ka hakahaka āpau ma / dev / data / cache i hana koke ʻia nā ʻāpana ʻē aʻe āpau ma / dev / root / cache. Inā ʻoe i hana i kekahi mea ma kahi hewa, hiki iā ʻoe ke neʻe iā ia me ka hoʻohana ʻana i ka pvmove.
E hana a ho'ā i ka 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
No ke aha ka nui o keia ..?Ma o nā hoʻokolohua kūpono, ua hiki i ka mea kākau ke ʻike i ka loaʻa ʻana o ka hopena maikaʻi loa inā pili ka nui o ka poloka cache LVM me ka nui o ka poloka lahilahi LVM. Eia kekahi, ʻoi aku ka liʻiliʻi o ka nui, ʻoi aku ka maikaʻi o ka hoʻonohonoho hoʻonohonoho ʻana i kahi hoʻopaʻa leo ʻole.
ʻO 64k ka liʻiliʻi liʻiliʻi i ʻae ʻia no LVM lahilahi.
E akahele e kākau hou..!ʻAe. Hoʻopaneʻe kēia ʻano huna i ke kākau ʻana i ka hoʻonohonoho ʻana i ka mea huna. ʻO ia hoʻi, inā nalowale ka huna huna, e nalowale paha ʻoe i ka ʻikepili ma ka mea huna. Ma hope aku, e haʻi aku ka mea kākau iā ʻoe i nā ana, me ka NVMe RAID 1, hiki ke lawe ʻia e uku no kēia pilikia.
Ua koho ʻia kēia ʻano cache e hoʻopaʻi no ka maikaʻi ʻole o ka hana kākau maʻamau o RAID 6.
E nānā kākou i ka mea i loaʻa iā mākou:
#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)
ʻO [cachedata_corig] wale nō e loaʻa ma /dev/data/cache. Inā hewa kekahi mea, e hoʻohana i ka pvmove.
Hiki iā ʻoe ke hoʻopau i ka cache inā pono me hoʻokahi kauoha:
#lvconvert -y --uncache cache/cachedata
Hana ʻia kēia ma ka pūnaewele. E hoʻopili wale ʻo LVM i ka cache i ka disk, wehe iā ia, a hoʻi hou i ka cachedata_corig i cachedata.
Hoʻonohonoho i ka LVM lahilahi
E noʻonoʻo pono i ka nui o ka nui o kā mākou e pono ai no LVM thin metadata:
#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"
Hoʻopili i 4 gigabytes: 4294967296B
E hoʻonui i ʻelua a hoʻohui i ka 4194304B no LVM PV metadata: 8594128896B
E hana mākou i kahi ʻāpana ʻokoʻa ma NVMe RAID 1 e kau i ka LVM thin metadata a me kā lākou kope kope ma luna:
#lvcreate -L 8594128896B --name images root
He aha ke kumu..?Eia paha ka nīnau: no ke aha e hoʻokaʻawale ai i ka LVM thin metadata inā e hūnā ʻia ma NVMe a e hana wikiwiki.
ʻOiai he mea nui ka wikiwiki ma ʻaneʻi, mamao loa ia mai ke kumu nui. ʻO ka mea ʻo ka cache kahi wahi o ka hemahema. Hiki ke loaʻa kekahi mea iā ia, a inā i hūnā ʻia ka LVM thin metadata, e lilo ia i mea nalowale loa. Me ka ʻole o ka metadata piha, aneane hiki ʻole ke hōʻuluʻulu i nā puke lahilahi.
Ma ka hoʻoneʻe ʻana i ka metadata i kahi ʻokoʻa ʻole-cached, akā wikiwiki, ka leo, hōʻoia mākou i ka palekana o ka metadata i ka wā o ka nalowale a i ʻole ka palaho. I kēia hihia, e hoʻopili ʻia nā pōʻino a pau i ka nalowale ʻana o ka cache i loko o nā puke kikoʻī, kahi e maʻalahi ai ke kaʻina hana hoʻihoʻi ma nā kauoha o ka nui. Me ke kūlana kiʻekiʻe, e hoʻihoʻi ʻia kēia mau poho me ka hoʻohana ʻana i nā lāʻau FS.
Eia kekahi, inā i lawe mua ʻia kahi kiʻi o ka leo lahilahi, a ma hope o ka hoʻonohonoho pono ʻana o ka cache ma ka liʻiliʻi hoʻokahi, a laila, ma muli o ka hoʻolālā kūloko o LVM lahilahi, e hōʻoia ʻia ka pololei o ka snapshot i ka wā o ka poho huna. .
E hana mākou i kahi VG hou e kuleana no ka hoʻolako ʻana i ka lahilahi:
#pvcreate /dev/root/images
#pvcreate /dev/cache/cachedata
#vgcreate images /dev/root/images /dev/cache/cachedata
E hana kākou i loko:
#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
No ke aha -Z yMa waho aʻe o ka mea i manaʻo ʻia ai kēia ʻano - e pale i ka ʻikepili mai kahi mīkini virtual mai ka lele ʻana i kahi mīkini virtual ʻē aʻe i ka wā e hāʻawi hou ai i ka lewa - ua hoʻohana ʻia ka zeroing e hoʻonui i ka wikiwiki o ka kākau ʻana ma nā poloka liʻiliʻi ma mua o 64k. ʻO kēlā me kēia kākau ʻana ma lalo o 64k i kahi ʻāpana i hoʻokaʻawale ʻole ʻia o ka leo lahilahi e lilo i 64K e hoʻohālikelike ʻia i loko o ka cache. E ʻae kēia i ka hana e hoʻokō holoʻokoʻa ma o ka cache, ke kaʻe ʻana i ka mea huna.
E hoʻoneʻe kākou i nā LV i nā PV kūpono:
#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
E nānā kākou:
#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)
E hana kakou i ka leo lahilahi no na hoao ana:
#lvcreate -V 64G --thin-pool thin-pool --name test images
E hoʻokomo mākou i nā pūʻolo no nā hoʻokolohua a me ka nānā ʻana:
#apt-get install sysstat fio
ʻO kēia ke ʻano e hiki ai iā ʻoe ke nānā i ke ʻano o kā mākou hoʻonohonoho mālama i ka manawa maoli:
#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)'
ʻO kēia ke ʻano e hiki ai iā mākou ke hoʻāʻo i kā mākou hoʻonohonoho:
#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
E akahele! Punawai!E holo ana kēia code i 36 mau hoʻokolohua like ʻole, e holo ana kēlā me kēia no 4 kekona. ʻO ka hapalua o nā hoʻokolohua no ka hoʻopaʻa ʻana. Hiki iā ʻoe ke hoʻopaʻa i ka nui ma NVMe i 4 kekona. A hiki i 3 gigabytes i kekona. No laila, hiki i kēlā me kēia holo o nā hoʻokolohua kākau ke ʻai i ka 216 gigabytes o SSD punawai mai ʻoe.
Heluhelu a me ke kakau?ʻAe. He mea kūpono ke holo kaʻawale i ka heluhelu a kākau ʻana i nā hoʻokolohua. Eia kekahi, he mea maʻalahi ka hōʻoia ʻana ua hoʻonohonoho ʻia nā cache āpau i ʻole e pili ka palapala i hana mua ʻia i ka heluhelu ʻana.
E ʻokoʻa loa nā hopena i ka wā o ka hoʻokuʻu mua ʻana a me nā mea ma hope e like me ka hoʻopiha ʻana o ka cache a me ka leo lahilahi, a hilinaʻi hoʻi i ka hoʻokō ʻana o ka ʻōnaehana i nā cache i hoʻopiha ʻia i ka wā o ka hoʻokuʻu hope.
Ma waena o nā mea ʻē aʻe, manaʻo wau e ana i ka wikiwiki ma kahi leo lahilahi piha i lawe ʻia mai kahi kiʻi. Ua loaʻa i ka mea kākau ka manawa e nānā ai i ka wikiwiki ʻana o ke kākau ʻana ma hope koke o ka hoʻokumu ʻana i ka paʻi kiʻi mua, ʻoiai inā ʻaʻole i piha ka cache. Loaʻa kēia ma muli o ke kope-ma-kākau kākau semantics, alignment of cache and thin volume blocks, and the fact that a random write to RAID 6 turn into a random read from RAID 6 followed by a write to the cache. Ma kā mākou hoʻonohonoho ʻana, ʻoi aku ka wikiwiki o ka heluhelu ʻana mai RAID 6 a hiki i 6 mau manawa (ka helu o nā SATA SSDs i ka laha) ʻoi aku ka wikiwiki ma mua o ke kākau ʻana. No ka mea Hoʻokaʻawale ʻia nā poloka no CoW mai kahi ʻauʻau lahilahi, a laila hoʻololi ʻia ka hoʻopaʻa ʻana, no ka hapa nui, i ke kaʻina.
Hiki ke hoʻohana ʻia kēia mau hiʻohiʻona ʻelua i kāu pono.
Hoʻopili i nā kiʻi paʻi "coherent".
No ka hōʻemi ʻana i ka pōʻino o ka ʻikepili i ka hihia o ka pohō/nalo huna, manaʻo ka mea kākau e hoʻolauna i ka hana o ka hoʻololi ʻana i nā kiʻi paʻi e hōʻoiaʻiʻo i ko lākou kūpaʻa i kēia hihia.
ʻO ka mea mua, no ka noho ʻana o ka metadata leo lahilahi ma kahi mea i hoʻopaʻa ʻole ʻia, e kūlike ka metadata a e hoʻokaʻawale ʻia nā poho i loko o nā poloka ʻikepili.
E hōʻoiaʻiʻo ana ka pōʻaiapuni kiʻi paʻi kiʻi ma lalo nei i ka pololei o ka ʻikepili i loko o nā kiʻi paʻi i ka wā e nalowale ai ka huna huna:
- No kēlā me kēia leo lahilahi me ka inoa <name>, e hana i kahi kiʻi me ka inoa <name>.cached
- E hoʻonoho i ka paepae neʻe i kahi waiwai kiʻekiʻe kūpono:
#lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
- Ma ka loop nānā mākou i ka helu o nā poloka lepo i loko o ka cache:
#lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}'
a hiki i ka loaa ole. Inā lōʻihi ka lōʻihi o ka nalo ʻana o ka zero, hiki ke hana ʻia ma ka hoʻololi ʻana i ka cache i ke ʻano writethrough. Eia naʻe, me ka noʻonoʻo ʻana i nā hiʻohiʻona wikiwiki o kā mākou SATA a me NVMe SSD arrays, a me kā lākou kumu TBW, hiki iā ʻoe ke hopu koke i ka manawa me ka ʻole o ka hoʻololi ʻana i ke ʻano cache, a i ʻole e ʻai loa kāu hāmeʻa i kāna kumu waiwai āpau. he mau la. Ma muli o nā palena waiwai, ʻaʻole hiki i ka ʻōnaehana ma lalo o 100% ka ukana kākau i nā manawa āpau. ʻO kā mākou NVMe SSD ma lalo o 100% kākau haʻahaʻa e hoʻopau loa i ka waiwai i loko Lā i ka lā 3-4. ʻElua wale nō ka lōʻihi o ka SATA SSD. No laila, manaʻo mākou e hele ana ka hapa nui o ka ukana i ka heluhelu ʻana, a loaʻa iā mākou nā pōkole pōkole o ka hana kiʻekiʻe loa i hui pū ʻia me ka haʻahaʻa haʻahaʻa ma ka awelika no ke kākau ʻana. - I ka wā i loaʻa ai iā mākou (a i ʻole i hana ʻia) kahi zero, hoʻololi mākou i ka inoa <name>.cached i <name>.committed. Holoi ʻia ka <name>.committed kahiko.
- ʻO ke koho, inā he 100% piha ka cache, hiki ke hana hou ʻia e kahi palapala, no laila e hoʻomaʻemaʻe. Me kahi huna huna hapa, ʻoi aku ka wikiwiki o ka ʻōnaehana i ke kākau ʻana.
- E hoʻonoho i ka paepae neʻe i ka ʻole:
#lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata
ʻO kēia ka mea e pale ai i ka hūnā mai ka hoʻonohonoho ʻana i ka media nui. - Ke kali nei mākou a hiki i ka nui o nā hoʻololi e hōʻiliʻili i ka cache
#lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}'
a i ʻole e pio ka manawa. - Haʻi hou mākou.
No ke aha ka pilikia me ka paepae neʻe...?ʻO ka mea ma ka hoʻomaʻamaʻa maoli, ʻaʻole ʻokoʻa loa ka hoʻopaʻa ʻana "random". Inā mākou i kākau i kekahi mea i kahi māhele o 4 kilobytes ka nui, aia ke kūlana kiʻekiʻe i loko o nā minuke e hiki mai ana e hana ʻia kahi moʻolelo i ka mea like a i ʻole kekahi o nā ʻāpana kokoke (+- 32K).
Ma ka hoʻonohonoho ʻana i ka paepae neʻe i ka ʻole, hoʻopanee mākou i ke kākau ʻana ma ka SATA SSD a hōʻuluʻulu i kekahi mau loli i hoʻokahi poloka 64K i loko o ka cache. Mālama kēia i ka waiwai o SATA SSD.
Aia i hea ke code..?ʻO ka mea pōʻino, manaʻo ka mea kākau iā ia iho ʻaʻole i lawa ka mākaukau i ka hoʻomohala ʻana i nā palapala bash no ka mea he 100% ʻo ia i aʻo ponoʻī a hoʻomaʻamaʻa i ka hoʻomohala ʻana i ka "google", no laila ke manaʻoʻiʻo nei ʻo ia ʻaʻole pono e hoʻohana ʻia ke code weliweli e puka mai ana mai kona mau lima mai. ʻē aʻe.
Manaʻo wau e hiki i nā poʻe loea i kēia kahua ke hōʻike kūʻokoʻa i nā loina āpau i hōʻike ʻia ma luna, inā pono, a, malia paha, e hoʻolālā nani ʻia e like me ka lawelawe systemd, e like me ka mea i hoʻāʻo ai e hana.
ʻO kēlā ʻano hoʻololi snapshot maʻalahi e ʻae iā mākou ʻaʻole wale i hoʻokahi snapshot i hoʻonohonoho pono ʻia ma ka SATA SSD, akā e ʻae pū nō hoʻi iā mākou, me ka hoʻohana ʻana i ka thin_delta utility, e ʻike i nā poloka i hoʻololi ʻia ma hope o kona hana ʻia ʻana, a no laila e hoʻokaʻawale i ka pōʻino. nā puke nui, e hoʻomaʻamaʻa nui i ka hoʻihoʻi ʻana.
TRIM/DISCARD ma libvirt/KVM
No ka mea e hoʻohana ʻia ka waihona ʻikepili no ka holo ʻana o KVM libvirt, a laila he mea maikaʻi e aʻo i kā mākou mau VM ʻaʻole wale e lawe i kahi kaʻawale, akā e hoʻokuʻu i nā mea i pono ʻole.
Hana ʻia kēia ma ka hoʻohālikelike ʻana i ke kākoʻo TRIM/DISCARD ma nā disks virtual. No ka hana ʻana i kēia, pono ʻoe e hoʻololi i ke ʻano mea hoʻoponopono i virtio-scsi a hoʻoponopono i ka 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>
Hoʻoponopono pololei ʻia kēlā mau DISCARD mai nā OSes malihini e LVM, a ua hoʻokuʻu pololei ʻia nā poloka i loko o ka cache a i loko o ka loko wai lahilahi. I kā mākou hihia, loaʻa kēia ma ke ʻano lohi, i ka wā e holoi ai i ka snapshot aʻe.
BTRFS Backup
E hoʻohana i nā palapala i hana ʻia me ʻoi loa akahele a ma ka pilikia pono'ī. Ua kākau ka mea kākau i kēia code nona iho a nona wale nō. Manaʻo wau he nui nā mea hoʻohana Linux ʻike i nā mea hana like, a ʻaʻohe pono e kope i ka mea ʻē aʻe.
E hana kākou i ka leo ma ka mea hoʻihoʻi:
#lvcreate -L 256G --name backup backup
E hōʻano hou i ka BTRFS:
#mkfs.btrfs /dev/backup/backup
E hana kākou i nā wahi mauna a kau i nā ʻāpana kumu o ka ʻōnaehana faila:
#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
E hana mākou i nā papa kuhikuhi no nā waihona:
#mkdir /backup/btrfs/back/remote
#mkdir /backup/btrfs/back/remote/root
#mkdir /backup/btrfs/back/remote/boot
E hana kākou i papa kuhikuhi no nā kope kope:
#mkdir /root/btrfs-backup
E kope kāua i ka palapala:
Nui nā code bash weliweli. E hoʻohana i kāu pilikia ponoʻī. Mai kākau i nā leka huhū i ka mea kākau...#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
He aha ka hana ..?Loaʻa i kahi pūʻulu o nā kauoha maʻalahi no ka hana ʻana i nā kiʻi paʻi kiʻi BTRFS a kope iā lākou i kahi FS ʻē aʻe me ka hoʻouna / loaʻa ʻana o BTRFS.
Hiki ke lōʻihi ka hoʻomaka mua ʻana, no ka mea ... I ka hoʻomaka, e kope ʻia nā ʻikepili a pau. E wikiwiki loa nā hoʻolaha hou aku, no ka mea... E kope wale ʻia nā hoʻololi.
ʻO kahi palapala ʻē aʻe a mākou e hoʻokomo ai i ka cron:
ʻO kekahi code bash hou aʻe#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
He aha kāna hana ..?Hana a hoʻonohonoho i nā kiʻi paʻi kiʻi o nā puke BTRFS i helu ʻia ma ka waihona FS. Ma hope o kēia, holoi ʻia nā kiʻi āpau i hana ʻia he 60 lā i hala. Ma hope o ka hoʻomaka ʻana, e ʻike ʻia nā kiʻi paʻi o nā puke i helu ʻia ma ka /backup/btrfs/back/remote/subdirectories.
E hāʻawi i nā kuleana hoʻokō code:
#chmod +x /root/btrfs-backup/cron-daily.sh
#chmod +x /root/btrfs-backup/btrfs-backup.sh
E nānā a hoʻokomo i loko o ka 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
LVM mea hoʻihoʻi lahilahi
E hana kāua i kahi ʻauʻau lahilahi ma ka mea hoʻihoʻi:
#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T backup/thin-pool
E hoʻokomo i ka ddrescue, no ka mea... E hoʻohana nā ʻatikala i kēia mea hana:
#apt-get install gddrescue
E hana kākou i papa kuhikuhi no nā palapala:
#mkdir /root/lvm-thin-backup
E kope kākou i nā palapala:
Nui ka bash i loko ...#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
He aha kāna hana...?Loaʻa i kahi pūʻulu o nā kauoha no ka hoʻopunipuni ʻana i nā paʻi kiʻi lahilahi a me ka hoʻonohonoho ʻana i ka ʻokoʻa ma waena o nā kiʻi paʻi lahilahi ʻelua i loaʻa ma o thin_delta i kahi mea poloka ʻē aʻe me ka ddrescue a me ka blkdiscard.
ʻO kekahi palapala a mākou e hoʻokomo ai i ka cron:
ʻO kahi bash hou aʻe#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
He aha kāna hana...?Hoʻohana i ka palapala mua no ka hana ʻana a me ka hoʻonohonoho ʻana i nā backup o nā puke kikoʻī i helu ʻia. E waiho ka palapala i nā kiʻi paʻi ʻole o nā puke i helu ʻia, pono e nānā i nā loli mai ka hoʻonohonoho hope ʻana.
Pono e hoʻoponopono ʻia kēia palapala, e kuhikuhi ana i ka papa inoa o nā puke kikoʻī kahi e hana ʻia ai nā kope kope. ʻO nā inoa i hāʻawi ʻia no nā kumu hoʻohālike wale nō. Inā makemake ʻoe, hiki iā ʻoe ke kākau i kahi palapala e hoʻonohonoho i nā puke āpau.
Hāʻawi kāua i nā kuleana:
#chmod +x /root/lvm-thin-backup/cron-daily.sh
#chmod +x /root/lvm-thin-backup/lvm-thin-backup.sh
E nānā a hoʻokomo i loko o ka 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
E lōʻihi ka hoʻomaka mua ʻana, no ka mea ... e hoʻopili piha ʻia nā puke lahilahi ma ke kope ʻana i nā wahi āpau i hoʻohana ʻia. Mahalo iā LVM thin metadata, ʻike mākou i nā poloka i hoʻohana maoli ʻia, no laila e kope ʻia nā poloka leo lahilahi i hoʻohana maoli ʻia.
ʻO nā holo ma hope e kope i ka ʻikepili me ka hoʻololi ʻana i ka huli ʻana ma o LVM thin metadata.
E ʻike kākou i ka mea i hana ʻia:
#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
He aha ka pili ʻana o kēia me nā pēpē pūnana?
ʻO ka mea maʻamau, hāʻawi ʻia i hiki ke LVM LV logical volumes i LVM PV physical volumes no nā VG ʻē aʻe. Hiki i ka LVM ke recursive, e like me nā pēpē nesting. Hāʻawi kēia iā LVM i ka maʻalahi loa.
PS
Ma ka ʻatikala aʻe, e hoʻāʻo mākou e hoʻohana i nā ʻōnaehana mālama kelepona like ʻole / KVM ma ke ʻano he kumu no ka hana ʻana i kahi puʻupuʻu geo-distributed / vm cluster me ka redundancy ma nā ʻāina he nui me ka hoʻohana ʻana i nā desktop home, ka pūnaewele home a me nā pūnaewele P2P.
Source: www.habr.com