Kini LVM ati Matryoshka ni ni wọpọ?

O dara ọjọ.
Emi yoo fẹ lati pin pẹlu agbegbe iriri iṣẹ ṣiṣe mi ti kikọ eto ipamọ data fun KVM nipa lilo md RAID + LVM.

Eto naa yoo pẹlu:

  • Ilé md RAID 1 lati NVMe SSD.
  • Npejọpọ md RAID 6 lati SATA SSD ati awọn awakọ deede.
  • Awọn ẹya ti iṣẹ TRIM/DISCARD lori SSD RAID 1/6.
  • Ṣiṣẹda bootable md RAID 1/6 orun lori eto awọn disiki ti o wọpọ.
  • Fifi eto sori NVMe RAID 1 nigbati ko si atilẹyin NVMe ninu BIOS.
  • Lilo LVM kaṣe ati LVM tinrin.
  • Lilo BTRFS snapshots ati firanṣẹ/gba fun afẹyinti.
  • Lilo LVM tinrin snapshots ati thin_delta fun awọn afẹyinti ara BTRFS.

Ti o ba nife, jọwọ wo ologbo.

Gbólóhùn

Onkọwe ko ni ojuse eyikeyi fun awọn abajade ti lilo tabi lilo awọn ohun elo / apẹẹrẹ / koodu / awọn imọran / data lati nkan yii. Nipa kika tabi lilo ohun elo yii ni ọna eyikeyi, o gba ojuse fun gbogbo awọn abajade ti awọn iṣe wọnyi. Awọn abajade to ṣeeṣe pẹlu:

  • Garan-sisun NVMe SSDs.
  • Awọn orisun gbigbasilẹ ti lo patapata ati ikuna ti awọn awakọ SSD.
  • Pipadanu pipe ti gbogbo data lori gbogbo awọn awakọ, pẹlu awọn adakọ afẹyinti.
  • Aṣiṣe kọmputa hardware.
  • Akoko ti o padanu, awọn ara ati owo.
  • Eyikeyi miiran gaju ti o ko ba wa ni akojọ loke.

Iron

Ti o wa ni:

Modaboudu lati ni ayika 2013 pẹlu Z87 chipset, ni pipe pẹlu Intel mojuto i7 / Haswell.

  • Processor 4 ohun kohun, 8 okun
  • 32 GB DDR3 Ramu
  • 1 x 16 tabi 2 x 8 PCIe 3.0
  • 1 x 4 + 1 x 1 PCIe 2.0
  • 6 x 6 GBps SATA 3 asopọ

SAS ohun ti nmu badọgba LSI SAS9211-8I flashed to IT / HBA mode. Famuwia ti n ṣiṣẹ RAID ti ni imomose rọpo pẹlu famuwia HBA si:

  1. O le jabọ ohun ti nmu badọgba jade nigbakugba ki o rọpo rẹ pẹlu eyikeyi miiran ti o rii.
  2. TRIM/Jọ silẹ ṣiṣẹ deede lori awọn disiki, nitori... ni RAID famuwia awọn aṣẹ wọnyi ko ni atilẹyin rara, ati HBA, ni gbogbogbo, ko bikita iru awọn aṣẹ ti o tan kaakiri lori bosi naa.

Awọn dirafu lile - awọn ege 8 ti HGST Travelstar 7K1000 pẹlu agbara ti TB 1 ni ifosiwewe fọọmu 2.5, bi fun awọn kọnputa agbeka. Awọn awakọ wọnyi wa ni iṣaaju ni ọna RAID 6 kan. Wọn yoo tun ni lilo ninu eto tuntun. Lati tọju awọn afẹyinti agbegbe.

Ni afikun:

6 ege SATA SSD awoṣe Samsung 860 QVO 2TB. Awọn SSD wọnyi nilo iwọn nla kan, wiwa kaṣe SLC kan, igbẹkẹle, ati idiyele kekere ni a fẹ. Atilẹyin fun sisọnu/odo ni a nilo, eyiti a ṣayẹwo nipasẹ laini ni dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

Awọn ege 2 ti awoṣe NVMe SSD Samsung SSD 970 EVO 500GB.

Fun awọn SSD wọnyi, iyara kika/kikọ laileto ati agbara orisun fun awọn iwulo rẹ ṣe pataki. Radiator fun wọn. dandan. Nitootọ. Bibẹẹkọ, din-din wọn titi di crispy lakoko amuṣiṣẹpọ RAID akọkọ.

StarTech PEX8M2E2 ohun ti nmu badọgba fun 2 x NVMe SSD fi sori ẹrọ ni PCIe 3.0 8x Iho. Eyi, lẹẹkansi, jẹ HBA nikan, ṣugbọn fun NVMe. O yatọ si awọn oluyipada ti ko gbowolori ni pe ko nilo atilẹyin bifurcation PCIe lati inu modaboudu nitori wiwa ti iyipada PCIe ti a ṣe sinu. Yoo ṣiṣẹ paapaa ni eto atijọ julọ pẹlu PCIe, paapaa ti o ba jẹ aaye x1 PCIe 1.0. Nipa ti, ni iyara ti o yẹ. Ko si awọn RAID nibẹ. Nibẹ ni ko si-itumọ ti ni BIOS lori ọkọ. Nitorinaa, eto rẹ kii yoo kọ ẹkọ ti idan lati bata pẹlu NVMe, o kere pupọ ṣe NVMe RAID o ṣeun si ẹrọ yii.

Ẹya paati yii jẹ nikan nitori wiwa nikan 8x PCIe 3.0 ọfẹ ninu eto naa, ati pe, ti awọn iho ọfẹ 2 ba wa, o le ni rọọrun rọpo pẹlu Penny PEX4M2E1 meji tabi awọn analogues, eyiti o le ra nibikibi ni idiyele ti 600. rubles.

Awọn ijusile ti gbogbo iru hardware tabi-itumọ ti ni chipset/BIOS RAIDs ti a koto, ni ibere lati wa ni anfani lati patapata ropo gbogbo eto, pẹlu awọn sile ti SSD / HDD ara wọn, nigba ti toju gbogbo awọn data. Bi o ṣe yẹ, ki o le fipamọ paapaa ẹrọ ṣiṣe ti a fi sii nigbati o nlọ si ohun elo tuntun patapata / oriṣiriṣi. Ohun akọkọ ni pe awọn ebute oko oju omi SATA ati PCIe wa. O dabi CD ti o wa laaye tabi kọnputa filasi bootable, iyara pupọ ati kekere kan.

HumọBibẹẹkọ, o mọ ohun ti o ṣẹlẹ - nigbami o nilo ni iyara lati mu gbogbo akopọ pẹlu rẹ lati mu kuro. Sugbon Emi ko fẹ lati padanu data. Lati ṣe eyi, gbogbo awọn media ti a mẹnuba wa ni irọrun wa lori awọn kikọja ni awọn bays 5.25 ti ọran boṣewa.

O dara, ati, nitorinaa, fun idanwo pẹlu awọn ọna oriṣiriṣi ti caching SSD ni Linux.

Hardware raids ni o wa alaidun. Tan-an. O boya ṣiṣẹ tabi ko ṣe. Ati pẹlu mdadm awọn aṣayan nigbagbogbo wa.

Software

Ni iṣaaju, Debian 8 Jessie ti fi sori ẹrọ lori ohun elo, eyiti o sunmọ EOL. RAID 6 ni a pejọ lati awọn HDD ti a mẹnuba loke ti a so pọ pẹlu LVM. O ran awọn ẹrọ foju ni kvm/libvirt.

Nitori Onkọwe naa ni iriri ti o peye ni ṣiṣẹda awọn awakọ filasi SATA/NVMe to ṣee gbe, ati paapaa, lati ma ba fọ awoṣe deede deede, Ubuntu 18.04 ti yan bi eto ibi-afẹde, eyiti o ti ni iduroṣinṣin to, ṣugbọn tun ni awọn ọdun 3 ti atilẹyin ni ojo iwaju.

Eto ti a mẹnuba ni gbogbo awọn awakọ ohun elo ti a nilo lati inu apoti. A ko nilo sọfitiwia ẹnikẹta tabi awakọ.

Ngbaradi fun fifi sori ẹrọ

Lati fi eto naa sori ẹrọ a nilo Aworan Ojú-iṣẹ Ubuntu. Eto olupin naa ni diẹ ninu iru insitola ti o lagbara, eyiti o fihan ominira ti o pọ julọ ti ko le ṣe alaabo nipa gbigbe ipin eto UEFI sori ọkan ninu awọn disiki naa, ba gbogbo ẹwa jẹ. Nitorinaa, o ti fi sii nikan ni ipo UEFI. Ko funni eyikeyi awọn aṣayan.

Inu wa ko dun si eyi.

Почему?Laanu, bata UEFI ko dara ni ibamu pẹlu RAID sọfitiwia bata, nitori… Ko si ẹnikan ti o fun wa ni awọn ifiṣura fun ipin UEFI ESP. Awọn ilana wa lori ayelujara ti o daba gbigbe ipin ESP sori kọnputa filasi ni ibudo USB, ṣugbọn eyi jẹ aaye ikuna. Awọn ilana wa nipa lilo sọfitiwia mdadm RAID 1 sọfitiwia pẹlu ẹya metadata 0.9 ti ko ṣe idiwọ UEFI BIOS lati rii ipin yii, ṣugbọn eyi n gbe titi di akoko idunnu nigbati BIOS tabi OS hardware miiran kọ nkan si ESP ati gbagbe lati muuṣiṣẹpọ si miiran. awọn digi.

Ni afikun, bata UEFI da lori NVRAM, eyiti kii yoo gbe pẹlu awọn disiki si eto tuntun, nitori jẹ ara awọn modaboudu.

Nitorina, a yoo ko reinvent a titun kẹkẹ . A ti ni keke ti baba agba ti o ti ṣetan, ti idanwo akoko, ti a npe ni bata Legacy/BIOS, ti o ni orukọ igberaga ti CSM lori awọn eto ibaramu UEFI. A o kan gbe e kuro ni selifu, lubricate o, fifa soke awọn taya ati ki o nu rẹ pẹlu ọririn asọ.

Ẹya tabili tabili ti Ubuntu tun ko le fi sii daradara pẹlu Legacy bootloader, ṣugbọn nibi, bi wọn ṣe sọ, o kere ju awọn aṣayan wa.

Ati nitorinaa, a gba ohun elo ati fifuye eto naa lati inu kọnputa filasi bootable Ubuntu Live. A yoo nilo lati ṣe igbasilẹ awọn idii, nitorinaa a yoo ṣeto nẹtiwọọki ti o ṣiṣẹ fun ọ. Ti ko ba ṣiṣẹ, o le gbe awọn idii pataki sori kọnputa filasi ni ilosiwaju.

A lọ sinu agbegbe Ojú-iṣẹ, ṣe ifilọlẹ emulator ebute, ati pe a lọ:

#sudo bash

Bawo…?Laini ti o wa loke jẹ okunfa canonical fun holiwars nipa sudo. C bоti o tobi anfani wá atiоti o tobi ojuse. Ibeere naa jẹ boya o le gba lori ara rẹ. Ọpọlọpọ eniyan ro pe lilo sudo ni ọna yii o kere ju ko ṣọra. Sibẹsibẹ:

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

Kilode ti kii ṣe ZFS ...?Nigba ti a ba fi sọfitiwia sori kọnputa wa, a ya ohun elo wa ni pataki si awọn oluṣe idagbasoke sọfitiwia yii lati wakọ.
Nigba ti a ba gbẹkẹle sọfitiwia yii pẹlu aabo data wa, a gba awin kan ti o dọgba si idiyele ti mimu-pada sipo data yii, eyiti a yoo ni lati sanwo ni ọjọ kan.

Lati oju-ọna yii, ZFS jẹ Ferrari, ati mdadm + lvm jẹ diẹ sii bi keke.

Ni koko-ọrọ, onkọwe fẹran lati ya keke lori kirẹditi si awọn eniyan ti a ko mọ dipo Ferrari kan. Nibe, idiyele ti ọrọ naa ko ga. Ko si nilo fun awọn ẹtọ. Rọrun ju awọn ofin ijabọ lọ. Ọfẹ pa pa mọ. Agbara orilẹ-ede jẹ dara julọ. O le nigbagbogbo so awọn ẹsẹ mọ kẹkẹ kan, ati pe o le tun kẹkẹ kan ṣe pẹlu ọwọ ara rẹ.

Kini idi lẹhinna BTRFS…?Lati le bata ẹrọ ṣiṣe, a nilo eto faili kan ti o ni atilẹyin ni Legacy/BIOS GRUB lati inu apoti, ati ni akoko kanna ṣe atilẹyin awọn aworan ifiwe. A yoo lo fun / bata ipin. Ni afikun, onkọwe fẹran lati lo FS yii fun / (root), ko gbagbe lati ṣe akiyesi pe fun eyikeyi sọfitiwia miiran o le ṣẹda awọn ipin lọtọ lori LVM ati gbe wọn sinu awọn ilana pataki.

A kii yoo tọju eyikeyi awọn aworan ti awọn ẹrọ foju tabi awọn data data lori FS yii.
FS yii yoo ṣee lo nikan lati ṣẹda awọn aworan ti eto naa laisi pipa ati lẹhinna gbe awọn snapshots wọnyi si disk afẹyinti nipa lilo fifiranṣẹ / gbigba.

Ni afikun, onkọwe ni gbogbogbo fẹ lati tọju sọfitiwia o kere ju taara lori ohun elo ati ṣiṣe gbogbo sọfitiwia miiran ninu awọn ẹrọ foju ni lilo awọn nkan bii firanšẹ siwaju GPUs ati awọn oludari Gbalejo PCI-USB si KVM nipasẹ IOMMU.

Awọn ohun kan ṣoṣo ti o ku lori ohun elo jẹ ibi ipamọ data, agbara ipa ati afẹyinti.

Ti o ba gbẹkẹle ZFS diẹ sii, lẹhinna, ni ipilẹ, fun ohun elo pàtó kan wọn jẹ paarọ.

Bibẹẹkọ, onkọwe naa mọọmọ foju fojuri-itumọ ti mirroring/RAID ati awọn ẹya apọju ti ZFS, BRTFS ati LVM ni.

Gẹgẹbi ariyanjiyan afikun, BTRFS ni agbara lati yi awọn kikọ laileto sinu awọn ti o tẹle, eyiti o ni ipa ti o dara pupọ julọ lori iyara mimuuṣiṣẹpọ awọn fọto / awọn afẹyinti lori HDD.

Jẹ ki a tun gbogbo awọn ẹrọ yi pada:

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

Jẹ ki a wo yika:

#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

Ifilelẹ disk

NVMe SSD

Ṣugbọn a kii yoo samisi wọn ni eyikeyi ọna. Gbogbo kanna, BIOS wa ko rii awọn awakọ wọnyi. Nitorinaa, wọn yoo lọ patapata si RAID sọfitiwia. A kii yoo paapaa ṣẹda awọn apakan nibẹ. Ti o ba fẹ tẹle “canon” tabi “ni akọkọ”, ṣẹda ipin nla kan, bii HDD kan.

HDD SATA

Ko si ye lati pilẹ ohunkohun pataki nibi. A yoo ṣẹda apakan kan fun ohun gbogbo. A yoo ṣẹda ipin kan nitori BIOS rii awọn disiki wọnyi ati pe o le paapaa gbiyanju lati bata lati wọn. A yoo paapaa fi GRUB sori awọn disiki wọnyi nigbamii ki eto naa le ṣe eyi lojiji.

#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

Eyi ni ibi ti awọn nkan ṣe gba fun wa.

Ni akọkọ, awọn awakọ wa jẹ TB 2 ni iwọn. Eyi wa laarin iwọn itẹwọgba fun MBR, eyiti o jẹ ohun ti a yoo lo. Ti o ba wulo, le ti wa ni rọpo pẹlu GPT. Awọn disiki GPT ni ipele ibamu ti o fun laaye awọn ọna ṣiṣe ibaramu MBR lati wo awọn ipin 4 akọkọ ti wọn ba wa laarin awọn terabytes 2 akọkọ. Ohun akọkọ ni pe ipin bata ati ipin bios_grub lori awọn disiki wọnyi yẹ ki o wa ni ibẹrẹ. Eyi paapaa gba ọ laaye lati bata lati awọn awakọ GPT Legacy/BIOS.

Ṣugbọn eyi kii ṣe ọran tiwa.

Nibi a yoo ṣẹda awọn apakan meji. Eyi akọkọ yoo jẹ 1 GB ni iwọn ati lo fun RAID 1 / bata.

Ekeji yoo ṣee lo fun RAID 6 ati pe yoo gba gbogbo aaye ọfẹ ti o ku ayafi fun agbegbe kekere ti a ko pin ni opin awakọ naa.

Kini agbegbe ti a ko samisi?Gẹgẹbi awọn orisun lori nẹtiwọọki, awọn SATA SSDs wa lori ọkọ kaṣe SLC ti o gbooro ni agbara ti o wa ni iwọn lati 6 si 78 gigabytes. A gba 6 gigabytes "fun ọfẹ" nitori iyatọ laarin "gigabyte" ati "gibibytes" ninu iwe data ti drive naa. Awọn gigabytes 72 ti o ku ni a pin lati aaye ti ko lo.

Nibi o yẹ ki o ṣe akiyesi pe a ni kaṣe SLC, ati pe aaye naa wa ni ipo 4 bit MLC. Ewo fun wa ni imunadoko tumọ si pe fun gbogbo gigabytes 4 ti aaye ọfẹ a yoo gba 1 gigabyte ti kaṣe SLC nikan.

Ṣe isodipupo 72 gigabytes nipasẹ 4 ati gba 288 gigabytes. Eyi ni aaye ọfẹ ti a kii yoo samisi jade lati gba awọn awakọ laaye lati lo kaṣe SLC ni kikun.

Nitorinaa, a yoo ni imunadoko to 312 gigabytes ti kaṣe SLC lati apapọ awọn awakọ mẹfa. Ninu gbogbo awọn awakọ, 2 yoo ṣee lo ni RAID fun apọju.

Iwọn kaṣe yii yoo gba wa laaye lati ṣọwọn pupọ julọ ni igbesi aye gidi pade ipo kan nibiti kikọ ko lọ si kaṣe. Eleyi lalailopinpin daradara isanpada fun awọn saddest drawback ti QLC iranti - awọn lalailopinpin kekere kikọ iyara nigba ti data ti wa ni kọ nipa fori kaṣe. Ti awọn ẹru rẹ ko ba ni ibamu si eyi, lẹhinna Mo ṣeduro pe ki o ronu lile nipa bii igba ti SSD rẹ yoo pẹ to labẹ iru ẹru kan, ni akiyesi TBW lati iwe data naa.

#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

Ṣiṣẹda Arrays

Ni akọkọ, a nilo lati tun lorukọ ẹrọ naa. Eyi jẹ dandan nitori orukọ agbalejo jẹ apakan ti orukọ orun ni ibikan ninu mdadm ati pe o kan nkan kan ni ibikan. Nitoribẹẹ, awọn akojọpọ le jẹ lorukọmii nigbamii, ṣugbọn eyi jẹ igbesẹ ti ko wulo.

#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

Kilode - ro-mimọ...?Lati yago fun pilẹṣẹ awọn akojọpọ. Fun awọn ipele RAID mejeeji 1 ati 6 eyi wulo. Ohun gbogbo le ṣiṣẹ laisi ipilẹṣẹ ti o ba jẹ opo tuntun. Pẹlupẹlu, ipilẹṣẹ ipilẹ SSD lori ẹda jẹ egbin ti awọn orisun TBW. A lo TRIM/DISCARD nibiti o ti ṣee ṣe lori awọn akojọpọ SSD ti o pejọ lati “pilẹṣẹ” wọn.

Fun awọn akojọpọ SSD, RAID 1 DISCARD ni atilẹyin lati inu apoti.

Fun awọn eto SSD RAID 6 DISCARD, o gbọdọ muu ṣiṣẹ ni awọn paramita module ekuro.

Eyi yẹ ki o ṣee ṣe ti gbogbo awọn SSD ti a lo ni awọn ipele 4/5/6 ninu eto yii ni atilẹyin iṣẹ fun discard_zeroes_data. Nigba miiran o wa awọn awakọ ajeji ti o sọ fun ekuro pe iṣẹ yii ni atilẹyin, ṣugbọn ni otitọ kii ṣe nibẹ, tabi iṣẹ naa ko ṣiṣẹ nigbagbogbo. Ni akoko yii, atilẹyin wa ni ibi gbogbo, sibẹsibẹ, awọn awakọ atijọ ati famuwia wa pẹlu awọn aṣiṣe. Fun idi eyi, atilẹyin DISCARD jẹ alaabo nipasẹ aiyipada fun RAID 6.

Ifarabalẹ, aṣẹ atẹle yoo pa gbogbo data run lori awọn awakọ NVMe nipa “ibẹrẹ” orun pẹlu “odo”.

#blkdiscard /dev/md0

Ti nkan kan ba jẹ aṣiṣe, gbiyanju pato igbesẹ kan.

#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

Kilode to tobi...?Pipọsi iwọn chunk ni ipa rere lori iyara ti kika laileto ni awọn bulọọki titi di isunmọ chunk-iwọn. Eyi ṣẹlẹ nitori iṣẹ kan ti iwọn ti o yẹ tabi kere si le pari patapata lori ẹrọ kan. Nitorinaa, IOPS lati gbogbo awọn ẹrọ ni akopọ. Gẹgẹbi awọn iṣiro, 99% ti IO ko kọja 512K.

RAID 6 IOPS fun kikọ nigbagbogbo kere ju tabi dogba si IOPS ti awakọ kan. Nigbawo, gẹgẹbi kika laileto, IOPS le jẹ awọn igba pupọ ti o tobi ju ti awakọ kan lọ, ati pe nibi iwọn idina jẹ pataki pataki.
Onkọwe ko rii aaye naa ni igbiyanju lati mu paramita kan dara julọ ti o buru ni RAID 6 nipasẹ-apẹrẹ ati dipo iṣapeye ohun ti RAID 6 dara ni.
A yoo san ẹsan fun kikọ laileto ti RAID 6 pẹlu kaṣe NVMe kan ati awọn ẹtan ipese tinrin.

A ko tii mu DISCARD ṣiṣẹ fun RAID 6. Nitorinaa a kii yoo “pilẹṣẹ” orun yii fun bayi. A yoo ṣe eyi nigbamii, lẹhin fifi OS sii.

HDD SATA

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

LVM lori NVMe RAID

Fun iyara, a fẹ gbe eto faili gbongbo sori NVMe RAID 1 eyiti o jẹ / dev/md0.
Bibẹẹkọ, a yoo tun nilo eto iyara yii fun awọn iwulo miiran, gẹgẹbi swap, metadata ati LVM-cache ati LVM-tinrin metadata, nitorinaa a yoo ṣẹda LVM VG kan lori titobi yii.

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

Jẹ ki a ṣẹda ipin kan fun eto faili root.

#lvcreate -L 128G --name root root

Jẹ ki a ṣẹda ipin kan fun swapping ni ibamu si awọn iwọn ti Ramu.

#lvcreate -L 32G --name swap root

OS fifi sori

Ni apapọ, a ni ohun gbogbo pataki lati fi sori ẹrọ eto naa.

Lọlẹ oluṣeto fifi sori ẹrọ lati agbegbe Ubuntu Live. Deede fifi sori. Nikan ni ipele ti yiyan disks fun fifi sori, o nilo lati pato awọn wọnyi:

  • / dev / md1, - òke ojuami / bata, FS - BTRFS
  • / dev / root / root (aka / dev / mapper / root-root), - aaye oke / (root), FS - BTRFS
  • / dev/root/swap (aka / dev/mapper/root-swap), - lo bi ipin swap
  • Fi sori ẹrọ bootloader lori /dev/sda

Nigbati o ba yan BTRFS gẹgẹbi eto faili gbongbo, insitola yoo ṣẹda awọn iwọn didun BTRFS meji laifọwọyi ti a npè ni "@" fun / (root), ati "@home" fun / ile.

Jẹ ki a bẹrẹ fifi sori ẹrọ ...

Fifi sori ẹrọ yoo pari pẹlu apoti ibaraẹnisọrọ modal ti n tọka aṣiṣe ni fifi sori ẹrọ bootloader. Laanu, iwọ kii yoo ni anfani lati jade kuro ni ibaraẹnisọrọ yii nipa lilo awọn ọna boṣewa ati tẹsiwaju fifi sori ẹrọ naa. A jade kuro ninu eto ati wọle lẹẹkansii, ti o pari ni tabili Ubuntu Live mimọ. Ṣii ebute naa, ati lẹẹkansi:

#sudo bash

Ṣẹda agbegbe chroot lati tẹsiwaju fifi sori ẹrọ:

#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

Jẹ ki a tunto nẹtiwọọki ati orukọ olupin ni chroot:

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

Jẹ ki a lọ sinu agbegbe chroot:

#chroot /mnt/chroot

Ni akọkọ, a yoo pese awọn apoti:

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

Jẹ ki a ṣayẹwo ati ṣatunṣe gbogbo awọn idii ti a fi sori ẹrọ ni wiwọ nitori fifi sori ẹrọ ti ko pe:

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

Ti nkan ko ba ṣiṣẹ, o le nilo lati ṣatunkọ /etc/apt/sources.list ni akọkọ

Jẹ ki a ṣatunṣe awọn paramita fun module RAID 6 lati mu TRIM/DISCARD ṣiṣẹ:

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

Jẹ ki a tweak awọn akopọ wa diẹ:

#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

Kini o jẹ..?A ti ṣẹda ṣeto awọn ofin udev ti yoo ṣe atẹle naa:

  • Ṣeto iwọn kaṣe bulọọki fun RAID 2020 lati jẹ deede fun ọdun 6. Iwọn aiyipada, o dabi pe ko yipada lati ipilẹṣẹ Linux, ati pe ko pe fun igba pipẹ.
  • Ṣe ifipamọ o kere ju IO fun iye akoko awọn sọwedowo/amuṣiṣẹpọ. Eyi ni lati ṣe idiwọ awọn eto rẹ lati di ni ipo amuṣiṣẹpọ ayeraye labẹ ẹru.
  • Fi opin si IO ti o pọju lakoko awọn sọwedowo/muṣiṣẹpọ ti awọn akojọpọ. Eyi jẹ dandan ki mimuuṣiṣẹpọ/ṣayẹwo SSD RAIDs ko ni din awọn awakọ rẹ si agaran. Eyi jẹ otitọ paapaa fun NVMe. (E ranti nipa imooru naa? Emi ko nse awada.)
  • Dena awọn disiki lati didaduro yiyi spindle (HDD) nipasẹ APM ati ṣeto akoko isunmọ fun awọn oludari disk si awọn wakati 7. O le mu APM kuro patapata ti awọn awakọ rẹ ba le ṣe (-B 255). Pẹlu iye aiyipada, awọn awakọ yoo da duro lẹhin iṣẹju-aaya marun. Lẹhinna OS fẹ lati tun kaṣe disk pada, awọn disiki yoo yi pada lẹẹkansi, ati pe ohun gbogbo yoo bẹrẹ lẹẹkansii. Awọn disiki ni opin ti o pọju nọmba ti awọn iyipo spindle. Iru yiyipo aiyipada ti o rọrun le pa awọn disiki rẹ ni rọọrun ni ọdun meji kan. Kii ṣe gbogbo awọn disks jiya lati eyi, ṣugbọn tiwa jẹ awọn “kọǹpútà alágbèéká”, pẹlu awọn eto aiyipada ti o yẹ, eyiti o jẹ ki RAID dabi mini-MAID.
  • Fi sori ẹrọ readhead lori awọn disiki (yiyi) 1 megabyte - awọn bulọọki itẹlera meji / chunk RAID 6
  • Pa readhead lori awọn orun ara wọn.

Jẹ ki a ṣatunkọ /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

Kini idii iyẹn..?A yoo wa ipin / bata nipasẹ UUID. Orukọ orukọ le yipada ni imọ-jinlẹ.

A yoo wa awọn apakan ti o ku nipasẹ awọn orukọ LVM ni akọsilẹ / dev/mapper/vg-lv, nitori nwọn da awọn ipin oyimbo oto.

A ko lo UUID fun LVM nitori UUID ti awọn ipele LVM ati awọn aworan iwoye wọn le jẹ kanna.Oke / dev/mapper/root-root .. lemeji?Bẹẹni. Gangan. Ẹya ti BTRFS. Eto faili yii le gbe soke ni igba pupọ pẹlu oriṣiriṣi awọn subvols.

Nitori ẹya kanna, Mo ṣeduro ko ṣẹda awọn aworan aworan LVM ti awọn iwọn BTRFS ti nṣiṣe lọwọ. O le gba iyalẹnu nigbati o tun bẹrẹ.

Jẹ ki a tun atunto mdadm naa:

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

Jẹ ki a ṣatunṣe awọn eto 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

Kini o jẹ..?A ti ṣiṣẹ imugboroja adaṣe ti awọn adagun kekere LVM nigbati o de 90% ti aaye ti o tẹdo nipasẹ 5% ti iwọn didun.

A ti pọ si nọmba ti o pọju ti awọn bulọọki kaṣe fun kaṣe LVM.

A ti ṣe idiwọ LVM lati wa awọn iwọn LVM (PV) lori:

  • Awọn ẹrọ ti o ni kaṣe LVM ninu (cdata)
  • Awọn ẹrọ ti a fipamọ ni lilo kaṣe LVM, ti o kọja kaṣe naa ( _korigi). Ni ọran yii, ẹrọ ti a fipamọ funrararẹ yoo tun ṣe ayẹwo nipasẹ kaṣe (o kan ).
  • Awọn ẹrọ ti o ni awọn metadata kaṣe LVM ninu (cmeta)
  • gbogbo awọn ẹrọ ni VG pẹlu awọn aworan orukọ. Nibi a yoo ni awọn aworan disiki ti awọn ẹrọ foju, ati pe a ko fẹ LVM lori agbalejo lati mu awọn ipele ti o jẹ ti OS alejo ṣiṣẹ.
  • gbogbo awọn ẹrọ ni VG pẹlu afẹyinti orukọ. Nibi a yoo ni awọn ẹda afẹyinti ti awọn aworan ẹrọ foju.
  • gbogbo awọn ẹrọ ti orukọ wọn pari pẹlu “gpv” (iwọn ti ara alejo)

A ti mu atilẹyin DISCARD ṣiṣẹ nigbati o ba nfi aaye ọfẹ silẹ lori LVM VG. Ṣọra. Eyi yoo jẹ ki piparẹ awọn LV lori SSD jẹ akoko-n gba. Eyi paapaa kan si SSD RAID 6. Sibẹsibẹ, ni ibamu si ero naa, a yoo lo ipese tinrin, nitorinaa eyi kii yoo ṣe idiwọ wa rara.

Jẹ ki a ṣe imudojuiwọn aworan initramfs:

#update-initramfs -u -k all

Fi sori ẹrọ ati tunto grub:

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

Awọn disiki wo ni o yẹ ki o yan?Gbogbo awon ti sd*. Eto naa gbọdọ ni anfani lati bata lati eyikeyi awakọ SATA ti n ṣiṣẹ tabi SSD.

Kini idi ti wọn fi kun os-prober ..?Fun nmu ominira ati playful ọwọ.

Ko ṣiṣẹ ni deede ti ọkan ninu awọn RAID ba wa ni ipo ibajẹ. O gbìyànjú lati wa OS lori awọn ipin ti o lo ninu awọn ẹrọ foju nṣiṣẹ lori ohun elo yii.

Ti o ba nilo rẹ, o le fi silẹ, ṣugbọn ranti gbogbo awọn ti o wa loke. Mo ṣeduro wiwa awọn ilana fun yiyọ kuro awọn ọwọ alaigbọran lori ayelujara.

Pẹlu eyi a ti pari fifi sori ẹrọ akọkọ. O to akoko lati tun bẹrẹ sinu OS tuntun ti a fi sori ẹrọ. Maṣe gbagbe lati yọ CD/USB Live Live bootable kuro.

#exit
#reboot

Yan eyikeyi ti SATA SSDs bi ẹrọ bata.

LVM lori SATA SSD

Ni aaye yii, a ti bẹrẹ tẹlẹ sinu OS tuntun, tunto nẹtiwọọki, apt, ṣii emulator ebute, ati ṣe ifilọlẹ:

#sudo bash

Jẹ ki a tẹsiwaju.

“Ibẹrẹ” titobi lati SATA SSD:

#blkdiscard /dev/md2

Ti ko ba ṣiṣẹ, lẹhinna gbiyanju:

#blkdiscard --step 65536 /dev/md2
Ṣẹda LVM VG lori SATA SSD:

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

Kini idi ti VG miiran ..?Ni otitọ, a ti ni VG ti a npè ni root. Kilode ti o ko fi ohun gbogbo sinu VG kan?

Ti ọpọlọpọ awọn PV ba wa ni VG kan, lẹhinna fun VG lati muu ṣiṣẹ ni deede, gbogbo awọn PV gbọdọ wa ni bayi (online). Iyatọ jẹ LVM RAID, eyiti a mọọmọ ko lo.

A fẹ gaan pe ti ikuna ba wa (pipadanu data kika) lori eyikeyi awọn ọna RAID 6, ẹrọ ṣiṣe yoo bata ni deede ati fun wa ni aye lati yanju iṣoro naa.

Lati ṣe eyi, ni ipele akọkọ ti abstraction a yoo ya sọtọ iru kọọkan ti ara “media” sinu VG lọtọ.

Ni sisọ imọ-jinlẹ, awọn ọna RAID oriṣiriṣi wa si oriṣiriṣi “awọn ibugbe igbẹkẹle”. Iwọ ko gbọdọ ṣẹda aaye ikuna ti o wọpọ fun wọn nipa sisọ wọn sinu VG kan.

Iwaju LVM ni ipele “hardware” yoo gba wa laaye lati ge awọn ege lainidii ti awọn oriṣiriṣi oriṣiriṣi RAID nipa apapọ wọn ni awọn ọna oriṣiriṣi. Fun apẹẹrẹ - ṣiṣe ni akoko kanna bcache + LVM tinrin, bcache + BTRFS, kaṣe LVM + LVM tinrin, iṣeto ZFS eka kan pẹlu awọn caches, tabi eyikeyi idapọ apaadi miiran lati gbiyanju ati afiwe gbogbo rẹ.

Ni ipele “hardware”, a kii yoo lo ohunkohun miiran ju awọn iwọn LVM “nipọn” atijọ ti o dara. Iyatọ si ofin yii le jẹ ipin afẹyinti.

Mo ro pe ni akoko yii, ọpọlọpọ awọn onkawe ti bẹrẹ lati fura nkankan nipa ọmọlangidi itẹ-ẹiyẹ naa.

LVM lori SATA HDD

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

VG tuntun lẹẹkansi..?A fẹ gaan pe ti eto disiki ti a yoo lo fun afẹyinti data kuna, ẹrọ ṣiṣe wa yoo tẹsiwaju lati ṣiṣẹ ni deede, lakoko ti o ṣetọju iraye si data ti kii ṣe afẹyinti bi igbagbogbo. Nitorinaa, lati yago fun awọn iṣoro imuṣiṣẹ VG, a ṣẹda VG lọtọ.

Ṣiṣeto kaṣe LVM

Jẹ ki a ṣẹda LV kan lori NVMe RAID 1 lati lo bi ẹrọ caching.

#lvcreate -L 70871154688B --name cache root

Kini idi ti o kere pupọ…?Otitọ ni pe awọn NVMe SSD wa tun ni kaṣe SLC kan. 4 gigabytes ti “ọfẹ” ati gigabytes 18 ti agbara nitori aaye ọfẹ ti o wa ni 3-bit MLC. Ni kete ti kaṣe yii ti rẹ, Awọn NVMe SSDs kii yoo yara pupọ ju SATA SSD wa pẹlu kaṣe. Lootọ, fun idi eyi, ko ṣe oye fun wa lati ṣe ipin kaṣe LVM tobi pupọ ju ilọpo meji iwọn kaṣe SLC ti awakọ NVMe. Fun awọn awakọ NVMe ti a lo, onkọwe ka pe o ni oye lati ṣe 32-64 gigabytes ti kaṣe.

Iwọn ipin ti a fun ni a nilo lati ṣeto 64 gigabytes ti kaṣe, metadata kaṣe, ati afẹyinti metadata.

Ni afikun, Mo ṣe akiyesi pe lẹhin tiipa eto idọti kan, LVM yoo samisi gbogbo kaṣe bi idọti ati pe yoo muṣiṣẹpọ lẹẹkansii. Jubẹlọ, yi yoo wa ni tun ni gbogbo igba ti lvchange ti lo lori ẹrọ yi titi awọn eto ti wa ni atunbere lẹẹkansi. Nitorinaa, Mo ṣeduro lẹsẹkẹsẹ tun kaṣe naa nipa lilo iwe afọwọkọ ti o yẹ.

Jẹ ki a ṣẹda LV kan lori SATA RAID 6 lati lo bi ẹrọ ti a fi pamọ.

#lvcreate -L 3298543271936B --name cache data

Kilode ti terabyte meta nikan..?Nitorinaa, ti o ba jẹ dandan, o le lo SATA SSD RAID 6 fun diẹ ninu awọn iwulo miiran. Iwọn aaye ti a fipamọ le pọ si ni agbara, lori fo, laisi idaduro eto naa. Lati ṣe eyi, o nilo lati da duro fun igba diẹ ki o tun mu kaṣe ṣiṣẹ, ṣugbọn anfani pataki ti LVM-cache lori, fun apẹẹrẹ, bcache ni pe eyi le ṣee ṣe lori fo.

Jẹ ki a ṣẹda VG tuntun fun caching.

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

Jẹ ki a ṣẹda LV lori ẹrọ ti a fipamọ.

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

Nibi a lẹsẹkẹsẹ gba gbogbo aaye ọfẹ lori / dev/data/cache ki gbogbo awọn ipin pataki miiran ti ṣẹda lẹsẹkẹsẹ lori / dev/root/cache. Ti o ba ṣẹda nkan ni aaye ti ko tọ, o le gbe ni lilo pvmove.

Jẹ ki a ṣẹda ati mu kaṣe ṣiṣẹ:

#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

Kini idi ti iru chunksize bẹẹ..?Nipasẹ awọn adanwo ti o wulo, onkọwe ni anfani lati rii pe abajade ti o dara julọ ni aṣeyọri ti iwọn bulọọki kaṣe LVM ba baamu pẹlu iwọn bulọọki tinrin LVM. Jubẹlọ, awọn kere awọn iwọn, awọn dara iṣeto ni ṣe ni a ID gbigbasilẹ.

64k ni awọn kere Àkọsílẹ iwọn laaye fun LVM tinrin.

Ṣọra atunkọ ..!Bẹẹni. Iru kaṣe yii da duro lati kọ amuṣiṣẹpọ si ẹrọ ti a fi pamọ. Eyi tumọ si pe ti kaṣe naa ba sọnu, o le padanu data lori ẹrọ ti a fipamọ. Nigbamii, onkọwe yoo sọ fun ọ kini awọn igbese, ni afikun si NVMe RAID 1, le ṣee mu lati sanpada fun eewu yii.

Iru kaṣe yii ni a yan imomose lati sanpada fun iṣẹ kikọ lainidii ti RAID 6.

Jẹ ki a ṣayẹwo ohun ti a ni:

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

Nikan [cachedata_corig] yẹ ki o wa lori /dev/data/cache. Ti nkan kan ba jẹ aṣiṣe, lẹhinna lo pvmove.

O le mu kaṣe kuro ti o ba jẹ dandan pẹlu aṣẹ kan:

#lvconvert -y --uncache cache/cachedata

Eyi ni a ṣe lori ayelujara. LVM yoo rọrun mu kaṣe naa ṣiṣẹpọ mọ disk, yọ kuro, ki o tunrukọ cachedata_corig pada si cachedata.

Eto LVM tinrin

Jẹ ki a ṣe iṣiro ni aijọju iye aaye ti a nilo fun metadata tinrin LVM:

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

Yika soke si 4 gigabytes: 4294967296B

Ṣe isodipupo nipasẹ meji ki o ṣafikun 4194304B fun metadata LVM PV: 8594128896B
Jẹ ki a ṣẹda ipin lọtọ lori NVMe RAID 1 lati gbe LVM metadata tinrin ati ẹda afẹyinti wọn sori rẹ:

#lvcreate -L 8594128896B --name images root

Fun kini..?Nibi ibeere naa le dide: kilode ti o gbe LVM metadata tinrin lọtọ ti yoo tun jẹ cache lori NVMe ati pe yoo ṣiṣẹ ni iyara.

Biotilẹjẹpe iyara jẹ pataki nibi, o jina si idi akọkọ. Ohun naa ni pe kaṣe jẹ aaye ikuna. Nkankan le ṣẹlẹ si rẹ, ati pe ti LVM metadata tinrin ti wa ni ipamọ, yoo fa ki ohun gbogbo sọnu patapata. Laisi metadata pipe, yoo jẹ ohun ti ko ṣee ṣe lati ṣajọ awọn iwọn tinrin.

Nipa gbigbe metadata si lọtọ ti kii ṣe cache, ṣugbọn yara, iwọn didun, a ṣe iṣeduro aabo ti metadata ni iṣẹlẹ ti ipadanu kaṣe tabi ibajẹ. Ni ọran yii, gbogbo ibajẹ ti o fa nipasẹ pipadanu kaṣe yoo wa ni agbegbe inu awọn iwọn tinrin, eyiti yoo jẹ ki ilana imularada rọrun nipasẹ awọn aṣẹ titobi. Pẹlu iṣeeṣe giga kan, awọn bibajẹ wọnyi yoo tun pada ni lilo awọn akọọlẹ FS.

Pẹlupẹlu, ti o ba ti ya aworan ti iwọn tinrin ni iṣaaju, ati lẹhin iyẹn, kaṣe naa ti muṣiṣẹpọ ni kikun o kere ju lẹẹkan, lẹhinna, nitori apẹrẹ inu ti tinrin LVM, iduroṣinṣin ti fọto yoo jẹ iṣeduro ni iṣẹlẹ ti pipadanu kaṣe. .

Jẹ ki a ṣẹda VG tuntun ti yoo jẹ iduro fun ipese tinrin:

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

Jẹ ki a ṣẹda adagun kan:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
Kí nìdí -Z yNi afikun si ohun ti ipo yii jẹ ipinnu fun gangan - lati ṣe idiwọ data lati ẹrọ foju kan lati jijo si ẹrọ foju miiran nigbati aaye ba n pin kaakiri - zeroing jẹ afikun ohun ti a lo lati mu iyara kikọ laileto pọ si ni awọn bulọọki kere ju 64k. Kọ eyikeyi ti o kere ju 64k si agbegbe ti a ko pin tẹlẹ ti iwọn tinrin yoo di 64K eti-eti ni kaṣe. Eyi yoo gba iṣẹ naa laaye lati ṣee ṣe patapata nipasẹ kaṣe, ni ikọja ẹrọ ti a fi pamọ.

Jẹ ki a gbe awọn LV lọ si awọn PV ti o baamu:

#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

Jẹ ki a ṣayẹwo:

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

Jẹ ki a ṣẹda iwọn didun tinrin fun awọn idanwo:

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

A yoo fi awọn idii sori ẹrọ fun awọn idanwo ati ibojuwo:

#apt-get install sysstat fio

Eyi ni bii o ṣe le ṣe akiyesi ihuwasi ti iṣeto ibi ipamọ wa ni akoko gidi:

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

Eyi ni bii a ṣe le ṣe idanwo iṣeto wa:

#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

Ni ifarabalẹ! Orisun!Koodu yii yoo ṣiṣẹ awọn idanwo oriṣiriṣi 36, ọkọọkan nṣiṣẹ fun awọn aaya 4. Idaji ninu awọn idanwo wa fun gbigbasilẹ. O le ṣe igbasilẹ pupọ lori NVMe ni iṣẹju-aaya 4. Titi di gigabytes 3 fun iṣẹju kan. Nitorinaa, ṣiṣe awọn idanwo kikọ kọọkan le jẹ to 216 gigabytes ti orisun SSD lati ọdọ rẹ.

Kika ati kikọ adalu?Bẹẹni. O jẹ oye lati ṣiṣe kika ati kọ awọn idanwo lọtọ. Pẹlupẹlu, o jẹ oye lati rii daju pe gbogbo awọn caches ti wa ni mimuuṣiṣẹpọ ki kikọ tẹlẹ ko ni ipa lori kika naa.

Awọn abajade yoo yatọ pupọ lakoko ifilọlẹ akọkọ ati awọn atẹle bi kaṣe ati iwọn didun tinrin kun, ati tun da lori boya eto naa ṣakoso lati muṣiṣẹpọ awọn kaṣe ti o kun lakoko ifilọlẹ to kẹhin.

Lara awọn ohun miiran, Mo ṣeduro wiwọn iyara lori iwọn didun tinrin ti o kun tẹlẹ lati eyiti o kan ya aworan kan. Onkọwe naa ni aye lati ṣe akiyesi bii awọn kikọ laileto ṣe yiyara lẹsẹkẹsẹ lẹhin ṣiṣẹda aworan akọkọ, ni pataki nigbati kaṣe ko ti kun patapata. Eyi ṣẹlẹ nitori daakọ-lori-kikọ kikọ atunmọ, titete kaṣe ati awọn bulọọki iwọn didun tinrin, ati otitọ pe kikọ laileto kan si RAID 6 yipada si kika laileto lati RAID 6 atẹle nipa kikọ si kaṣe naa. Ninu iṣeto wa, kika laileto lati RAID 6 jẹ to awọn akoko 6 (nọmba ti SATA SSDs ninu titobi) yiyara ju kikọ. Nitori Awọn bulọọki fun CoW ni a pin lẹsẹsẹ lati adagun tinrin, lẹhinna gbigbasilẹ, fun apakan pupọ julọ, tun yipada si lẹsẹsẹ.

Mejeji awọn ẹya wọnyi le ṣee lo si anfani rẹ.

Kaṣe “iṣọkan” snapshots

Lati dinku eewu ti ipadanu data ni ọran ibajẹ / isonu kaṣe, onkọwe daba lati ṣafihan iṣe ti yiyi awọn fọto lati ṣe iṣeduro iduroṣinṣin wọn ninu ọran yii.

Ni akọkọ, nitori awọn metadata iwọn didun tinrin gbe lori ẹrọ ti ko ni ipamọ, metadata yoo wa ni ibamu ati pe awọn adanu ti o ṣeeṣe yoo ya sọtọ laarin awọn bulọọki data.

Yiyiyiyi fọto fọto atẹle yii ṣe iṣeduro iduroṣinṣin ti data inu awọn aworan aworan ni ọran ti ipadanu kaṣe:

  1. Fun iwọn didun tinrin kọọkan pẹlu orukọ <orukọ>, ṣẹda aworan kan pẹlu orukọ <orukọ>.cached
  2. Jẹ ki a ṣeto iloro ijira si iye ti o ga julọ: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. Ninu lupu a ṣayẹwo nọmba awọn bulọọki idọti ninu kaṣe: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' titi a o fi gba odo. Ti odo ba sonu fun gun ju, o le ṣẹda nipasẹ yiyipada kaṣe fun igba diẹ si ipo kikọ. Bibẹẹkọ, ni akiyesi awọn abuda iyara ti awọn ọna SATA ati NVMe SSD wa, ati awọn orisun TBW wọn, iwọ yoo ni anfani lati yara mu akoko naa laisi yiyipada ipo kaṣe, tabi ohun elo rẹ yoo jẹ gbogbo awọn orisun rẹ ni kikun. kan diẹ ọjọ. Nitori awọn idiwọn orisun, eto naa, ni ipilẹ, ko lagbara lati wa labẹ 100% kikọ fifuye ni gbogbo igba. Awọn NVMe SSD wa labẹ fifuye kikọ 100% yoo mu awọn orisun naa mu patapata 3-4 ọjọ. SATA SSDs yoo ṣiṣe ni ilọpo meji bi gigun. Nitorinaa, a yoo ro pe pupọ julọ ẹru naa lọ si kika, ati pe a ni awọn nwaye igba kukuru ti iṣẹ ṣiṣe giga pupọ ni idapo pẹlu ẹru kekere ni apapọ fun kikọ.
  4. Ni kete ti a ba mu (tabi ṣe) odo kan, a tun lorukọ <orukọ>.cached si <orukọ>.committed. Atijọ <orukọ>.committed ti paarẹ.
  5. Ni iyan, ti kaṣe ba jẹ 100% ni kikun, o le tun ṣe nipasẹ iwe afọwọkọ kan, nitorinaa imukuro rẹ. Pẹlu kaṣe idaji-ofo, eto naa n ṣiṣẹ ni iyara pupọ nigbati kikọ.
  6. Ṣeto iloro iṣiwa si odo: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata Eyi yoo ṣe idiwọ kaṣe fun igba diẹ lati muṣiṣẹpọ si media akọkọ.
  7. A duro titi di igba pupọ awọn ayipada ti o ṣajọpọ ninu kaṣe #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' tabi aago yoo lọ kuro.
  8. A tun ṣe lẹẹkansi.

Kini idi ti awọn iṣoro pẹlu iloro ijira...?Ohun naa ni pe ni iṣe gidi, gbigbasilẹ “ID” ko jẹ laileto patapata. Ti a ba kọ nkan si eka ti 4 kilobytes ni iwọn, iṣeeṣe giga wa pe ni awọn iṣẹju meji ti o tẹle igbasilẹ kan yoo ṣe si kanna tabi ọkan ninu awọn agbegbe agbegbe (+- 32K).

Nipa tito iloro ijira si odo, a sun siwaju kikọ amuṣiṣẹpọ lori SATA SSD ati ṣajọpọ ọpọlọpọ awọn ayipada si bulọki 64K kan ninu kaṣe. Eyi ṣe ifipamọ pataki awọn orisun ti SATA SSD.

Nibo ni koodu naa wa..?Laisi ani, onkọwe ka ararẹ pe ko ni agbara ninu idagbasoke awọn iwe afọwọkọ bash nitori pe o jẹ 100% ti ara ẹni ti nkọ ati ṣiṣe idagbasoke “google”, nitorinaa o gbagbọ pe koodu ẹru ti o jade lati ọwọ rẹ ko yẹ ki o lo ẹnikẹni. miiran.

Mo ro pe awọn alamọdaju ni aaye yii yoo ni anfani lati ṣe afihan ni ominira gbogbo ọgbọn ti a ṣalaye loke, ti o ba jẹ dandan, ati, boya, paapaa ni ẹwa ṣe apẹrẹ rẹ bi iṣẹ eto, bi onkọwe gbiyanju lati ṣe.

Iru ero yiyi fọto ti o rọrun kan yoo gba wa laaye kii ṣe lati ni aworan kan nigbagbogbo muṣiṣẹpọ ni kikun lori SATA SSD, ṣugbọn yoo tun gba wa laaye, ni lilo ohun elo thin_delta, lati wa iru awọn bulọọki ti o yipada lẹhin ẹda rẹ, ati nitorinaa ṣe agbegbe bibajẹ lori awọn ipele akọkọ, ti o rọrun pupọ imularada.

TRIM/Sọnu ni libvirt/KVM

Nitori ibi ipamọ data yoo ṣee lo fun KVM nṣiṣẹ libvirt, lẹhinna o yoo jẹ imọran ti o dara lati kọ awọn VM wa kii ṣe lati gba aaye ọfẹ nikan, ṣugbọn lati tun gba ohun ti a ko nilo.

Eyi ni a ṣe nipasẹ ṣiṣe apẹẹrẹ atilẹyin TRIM/DISCARD lori awọn disiki foju. Lati ṣe eyi, o nilo lati yi iru oludari pada si virtio-scsi ati ṣatunkọ 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>

Iru DISCARDs lati alejo OSes ti wa ni ti tọ ni ilọsiwaju nipasẹ LVM, ati awọn ohun amorindun ti wa ni ominira o ti tọ mejeeji ninu awọn kaṣe ati ninu awọn tinrin pool. Ninu ọran wa, eyi n ṣẹlẹ ni pataki ni ọna idaduro, nigba piparẹ aworan ti o tẹle.

BTRFS Afẹyinti

Lo awọn iwe afọwọkọ ti a ti ṣetan pẹlu awọn iwọn ṣọra ati ni ewu ti ara ẹni. Onkọwe kọ koodu yii funrararẹ ati iyasọtọ fun ara rẹ. Mo ni idaniloju pe ọpọlọpọ awọn olumulo Linux ti o ni iriri ni awọn irinṣẹ kanna, ati pe ko si iwulo lati daakọ ti ẹlomiran.

Jẹ ki a ṣẹda iwọn didun lori ẹrọ afẹyinti:

#lvcreate -L 256G --name backup backup

Jẹ ki a ṣe ọna kika rẹ ni BTRFS:

#mkfs.btrfs /dev/backup/backup

Jẹ ki a ṣẹda awọn aaye oke ati gbe awọn abala root ti eto faili naa:

#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

Jẹ ki a ṣẹda awọn ilana fun awọn afẹyinti:

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

Jẹ ki a ṣẹda itọsọna kan fun awọn iwe afọwọkọ afẹyinti:

#mkdir /root/btrfs-backup

Jẹ ki a daakọ iwe afọwọkọ naa:

Ọpọlọpọ ti idẹruba bash koodu. Lo ninu ewu ti ara rẹ. Maṣe kọ awọn lẹta ibinu si onkọwe…#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

Kini o tun ṣe..?Ni akojọpọ awọn aṣẹ ti o rọrun fun ṣiṣẹda awọn aworan ifaworanhan BTRFS ati didakọ wọn si FS miiran nipa lilo fifiranṣẹ / gbigba BTRFS.

Ifilọlẹ akọkọ le jẹ gigun, nitori… Ni ibẹrẹ, gbogbo data yoo daakọ. Awọn ifilọlẹ siwaju yoo yara pupọ, nitori ... Awọn ayipada nikan ni yoo daakọ.

Iwe afọwọkọ miiran ti a yoo fi sinu cron:

Diẹ ninu koodu bash diẹ sii#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

Kini o ṣe..?Ṣẹda ati muuṣiṣẹpọ awọn aworan iwokuwo ti awọn iwọn didun BTRFS ti a ṣe akojọ lori FS afẹyinti. Lẹhin eyi, o paarẹ gbogbo awọn aworan ti a ṣẹda ni ọjọ 60 sẹhin. Lẹhin ifilọlẹ, awọn aworan aworan ti ọjọ ti awọn iwọn ti a ṣe akojọ yoo han ninu /afẹyinti/btrfs/pada/latọna/awọn iwe-itọnisọna.

Jẹ ki a fun awọn ẹtọ ipaniyan koodu naa:

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

Jẹ ki a ṣayẹwo ki a fi sinu 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 tinrin afẹyinti

Jẹ ki a ṣẹda adagun tinrin lori ẹrọ afẹyinti:

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

Jẹ ki a fi ddrescue sori ẹrọ, nitori... Awọn iwe afọwọkọ yoo lo ọpa yii:

#apt-get install gddrescue

Jẹ ki a ṣẹda itọsọna kan fun awọn iwe afọwọkọ:

#mkdir /root/lvm-thin-backup

Jẹ ki a daakọ awọn iwe afọwọkọ:

Pupọ bash ninu ...#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

Kini o nse...?Ni a ti ṣeto ti ofin fun a riboribo tinrin snapshots ati mimuuṣiṣẹpọ iyato laarin meji tinrin snapshots gba nipasẹ thin_delta si miiran Àkọsílẹ ẹrọ nipa lilo ddrescue ati blkdiscard.

Iwe afọwọkọ miiran ti a yoo fi sinu cron:

Bash diẹ diẹ sii#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

Kini o nse...?Nlo iwe afọwọkọ ti tẹlẹ lati ṣẹda ati muuṣiṣẹpọ awọn afẹyinti ti awọn iwọn tinrin ti a ṣe akojọ. Iwe afọwọkọ naa yoo fi awọn aworan aworan aiṣiṣẹ silẹ ti awọn iwọn ti a ṣe akojọ, eyiti o nilo lati tọpa awọn ayipada lati igba imuṣiṣẹpọ to kẹhin.

Iwe afọwọkọ yii gbọdọ jẹ satunkọ, ti n ṣalaye atokọ ti awọn iwọn tinrin fun eyiti o yẹ ki o ṣe awọn ẹda afẹyinti. Awọn orukọ ti a fun wa fun awọn idi apejuwe nikan. Ti o ba fẹ, o le kọ iwe afọwọkọ ti yoo mu gbogbo awọn iwọn didun ṣiṣẹpọ.

Jẹ ki a fun awọn ẹtọ:

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

Jẹ ki a ṣayẹwo ki a fi sinu 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

Ifilọlẹ akọkọ yoo pẹ, nitori… awọn iwọn didun tinrin yoo jẹ mimuuṣiṣẹpọ ni kikun nipasẹ didakọ gbogbo aaye ti a lo. Ṣeun si metadata tinrin LVM, a mọ iru awọn bulọọki ti o wa ni lilo gangan, nitorinaa awọn bulọọki iwọn didun tinrin ti o lo nikan ni yoo daakọ.

Awọn ṣiṣe atẹle yoo daakọ data naa ni afikun ọpẹ si iyipada ipasẹ nipasẹ metadata tinrin LVM.

Jẹ ká wo ohun to sele:

#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

Kini eyi ni lati ṣe pẹlu awọn ọmọlangidi itẹ-ẹiyẹ?

O ṣeese julọ, fun ni pe awọn iwọn ọgbọn LVM LV le jẹ awọn ipele ti ara LVM PV fun awọn VG miiran. LVM le jẹ loorekoore, bi awọn ọmọlangidi itẹ-ẹiyẹ. Eyi yoo fun LVM ni irọrun pupọ.

PS

Ninu nkan ti o tẹle, a yoo gbiyanju lati lo ọpọlọpọ awọn ọna ṣiṣe ipamọ alagbeka ti o jọra / KVM gẹgẹbi ipilẹ fun ṣiṣẹda ibi ipamọ agbegbe-pinpin / iṣupọ vm pẹlu apọju lori ọpọlọpọ awọn kọnputa ni lilo awọn kọǹpútà ile, Intanẹẹti ile ati awọn nẹtiwọọki P2P.

orisun: www.habr.com

Fi ọrọìwòye kun