Cad atá i gcoiteann ag LVM agus Matryoshka?

Dea-lá.
Ba mhaith liom mo thaithí phraiticiúil a roinnt leis an bpobal maidir le córas stórála sonraí a thógáil do KVM ag baint úsáide as md RAID + LVM.

Áireoidh an clár:

  • Tógáil md RAID 1 ó NVMe SSD.
  • Md RAID 6 a chur le chéile ó SATA SSD agus thiomáineann rialta.
  • Gnéithe den oibríocht TRIM/DISCARD ar SSD RAID 1/6.
  • Eagar md RAID 1/6 bootable a chruthú ar thacar coitianta dioscaí.
  • Suiteáil an chórais ar NVMe RAID 1 nuair nach bhfuil aon tacaíocht NVMe sa BIOS.
  • Ag baint úsáide as taisce LVM agus LVM tanaí.
  • Ag baint úsáide as grianghraif BTRFS agus seol / fháil le haghaidh cúltaca.
  • Ag baint úsáide as pictiúir tanaí LVM agus thin_delta le haghaidh cúltacaí stíl BTRFS.

Má tá suim agat, féach le do thoil cat.

Ráiteas

Níl aon fhreagracht ar an údar as na hiarmhairtí a bhaineann le húsáid nó gan úsáid a bhaint as ábhair/samplaí/cód/leideanna/sonraí ón alt seo. Tríd an ábhar seo a léamh nó a úsáid ar bhealach ar bith, glacann tú freagracht as iarmhairtí uile na ngníomhartha seo. I measc na hiarmhairtí a d’fhéadfadh a bheith ann tá:

  • SSDs NVMe crisp-friochta.
  • Go hiomlán úsáidte suas acmhainn taifeadta agus teip thiomáineann SSD.
  • Caillteanas iomlán na sonraí go léir ar gach tiomántán, lena n-áirítear cóipeanna cúltaca.
  • Crua-earraí ríomhaire lochtacha.
  • Cur amú ama, nerves agus airgead.
  • Aon iarmhairtí eile nach bhfuil liostaithe thuas.

Iarann

Ar fáil bhí:

Motherboard ó thart ar 2013 le chipset Z87, comhlánaigh le Intel Core i7 / Haswell.

  • Próiseálaí 4 chroí, 8 snáithe
  • 32 GB RAM DDR3
  • 1 x 16 nó 2 x 8 PCIe 3.0
  • 1 x 4 + 1 x 1 PCIe 2.0
  • 6 x 6 GBps SATA 3 chónaisc

Adaptóir SAS LSI SAS9211-8I flashed go dtí mód IT / HBA. Athsholáthraíodh firmware atá cumasaithe le RAID d’aon ghnó le firmware HBA chun:

  1. D'fhéadfá an cuibheoir seo a chaitheamh amach am ar bith agus aon cheann eile ar tháinig tú trasna air a chur ina ionad.
  2. D'oibrigh TRIM/Discard ar dhioscaí de ghnáth, toisc... i bhfirmware RAID ní thacaítear leis na horduithe seo ar chor ar bith, agus níl cúram ar an HBA, go ginearálta, cad iad na horduithe a tharchuirtear thar an mbus.

Tiomántáin chrua - 8 bpíosa de HGST Travelstar 7K1000 le toilleadh 1 TB i bhfachtóir foirm 2.5, mar atá i gcás ríomhairí glúine. Bhí na tiomántáin seo in eagar RAID 6 roimhe seo. Beidh úsáid acu sa chóras nua freisin. Chun cúltacaí áitiúla a stóráil.

Ina theannta sin curtha leis:

Múnla SATA SSD 6 phíosa Samsung 860 QVO 2TB. Bhí líon mór de dhíth ar na SSDanna seo, bhí taisce SLC i láthair, iontaofacht, agus praghas íseal inmhianaithe. Bhí tacaíocht le haghaidh ábhar aischurtha/nialas ag teastáil, rud a sheiceálann an líne in dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

2 phíosa múnla NVMe SSD Samsung SSD 970 EVO 500GB.

Maidir leis na SSDanna seo, tá luas randamach léite/scríofa agus cumas acmhainne do do chuid riachtanas tábhachtach. Radaitheoir dóibh. Gá. Cinnte. Seachas sin, Fry iad go dtí go crispy le linn an chéad sioncrónaithe RAID.

Adaptóir StarTech PEX8M2E2 le haghaidh 2 x NVMe SSD suiteáilte i sliotán PCIe 3.0 8x. Níl anseo, arís, ach HBA, ach do NVMe. Tá sé difriúil le hoiriúnóirí saor sa mhéid is nach dteastaíonn tacaíocht défurcation PCIe ón máthairchlár toisc go bhfuil lasc PCIe ionsuite ann. Oibreoidh sé fiú sa chóras is ársa le PCIe, fiú más sliotán x1 PCIe 1.0 é. Ar ndóigh, ag an luas cuí. Níl aon RAIDanna ann. Níl aon BIOS ionsuite ar bord. Mar sin, ní fhoghlaimeoidh do chóras go draíochta tosaithe le NVMe, i bhfad níos lú ná NVMe RAID a bhuíochas leis an ngléas seo.

Bhí an chomhpháirt seo mar gheall ar láithreacht 8x PCIe 3.0 saor in aisce amháin sa chóras, agus, má tá 2 shliotán saor in aisce ann, is féidir dhá phingin PEX4M2E1 nó analógacha a chur in ionad go héasca, ar féidir iad a cheannach áit ar bith ar phraghas 600. rúbal.

Diúltaíodh d’aon ghnó gach cineál crua-earraí nó chipset/BIOS RAIDs ionsuite, ionas go mbeifí in ann an córas iomlán a athsholáthar go hiomlán, seachas an SSD/HDD féin, agus na sonraí go léir á gcaomhnú. Go hidéalach, ionas gur féidir leat an córas oibriúcháin suiteáilte a shábháil fiú agus tú ag bogadh chuig crua-earraí atá go hiomlán nua/difriúil. Is é an rud is mó ná go bhfuil calafoirt SATA agus PCIe ann. Tá sé cosúil le CD beo nó tiomáint flash bootable, ach an-tapa agus beagán toirtiúil.

HumorSeachas sin, tá a fhios agat cad a tharlaíonn - uaireanta is gá duit go práinneach an t-eagar iomlán a thabhairt leat le tógáil leat. Ach níl mé ag iarraidh sonraí a chailleadh. Chun seo a dhéanamh, tá na meáin go léir atá luaite suite go áisiúil ar na sleamhnáin sna 5.25 bánna den chás caighdeánach.

Bhuel, agus, ar ndóigh, le haghaidh turgnamh le modhanna éagsúla caching SSD i Linux.

Tá ruathair crua-earraí leadránach. Cas air. Oibríonn sé nó ní oibríonn sé. Agus le mdadm tá roghanna i gcónaí.

Bogearraí

Roimhe seo, suiteáladh Debian 8 Jessie ar na crua-earraí, atá gar do EOL. Cuireadh RAID 6 le chéile ó na HDDanna thuasluaite péireáilte le LVM. Reáchtáil sé meaisíní fíorúla i kvm/libvirt.

Mar Tá taithí oiriúnach ag an údar ar thiomáineann flash iniompartha SATA/NVMe bootable a chruthú, agus freisin, ionas nach ndéanfaí an gnáth-theimpléad oiriúnach a bhriseadh, roghnaíodh Ubuntu 18.04 mar an spriocchóras, atá cobhsaithe go leor cheana féin, ach a bhfuil 3 bliana fós aige. tacaíocht sa todhchaí.

Tá na tiománaithe crua-earraí go léir a theastaíonn uainn as an mbosca sa chóras luaite. Níl aon bhogearraí ná tiománaithe tríú páirtí de dhíth orainn.

Ullmhúchán don suiteáil

Chun an córas a shuiteáil ní mór dúinn Íomhá Deisce Ubuntu. Tá suiteálaí bríomhar de shaghas éigin ag an gcóras freastalaí, a léiríonn neamhspleáchas iomarcach nach féidir a dhíchumasú trí dheighilt an chórais UEFI a bhrú ar cheann de na dioscaí, ag milleadh na háilleachta go léir. Dá réir sin, tá sé suiteáilte ach amháin i mód UEFI. Ní thairgeann sé aon roghanna.

Nílimid sásta leis seo.

Cén fáth?Ar an drochuair, tá tosaithe UEFI an-lag comhoiriúnach le bogearraí tosaithe RAID, mar gheall ar ... Ní thairgeann aon duine áirithintí dúinn maidir le críochdheighilt UEFI ESP. Tá oidis ar an Idirlíon a mholann an deighilt ESP a chur ar thiomáint flash i gcalafort USB, ach is pointe teip é seo. Tá oidis ag baint úsáide as bogearraí mdadm RAID 1 le leagan meiteashonraí 0.9 nach gcuireann cosc ​​​​ar BIOS UEFI an deighilt seo a fheiceáil, ach maireann sé seo go dtí an nóiméad sásta nuair a scríobhann an BIOS nó crua-earraí eile OS rud éigin chuig an ESP agus déanann sé dearmad é a shioncrónú le daoine eile. scátháin.

Ina theannta sin, braitheann tosaithe UEFI ar NVRAM, nach mbogfaidh chomh maith leis na dioscaí chuig an gcóras nua, mar gheall ar Is cuid den mháthairchlár.

Mar sin, ní dhéanfaimid roth nua a athchruthú. Tá rothar seanathair réamh-thástála ama againn cheana féin, ar a dtugtar Legacy/boot boot anois, a bhfuil an t-ainm bródúil CSM air ar chórais atá comhoiriúnach le UEFI. Déanfaimid é a thógáil den seilf, é a lubricate, na boinn a phumpáil suas agus é a ghlanadh le héadach tais.

Ní féidir an leagan deisce de Ubuntu a shuiteáil i gceart leis an bootloader Legacy freisin, ach anseo, mar a deir siad, tá roghanna ann ar a laghad.

Agus mar sin, bailímid na crua-earraí agus luchtaimid an córas ó thiomáint flash bootable Ubuntu Live. Beidh orainn pacáistí a íoslódáil, mar sin socróimid an líonra a oibríonn duit. Mura n-oibríonn sé, is féidir leat na pacáistí riachtanacha a lódáil ar thiomáint flash roimh ré.

Téimid isteach sa timpeallacht Deisce, seolann muid an t-aithriseoir teirminéil, agus as seo a leanas:

#sudo bash

Conas…?Is í an líne thuas an truicir chanónach do holiwars faoi sudo. C bоtagann deiseanna níos mó agusоfreagracht níos mó. Is í an cheist an féidir leat é a chur ort féin. Ceapann go leor daoine nach bhfuil sé cúramach ar a laghad úsáid a bhaint as sudo ar an mbealach seo. Ach:

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

Cén fáth nach bhfuil ZFS...?Nuair a shuiteáilimid bogearraí ar ár ríomhaire, tugaimid ár gcuid crua-earraí ar iasacht d'fhorbróirí na mbogearraí seo le tiomáint.
Nuair a bhíonn muinín againn as na bogearraí seo le sábháilteacht ár sonraí, bainimid amach iasacht atá comhionann leis an gcostas a bhaineann leis na sonraí seo a athchóiriú, agus beidh orainn é a íoc lá éigin.

Ón taobh sin de, is Ferrari é ZFS, agus tá mdadm + lvm níos cosúla le rothar.

Go suibiachtúil, is fearr leis an údar rothar a thabhairt ar iasacht do dhaoine anaithnide seachas Ferrari. Ann, níl praghas na heisiúna ard. Níl gá le cearta. Níos simplí ná rialacha tráchta. Tá páirceáil saor in aisce. Tá cumas tras-tíre níos fearr. Is féidir leat cosa a cheangal le rothar i gcónaí, agus is féidir leat rothar a dheisiú le do lámha féin.

Cén fáth mar sin BTRFS...?Chun an córas oibriúcháin a thosú, teastaíonn córas comhaid uainn a fhaigheann tacaíocht in Legacy/BIOS GRUB as an mbosca, agus a thacaíonn le pictiúir beo ag an am céanna. Úsáidfimid é don deighilt /boot. Ina theannta sin, is fearr leis an údar an FS seo a úsáid le haghaidh / (fréamh), gan dearmad a thabhairt faoi deara gur féidir leat deighiltí ar leith a chruthú ar LVM le haghaidh aon bhogearraí eile agus iad a shuiteáil sna heolairí riachtanacha.

Ní stórálfaimid aon íomhánna de mheaisíní fíorúla nó bunachair shonraí ar an FS seo.
Ní bhainfear úsáid as an FS seo ach amháin chun pictiúirí den chóras a chruthú gan é a chasadh as agus ansin na pictiúir seo a aistriú chuig diosca cúltaca ag baint úsáide as seolta/get.

Ina theannta sin, is fearr leis an údar go ginearálta íosmhéid bogearraí a choinneáil go díreach ar na crua-earraí agus na bogearraí eile go léir a reáchtáil i meaisíní fíorúla ag baint úsáide as rudaí cosúil le GPUanna agus rialaitheoirí Óstach PCI-USB a chur ar aghaidh chuig KVM trí IOMMU.

Is iad na rudaí amháin atá fágtha ar na crua-earraí ná stóráil sonraí, fíorúlú agus cúltaca.

Má tá muinín agat as ZFS níos mó, ansin, i bprionsabal, don iarratas sonraithe tá siad idirmhalartaithe.

Mar sin féin, déanann an t-údar neamhaird d’aon ghnó ar na gnéithe scáthánaithe/RAID ionsuite agus iomarcaíochta atá ag ZFS, BRTFS agus LVM.

Mar argóint bhreise, tá sé de chumas ag BTRFS scríbhinní randamacha a thiontú ina scríbhinní seicheamhach, a bhfuil tionchar an-dearfach aige ar an luas a bhaineann le grianghraif/cúltaca a shioncronú ar an HDD.

Déanaimis gach gléas a athscanadh:

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

Breathnaímis thart:

#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

Leagan amach diosca

NVMe SSD

Ach ní mharcálfaimid iad ar bhealach ar bith. Mar an gcéanna, ní fheiceann ár BIOS na tiomántáin seo. Mar sin, rachaidh siad go hiomlán chuig RAID bogearraí. Ní chruthóimid rannáin ann fiú. Más mian leat an “canón” nó “go príomha” a leanúint, cruthaigh críochdheighilt mhór amháin, cosúil le HDD.

SATA HDD

Ní gá aon rud speisialta a chumadh anseo. Cruthóimid alt amháin do gach rud. Cruthóimid críochdheighilt toisc go bhfeiceann an BIOS na dioscaí seo agus is féidir fiú iarracht a dhéanamh iad a thosú. Déanfaimid fiú GRUB a shuiteáil ar na dioscaí seo níos déanaí ionas gur féidir leis an gcóras é seo a dhéanamh go tobann.

#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 an áit a éiríonn rudaí suimiúil dúinn.

Ar an gcéad dul síos, tá ár dtiomántáin 2 TB i méid. Tá sé seo laistigh den raon inghlactha do MBR, agus is é sin a úsáidfimid. Más gá is féidir, a chur in ionad le GPT. Tá ciseal comhoiriúnachta ag dioscaí GPT a ligeann do chórais atá comhoiriúnach le MBR na chéad 4 dheighilt a fheiceáil má tá siad suite laistigh den chéad 2 terabyte. Is é an rud is mó ná gur chóir go mbeadh an deighilt tosaithe agus an deighilt bios_grub ar na dioscaí seo ag an tús. Ligeann sé seo fiú duit tosaithe ó thiomáineann GPT Legacy/BIOS.

Ach ní hé seo ár gcás.

Anseo cruthóimid dhá chuid. Beidh an chéad cheann 1 GB i méid agus a úsáid le haghaidh RAID 1 /boot.

Úsáidfear an dara ceann le haghaidh RAID 6 agus tógfaidh sé suas an spás saor in aisce go léir atá fágtha ach amháin i gcás limistéar beag neamh-leithdháilte ag deireadh an tiomáint.

Cad é an limistéar neamhmharcáilte seo?De réir foinsí ar an líonra, tá taisce SLC inleathnaithe dinimiciúil ag ár SSDanna SATA ar bord ó 6 go 78 ghigibheart. Faighimid 6 ghigibheart “saor in aisce” mar gheall ar an difríocht idir “gigabytes” agus “gibibytes” i mbileog sonraí an tiomántáin. Leithdháiltear na 72 ghigibheart eile ó spás nach bhfuil in úsáid.

Anseo ba chóir a thabhairt faoi deara go bhfuil taisce SLC againn, agus tá an spás áitithe i mód 4 giotán MLC. Rud a chiallaíonn go héifeachtach dúinn nach bhfaighidh muid ach 4 ghigibheart de thaisce SLC do gach 1 ghigibheart de spás saor in aisce.

Méadaigh 72 ghigibheart faoi 4 agus faigh 288 ghigibheart. Is é seo an spás saor in aisce nach mbeidh muid a mharcáil amach chun ligean do na thiomáineann úsáid iomlán a bhaint as an taisce SLC.

Mar sin, gheobhaidh muid suas le 312 ghigibheart de thaisce SLC as iomlán de shé thiomántán. As na tiomántáin go léir, úsáidfear 2 cheann i RAID le haghaidh iomarcaíochta.

Ligfidh an méid seo taisce dúinn go hannamh sa saol fíor teacht ar chás nach dtéann scríobh chuig an taisce. Cúitíonn sé seo go han-mhaith an míbhuntáiste is brónach a bhaineann le cuimhne QLC - an luas scríofa an-íseal nuair a scríobhtar sonraí ag seachaint an taisce. Mura gcomhfhreagraíonn do chuid ualaí dó seo, molaim duit smaoineamh go dian ar cé chomh fada agus a mhairfidh do SSD faoi ualach den sórt sin, ag cur san áireamh an TBW ón mbileog sonraí.

#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

Arrays a Chruthú

Ar dtús, ní mór dúinn an meaisín a athainmniú. Tá sé seo riachtanach toisc go bhfuil an t-ainm ósta mar chuid den ainm eagar áit éigin taobh istigh mdadm agus cuireann sé isteach ar rud éigin áit éigin. Ar ndóigh, is féidir arrays a athainmniú níos déanaí, ach is céim gan ghá é 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

Cén fáth - glacadh leis-glan...?Chun eagair a thúsú a sheachaint. I gcás leibhéil RAID 1 agus 6 araon, tá sé seo bailí. Is féidir le gach rud oibriú gan tús a chur leis más sraith nua é. Ina theannta sin, is cur amú acmhainn TBW é an t-eagar SSD a thosú ar chruthú. Bainimid úsáid as TRIM/DISCARD nuair is féidir ar eagair SSD cóimeáilte chun iad a “thionscnamh”.

I gcás eagair SSD, tacaítear le RAID 1 DISCARD as an mbosca.

Le haghaidh eagair SSD RAID 6 SCÓNAITHE, ní mór duit é a chumasú i bparaiméadar an mhodúil eithne.

Níor cheart é seo a dhéanamh ach amháin má tá tacaíocht oibre ag gach SSD a úsáidtear in eagair leibhéil 4/5/6 sa chóras seo le haghaidh discard_zeroes_data. Uaireanta tagann tú trasna ar thiomáineann aisteach a insíonn don eithne go dtacaítear leis an bhfeidhm seo, ach i ndáiríre níl sé ann, nó ní oibríonn an fheidhm i gcónaí. I láthair na huaire, tá tacaíocht ar fáil beagnach i ngach áit, áfach, tá thiomáineann d'aois agus firmware le hearráidí. Ar an ábhar sin, díchumasaítear tacaíocht SÍOLACHÁIN do RAID 6 de réir réamhshocraithe.

Tabhair aird, scriosfaidh an t-ordú seo a leanas na sonraí go léir ar thiomáineann NVMe tríd an eagar le “nialais” a “thionscnamh”.

#blkdiscard /dev/md0

Má théann rud éigin mícheart, déan iarracht céim a shonrú.

#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

Cén fáth chomh mór sin...?Bíonn tionchar dearfach ag méadú an smután ar luas na léitheoireachta randamach i mbloic suas go dtí méid smután san áireamh. Tarlaíonn sé seo toisc gur féidir oibríocht amháin den mhéid cuí nó níos lú a chur i gcrích go hiomlán ar fheiste amháin. Mar sin, déantar achoimre ar an IOPS ó gach feiste. De réir staitisticí, ní théann 99% de IO thar 512K.

RAID 6 IOPS in aghaidh an scríbhinn i gcónaí níos lú ná nó cothrom le IOPS aon tiomántán amháin. Nuair is féidir, mar léamh randamach, IOPS a bheith arís agus arís eile níos mó ná tiomáint amháin, agus anseo tá an méid bloc ríthábhachtach.
Ní fheiceann an t-údar an pointe ag iarraidh barrfheabhsú a dhéanamh ar pharaiméadar atá olc i bhfodhearadh RAID 6 agus ina ionad sin déanann sé barrfheabhsú ar a bhfuil go maith ag RAID 6.
Déanfaimid cúiteamh as droch-scríobh randamach RAID 6 le taisce NVMe agus cleasanna tanaí-sholáthair.

Níor chumasaigh muid SEACHADADH do RAID 6 go fóill. Mar sin ní “thógfaimid” an t-eagar seo go ceann tamaill. Déanfaimid é seo níos déanaí, tar éis an OS a shuiteáil.

SATA HDD

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

LVM ar NVMe RAID

Ar mhaithe le luas, ba mhaith linn an córas fréimhe comhaid a chur ar NVMe RAID 1 atá / dev/md0.
Mar sin féin, beidh an t-eagar tapa seo fós ag teastáil uainn le haghaidh riachtanais eile, mar bhabhtáil, meiteashonraí agus meiteashonraí LVM-cache agus LVM-tanaí, mar sin cruthóimid VG LVM ar an eagar seo.

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

Cruthaímid críochdheighilt don fhréamhchóras comhad.

#lvcreate -L 128G --name root root

Déanaimis críochdheighilt le haghaidh malartú de réir mhéid an RAM.

#lvcreate -L 32G --name swap root

Suiteáil OS

San iomlán, tá gach rud is gá againn chun an córas a shuiteáil.

Seoladh an draoi suiteála córais ó thimpeallacht Ubuntu Live. Suiteáil gnáth. Ag an gcéim a roghnaíonn tú dioscaí le haghaidh suiteála amháin, ní mór duit an méid seo a leanas a shonrú:

  • /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), - úsáid mar dheighilt babhtála
  • Suiteáil an bootloader ar /dev/sda

Nuair a roghnaíonn tú BTRFS mar an fhréamhchóras comhad, cruthóidh an suiteálaí go huathoibríoch dhá imleabhar BTRFS darb ainm "@" le haghaidh / (root), agus "@home" le haghaidh / home.

Cuirimis tús leis an suiteáil...

Críochnóidh an tsuiteáil le bosca dialóige módúil a léiríonn earráid agus an tosaitheoir á shuiteáil. Ar an drochuair, ní bheidh tú in ann éirí as an dialóg seo trí úsáid a bhaint as modhanna caighdeánacha agus leanúint leis an tsuiteáil. Logálaimid amach as an gcóras agus logáil isteach arís, ag críochnú i deasc glan Ubuntu Live. Oscail an teirminéal, agus arís:

#sudo bash

Cruthaigh timpeallacht chroot chun leanúint leis an tsuiteáil:

#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

Déanaimis an líonra agus an t-óstainm a chumrú i chroot:

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

A ligean ar dul isteach sa timpeallacht chroot:

#chroot /mnt/chroot

Gcéad dul síos, cuirfimid na pacáistí:

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

Seiceáil agus socróimid gach pacáiste a suiteáladh go cam mar gheall ar shuiteáil neamhiomlán an chórais:

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

Mura n-oibríonn rud éigin amach, seans go mbeidh ort /etc/apt/sources.list a chur in eagar ar dtús

Déanaimis na paraiméadair don mhodúl RAID 6 a choigeartú chun TRIM/DISCARD a chumasú:

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

Déanaimis ár n-eagair a athrú beagán:

#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

Cad a bhí sé..?Tá sraith rialacha udev cruthaithe againn a dhéanfaidh na nithe seo a leanas:

  • Socraigh méid an taisce bloc do RAID 2020 le bheith leordhóthanach do 6. Níor athraigh an luach réamhshocraithe, is cosúil, ó cruthaíodh Linux, agus ní raibh sé leordhóthanach ar feadh i bhfad.
  • Íosmhéid IO a chur in áirithe ar feadh ré na seiceálacha/sioncrónaithe eagair. Déantar é seo chun do chuid eagair a chosc ó dhul i bhfostú i staid shíoraí sioncrónaithe faoi ualach.
  • Teorainn a chur leis an IO uasta le linn seiceálacha/shioncronú eagair. Tá sé seo riachtanach ionas nach bhfíoraíonn sioncrónú/seiceáil RAIDanna SSD do thiomáineann go briosc. Tá sé seo fíor go háirithe i gcás NVMe. (Cuimhnigh faoin radaitheoir? Ní raibh mé ag magadh.)
  • Cosc ar dhioscaí ó rothlú fearsaidí (HDD) a stopadh trí APM agus socraigh an teorainn ama codlata do rialtóirí diosca go 7 n-uaire. Is féidir leat APM a dhíchumasú go hiomlán más féidir le do thiomáineann é a dhéanamh (-B 255). Leis an luach réamhshocraithe, stopfaidh na thiomáineann tar éis cúig soicind. Ansin ba mhaith leis an OS an taisce diosca a athshocrú, casfaidh na dioscaí suas arís, agus tosóidh gach rud arís. Tá uaslíon teoranta rothlú fearsaidí ag dioscaí. Is féidir le timthriall réamhshocraithe simplí den sórt sin do dhioscaí a mharú go héasca i gceann cúpla bliain. Ní fhulaingíonn gach diosca dá bharr seo, ach is cinn “ríomhaire glúine” iad na dioscaí seo againne, leis na socruithe réamhshocraithe cuí, a fhágann go bhfuil cuma mion-MAID ar an RAID.
  • Suiteáil inléite ar dhioscaí (ag rothlú) 1 meigeavata - dhá bhloc as a chéile/sumpáil RAID 6
  • Díchumasaigh readhead ar na eagair iad féin.

Cuirimis in eagar /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

Cén fáth é sin..?Déanfaimid cuardach don deighilt /boot de réir UUID. D’fhéadfadh ainmniú eagar athrú go teoiriciúil.

Déanfaimid cuardach ar na hailt atá fágtha de réir ainmneacha LVM sa nodaireacht /dev/mapper/vg-lv, mar gheall ar aithníonn siad deighiltí ar bhealach uathúil.

Ní úsáidimid UUID le haghaidh LVM toisc Féadfaidh UUID toirteanna LVM agus a gcuid pictiúr a bheith mar an gcéanna.Suiteáil /dev/mapper/root-root.. faoi dhó?Tá. Díreach. Gné BTRFS. Is féidir an córas comhaid seo a shuiteáil arís agus arís eile le subvols éagsúla.

Mar gheall ar an ngné chéanna seo, molaim gan pictiúir LVM de mhéideanna gníomhacha BTRFS a chruthú. Seans go mbeidh iontas ort nuair a atosaíonn tú.

Déanaimis an cumraíocht mdadm a athghiniúint:

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

Déanaimis na socruithe LVM a choigeartú:

#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

Cad a bhí sé..?Chuireamar ar chumas linnte tanaí LVM a leathnú go huathoibríoch nuair a shroicheamar 90% den spás áitithe faoi 5% den toirt.

Tá an t-uaslíon bloic taisce do thaisce LVM méadaithe againn.

Chuireamar cosc ​​ar LVM méideanna LVM (PV) a chuardach ar:

  • gléasanna ina bhfuil taisce LVM (cdata)
  • gléasanna arna dtaisceadh le taisce LVM a sheachnaíonn an taisce (_corig). Sa chás seo, déanfar an gléas i dtaisce féin a scanadh fós tríd an taisce (ach ).
  • gléasanna ina bhfuil meiteashonraí taisce LVM (cmeta)
  • gach feiste i VG leis na híomhánna ainm. Anseo beidh íomhánna diosca de mheaisíní fíorúla againn, agus nílimid ag iarraidh go ndéanfaidh LVM ar an ósta méideanna a bhaineann leis an aoi OS a ghníomhachtú.
  • gach feiste i VG leis an ainm cúltaca. Anseo beidh cóipeanna cúltaca againn d'íomhánna meaisíní fíorúla.
  • gach gléas a gcríochnaíonn a ainm le “gpv” (toirt fisiciúil aoi)

Táimid tar éis tacaíocht a chumasú SÍOSÚ agus spás saor in aisce á scaoileadh againn ar LVM VG. Bí cúramach. Tógfaidh sé seo go leor ama chun LVanna a scriosadh ar an SSD. Baineann sé seo go háirithe le SSD RAID 6. Mar sin féin, de réir an phlean, úsáidfimid soláthar tanaí, mar sin ní chuirfidh sé seo bac orainn ar chor ar bith.

Déanaimis an íomhá initramfs a nuashonrú:

#update-initramfs -u -k all

Suiteáil agus cumraigh grub:

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

Cé na dioscaí ba chóir duit a roghnú?Gach duine atá sd*. Caithfidh an córas a bheith in ann tosaithe ó aon tiomáint SATA nó SSD atá ag obair.

Cén fáth ar chuir siad os-prober..?Le haghaidh neamhspleáchas iomarcach agus lámha spraíúil.

Ní oibríonn sé i gceart má tá ceann de na RAIDs i stát díghrádaithe. Déanann sé iarracht an OS a chuardach ar dheighiltí a úsáidtear i meaisíní fíorúla a ritheann ar na crua-earraí seo.

Más gá duit é, is féidir leat é a fhágáil, ach coinnigh gach ceann díobh thuas i gcuimhne. Molaim oidis a lorg chun fáil réidh le lámha dána ar líne.

Leis seo tá an suiteáil tosaigh críochnaithe againn. Tá sé in am atosú isteach san OS nua-shuiteáilte. Ná déan dearmad an CD Beo/USB bootable a bhaint.

#exit
#reboot

Roghnaigh aon cheann de na SSDanna SATA mar an gléas tosaithe.

LVM ar SATA SSD

Ag an bpointe seo, tá booted againn cheana féin san OS nua, chumraigh an líonra, apt, d'oscail an aithriseoir teirminéil, agus seoladh:

#sudo bash

Leanaimis ar aghaidh.

“Túsaigh” an eagar ó SATA SSD:

#blkdiscard /dev/md2

Mura n-oibríonn sé, déan iarracht:

#blkdiscard --step 65536 /dev/md2
Cruthaigh LVM VG ar SATA SSD:

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

Cén fáth VG eile?Go deimhin, tá fréamh ainmnithe VG againn cheana féin. Cén fáth nach gcuireann tú gach rud isteach i VG amháin?

Má tá roinnt PVanna i VG, ansin chun an VG a ghníomhachtú i gceart, caithfidh gach PV a bheith i láthair (ar líne). Is é an eisceacht ná LVM RAID, rud nach n-úsáideann muid d'aon ghnó.

Ba mhaith linn i ndáiríre má tá teip (léigh caillteanas sonraí) ar aon cheann de na eagair RAID 6, beidh an córas oibriúcháin tosaithe de ghnáth agus a thabhairt dúinn an deis chun an fhadhb a réiteach.

Chun seo a dhéanamh, ag an gcéad leibhéal astarraingthe déanfaimid gach cineál “meán” fisiceach a leithlisiú ina VG ar leith.

Go heolaíoch, baineann eagair RAID éagsúla le “fearainn iontaofachta” éagsúla. Níor cheart duit pointe teipe comónta breise a chruthú dóibh trína gcramadh isteach i VG amháin.

Ligfidh láithreacht LVM ag an leibhéal “crua-earraí” dúinn píosaí d’eagair RAID éagsúla a ghearradh go treallach trína gcomhcheangal ar bhealaí éagsúla. Mar shampla - reáchtáil ag an am céanna bcache + LVM tanaí, bcache + BTRFS, LVM cache + LVM tanaí, cumraíocht casta ZFS le caches, nó aon mheascán hellish eile chun iarracht a dhéanamh é a chur i gcomparáid go léir.

Ag an leibhéal “crua-earraí”, ní úsáidfimid rud ar bith seachas méideanna LVM “tiubh” maith. Seans gurb é an deighilt chúltaca an eisceacht don riail seo.

I mo thuairimse, faoin nóiméad seo, bhí go leor léitheoirí tosaithe cheana féin a bheith in amhras faoi rud éigin faoin mbábóg neadaithe.

LVM ar SATA HDD

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

VG nua arís..?Ba mhaith linn i ndáiríre, má theipeann ar an eagar diosca a úsáidfimid le haghaidh cúltaca sonraí, go leanfaidh ár gcóras oibriúcháin ag obair de ghnáth, agus rochtain ar shonraí neamhchúltaca a choinneáil mar is gnách. Dá bhrí sin, chun fadhbanna gníomhachtaithe VG a sheachaint, cruthaímid VG ar leithligh.

Socrú taisce LVM

Cruthaímid LV ar NVMe RAID 1 chun é a úsáid mar ghléas taisce.

#lvcreate -L 70871154688B --name cache root

Cén fáth a bhfuil chomh beag...?Is é an fírinne go bhfuil taisce SLC ag ár NVMe SSDs freisin. 4 ghigibheart “saor in aisce” agus 18 ghigibheart dinimiciúla mar gheall ar an spás saor in aisce atá sa MLC 3-giotán. Nuair a bheidh an taisce seo ídithe, ní bheidh NVMe SSDs i bhfad níos tapúla ná ár SATA SSD le taisce. I ndáiríre, ar an gcúis seo, ní dhéanann sé aon chiall dúinn an deighilt taisce LVM a dhéanamh i bhfad níos mó ná dhá oiread an taisce SLC den tiomáint NVMe. Maidir leis na tiomántáin NVMe a úsáidtear, measann an t-údar go bhfuil sé réasúnta 32-64 ghigibheart taisce a dhéanamh.

Teastaíonn an méid deighilte a thugtar chun 64 ghigibheart de thaisce, meiteashonraí taisce, agus cúltaca meiteashonraí a eagrú.

Ina theannta sin, tugaim faoi deara, tar éis múchadh córas salach, go ndéanfaidh LVM an taisce iomlán a mharcáil mar salach agus déanfaidh sé sioncrónú arís. Ina theannta sin, déanfar é seo arís gach uair a úsáidtear lvchange ar an ngléas seo go dtí go atosófar an córas arís. Dá bhrí sin, molaim láithreach an taisce a athchruthú ag baint úsáide as an script chuí.

Cruthaímid LV ar SATA RAID 6 chun é a úsáid mar ghléas i dtaisce.

#lvcreate -L 3298543271936B --name cache data

Cén fáth ach trí terabytes ..?Mar sin, más gá, is féidir leat SATA SSD RAID 6 a úsáid le haghaidh roinnt riachtanas eile. Is féidir méid an spáis i dtaisce a mhéadú go dinimiciúil, ar an eitilt, gan an córas a stopadh. Chun seo a dhéanamh, ní mór duit an taisce a stopadh agus a athchumasú go sealadach, ach is é an buntáiste sainiúil a bhaineann le LVM-cache, mar shampla, bcache ná gur féidir é seo a dhéanamh ar an eitilt.

Cruthaímid VG nua le haghaidh caching.

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

Déanaimis LV a chruthú ar an ngléas i dtaisce.

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

Anseo ghlacamar láithreach an spás saor in aisce go léir ar / dev / data / cache ionas gur cruthaíodh gach deighilt riachtanach eile láithreach ar / dev / root / cache. Má chruthaigh tú rud éigin san áit mícheart, is féidir leat é a bhogadh le pvmove.

Déanaimis an taisce a chruthú agus a chumasú:

#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

Cén fáth smután den sórt sin ..?Trí thurgnaimh phraiticiúla, bhí an t-údar in ann a fháil amach go mbaintear amach an toradh is fearr má bhíonn méid an bhloc taisce LVM i gcomhthráth le méid an bhloc tanaí LVM. Thairis sin, dá lú an méid, is amhlaidh is fearr a fheidhmíonn an chumraíocht i dtaifeadadh randamach.

Is é 64k an t-íosmhéid bloc a cheadaítear do LVM tanaí.

Bí cúramach le scríobh siar..!Tá. Cuireann an cineál seo taisce siar sioncrónú scríobh chuig an ngléas i dtaisce. Ciallaíonn sé seo má chailltear an taisce, seans go gcaillfidh tú sonraí ar an ngléas i dtaisce. Níos déanaí, inseoidh an t-údar duit cad iad na bearta, chomh maith le NVMe RAID 1, is féidir a ghlacadh chun an riosca seo a chúiteamh.

Roghnaíodh an cineál taisce seo d’aon ghnó chun drochfheidhmíocht scríofa randamach RAID 6 a chúiteamh.

Déanaimis seiceáil cad a fuair muid:

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

Níor cheart ach [cachedata_corig] a bheith suite ar /dev/data/cache. Má tá rud éigin mícheart, bain úsáid as pvmove.

Is féidir leat an taisce a dhíchumasú más gá le hordú amháin:

#lvconvert -y --uncache cache/cachedata

Déantar é seo ar líne. Ní dhéanfaidh LVM ach an taisce a shioncronú go diosca, é a bhaint, agus cachedata_corig a athainmniú ar ais go cachedata.

Socrú LVM tanaí

Déanaimis meastachán garbh ar an méid spáis a theastaíonn uainn le haghaidh meiteashonraí 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"

Babhta suas le 4 ghigibheart: 4294967296B

Méadaigh faoi dhó agus cuir 4194304B le haghaidh meiteashonraí LVM PV: 8594128896B
Cruthaímid deighilt ar leith ar NVMe RAID 1 chun meiteashonraí tanaí LVM agus a gcóip chúltaca a chur air:

#lvcreate -L 8594128896B --name images root

I gcomhair Cad..?Anseo d'fhéadfadh an cheist teacht chun cinn: cén fáth a chur meiteashonraí tanaí LVM ar leithligh más rud é go mbeidh sé fós i dtaisce ar NVMe agus oibreoidh sé go tapa.

Cé go bhfuil luas tábhachtach anseo, tá sé i bhfad ón bpríomhchúis. Is é an rud go bhfuil an taisce pointe teip. D'fhéadfadh rud éigin a tharlóidh dó, agus má tá na meiteashonraí tanaí LVM i dtaisce, cuirfidh sé faoi deara go gcaillfear gach rud go hiomlán. Gan meiteashonraí iomlána, beidh sé beagnach dodhéanta toirteanna tanaí a chur le chéile.

Trí na meiteashonraí a bhogadh go dtí toirt ar leith neamh-thaisce, ach go tapa, ráthaímid sábháilteacht na meiteashonraí i gcás caillteanais taisce nó éillithe. Sa chás seo, déanfar gach damáiste a dhéantar mar gheall ar chaillteanas taisce a logánú laistigh de mhéideanna tanaí, rud a dhéanfaidh an nós imeachta aisghabhála a shimpliú le horduithe méide. Le dóchúlacht ard, déanfar na damáistí seo a athchóiriú trí úsáid a bhaint as logaí FS.

Thairis sin, má tógadh pictiúr de thoirt tanaí roimhe seo, agus ina dhiaidh sin go ndearnadh an taisce a shioncrónú go hiomlán uair amháin ar a laghad, ansin, mar gheall ar dhearadh inmheánach LVM tanaí, déanfar sláine an seat a ráthú i gcás caillteanas taisce. .

Cruthaímid VG nua a bheidh freagrach as soláthar tanaí:

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

Déanaimis linn snámha a chruthú:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
Cén fáth -Z yChomh maith leis an méid a bhfuil an modh seo beartaithe dó i ndáiríre - chun sonraí ó mheaisín fíorúil amháin a chosc ó sceitheadh ​​go meaisín fíorúil eile nuair a bhíonn spás á athdháileadh - úsáidtear nialasú freisin chun luas na scríbhneoireachta randamach a mhéadú i mbloic níos lú ná 64k. Déanfar aon scríobh níos lú ná 64k chuig limistéar neamh-leithdháilte roimhe seo den toirt tanaí a bheith 64K imeall-ailínithe sa taisce. Ligeann sé seo an oibríocht a dhéanamh go hiomlán tríd an taisce, ag seachaint an gléas i dtaisce.

Bogfaimid na LVanna chuig na PVanna comhfhreagracha:

#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

Déanaimis seiceáil:

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

Cruthaímid toirt tanaí le haghaidh tástálacha:

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

Suiteáilfimid pacáistí le haghaidh tástálacha agus monatóireachta:

#apt-get install sysstat fio

Seo mar is féidir leat iompar ár gcumraíocht stórála a urramú i bhfíor-am:

#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 is féidir linn ár gcumraíocht a thástáil:

#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

Go cúramach! Acmhainn!Rithfidh an cód seo 36 tástáil dhifriúla, gach ceann acu ar feadh 4 soicind. Tá leath de na tástálacha le haghaidh taifeadta. Is féidir leat go leor a thaifeadadh ar NVMe i 4 soicind. Suas le 3 ghigibheart in aghaidh an tsoicind. Mar sin, is féidir le gach rith tástálacha scríbhneoireachta suas le 216 ghigibheart d'acmhainn SSD a ithe uait.

Léitheoireacht agus scríobh measctha?Tá. Déanann sé ciall na trialacha léamh agus scríobh a reáchtáil ar leithligh. Ina theannta sin, déanann sé ciall a chinntiú go ndéantar gach taisce a shioncronú ionas nach gcuirfidh scríobh a rinneadh roimhe seo isteach ar an léamh.

Athróidh na torthaí go mór le linn an chéad seoladh agus na cinn ina dhiaidh sin de réir mar a líonann an taisce agus an toirt tanaí suas, agus freisin ag brath ar cibé ar éirigh leis an gcóras na caches a líonadh le linn an tseolta deiridh a shioncrónú.

I measc rudaí eile, molaim an luas a thomhas ar thoirt iomlán tanaí cheana féin as a tógadh pictiúr díreach. Bhí deis ag an údar breathnú ar an gcaoi a luathaíonn scríobh randamach go géar díreach tar éis an chéad seat a chruthú, go háirithe nuair nach bhfuil an taisce fós go hiomlán. Tarlaíonn sé seo mar gheall ar shéimeantaic scríobh cóip-ar-scríobh, ailíniú taisce agus bloic toirte tanaí, agus toisc go n-iompaíonn scríobh randamach chuig RAID 6 isteach i léamh randamach ó RAID 6 agus scríobh chuig an taisce ina dhiaidh sin. In ár gcumraíocht, tá léamh randamach ó RAID 6 suas le huaire 6 (líon na SSDanna SATA san eagar) níos tapúla ná mar a scríobh. Mar leithdháiltear bloic do CoW go seicheamhach ó linn tanaí, ansin déantar an taifeadadh, don chuid is mó, go seicheamhach freisin.

Is féidir an dá ghné seo a úsáid chun do bhuntáiste.

Taisce “comhleanúnach” pictiúir

Chun an riosca go gcaillfear sonraí a laghdú i gcás damáiste/caillteanas taisce, tá sé beartaithe ag an údar an cleachtas a thabhairt isteach chun seatanna a rothlú chun a sláine a chinntiú sa chás seo.

Ar an gcéad dul síos, toisc go bhfuil meiteashonraí toirte tanaí ina gcónaí ar fheiste neamh-thaisce, beidh na meiteashonraí comhsheasmhach agus déanfar caillteanais fhéideartha a leithlisiú laistigh de bhloic sonraí.

Ráthaíonn an timthriall uainíochta seat seo a leanas sláine na sonraí laistigh de na pictiúir i gcás caillteanais taisce:

  1. I gcás gach imleabhar tanaí leis an ainm , cruthaigh pictiúr leis an ainm .cached
  2. Socróimid an tairseach ascnaimh chuig luach ard réasúnta: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. Sa lúb déanaimid seiceáil ar líon na mbloc salach sa taisce: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' go dtí go bhfaigheann muid nialas. Má tá an náid in easnamh ar feadh ró-fhada, is féidir é a chruthú tríd an taisce a athrú go sealadach go dtí mód scríbhneoireachta. Mar sin féin, ag cur san áireamh saintréithe luais ár n-eagair SATA agus NVMe SSD, chomh maith lena n-acmhainn TBW, beidh tú in ann a ghabháil go tapa ar an láthair gan athrú ar an modh taisce, nó beidh do crua-earraí ithe suas go hiomlán a acmhainn iomlán i ar feadh cúpla lá. Mar gheall ar theorainneacha acmhainní, níl an córas, i bprionsabal, in ann a bheith faoi bhun 100% ualach scríofa an t-am ar fad. Déanfaidh ár NVMe SSDs faoi ualach scríofa 100% an acmhainn a sceite go hiomlán laethanta 3 4-. Ní mhairfidh SATA SSDs ach dhá uair chomh fada. Mar sin, glacfaimid leis go dtéann an chuid is mó den ualach ar an léitheoireacht, agus tá pléascanna measartha gearrthéarmacha de ghníomhaíocht thar a bheith ard againn in éineacht le hualach íseal ar an meán don scríbhneoireacht.
  4. Chomh luath agus a ghabh muid (nó a rinne) nialas, athainmnímid .cached go .committed. Scriostar an sean-.committed.
  5. Roghnach, má tá an taisce 100% iomlán, is féidir é a athchruthú le script, rud a ghlanadh. Le taisce leathfholamh, oibríonn an córas i bhfad níos tapúla agus é ag scríobh.
  6. Socraigh an tairseach aistrithe go nialas: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata Cuirfidh sé seo cosc ​​​​ar an taisce go sealadach ó shioncronú chuig na meáin is mó.
  7. Táimid ag fanacht go dtí go carnann go leor athruithe sa taisce #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' nó beidh an t-amadóir imithe.
  8. Déanaimid arís.

Cén fáth a bhfuil deacrachtaí leis an tairseach imirce...?Is é an rud, i bhfíor-chleachtas, nach bhfuil taifeadadh “randamach” go hiomlán randamach. Má scríobhamar rud éigin chuig earnáil de 4 cilibheart i méid, tá dóchúlacht ard ann go ndéanfar taifead sna hearnálacha céanna nó ceann de na hearnálacha comharsanacha (+- 32K) sna cúpla nóiméad eile.

Trí an tairseach imirce a shocrú go nialas, cuirimid siar sioncrónú scríobh ar an SATA SSD agus comhiomlánaíonn muid roinnt athruithe ar bhloc 64K amháin sa taisce. Sábhálann sé seo go mór acmhainn SATA SSD.

Cá bhfuil an cód..?Ar an drochuair, measann an t-údar nach bhfuil sé inniúil a dhóthain i bhforbairt scripteanna bash toisc go bhfuil sé féinmhúinteach 100% agus go gcleachtann sé forbairt "Google", mar sin creideann sé nár cheart do dhuine ar bith an cód uafásach a thagann as a lámha a úsáid. eile.

Is dóigh liom go mbeidh gairmithe sa réimse seo in ann an loighic go léir a thuairiscítear thuas a léiriú go neamhspleách, más gá, agus, b'fhéidir, fiú é a dhearadh go hálainn mar sheirbhís chórasach, mar a rinne an t-údar iarracht a dhéanamh.

Ligfidh a leithéid de scéim uainíochta seat simplí dúinn ní hamháin pictiúr amháin a bheith sioncronaithe go hiomlán i gcónaí ar an SATA SSD, ach ligfidh sé dúinn freisin, ag baint úsáide as an bhfóntas thin_delta, a fháil amach cé na bloic a athraíodh tar éis é a chruthú, agus mar sin damáiste a logánú ar na méideanna is mó, go mór a shimpliú ghnóthú .

TRIM/DISCARD i libvirt/KVM

Mar úsáidfear an stóráil sonraí le haghaidh KVM ag rith libvirt, ansin bheadh ​​sé ina smaoineamh maith ár VManna a mhúineadh ní hamháin chun spás saor in aisce a ghlacadh, ach freisin chun an méid nach bhfuil ag teastáil a thuilleadh a shaoradh.

Déantar é seo trí thacaíocht TRIM/DISCARD a aithris ar dhioscaí fíorúla. Chun seo a dhéanamh, ní mór duit an cineál rialtóra a athrú go virtio-scsi agus an xml a chur in eagar.

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

Próiseálann LVM a leithéid de SÍOLÚ ó aoi-OSes, agus scaoiltear bloic i gceart sa taisce agus sa linn tanaí araon. Is é ár gcás, a tharlaíonn sé seo go príomha ar bhealach moill, nuair a scriosadh an chéad pictiúr eile.

Cúltaca BTRFS

Úsáid scripteanna réidh le mhór rabhadh agus ar do phriacal féin. Scríobh an t-údar an cód seo dó féin agus go heisiach dó féin. Tá mé cinnte go bhfuil uirlisí comhchosúla ag go leor úsáideoirí Linux a bhfuil taithí acu, agus ní gá cóipeanna duine eile a chóipeáil.

Cruthaímid imleabhar ar an ngléas cúltaca:

#lvcreate -L 256G --name backup backup

Déanaimis é a fhormáidiú i BTRFS:

#mkfs.btrfs /dev/backup/backup

Cruthaímid pointí gléasta agus cuirimis bunfho-ailt an chórais comhad:

#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

Cruthaímid eolairí le haghaidh cúltacaí:

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

Cruthaímid eolaire le haghaidh scripteanna cúltaca:

#mkdir /root/btrfs-backup

Déanaimis an script a chóipeáil:

Go leor cód scary bash. Bain úsáid as ar do phriacal féin. Ná scríobh litreacha feargach chuig an údar...#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

Cad a dhéanann sé fiú..?Tá sraith orduithe simplí ann chun pictiúirí BTRFS a chruthú agus iad a chóipeáil chuig FS eile ag baint úsáide as BTRFS send / receive.

Féadfaidh an chéad seoladh a bheith sách fada, mar... Ag an tús, déanfar na sonraí go léir a chóipeáil. Beidh seoltaí eile an-tapa, mar... Ní dhéanfar ach athruithe a chóipeáil.

Script eile a chuirfimid isteach i cron:

Roinnt cód bash níos mó#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

Cad a dhéanann sé..?Cruthaíonn agus sioncronaíonn sé pictiúir incriminteacha de na méideanna BTRFS liostaithe ar an FS cúltaca. Tar éis seo, scriosann sé gach pictiúr a cruthaíodh 60 lá ó shin. Tar éis seolta, beidh pictiúir dátaithe de na himleabhair liostaithe le feiceáil sna fochomhadlanna /backup/btrfs/back/ remote/.

Tabhair dúinn cearta forghníomhaithe an chóid:

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

Déanaimis é a sheiceáil agus é a chur sa 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

Cúltaca tanaí LVM

Déanaimis linn tanaí a chruthú ar an bhfeiste cúltaca:

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

Déanaimis ddrescue a shuiteáil, mar ... úsáidfidh scripteanna an uirlis seo:

#apt-get install gddrescue

Cruthaimis eolaire le haghaidh scripteanna:

#mkdir /root/lvm-thin-backup

Déanaimis na scripteanna a chóipeáil:

Go leor bash istigh ...#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

Cad a dhéanann sé...?Tá sraith orduithe ann chun pictiúir tanaí a ionramháil agus an difríocht idir dhá ghrianghraf tanaí a fhaightear trí thin_delta a shioncronú go dtí blocghléas eile ag baint úsáide as ddrescue agus blkdiscard.

Script eile a chuirfimid in cron:

Beagán níos mó 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

Cad a dhéanann sé...?Úsáideann sé an script roimhe seo chun cúltacaí de na méideanna tanaí liostaithe a chruthú agus a shioncronú. Fágfaidh an script pictiúir neamhghníomhacha de na himleabhair liostaithe, a bhfuil gá leo chun athruithe ón sioncronú deiridh a rianú.

Ní mór an script seo a chur in eagar, ag sonrú liosta na n-imleabhar tanaí ar cheart cóipeanna cúltaca a dhéanamh ina leith. Is chun críocha léiriúcháin amháin a thugtar na hainmneacha. Más mian leat, is féidir leat script a scríobh a shioncrónóidh gach imleabhar.

Tugaimis na cearta:

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

Déanaimis é a sheiceáil agus é a chur sa 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

Beidh an chéad seoladh fada, mar... déanfar toirteanna tanaí a shioncronú go hiomlán trí gach spás a úsáidtear a chóipeáil. A bhuí le meiteashonraí tanaí LVM, tá a fhios againn cé na bloic atá in úsáid i ndáiríre, mar sin ní dhéanfar ach bloic toirte tanaí a úsáidtear i ndáiríre a chóipeáil.

Déanfaidh ritheanna ina dhiaidh sin na sonraí a chóipeáil go hincriminteach a bhuíochas le rianú athraithe trí mheiteashonraí tanaí LVM.

Feicfimid cad a tharla:

#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

Cad a chaithfidh sé seo a dhéanamh le bábóg neadaithe?

Is dócha, ós rud é gur féidir toirteanna loighciúla LVM LV a bheith ina méideanna fisiceacha LVM PV do VGanna eile. Is féidir le LVM a bheith athchúrsach, cosúil le bábóg neadaithe. Tugann sé seo solúbthacht mhór do LVM.

PS

Sa chéad alt eile, déanfaimid iarracht roinnt córais stórála móibíleacha cosúla/KVM a úsáid mar bhunús chun braisle stórála/vm geo-dháilte a chruthú le hiomarcaíocht ar go leor ilchríocha ag baint úsáide as deasc baile, an tIdirlíon baile agus líonraí P2P.

Foinse: will.com

Add a comment