Dè a tha cumanta aig LVM agus Matryoshka?

Kind time of day.
Bu mhath leam an eòlas practaigeach agam air togail siostam stòraidh dàta airson KVM a cho-roinn leis a’ choimhearsnachd a’ cleachdadh md RAID + LVM.

Bidh am prògram a’ gabhail a-steach:

  • Togalach md RAID 1 bho NVMe SSD.
  • A’ cruinneachadh md RAID 6 bho SATA SSD agus draibhearan cunbhalach.
  • Feartan gnìomhachd TRIM / DISCARD air SSD RAID 1/6.
  • A’ cruthachadh sreath md RAID 1/6 bootable air seata cumanta de dhioscaichean.
  • A’ stàladh an t-siostam air NVMe RAID 1 nuair nach eil taic NVMe anns a’ BIOS.
  • A’ cleachdadh tasgadan LVM agus LVM tana.
  • A’ cleachdadh dealbhan BTRFS agus cuir/faigh airson cùl-taic.
  • A’ cleachdadh dealbhan tana LVM agus thin_delta airson cùl-taic stoidhle BTRFS.

Ma tha ùidh agad, faic an cat.

Foirm iarrtais

Chan eil uallach sam bith air an ùghdar airson buaidh cleachdadh no gun a bhith a’ cleachdadh stuthan/eisimpleirean/còd/molaidhean/dàta bhon artaigil seo. Le bhith a’ leughadh no a’ cleachdadh an stuth seo ann an dòigh sam bith, bidh thu a’ gabhail uallach airson builean nan gnìomhan sin uile. Am measg nam buaidhean a dh’ fhaodadh a bhith ann tha:

  • NVMe SSDs crisp-fried.
  • Goireas clàraidh air a chleachdadh gu tur agus fàilligeadh air draibhearan SSD.
  • Call iomlan air a h-uile dàta air a h-uile dreach, a’ toirt a-steach lethbhric cùl-taic.
  • Bathar-cruaidh coimpiutair mearachdach.
  • Caith ùine, nerves agus airgead.
  • Builean sam bith eile nach eil air an ainmeachadh gu h-àrd.

Iarann

Ri fhaighinn bha:

Bòrd-màthraichean bho timcheall air 2013 le Z87 chipset, le Intel Core i7 / Haswell.

  • Pròiseasar 4 cores, 8 snàithleanan
  • 32 GB de RAM DDR3
  • 1 x 16 no 2 x 8 PCIe 3.0
  • 1 x 4 + 1 x 1 PCIe 2.0
  • 6 x 6 GBps SATA 3 luchd-ceangail

Chaidh adapter SAS LSI SAS9211-8I a-steach gu modh IT / HBA. Chaidh firmware le comas RAID a chuir na àite a dh’aona ghnothach le firmware HBA gus:

  1. Dh’ fhaodadh tu an inneal-atharrachaidh seo a thilgeil a-mach uair sam bith agus fear sam bith eile air an tàinig thu tarsainn a chuir na àite.
  2. Bha TRIM/Discard ag obair gu h-àbhaisteach air diosgan, oir... ann am firmware RAID chan eil na h-òrdughan sin a’ faighinn taic idir, agus chan eil an HBA, san fharsaingeachd, a’ gabhail cùram dè na h-òrdughan a thèid a chuir thairis air a’ bhus.

Dràibhean cruaidh - 8 pìosan de HGST Travelstar 7K1000 le comas 1 TB ann am factar cruth 2.5, mar airson coimpiutairean-glùine. Bha na draibhearan sin roimhe seo ann an sreath RAID 6. Bidh feum aca cuideachd san t-siostam ùr. Gus cùl-taic ionadail a stòradh.

A bharrachd air a chur ris:

Modail 6 pìosan SATA SSD Samsung 860 QVO 2TB. Bha feum aig na SSDan sin air meud mòr, bha feum air tasgadan SLC, earbsachd, agus prìs ìosal. Bha feum air taic airson tilgeadh / neoni, a tha air a sgrùdadh leis an loidhne ann an dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

2 phìos de mhodail NVMe SSD Samsung SSD 970 EVO 500GB.

Airson na SSDn sin, tha astar leughaidh / sgrìobhaidh air thuaiream agus comas stòrais airson na feumalachdan agad cudromach. Radiator dhaibh. Gu feum. Gu tur. Rud eile, friogais iad gus am bi iad crispy rè a ’chiad sioncronadh RAID.

Adapter StarTech PEX8M2E2 airson 2 x NVMe SSD air a chuir a-steach ann an slot PCIe 3.0 8x. Tha seo, a-rithist, dìreach mar HBA, ach airson NVMe. Tha e eadar-dhealaichte bho innealan-atharrachaidh saor leis nach eil feum air taic bifurcation PCIe bhon mhàthair-bhòrd air sgàth gu bheil tionndadh PCIe togte ann. Obraichidh e eadhon anns an t-siostam as sine le PCIe, eadhon ged is e slot x1 PCIe 1.0 a th’ ann. Gu nàdarra, aig an astar iomchaidh. Chan eil RAIDs ann an sin. Chan eil BIOS togte air bòrd. Mar sin, chan ionnsaich an siostam agad gu draoidheil bròg le NVMe, mòran nas lugha na NVMe RAID le taing don inneal seo.

Bha am pàirt seo dìreach mar thoradh air nach robh ach aon 8x PCIe 3.0 an-asgaidh san t-siostam, agus, ma tha 2 shliotan an-asgaidh ann, faodar dà sgillinn PEX4M2E1 no analogues a chuir nan àite gu furasta, a dh'fhaodar a cheannach an àite sam bith aig prìs 600. rubles.

Chaidh diùltadh a h-uile seòrsa bathar-cruaidh no chipset / BIOS RAID a chaidh a thogail a-steach a dh’aona ghnothach, gus a bhith comasach air an siostam gu lèir a chuir na àite gu tur, ach a-mhàin an SSD / HDD iad fhèin, fhad ‘s a bha iad a’ gleidheadh ​​​​an dàta gu lèir. Mas fheàrr, gus an urrainn dhut eadhon an siostam obrachaidh stàlaichte a shàbhaladh nuair a ghluaiseas tu gu bathar-cruaidh gu tur ùr / eadar-dhealaichte. Is e am prìomh rud gu bheil puirt SATA agus PCIe ann. Tha e coltach ri CD beò no draibhear flash bootable, dìreach gu math luath agus beagan tomadach.

HumorRud eile, tha fios agad dè a thachras - uaireannan feumaidh tu gu h-èiginneach an raon gu lèir a thoirt leat airson a thoirt air falbh. Ach chan eil mi airson dàta a chall. Gus seo a dhèanamh, tha na meadhanan air fad air an ainmeachadh ann an àite freagarrach air na sleamhnagan ann am bàghan 5.25 den chùis àbhaisteach.

Uill, agus, gu dearbh, airson a bhith a’ feuchainn diofar dhòighean air SSD a thasgadh ann an Linux.

Tha creach bathar-cruaidh dòrainneach. Tionndaidh air. Bidh e an dàrna cuid ag obair no chan eil. Agus le mdadm tha an-còmhnaidh roghainnean ann.

Bathar-bog

Roimhe sin, chaidh Debian 8 Jessie a chuir a-steach air a’ bhathar-cruaidh, a tha faisg air EOL. Chaidh RAID 6 a chruinneachadh bho na HDDan gu h-àrd còmhla ri LVM. Bha e a’ ruith innealan brìgheil ann an kvm/libvirt.

Air sgàth Tha eòlas iomchaidh aig an ùghdar ann a bhith a’ cruthachadh draibhearan flash SATA / NVMe so-ghiùlain, agus cuideachd, gus nach briseadh e an teamplaid iomchaidh àbhaisteach, chaidh Ubuntu 18.04 a thaghadh mar an siostam targaid, a tha air a bhith seasmhach gu leòr mar-thà, ach aig a bheil 3 bliadhna fhathast de taic san àm ri teachd.

Anns an t-siostam ainmichte tha a h-uile draibhear bathar-cruaidh a dh ’fheumas sinn a-mach às a’ bhogsa. Chan fheum sinn bathar-bog no draibhearan treas-phàrtaidh sam bith.

Ag ullachadh airson an stàladh

Gus an siostam a stàladh feumaidh sinn Ubuntu Desktop Image. Tha seòrsa de stàlaichear làidir aig an t-siostam frithealaiche, a tha a’ nochdadh cus neo-eisimeileachd nach gabh a chiorramachadh le bhith a’ putadh sgaradh siostam UEFI air aon de na diosgan, a’ milleadh a h-uile bòidhchead. Mar sin, chan eil e air a chuir a-steach ach ann am modh UEFI. Chan eil e a’ tabhann roghainnean sam bith.

Chan eil sinn toilichte le seo.

Почему?Gu mì-fhortanach, tha bròg UEFI gu math co-chòrdail ri bathar-bog bròg RAID, oir ... Chan eil duine a’ tabhann tèarmainn dhuinn airson sgaradh UEFI ESP. Tha reasabaidhean air an eadar-lìn a tha a 'moladh a bhith a' cur an sgaradh ESP air draibheadh ​​​​flash ann am port USB, ach tha seo na adhbhar fàiligeadh. Tha reasabaidhean ann a tha a’ cleachdadh bathar-bog mdadm RAID 1 le dreach meata-dàta 0.9 nach cuir stad air an UEFI BIOS bho bhith a’ faicinn a’ phàirt seo, ach bidh seo beò gus an àm sona nuair a sgrìobhas am BIOS no OS bathar-cruaidh eile rudeigin chun ESP agus a dhìochuimhnicheas e a shioncronachadh gu feadhainn eile. sgàthan.

A bharrachd air an sin, tha bròg UEFI an urra ri NVRAM, nach gluais còmhla ris na diosgan chun t-siostam ùr, oir Tha e na phàirt den motherboard.

Mar sin, cha bhith sinn ag ath-chruthachadh cuibhle ùr. Tha baidhsagal seanair deiseil againn mu thràth, le deuchainn ùine, ris an canar a-nis Legacy/BIOS boot, leis an ainm pròiseil CSM air siostaman a tha co-chosmhail ri UEFI. Bidh sinn dìreach ga thoirt far an sgeilp, ga lubricadh, ga phumpadh suas na taidhrichean agus ga sguabadh le clò tais.

Chan urrainnear an tionndadh deasg de Ubuntu a chuir a-steach gu ceart leis an Legacy bootloader, ach an seo, mar a chanas iad, tha roghainnean ann co-dhiù.

Agus mar sin, cruinnichidh sinn am bathar-cruaidh agus luchdaichidh sinn an siostam bhon draibhear flash bootable Ubuntu Live. Feumaidh sinn pacaidean a luchdachadh sìos, agus mar sin stèidhichidh sinn an lìonra a bhios ag obair dhut. Mura obraich e, faodaidh tu na pacaidean riatanach a luchdachadh air draibh flash ro làimh.

Bidh sinn a ’dol a-steach don àrainneachd Deasg, a’ cur air bhog an emuladair crìochnachaidh, agus dheth thèid sinn:

#sudo bash

Ciamar…?Tha an loidhne gu h-àrd na adhbhar brosnachaidh canonical airson holiwars mu sudo. C bоthig barrachd chothroman agusоbarrachd uallach. Is e a’ cheist an urrainn dhut a ghabhail leat fhèin. Tha mòran den bheachd gu bheil cleachdadh sudo san dòigh seo co-dhiù gun a bhith faiceallach. Ge-tà:

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

Carson nach eil ZFS...?Nuair a stàlaicheas sinn bathar-bog air a’ choimpiutair againn, bidh sinn gu bunaiteach a’ toirt ar bathar-cruaidh air iasad do luchd-leasachaidh a’ bhathar-bhog seo airson draibheadh.
Nuair a tha earbsa againn anns a’ bhathar-bog seo le sàbhailteachd ar dàta, bidh sinn a’ toirt a-mach iasad co-ionann ris a’ chosgais airson an dàta seo ath-nuadhachadh, a dh’ fheumas sinn a phàigheadh ​​uaireigin.

Bhon sealladh seo, is e Ferrari a th’ ann an ZFS, agus tha mdadm + lvm nas coltaiche ri baidhsagal.

Gu cuspaireil, is fheàrr leis an ùghdar baidhsagal a thoirt air iasad do dhaoine neo-aithnichte an àite Ferrari. An sin, chan eil prìs na cùise àrd. Chan eil feum air còraichean. Nas sìmplidh na riaghailtean trafaic. Tha pàirceadh an-asgaidh. Tha comas thar-dùthcha nas fheàrr. Faodaidh tu an-còmhnaidh casan a cheangal ri baidhsagal, agus faodaidh tu baidhsagal a chàradh le do làmhan fhèin.

Carson an uairsin BTRFS...?Gus an siostam obrachaidh a thòiseachadh, feumaidh sinn siostam faidhle a tha a’ faighinn taic ann an Dìleab / BIOS GRUB a-mach às a ’bhogsa, agus aig an aon àm a’ toirt taic do dhealbhan beò. Cleachdaidh sinn e airson an sgaradh / boot. A bharrachd air an sin, is fheàrr leis an ùghdar an FS seo a chleachdadh airson / (root), gun a bhith a’ dìochuimhneachadh a thoirt fa-near, airson bathar-bog sam bith eile, gun urrainn dhut pàirtean fa leth a chruthachadh air LVM agus an cur suas anns na clàran riatanach.

Cha bhith sinn a’ stòradh ìomhaighean sam bith de dh’ innealan mas-fhìor no stòran-dàta air an FS seo.
Cha tèid an FS seo a chleachdadh ach airson dealbhan-camara den t-siostam a chruthachadh gun a thionndadh dheth agus an uairsin na dealbhan sin a ghluasad gu diosc cùl-taic a’ cleachdadh cuir / faighinn.

A bharrachd air an sin, sa chumantas is fheàrr leis an ùghdar a bhith a’ cumail bathar-bog aig a’ char as lugha gu dìreach air a’ bhathar-cruaidh agus a’ ruith a h-uile bathar-bog eile ann an innealan brìgheil a’ cleachdadh rudan mar a bhith a’ cur air adhart GPUs agus luchd-riaghlaidh PCI-USB Host gu KVM tro IOMMU.

Is e na h-aon rudan a tha air fhàgail air a’ bhathar-chruaidh stòradh dàta, virtualization agus cùl-taic.

Ma tha barrachd earbsa agad ann an ZFS, an uairsin, ann am prionnsapal, airson an tagradh ainmichte tha iad eadar-ghluasadach.

Ach, tha an t-ùghdar a dh’aona ghnothach a’ seachnadh nam feartan sgàthan / RAID agus call obrach a tha aig ZFS, BRTFS agus LVM.

Mar argamaid a bharrachd, tha comas aig BTRFS sgrìobhadh air thuaiream a thionndadh gu feadhainn leantalach, aig a bheil buaidh air leth math air astar sioncronaich snapshots/backups air an HDD.

Leig leinn ath-sganadh a h-uile inneal:

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

Bheir sinn sùil timcheall:

#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

Cruth diosc

NVMe SSD

Ach cha bhith sinn gan comharrachadh ann an dòigh sam bith. An aon rud, chan eil am BIOS againn a’ faicinn na draibhearan sin. Mar sin, thèid iad gu tur gu RAID bathar-bog. Cha bhith sinn eadhon a’ cruthachadh earrannan an sin. Ma tha thu airson an “canan” no “sa mhòr-chuid” a leantainn, cruthaich aon sgaradh mòr, mar HDD.

SATA HDD

Chan eil feum air rud sam bith sònraichte a chruthachadh an seo. Cruthaichidh sinn aon earrann airson a h-uile rud. Cruthaichidh sinn sgaradh oir chì am BIOS na diosgan sin agus is dòcha gun feuchaidh sinn ri bròg bhuapa. Cuiridh sinn eadhon GRUB air na diosgan sin nas fhaide air adhart gus an urrainn don t-siostam seo a dhèanamh gu h-obann.

#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

Seo far a bheil cùisean a’ fàs inntinneach dhuinn.

An toiseach, tha na draibhearan againn 2 TB ann am meud. Tha seo taobh a-staigh an raon iomchaidh airson MBR, agus is e sin a chleachdas sinn. Ma tha feum air, faodar GPT a chuir na àite. Tha còmhdach co-chòrdalachd aig diosgan GPT a leigeas le siostaman a tha co-chosmhail ri MBR a’ chiad 4 pàirtean fhaicinn ma tha iad suidhichte taobh a-staigh a’ chiad 2 terabytes. Is e am prìomh rud gum bu chòir an sgaradh bròg agus an sgaradh bios_grub air na diosgan sin a bhith aig an toiseach. Leigidh seo eadhon leat bròg bho dhràibhearan GPT Legacy / BIOS.

Ach chan e seo ar cùis.

An seo cruthaichidh sinn dà earrann. Bidh a’ chiad fhear 1 GB ann am meud agus air a chleachdadh airson RAID 1 /boot.

Thèid an dàrna fear a chleachdadh airson RAID 6 agus gabhaidh e suas a h-uile àite an-asgaidh a tha air fhàgail ach a-mhàin àite beag neo-riaraichte aig deireadh an draibhidh.

Dè an raon neo-chomharraichte a tha seo?A rèir stòran air an lìonra, tha na SATA SSDs againn air bòrd tasgadan SLC a ghabhas leudachadh gu beothail eadar meud bho 6 gu 78 gigabytes. Gheibh sinn 6 gigabytes “an-asgaidh” air sgàth an eadar-dhealachaidh eadar “gigabytes” agus “gibibytes” ann an duilleag dàta an draibhidh. Tha na 72 gigabytes a tha air fhàgail air an riarachadh bho àite nach deach a chleachdadh.

An seo bu chòir a thoirt fa-near gu bheil tasgadan SLC againn, agus tha an àite air a ghabhail thairis ann am modh 4 bit MLC. A tha gu h-èifeachdach dhuinne a’ ciallachadh nach fhaigh sinn ach 4 gigabytes de tasgadan SLC airson gach 1 gigabytes de àite an-asgaidh.

Iomadaich 72 gigabytes le 4 agus faigh 288 gigabytes. Is e seo an t-àite an-asgaidh nach comharraich sinn gus leigeil leis na draibhearan làn fheum a dhèanamh den tasgadan SLC.

Mar sin, gu h-èifeachdach gheibh sinn suas ri 312 gigabytes de tasgadan SLC bho shia draibhearan gu h-iomlan. De na h-iomairtean uile, thèid 2 a chleachdadh ann an RAID airson call obrach.

Leigidh an t-suim seo de thasg dhuinn gu math ainneamh ann am fìor bheatha a thighinn tarsainn air suidheachadh far nach tèid sgrìobhadh chun tasgadan. Tha seo fìor mhath a’ dèanamh dìoladh airson an tarraing air ais as miosa de chuimhne QLC - an astar sgrìobhaidh gu math ìosal nuair a thèid dàta a sgrìobhadh a’ dol seachad air an tasgadan. Mura h-eil na luchdan agad a’ freagairt ri seo, tha mi a’ moladh gun smaoinich thu gu cruaidh air dè cho fada ‘s a mhaireas an SSD agad fo leithid de luchd, a’ toirt aire don TBW bhon duilleag dàta.

#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

A 'cruthachadh Arrays

An toiseach, feumaidh sinn an inneal ath-ainmeachadh. Tha seo riatanach oir tha an t-ainm aoigheachd mar phàirt den ainm raon an àiteigin taobh a-staigh mdadm agus a 'toirt buaidh air rudeigin an àiteigin. Gu dearbh, faodar arrays ath-ainmeachadh nas fhaide air adhart, ach is e ceum neo-riatanach a tha seo.

#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

Carson - gabhail ris-glan...?Gus casg a chuir air arrays tòiseachaidh. Airson gach cuid ìrean RAID 1 agus 6 tha seo dligheach. Faodaidh a h-uile dad obrachadh gun a bhith air a thòiseachadh mas e sreath ùr a th’ ann. A bharrachd air an sin, tha tòiseachadh air an raon SSD nuair a thèid a chruthachadh na sgudal air goireas TBW. Bidh sinn a’ cleachdadh TRIM/DISCARD far a bheil sin comasach air arrays SSD cruinnichte gus an “tòiseachadh”.

Airson arrays SSD, tha RAID 1 DISCARD a’ faighinn taic a-mach às a’ bhogsa.

Airson arrays SSD RAID 6 DISCARD, feumaidh tu a chomasachadh ann am paramadairean modal kernel.

Cha bu chòir seo a dhèanamh ach ma tha taic obrach aig a h-uile SSD a thathar a’ cleachdadh ann an arrays ìre 4/5/6 san t-siostam seo airson discard_zeroes_data. Aig amannan thig thu tarsainn air draibhearan neònach a dh ’innseas don kernel gu bheil an gnìomh seo a’ faighinn taic, ach gu dearbh chan eil e ann, no chan eil an gnìomh an-còmhnaidh ag obair. Aig an àm seo, tha taic ri fhaighinn cha mhòr anns a h-uile àite, ge-tà, tha seann dhràibhearan agus firmware ann le mearachdan. Air an adhbhar seo, tha taic DISCARD à comas gu bunaiteach airson RAID 6.

An aire, sgriosaidh an àithne a leanas a h-uile dàta air draibhearan NVMe le bhith “a’ tòiseachadh ”an t-sreath le“ neoni ”.

#blkdiscard /dev/md0

Ma thèid rudeigin ceàrr, feuch ri ceum a shònrachadh.

#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

Carson cho mòr...?Tha buaidh mhath aig àrdachadh meud a’ phìos air astar leughadh air thuaiream ann am blocaichean suas gu meud pìos in-ghabhalach. Bidh seo a’ tachairt leis gum faodar aon obrachadh den mheud iomchaidh no nas lugha a chrìochnachadh gu tur air aon inneal. Mar sin, tha geàrr-chunntas air an IOPS bho gach inneal. A rèir staitistig, chan eil 99% de IO nas àirde na 512K.

RAID 6 IOPS gach sgrìobhadh an-còmhnaidh nas lugha na no co-ionann ris an IOPS de aon dhràibhear. Nuair, mar leughadh air thuaiream, faodaidh IOPS a bhith grunn thursan nas motha na aon dhràibhear, agus an seo tha meud a’ bhloc air leth cudromach.
Chan eil an t-ùghdar a 'faicinn a' phuing ann a bhith a 'feuchainn ri paramadair a tha dona ann an ro-dhealbhadh RAID 6 a bharrachadh agus an àite sin a' dèanamh an fheum as fheàrr de na tha RAID 6 math air.
Nì sinn dìoladh airson an droch sgrìobhadh air thuaiream de RAID 6 le tasgadan NVMe agus cleasan solarachaidh tana.

Chan eil sinn fhathast air DISCARD a chomasachadh airson RAID 6. Mar sin cha “tòisich sinn” an t-sreath seo airson a-nis. Nì sinn seo nas fhaide air adhart, às deidh dhuinn an OS a chuir a-steach.

SATA HDD

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

LVM air NVMe RAID

Airson astar, tha sinn airson an siostam faidhle freumh a chuir air NVMe RAID 1 a tha / dev / md0.
Ach, bidh feum againn fhathast air an raon luath seo airson feumalachdan eile, leithid suaip, meata-dàta agus meata-dàta LVM-cache agus LVM-thin, agus mar sin cruthaichidh sinn LVM VG air an raon seo.

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

Nach cruthaich sinn sgaradh airson an t-siostam faidhle root.

#lvcreate -L 128G --name root root

Cruthaichidh sinn sgaradh airson atharrachadh a rèir meud an RAM.

#lvcreate -L 32G --name swap root

Stàladh OS

Gu h-iomlan, tha a h-uile dad riatanach againn airson an siostam a stàladh.

Cuir air bhog draoidh stàlaidh an t-siostaim bho àrainneachd Ubuntu Live. Stàladh àbhaisteach. Is ann dìreach aig an ìre de bhith a’ taghadh diosgan airson an stàladh, feumaidh tu na leanas a shònrachadh:

  • / dev/md1, - mount point / boot, FS - BTRFS
  • / dev / root / root (aka / dev / mapper / root-root), - mount point / (root), FS - BTRFS
  • / dev / root / swap (aka / dev / mapper / root-swap), - cleachd mar sgaradh suaip
  • Stàlaich an bootloader air /dev/sda

Nuair a thaghas tu BTRFS mar an siostam faidhle freumh, cruthaichidh an stàlaichear dà leabhar BTRFS leis an ainm “@” airson / (root), agus “@home” airson / dachaigh.

Feuch an tòisich sinn air an stàladh ...

Thig an stàladh gu crìch le bogsa deasbaid modal a’ nochdadh mearachd ann a bhith a’ stàladh an luchd-luaidh. Gu mì-fhortanach, chan urrainn dhut an còmhradh seo fhàgail le dòighean àbhaisteach agus leantainn air adhart leis an stàladh. Bidh sinn a’ logadh a-mach às an t-siostam agus a’ logadh a-steach a-rithist, a’ crìochnachadh ann an deasg glan Ubuntu Live. Fosgail an terminal, agus a-rithist:

#sudo bash

Cruthaich àrainneachd chroot gus leantainn air adhart leis an stàladh:

#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

Feuch an rèiteachadh sinn an lìonra agus an t-ainm aoigheachd ann an chroot:

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

Rachamaid a-steach don àrainneachd chroot:

#chroot /mnt/chroot

An toiseach, lìbhrigidh sinn na pacaidean:

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

Feuch an dèan sinn sgrùdadh agus càradh a h-uile pasgan a chaidh a chuir a-steach gu cam mar thoradh air stàladh siostam neo-choileanta:

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

Mur obraich rudeigin a-mach, 's dòcha gum feum thu deasachadh /etc/apt/sources.list an toiseach

Nach atharraich sinn na paramadairean airson modal RAID 6 gus TRIM / DISCARD a chomasachadh:

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

Atharraichidh sinn ar n-arrays beagan:

#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

Dè bh' ann..?Tha sinn air seata de riaghailtean udev a chruthachadh a nì na leanas:

  • Suidhich meud an tasgadan bloc airson RAID 2020 gus a bhith iomchaidh airson 6. Chan eil an luach bunaiteach, a rèir coltais, air atharrachadh bho chaidh Linux a chruthachadh, agus chan eil e air a bhith iomchaidh airson ùine mhòr.
  • Glèidh IO aig a’ char as lugha fhad ‘s a bhios sgrùdaidhean rèite / sioncronadh ann. Tha seo gus casg a chuir air na h-innealan agad bho bhith an sàs ann an staid sioncronaidh shìorraidh fo luchd.
  • Cuir crìoch air an IO as àirde rè sgrùdaidhean / sioncronadh arrays. Tha seo riatanach gus nach bi sioncronadh/sgrùdadh SSD RAIDs a’ frioladh na draibhearan agad gu crisp. Tha seo gu sònraichte fìor airson NVMe. (Cuimhnich mun rèididheatoran? Cha robh mi a’ magadh.)
  • Cuir casg air diosgan bho bhith a’ stad cuairteachadh dealgan (HDD) tro APM agus suidhich an ùine cadail airson riaghladairean diosc gu 7 uairean. Faodaidh tu APM a chuir dheth gu tur mas urrainn do dhràibhearan a dhèanamh (-B 255). Leis an luach bunaiteach, stadaidh na draibhearan às deidh còig diogan. An uairsin tha an OS ag iarraidh an tasgadan diosc ath-shuidheachadh, snìomh na diosgan a-rithist, agus tòisichidh a h-uile càil a-rithist. Tha àireamh as motha de chuairtean dealgan aig diosgan. Faodaidh cearcall bunaiteach sìmplidh mar seo na diosgan agad a mharbhadh gu furasta ann am bliadhna no dhà. Chan eil a h-uile diosc a’ fulang le seo, ach ’s e feadhainn “laptop” a th’ anns an fheadhainn againne, leis na roghainnean bunaiteach iomchaidh, a bheir air an RAID a bhith coltach ri meanbh-MAID.
  • Stàlaich leughaidh air adhart air diosgan (a 'cuairteachadh) 1 megabyte - dà bhloca leantainneach / pìos RAID 6
  • Cuir dheth leughadh air na h-arrays iad fhèin.

Deasaich sinn /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

Carson a tha sin ..?Lorgaidh sinn am pàirt / boot le UUID. Dh’ fhaodadh ainmeachadh array atharrachadh gu teòiridheach.

Lorgaidh sinn na h-earrannan a tha air fhàgail le ainmean LVM anns a’ chomharra / dev/mapper/vg-lv, oir bidh iad a’ comharrachadh sgaraidhean gu tur gun samhail.

Cha bhith sinn a’ cleachdadh UUID airson LVM oir Faodaidh an UUID de leabhraichean LVM agus na dealbhan aca a bhith mar an ceudna.Mount /dev/mapper/root-root.. dà uair?Tha. Dìreach. Feart BTRFS. Faodar an siostam faidhle seo a chuir suas grunn thursan le diofar subvols.

Mar thoradh air an aon fheart seo, tha mi a ’moladh gun a bhith a’ cruthachadh dealbhan LVM de leabhraichean gnìomhach BTRFS. Is dòcha gum faigh thu iongnadh nuair a nì thu ath-thòiseachadh.

Feuch an ath-ghin sinn an rèiteachadh mdadm:

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

Nach atharraich sinn na roghainnean 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

Dè bh' ann..?Tha sinn air comas a thoirt do leudachadh fèin-ghluasadach de amaran tana LVM nuair a ruigeas sinn 90% den àite còmhnaidh le 5% den tomhas-lìonaidh.

Tha sinn air an àireamh as motha de bhlocaichean tasgadan airson tasgadan LVM àrdachadh.

Tha sinn air casg a chuir air LVM bho bhith a’ lorg leabhraichean LVM (PV) air:

  • innealan anns a bheil tasgadan LVM (cdata)
  • innealan air an tasgadh le bhith a’ cleachdadh tasgadan LVM, a’ dol seachad air an tasgadan ( _corig). Anns a ’chùis seo, bidh an inneal taisgte fhèin fhathast air a sganadh tron ​​​​tasgadh (dìreach ).
  • innealan anns a bheil meata-dàta tasgadan LVM (cmeta)
  • gach inneal ann an VG leis na h-ìomhaighean ainm. An seo bidh ìomhaighean diosc againn de dh’ innealan brìgheil, agus chan eil sinn airson gum bi LVM air an òstair a ’gnìomhachadh leabhraichean a bhuineas don aoigh OS.
  • a h-uile inneal ann an VG leis an ainm cùl-taic. An seo bidh lethbhric cùl-taic againn de dhealbhan inneal brìgheil.
  • a h-uile inneal aig a bheil ainm a’ crìochnachadh le “gpv” (tomhas corporra aoighean)

Tha sinn air taic DISCARD a chomasachadh nuair a bhios sinn a’ saoradh àite an-asgaidh air LVM VG. Bi faiceallach. Bheir seo ùine gu leòr airson cuir às do LVn air an SSD. Tha seo gu sònraichte a’ buntainn ri SSD RAID 6. Ach, a rèir a’ phlana, cleachdaidh sinn solar tana, agus mar sin cha chuir seo bacadh oirnn idir.

Nach ùraich sinn an ìomhaigh initramfs:

#update-initramfs -u -k all

Stàlaich is rèitich grub:

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

Dè na diosgan a thaghadh?Na h-uile a tha sd*. Feumaidh an siostam a bhith comasach air tòiseachadh bho dhràibhear SATA no SSD a tha ag obair.

Carson a chuir iad os-prober ris..?Airson cus neo-eisimeileachd agus làmhan spòrsail.

Chan obraich e gu ceart ma tha aon de na RAIDan ann an staid truaillidh. Bidh e a’ feuchainn ris an OS a lorg air pàirtean a thathas a’ cleachdadh ann an innealan brìgheil a’ ruith air a’ bhathar-cruaidh seo.

Ma tha feum agad air, faodaidh tu fhàgail, ach cumaibh cuimhne air a h-uile rud gu h-àrd. Tha mi a 'moladh a bhith a' coimhead airson reasabaidhean airson faighinn cuidhteas làmhan dona air-loidhne.

Le seo tha sinn air a’ chiad stàladh a chrìochnachadh. Tha an t-àm ann ath-thòiseachadh a-steach don OS ùr. Na dìochuimhnich an CD beò / USB bootable a thoirt air falbh.

#exit
#reboot

Tagh gin de na SATA SSDs mar an inneal bròg.

LVM air SATA SSD

Aig an ìre seo, tha sinn mu thràth air a dhol a-steach don OS ùr, air an lìonra a rèiteachadh, iomchaidh, air an emuladair crìochnachaidh fhosgladh, agus ruith:

#sudo bash

Leanaidh sinn.

“Tòisich” an raon bho SATA SSD:

#blkdiscard /dev/md2

Mura obraich e, feuch an uairsin:

#blkdiscard --step 65536 /dev/md2
Cruthaich LVM VG air SATA SSD:

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

Carson VG eile..?Gu dearbh, tha freumh VG ainmichte againn mu thràth. Carson nach cuir thu a h-uile càil ann an aon VG?

Ma tha grunn PVan ann an VG, an uairsin airson an VG a chuir an gnìomh gu ceart, feumaidh a h-uile PV a bhith an làthair (air-loidhne). Is e an eisgeachd LVM RAID, nach bi sinn a’ cleachdadh a dh’aona ghnothach.

Tha sinn dha-rìribh ag iarraidh ma tha fàilligeadh (leugh call dàta) air gin de na h-arrays RAID 6, gun tòisich an siostam obrachaidh mar as trice agus a bheir cothrom dhuinn an duilgheadas fhuasgladh.

Gus seo a dhèanamh, aig a’ chiad ìre de tharraing bidh sinn a’ dealachadh gach seòrsa “meadhan” fiosaigeach gu VG air leth.

Gu saidheansail, buinidh diofar arrays RAID do dhiofar “raointean earbsachd”. Cha bu chòir dhut puing fàilligeadh cumanta a bharrachd a chruthachadh dhaibh le bhith gan cur ann an aon VG.

Leigidh làthaireachd LVM aig ìre “bathar-cruaidh” leinn pìosan de dhiofar arrays RAID a ghearradh gu neo-riaghailteach le bhith gan cur còmhla ann an diofar dhòighean. Mar eisimpleir - ruith aig an aon àm bcache + LVM tana, bcache + BTRFS, LVM cache + LVM tana, rèiteachadh iom-fhillte ZFS le caches, no measgachadh ifrinn sam bith eile gus feuchainn ri coimeas a dhèanamh eadar e uile.

Aig ìre “bathar-cruaidh”, cha chleachd sinn dad ach seann leabhraichean LVM “tiugh” math. Is dòcha gur e an eisgeachd don riaghailt seo an sgaradh cùl-taic.

Tha mi a’ smaoineachadh ron mhionaid seo, bha mòran de luchd-leughaidh air tòiseachadh a’ cur amharas air rudeigin mun doll neadachaidh.

LVM air SATA HDD

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

VG ùr a-rithist..?Tha sinn dha-rìribh ag iarraidh ma dh’ fhailicheas an t-sreath diosc a chleachdas sinn airson cùl-taic dàta, gun lean an siostam obrachaidh againn ag obair gu h-àbhaisteach, fhad ‘s a chumas sinn cothrom air dàta neo-lethbhreac mar as àbhaist. Mar sin, gus duilgheadasan gnìomhachaidh VG a sheachnadh, cruthaichidh sinn VG air leth.

A’ stèidheachadh tasgadan LVM

Cruthaichidh sinn LV air NVMe RAID 1 airson a chleachdadh mar inneal caching.

#lvcreate -L 70871154688B --name cache root

Carson a tha cho beag...?Is e an fhìrinn gu bheil tasgadan SLC aig na NVMe SSDs againn cuideachd. 4 gigabytes de “an-asgaidh” agus 18 gigabytes de fiùghantach mar thoradh air an àite an-asgaidh a tha anns an 3-bit MLC. Aon uair ‘s gu bheil an tasgadan seo sgìth, cha bhith NVMe SSDs fada nas luaithe na an SATA SSD againn le tasgadan. Gu fìrinneach, air an adhbhar seo, chan eil e a’ dèanamh ciall dhuinn an sgaradh tasgadan LVM a dhèanamh tòrr nas motha na a dhà uimhir nas motha na tasgadan SLC an draibhear NVMe. Airson na draibhearan NVMe a chaidh a chleachdadh, tha an t-ùghdar den bheachd gu bheil e reusanta 32-64 gigabytes de tasgadan a dhèanamh.

Tha feum air a’ mheud dealachaidh a chaidh a thoirt seachad gus 64 gigabytes de tasgadan, meata-dàta tasgadan, agus cùl-taic meata-dàta a chuir air dòigh.

A bharrachd air an sin, tha mi a’ toirt fa-near, às deidh dùnadh siostam salach, gum bi LVM a ’comharrachadh an tasgadan gu lèir mar salach agus a’ sioncronadh a-rithist. A bharrachd air an sin, thèid seo a-rithist a h-uile uair a thèid lvchange a chleachdadh air an inneal seo gus an tèid an siostam ath-thòiseachadh a-rithist. Mar sin, tha mi a’ moladh an tasgadan ath-chruthachadh sa bhad a’ cleachdadh an sgriobt iomchaidh.

Cruthaichidh sinn LV air SATA RAID 6 airson a chleachdadh mar inneal taisgte.

#lvcreate -L 3298543271936B --name cache data

Carson dìreach trì terabytes ..?Gus an urrainn dhut, ma tha sin riatanach, SATA SSD RAID 6 a chleachdadh airson feumalachdan eile. Faodar meud an àite taisgte a mheudachadh gu dinamach, air an itealan, gun stad a chuir air an t-siostam. Gus seo a dhèanamh, feumaidh tu an tasgadan a stad airson ùine ghoirid agus ath-chomasachadh a dhèanamh, ach is e a’ bhuannachd shònraichte a th’ aig LVM-cache thairis, mar eisimpleir, bcache gum faodar seo a dhèanamh air an itealan.

Cruthaichidh sinn VG ùr airson caching.

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

Nach cruthaich sinn LV air an inneal taisgte.

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

An seo ghabh sinn sa bhad a h-uile àite an-asgaidh air / dev / data / cache gus an deach a h-uile sgaradh riatanach eile a chruthachadh sa bhad air / dev / root / cache. Ma chruthaich thu rudeigin san àite cheàrr, faodaidh tu a ghluasad le pvmove.

Cruthaichidh sinn agus cuir an comas an tasgadan:

#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

Carson a tha an leithid de chnap-starra a’ fàs ..?Tro dheuchainnean practaigeach, bha e comasach don ùghdar faighinn a-mach gu bheil an toradh as fheàrr air a choileanadh ma tha meud bloc tasgadan LVM aig an aon àm ri meud bloc tana LVM. A bharrachd air an sin, mar as lugha am meud, is ann as fheàrr a nì an rèiteachadh ann an clàradh air thuaiream.

Is e 64k am meud bloc as ìsle a tha ceadaichte airson LVM tana.

Bi faiceallach sgrìobhadh air ais ..!Tha. Bidh an seòrsa seo de thasg a’ cur dheth sioncronadh sgrìobhaidh chun inneal taisgte. Tha seo a’ ciallachadh ma thèid an tasgadan a chall, is dòcha gun caill thu dàta air an inneal taisgte. Nas fhaide air adhart, innsidh an t-ùghdar dhut dè na ceumannan, a bharrachd air NVMe RAID 1, a ghabhas gabhail gus dìoladh airson a’ chunnart seo.

Chaidh an seòrsa tasgadan seo a thaghadh a dh’aona ghnothach gus dìoladh a dhèanamh airson droch choileanadh sgrìobhaidh air thuaiream RAID 6.

Feuch an dèan sinn sgrùdadh air na fhuair sinn:

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

Cha bu chòir ach [cachedata_corig] a bhith suidhichte air /dev/data/cache. Ma tha rudeigin ceàrr, cleachd pvmove.

Faodaidh tu an tasgadan a dhì-cheadachadh ma tha sin riatanach le aon àithne:

#lvconvert -y --uncache cache/cachedata

Tha seo ga dhèanamh air-loidhne. Bidh LVM dìreach a’ sioncronadh an tasgadan gu diosc, ga thoirt air falbh, agus ag ath-ainmeachadh cachedata_corig air ais gu cachedata.

A 'suidheachadh LVM tana

Bheir sinn tuairmse timcheall air an ìre de rùm a dh’ fheumas sinn airson meata-dàta tana 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"

Cruinn suas gu 4 gigabytes: 4294967296B

Dèan iomadachadh le dhà agus cuir 4194304B airson meata-dàta LVM PV: 8594128896B
Cruthaichidh sinn sgaradh air leth air NVMe RAID 1 gus meata-dàta tana LVM agus an leth-bhreac cùl-taic aca a chuir air:

#lvcreate -L 8594128896B --name images root

Airson dè..?An seo faodaidh a’ cheist èirigh: carson a chuireas tu meata-dàta tana LVM air leth ma bhios e fhathast air a thasgadh air NVMe agus gun obraich e gu sgiobalta.

Ged a tha astar cudromach an seo, tha e fada bhon phrìomh adhbhar. Is e an rud gu bheil an tasgadan na phuing fàiligeadh. Dh’ fhaodadh rudeigin tachairt dha, agus ma thèid meata-dàta tana LVM a thasgadh, bheir e air a h-uile càil a bhith air chall gu tur. Às aonais meata-dàta iomlan, bidh e cha mhòr do-dhèanta leabhraichean tana a chruinneachadh.

Le bhith a’ gluasad a’ mheata-dàta gu tomhas-lìonaidh neo-thasgadh, ach luath, air leth, bidh sinn a’ gealltainn sàbhailteachd a’ mheata-dàta ma thachras call tasgadan no coirbeachd. Anns a ’chùis seo, bidh a h-uile milleadh a dh’ adhbhraicheas call tasgadan air a shuidheachadh gu h-ionadail taobh a-staigh meudan tana, a nì am modh ath-bheothachaidh nas sìmplidhe le òrdughan meudachd. Le coltachd àrd, thèid na milleadh sin ath-nuadhachadh le bhith a’ cleachdadh logaichean FS.

A bharrachd air an sin, ma chaidh dealbh de mheud tana a thogail roimhe seo, agus às deidh sin chaidh an tasgadan a shioncronachadh gu h-iomlan co-dhiù aon uair, an uairsin, mar thoradh air dealbhadh taobh a-staigh LVM tana, bidh ionracas an dealbh cinnteach ma thèid an tasgadan a chall. .

Nach cruthaich sinn VG ùr a bhios an urra ri solar tana:

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

Cruthaichidh sinn pool:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
Carson -Z yA bharrachd air na tha am modh seo an dùil - gus casg a chuir air dàta bho aon inneal brìgheil bho bhith ag aoidion gu inneal brìgheil eile nuair a thathar ag ath-riarachadh àite - thathas a’ cleachdadh neoni a bharrachd gus astar sgrìobhadh air thuaiream àrdachadh ann am blocaichean nas lugha na 64k. Bidh sgrìobhadh sam bith nas lugha na 64k gu raon den tomhas tana nach deach a riarachadh roimhe gu bhith 64K co-thaobhadh ri oir san tasgadan. Leigidh seo leis an obair a dhèanamh gu tur tron ​​​​tasgadh, a’ dol seachad air an inneal taisgte.

Gluaisidh sinn na LVan gu na PVan co-fhreagarrach:

#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

Feuch an dèan sinn sgrùdadh:

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

Cruthaichidh sinn tomhas tana airson deuchainnean:

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

Cuiridh sinn pacaidean an sàs airson deuchainnean agus sgrùdadh:

#apt-get install sysstat fio

Seo mar a chì thu giùlan ar rèiteachadh stòraidh ann an àm fìor:

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

Seo mar as urrainn dhuinn ar rèiteachadh a dhearbhadh:

#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

Gu faiceallach! Goireas!Ruithidh an còd seo 36 diofar dheuchainnean, gach fear a’ ruith airson 4 diogan. Tha leth de na deuchainnean airson clàradh. Faodaidh tu tòrr a chlàradh air NVMe ann an 4 diogan. Suas gu 3 gigabytes gach diog. Mar sin, faodaidh gach ruith de dheuchainnean sgrìobhaidh suas ri 216 gigabytes de ghoireas SSD ithe bhuat.

Leughadh agus sgrìobhadh measgaichte?Tha. Tha e ciallach na deuchainnean leughaidh is sgrìobhaidh a ruith air leth. A bharrachd air an sin, tha e ciallach dèanamh cinnteach gu bheil a h-uile tasgadan air a shioncronachadh gus nach toir sgrìobhadh a chaidh a dhèanamh roimhe buaidh air an leughadh.

Bidh na toraidhean ag atharrachadh gu mòr rè a ’chiad fhoillseachadh agus an fheadhainn às deidh sin mar a bhios an tasgadan agus an tomhas tana a’ lìonadh, agus cuideachd a rèir an deach aig an t-siostam air na caches a chaidh a lìonadh a shioncronachadh rè an fhoillseachadh mu dheireadh.

Am measg rudan eile, tha mi a’ moladh an astar a thomhas air meud a tha làn tana mar-thà às an deach dealbh a thogail. Bha cothrom aig an ùghdar faicinn mar a bhios sgrìobhadh air thuaiream a’ luathachadh gu sgiobalta dìreach às deidh dha a’ chiad dealbh a chruthachadh, gu sònraichte nuair nach eil an tasgadan fhathast làn. Bidh seo a’ tachairt mar thoradh air semantics sgrìobhaidh leth-bhreac-air-sgrìobhadh, co-thaobhadh tasgadan agus blocaichean tomhas tana, agus leis gu bheil sgrìobhadh air thuaiream gu RAID 6 a’ tionndadh gu bhith na leughadh air thuaiream bho RAID 6 agus an uairsin sgrìobhadh chun tasgadan. Anns an rèiteachadh againn, tha leughadh air thuaiream bho RAID 6 suas ri 6 tursan (an àireamh de SATA SSDs san raon) nas luaithe na sgrìobhadh. Air sgàth tha blocaichean airson CoW air an riarachadh ann an sreath bho linne tana, agus an uairsin bidh an clàradh, sa mhòr-chuid, cuideachd a’ tionndadh gu sreath.

Faodar an dà fheart seo a chleachdadh airson do bhuannachd.

Dealbhan tasgadan “co-leanailteach”.

Gus an cunnart gun tèid dàta a chall a lughdachadh ma thachras milleadh/call tasgadan, tha an t-ùghdar a’ moladh cleachdadh a thoirt a-steach de bhith a’ cuairteachadh snapshots gus dèanamh cinnteach à ionracas sa chùis seo.

An toiseach, leis gu bheil meata-dàta meud tana a’ fuireach air inneal nach deach a thasgadh, bidh am meata-dàta cunbhalach agus bidh call a dh’ fhaodadh a bhith air a sgaradh taobh a-staigh blocaichean dàta.

Tha an cearcall cuairteachaidh snapshot a leanas a’ gealltainn ionracas an dàta taobh a-staigh nan dealbhan gun fhios nach caillear tasgadan:

  1. Airson gach leabhar tana leis an ainm <name>, cruthaich dealbh leis an ainm <name>.cached
  2. Nach suidhich sinn an stairsneach imrich gu luach àrd reusanta: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. Anns an lùb nì sinn sgrùdadh air an àireamh de bhlocaichean salach san tasgadan: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' gus am faigh sinn neoni. Ma tha an neoni a dhìth ro fhada, faodar a chruthachadh le bhith ag atharrachadh an tasgadan airson ùine ghoirid gu modh sgrìobhaidh. Ach, a’ toirt aire do fheartan astair ar n-sreathan SATA agus NVMe SSD, a bharrachd air an goireas TBW aca, bidh e comasach dhut an ìre seo a ghlacadh gu sgiobalta gun a bhith ag atharrachadh am modh tasgadan, no bidh am bathar-cruaidh agad ag ithe a ghoireas gu lèir gu tur ann an beagan làithean. Air sgàth cuingealachaidhean ghoireasan, chan urrainn don t-siostam, ann am prionnsapal, a bhith fo 100% de luchd sgrìobhaidh fad na h-ùine. Bidh na NVMe SSDs againn fo luchd sgrìobhaidh 100% a’ cuir a-mach an goireas gu tur Làithean 3-4. Cha mhair SATA SSDs ach dà uair cho fada. Mar sin, gabhaidh sinn ris gu bheil a’ mhòr-chuid den eallach a’ dol gu leughadh, agus tha spreadhaidhean an ìre mhath geàrr-ùine againn de ghnìomhachd fìor àrd còmhla ri luchd ìosal gu cuibheasach airson sgrìobhadh.
  4. Cho luath 's a ghlac sinn (no a rinn sinn) neoni, bidh sinn ag ath-ainmeachadh <name>.cached gu <name>.committed. Tha an seann <name>.committed air a sguabadh às.
  5. Roghainneil, ma tha an tasgadan 100% làn, faodar ath-chruthachadh le sgriobt, mar sin ga ghlanadh. Le tasgadan leth-falamh, bidh an siostam ag obair fada nas luaithe nuair a thathar a’ sgrìobhadh.
  6. Suidhich an stairsnich imrich gu neoni: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata Cuiridh seo casg air an tasgadan airson ùine bho bhith a’ sioncronadh ris na prìomh mheadhanan.
  7. Bidh sinn a’ feitheamh gus an cruinnich tòrr atharrachaidhean san tasgadan #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' no thèid an timer dheth.
  8. Bidh sinn a-rithist a-rithist.

Carson a tha duilgheadasan le stairsneach imrich...?Is e an rud nach eil ann an cleachdadh fìor, clàradh “air thuaiream” gu tur air thuaiream. Ma sgrìobhas sinn rudeigin gu roinn de 4 kilobytes ann am meud, tha coltas ann gun tèid clàr a dhèanamh anns an ath mhionaid no dhà chun na h-aon no aon de na roinnean faisg air làimh (+ - 32K).

Le bhith a’ suidheachadh an stairsnich imrich gu neoni, bidh sinn a’ cur dheth sgrìobhadh sioncronaidh air an SATA SSD agus a’ cruinneachadh grunn atharrachaidhean gu aon bhloca 64K san tasgadan. Bidh seo gu mòr a’ sàbhaladh goireas SATA SSD.

Càite a bheil an còd..?Gu mì-fhortanach, tha an t-ùghdar den bheachd nach eil e comasach gu leòr ann an leasachadh sgriobtaichean bash leis gu bheil e 100% fèin-theagasg agus a ’cleachdadh leasachadh air a stiùireadh le“ google ”, mar sin tha e den bheachd nach bu chòir do dhuine sam bith an còd uamhasach a thig a-mach às a làmhan a chleachdadh. eile.

Tha mi a 'smaoineachadh gum bi proifeiseantaich san raon seo comasach air a h-uile loidsig a tha air a mhìneachadh gu h-àrd a dhealbhadh gu neo-eisimeileach, ma tha sin riatanach, agus,' s dòcha, eadhon gu h-àlainn a dhealbhadh mar sheirbheis siostam, mar a dh'fheuch an t-ùghdar ri dhèanamh.

Leigidh sgeama cuairteachaidh snapshot cho sìmplidh dhuinn chan e a-mhàin gum bi aon dealbh againn an-còmhnaidh air a shioncronachadh gu h-iomlan air an SATA SSD, ach leigidh e leinn cuideachd, a’ cleachdadh goireas thin_delta, faighinn a-mach dè na blocaichean a chaidh atharrachadh às deidh a chruthachadh, agus mar sin milleadh ionadail a dhèanamh air. na prìomh leabhraichean, gu mòr a 'sìmpleachadh ath-bheothachadh.

TRIM/DISCARD ann an libvirt/KVM

Air sgàth thèid an stòradh dàta a chleachdadh airson KVM a’ ruith libvirt, an uairsin bhiodh e na dheagh bheachd na VMan againn a theagasg chan ann a-mhàin gus àite an-asgaidh a ghabhail, ach cuideachd gus na rudan nach eil a dhìth a shaoradh.

Tha seo air a dhèanamh le bhith a’ dèanamh atharrais air taic TRIM/DISCARD air diosgan mas-fhìor. Gus seo a dhèanamh, feumaidh tu an seòrsa rianadair atharrachadh gu virtio-scsi agus am faidhle xml a dheasachadh.

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

Tha an leithid de DISCARDs bho aoighean OSes air an giullachd gu ceart le LVM, agus tha blocaichean air an saoradh gu ceart an dà chuid san tasgadan agus san amar tana. Anns a 'chùis againn, bidh seo a' tachairt sa mhòr-chuid ann an dòigh dàil, nuair a thèid an ath dhealbh a dhubhadh às.

Cùl-taic BTRFS

Cleachd sgriobtaichean deiseil le anabarrach rabhadh agus air do chunnart fhèin. Sgrìobh an t-ùghdar an còd seo e fhèin agus a-mhàin dha fhèin. Tha mi cinnteach gu bheil innealan co-chosmhail aig mòran de luchd-cleachdaidh eòlach Linux, agus chan fheumar lethbhreac a dhèanamh de chuid cuideigin eile.

Nach cruthaich sinn tomhas-lìonaidh air an inneal cùl-taic:

#lvcreate -L 256G --name backup backup

Nach cuir sinn cruth air ann am BTRFS:

#mkfs.btrfs /dev/backup/backup

Cruthaichidh sinn puingean sreap agus cuir sinn suas na fo-roinnean bunaiteach den t-siostam faidhle:

#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

Nach cruthaich sinn clàran airson cùl-taic:

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

Nach cruthaich sinn eòlaire airson sgriobtaichean cùl-taic:

#mkdir /root/btrfs-backup

Dèanamaid lethbhreac den sgriobt:

Tòrr de chòd bash eagallach. Cleachd air do chunnart fhèin. Na sgrìobh litrichean feargach chun an ùghdair...#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

Dè nì e eadhon ..?Tha seata de dh’ òrduighean sìmplidh ann airson dealbhan BTRFS a chruthachadh agus an leth-bhreacadh gu FS eile a’ cleachdadh cuir/faighinn BTRFS.

Faodaidh a’ chiad fhoillseachadh a bhith caran fada, oir... Aig an toiseach, thèid an dàta gu lèir a chopaigeadh. Bidh cur air bhog eile gu math luath, oir... Cha tèid ach atharrachaidhean a chopaigeadh.

Sgriobt eile a chuireas sinn ann an cron:

Cuid a bharrachd de chòd bash#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

Dè nì e ..?A’ cruthachadh agus a’ sioncronadh dealbhan mean air mhean de na leabhraichean clàraichte BTRFS air an cùl-taic FS. Às deidh seo, sguabaidh e às a h-uile dealbh a chaidh a chruthachadh o chionn 60 latha. Às deidh an cur air bhog, nochdaidh dealbhan le ceann-latha de na leabhraichean clàraichte anns na /backup/btrfs/back/ remote/ subdirectories.

Bheir sinn còraichean cur an gnìomh a’ chòd:

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

Feuch an dèan sinn sgrùdadh air agus cuir a-steach e sa chron:

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

Cùl-taic tana LVM

Cruthaichidh sinn amar tana air an inneal cùl-taic:

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

Stàlaich sinn ddrescue, oir ... cleachdaidh sgriobtaichean an inneal seo:

#apt-get install gddrescue

Nach cruthaich sinn eòlaire airson sgriobtaichean:

#mkdir /root/lvm-thin-backup

Dèanamaid lethbhreac de na sgriobtaichean:

Tòrr bash a-staigh ...#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

Dè nì e...?Tha seata de dh’ òrduighean ann airson a bhith a’ làimhseachadh dhealbhan tana agus a’ sioncronadh an eadar-dhealachaidh eadar dà dhealbh tana a gheibhear tro thin_delta gu inneal bloca eile a’ cleachdadh ddrescue agus blkdiscard.

Sgriobt eile a chuireas sinn ann an cron:

Beagan a bharrachd bash#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

Dè nì e...?A’ cleachdadh an sgriobt roimhe gus cùl-taic de na leabhraichean tana clàraichte a chruthachadh agus a shioncronachadh. Fàgaidh an sgriobt dealbhan neo-ghnìomhach de na leabhraichean clàraichte, a tha a dhìth gus sùil a chumail air atharrachaidhean bhon t-sioncronachadh mu dheireadh.

Feumar an sgriobt seo a dheasachadh, a’ sònrachadh liosta nan leabhraichean tana airson am bu chòir lethbhreacan-glèidhidh a dhèanamh. Tha na h-ainmean air an toirt seachad airson adhbharan mìneachaidh a-mhàin. Ma thogras tu, faodaidh tu sgriobt a sgrìobhadh a shioncronaicheas a h-uile leabhar.

Bheir sinn na còraichean:

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

Feuch an dèan sinn sgrùdadh air agus cuir a-steach e sa chron:

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

Bidh a’ chiad fhoillseachadh fada, oir... bidh leabhraichean tana air an sioncronadh gu h-iomlan le bhith a’ dèanamh leth-bhreac den àite a chaidh a chleachdadh. Taing do mheata-dàta tana LVM, tha fios againn dè na blocaichean a thathas a’ cleachdadh dha-rìribh, agus mar sin cha tèid ach blocaichean tomhas tana a chleachdadh.

Bidh ruith às deidh sin a’ dèanamh lethbhreac den dàta mean air mhean mar thoradh air atharrachadh tracadh tro mheata-dàta tana LVM.

Chì sinn dè thachair:

#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

Dè a dh’ fheumas seo a dhèanamh le liudhagan neadachaidh?

Nas coltaiche, leis gum faod meudan loidsigeach LVM LV a bhith nan leabhraichean corporra LVM PV airson VGn eile. Faodaidh LVM a bhith ath-chuairteachail, leithid liudhagan neadachaidh. Bheir seo sùbailteachd mòr dha LVM.

PS

Anns an ath artaigil, feuchaidh sinn ri grunn shiostaman stòraidh gluasadach / KVM coltach ris a chleachdadh mar bhunait airson cruinneachadh stòraidh / vm geo-sgaoileadh le dìth obrach air grunn mòr-thìrean a’ cleachdadh deasg dachaigh, an eadar-lìn dachaigh agus lìonraidhean P2P.

Source: www.habr.com

Cuir beachd ann