He aha ka like o LVM a me Matryoshka?

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:

  1. 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.
  2. 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:

  1. No kēlā me kēia leo lahilahi me ka inoa <name>, e hana i kahi kiʻi me ka inoa <name>.cached
  2. E hoʻonoho i ka paepae neʻe i kahi waiwai kiʻekiʻe kūpono: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. 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.
  4. 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.
  5. ʻ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.
  6. 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.
  7. 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.
  8. 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

Pākuʻi i ka manaʻo hoʻopuka