Kodi LVM ndi Matryoshka zikufanana bwanji?

Nthawi yabwino ya tsiku.
Ndikufuna kugawana ndi anthu ammudzi zomwe ndakumana nazo popanga makina osungira deta a KVM pogwiritsa ntchito md RAID + LVM.

Pulogalamuyi iphatikiza:

  • Kumanga md RAID 1 kuchokera ku NVMe SSD.
  • Kusonkhanitsa md RAID 6 kuchokera ku SATA SSD ndi ma drive okhazikika.
  • Mawonekedwe a TRIM/DISCARD pa SSD RAID 1/6.
  • Kupanga gulu la bootable md RAID 1/6 pama disks wamba.
  • Kuyika dongosolo pa NVMe RAID 1 pamene palibe thandizo la NVMe mu BIOS.
  • Kugwiritsa ntchito cache ya LVM ndi LVM woonda.
  • Kugwiritsa ntchito zithunzi za BTRFS ndikutumiza/kulandira zosunga zobwezeretsera.
  • Kugwiritsa ntchito zithunzi zoonda za LVM ndi thin_delta pazosunga zosunga zobwezeretsera za BTRFS.

Ngati mukufuna, chonde onani mphaka.

Statement

Wolembayo alibe udindo uliwonse pazotsatira zogwiritsa ntchito kapena kusagwiritsa ntchito zida / zitsanzo / kachidindo / malangizo / deta kuchokera m'nkhaniyi. Powerenga kapena kugwiritsa ntchito izi mwanjira ina iliyonse, mumakhala ndi udindo pazotsatira zonse za izi. Zotsatira zomwe zingatheke ndi izi:

  • NVMe SSDs yokazinga yokazinga.
  • Zogwiritsidwa ntchito kwathunthu zojambulira komanso kulephera kwa ma drive a SSD.
  • Kutayika kwathunthu kwa data yonse pama drive onse, kuphatikiza makope osunga zobwezeretsera.
  • Zolakwika zamakompyuta zamakompyuta.
  • Kuwononga nthawi, mitsempha ndi ndalama.
  • Zotsatira zina zilizonse zomwe sizinatchulidwe pamwambapa.

Iron

Opezeka anali:

Bolodi ya amayi kuyambira cha 2013 yokhala ndi Z87 chipset, yodzaza ndi Intel Core i7 / Haswell.

  • Purosesa 4 cores, 8 ulusi
  • 32 GB DDR3 RAM
  • 1 x 16 kapena 2 x 8 PCIe 3.0
  • 1 x 4 + 1 x 1 PCIe 2.0
  • 6 x 6 GBps SATA 3 zolumikizira

Adapter ya SAS LSI SAS9211-8I idawunikira ku IT / HBA mode. Firmware yothandizidwa ndi RAID yasinthidwa mwadala ndi firmware ya HBA kuti:

  1. Mutha kutaya adaputala iyi nthawi iliyonse ndikusintha ndi ina iliyonse yomwe mwapeza.
  2. TRIM/Discard imagwira ntchito bwino pama disks, chifukwa ... mu RAID firmware malamulowa sakuthandizidwa nkomwe, ndipo HBA, kawirikawiri, samasamala kuti ndi malamulo ati omwe amaperekedwa pa basi.

Ma hard drive - zidutswa 8 za HGST Travelstar 7K1000 zokhala ndi 1 TB mu mawonekedwe a 2.5, monga ma laputopu. Ma drive awa m'mbuyomu anali mugulu la RAID 6. Adzakhalanso ndi ntchito mu dongosolo latsopano. Kusunga zosunga zobwezeretsera zakomweko.

Zowonjezera:

6 zidutswa SATA SSD chitsanzo Samsung 860 QVO 2TB. Ma SSD awa amafunikira voliyumu yayikulu, kukhalapo kwa cache ya SLC, kudalirika, ndi mtengo wotsika zimafunidwa. Thandizo la kutaya/zero linafunikira, lomwe limawunikidwa ndi mzere mu dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

2 zidutswa za NVMe SSD chitsanzo Samsung SSD 970 EVO 500GB.

Kwa ma SSD awa, liwiro lowerengera / kulemba mwachisawawa komanso kuchuluka kwazinthu pazosowa zanu ndikofunikira. Radiator kwa iwo. Moyenera. Mwamtheradi. Kupanda kutero, mwachangu mpaka crispy panthawi yoyamba ya RAID synchronization.

Adaputala ya StarTech PEX8M2E2 ya 2 x NVMe SSD yoyikidwa mu PCIe 3.0 8x slot. Izi, kachiwiri, ndi HBA chabe, koma ya NVMe. Zimasiyana ndi ma adapter otsika mtengo chifukwa sizifuna chithandizo cha PCIe bifurcation kuchokera pa bolodi la amayi chifukwa cha kupezeka kwa chosinthira cha PCIe. Idzagwira ntchito ngakhale m'dongosolo lakale kwambiri ndi PCIe, ngakhale ndi x1 PCIe 1.0 slot. Mwachibadwa, pa liwiro loyenera. Palibe ma RAID pamenepo. Palibe BIOS yomangidwa pa board. Chifukwa chake, makina anu sangaphunzire mwamatsenga kuyambitsa ndi NVMe, mochepera NVMe RAID chifukwa cha chipangizochi.

Chigawochi chinali chifukwa cha kupezeka kwa 8x PCIe 3.0 imodzi yokha yaulere m'dongosolo, ndipo, ngati pali mipata yaulere ya 2, imatha kusinthidwa mosavuta ndi penipeni ziwiri za PEX4M2E1 kapena ma analogues, omwe angagulidwe kulikonse pamtengo wa 600. rubles.

Kukana kwa mitundu yonse ya hardware kapena chipset / BIOS RAIDs zomangidwa kunapangidwa mwadala, kuti athe kusintha kwathunthu dongosolo lonse, kupatula SSD / HDD okha, pamene akusunga deta yonse. Momwemo, kuti mutha kupulumutsa ngakhale makina opangira omwe adayikidwa mukasamukira ku zida zatsopano / zosiyana. Chachikulu ndichakuti pali madoko a SATA ndi PCIe. Zili ngati CD yamoyo kapena bootable kung'anima pagalimoto, kokha mofulumira kwambiri ndi pang'ono bulky.

ManyalaKupanda kutero, mukudziwa zomwe zimachitika - nthawi zina mumayenera kutenga gulu lonse kuti mutenge. Koma sindikufuna kutaya deta. Kuti muchite izi, zonse zomwe zatchulidwazi zili bwino pazithunzi za 5.25 bays zamilandu yokhazikika.

Chabwino, ndipo, ndithudi, poyesera njira zosiyanasiyana zosungira SSD mu Linux.

Kuwombera kwa Hardware ndikotopetsa. Yatsani. Izo mwina zimagwira ntchito kapena ayi. Ndipo ndi mdadm nthawi zonse pali zosankha.

Zofewa

M'mbuyomu, Debian 8 Jessie adayikidwa pa hardware, yomwe ili pafupi ndi EOL. RAID 6 idasonkhanitsidwa kuchokera pama HDD omwe tawatchulawa ophatikizidwa ndi LVM. Imayendetsa makina enieni mu kvm/libvirt.

Chifukwa Wolembayo ali ndi chidziwitso choyenera pakupanga ma drive a SATA / NVMe osunthika, komanso, kuti asaswe template yoyenera, Ubuntu 18.04 idasankhidwa kukhala dongosolo lomwe lakhazikitsidwa, lomwe lakhazikika kale, koma lili ndi zaka 3. thandizo m'tsogolo.

Dongosolo lotchulidwa lili ndi madalaivala onse a hardware omwe timafunikira kuchokera m'bokosi. Sitifuna mapulogalamu a chipani chachitatu kapena madalaivala.

Kukonzekera kuyika

Kuti tiyike dongosolo timafunikira Ubuntu Desktop Image. Dongosolo la seva lili ndi mtundu wina wokhazikitsa mwamphamvu, zomwe zikuwonetsa kudziyimira pawokha komwe sikungalephereke ndikukankhira gawo la UEFI pa imodzi mwa disks, ndikuwononga kukongola konse. Chifukwa chake, imayikidwa mumayendedwe a UEFI okha. Palibe njira iliyonse.

Sitikukondwera ndi izi.

Chifukwa chiyani?Tsoka ilo, UEFI boot sigwirizana kwambiri ndi boot software RAID, chifukwa ... Palibe amene amatipatsa zosungitsa gawo la UEFI ESP. Pali maphikidwe pa intaneti omwe akuwonetsa kuyika magawo a ESP pagalimoto yoyang'ana padoko la USB, koma izi ndizovuta. Pali maphikidwe ntchito mapulogalamu mdadm RAID 1 ndi metadata Baibulo 0.9 kuti sikuletsa UEFI BIOS kuona kugawa, koma moyo mpaka nthawi yosangalatsa pamene BIOS kapena hardware zina Os kulemba chinachake kwa ESP ndi kuiwala kulunzanitsa ndi ena. magalasi.

Kuphatikiza apo, UEFI boot imadalira NVRAM, yomwe sidzasuntha pamodzi ndi ma disks ku dongosolo latsopano, chifukwa ndi gawo la boardboard.

Kotero, sitidzayambitsanso gudumu latsopano. Tili ndi njinga ya agogo okonzeka, yoyesedwa nthawi, yomwe tsopano imatchedwa Legacy / BIOS boot, yomwe ili ndi dzina lonyada la CSM pamakina ogwirizana ndi UEFI. Tingochichotsa pa alumali, kupaka mafuta, kupopera matayala ndikupukuta ndi nsalu yonyowa.

Mtundu wa desktop wa Ubuntu sungathe kukhazikitsidwa bwino ndi Legacy bootloader, koma apa, monga akunena, pali zosankha.

Chifukwa chake, timasonkhanitsa zida ndikuyika dongosolo kuchokera pa Ubuntu Live bootable flash drive. Tidzafunika kutsitsa mapaketi, chifukwa chake tikhazikitsa netiweki yomwe imakuthandizani. Ngati sizikugwira ntchito, mutha kuyika phukusi lofunikira pa flash drive pasadakhale.

Timapita kumalo a Desktop, ndikuyambitsa emulator, ndipo timapita:

#sudo bash

Bwanji…?Mzere pamwambapa ndiye choyambitsa chovomerezeka cha holiwars za sudo. C bΠΎmwayi waukulu kubwera ndiΠΎudindo waukulu. Funso ndiloti mungadzitengere nokha. Anthu ambiri amaganiza kuti kugwiritsa ntchito sudo motere sikusamala. Komabe:

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

Chifukwa chiyani ZFS...?Tikayika mapulogalamu pa kompyuta yathu, timabwereketsa zida zathu kwa opanga mapulogalamuwa kuti ayendetse.
Tikamakhulupirira pulogalamuyi ndi chitetezo cha deta yathu, timatenga ngongole yofanana ndi mtengo wobwezeretsa deta iyi, yomwe tidzayenera kulipira tsiku lina.

Kuchokera pamalingaliro awa, ZFS ndi Ferrari, ndipo mdadm+lvm ili ngati njinga.

Mwachidziwitso, wolembayo amakonda kubwereketsa njinga pa ngongole kwa anthu osadziwika m'malo mwa Ferrari. Kumeneko, mtengo wa nkhaniyi siwokwera. Palibe chifukwa cha ufulu. Zosavuta kuposa malamulo apamsewu. Kuyimika magalimoto ndi kwaulere. Kukhoza kudutsa dziko ndikwabwinoko. Nthawi zonse mumatha kumangirira miyendo panjinga, ndipo mutha kukonza njinga ndi manja anu.

Chifukwa chiyani BTRFS ...?Kuti tiyambitse makina ogwiritsira ntchito, timafunikira fayilo yomwe imathandizidwa mu Legacy/BIOS GRUB kunja kwa bokosilo, ndipo nthawi yomweyo imathandizira zithunzithunzi zamoyo. Tidzagwiritsa ntchito / boot partition. Kuphatikiza apo, wolemba amakonda kugwiritsa ntchito FS iyi ya / (muzu), osayiwala kuzindikira kuti pa pulogalamu ina iliyonse mutha kupanga magawo osiyana pa LVM ndikuyika pazowongolera zofunika.

Sitisunga zithunzi zilizonse zamakina kapena nkhokwe pa FS iyi.
FS iyi idzangogwiritsidwa ntchito kupanga zithunzithunzi zadongosolo popanda kuzimitsa ndikusamutsa zithunzithunzizi ku disk yosunga zobwezeretsera pogwiritsa ntchito send/recieve.

Kuphatikiza apo, wolemba nthawi zambiri amakonda kusunga pulogalamu yocheperako pa Hardware ndikuyendetsa mapulogalamu ena onse pamakina omwe amagwiritsa ntchito zinthu monga kutumiza ma GPU ndi PCI-USB Host olamulira ku KVM kudzera pa IOMMU.

Zomwe zatsala pa hardware ndizosungira deta, virtualization ndi zosunga zobwezeretsera.

Ngati mumakhulupirira ZFS kwambiri, ndiye kuti, makamaka, pazogwiritsidwa ntchito zomwe zafotokozedwazo zimasinthidwa.

Komabe, wolembayo amanyalanyaza mwadala mawonekedwe opangira magalasi / RAID ndi zinthu za redundancy zomwe ZFS, BRTFS ndi LVM zili nazo.

Monga mtsutso wowonjezera, BTRFS imatha kutembenuza zolemba mwachisawawa kukhala zotsatizana, zomwe zimakhala ndi zotsatira zabwino kwambiri pa liwiro la kulunzanitsa zithunzi / zosunga zobwezeretsera pa HDD.

Tiyeni tiwonenso zida zonse:

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

Tiyeni tiwone mozungulira:

#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

Mapangidwe a disk

NVMe SSD

Koma sitidzawalemba m'njira iliyonse. Momwemonso, BIOS yathu siyiwona ma drive awa. Chifukwa chake, adzapita kwathunthu ku pulogalamu ya RAID. Sitipanga ngakhale magawo pamenepo. Ngati mukufuna kutsatira "canon" kapena "makamaka", pangani gawo limodzi lalikulu, ngati HDD.

SATA HDD

Palibe chifukwa chopangira china chilichonse chapadera pano. Tipanga gawo limodzi la chilichonse. Tipanga magawo chifukwa BIOS amawona ma diskswa ndipo mwina ayesetse kuwayambira. Tidzayikanso GRUB pa disks pambuyo pake kuti dongosolo lizitha kuchita izi mwadzidzidzi.

#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

Apa ndi pamene zinthu zimatisangalatsa.

Choyamba, ma drive athu ndi 2 TB kukula. Izi zili m'gulu lovomerezeka la MBR, lomwe ndi lomwe tidzagwiritse ntchito. Ngati ndi kotheka, mutha kusinthidwa ndi GPT. Ma disks a GPT ali ndi gawo lolumikizana lomwe limalola machitidwe ogwirizana ndi MBR kuti awone magawo anayi oyamba ngati ali mkati mwa 4 terabytes yoyamba. Chachikulu ndichakuti kugawa kwa boot ndi kugawa kwa bios_grub pama diski awa kuyenera kukhala koyambirira. Izi zimakulolani kuti muyambitsenso ma drive a GPT Legacy/BIOS.

Koma iyi si nkhani yathu.

Apa tipanga magawo awiri. Yoyamba idzakhala 1 GB kukula kwake ndikugwiritsidwa ntchito pa RAID 1 / boot.

Yachiwiri idzagwiritsidwa ntchito pa RAID 6 ndipo idzatenga malo onse otsala aulere kupatula malo ang'onoang'ono osagawidwa kumapeto kwa galimotoyo.

Kodi malo osazindikirikawa ndi chiyani?Malinga ndi magwero a pa netiweki, ma SATA SSD athu ali ndi cache yokulirapo ya SLC kuyambira kukula kwa 6 mpaka 78 gigabytes. Timapeza 6 gigabytes "kwaulere" chifukwa cha kusiyana pakati pa "gigabytes" ndi "gibibytes" mu pepala la deta la galimotoyo. Ma gigabytes otsala a 72 amaperekedwa kuchokera kumalo osagwiritsidwa ntchito.

Apa ziyenera kudziwidwa kuti tili ndi cache ya SLC, ndipo malowa amakhala mu 4 bit MLC mode. Zomwe kwa ife zimatanthawuza kuti pa ma gigabytes 4 aliwonse a malo aulere tidzangopeza 1 gigabyte ya cache ya SLC.

Chulukitsani ma gigabytes 72 ndi 4 ndikupeza 288 gigabytes. Awa ndi malo aulere omwe sitingalembe kuti tilole ma drive agwiritse ntchito posungira SLC.

Chifukwa chake, tidzakwera mpaka 312 gigabytes ya cache ya SLC kuchokera pamagalimoto asanu ndi limodzi. Mwa ma drive onse, 2 idzagwiritsidwa ntchito mu RAID chifukwa cha redundancy.

Kuchuluka kwa cache kumeneku kudzatilola kuti nthawi zambiri m'moyo wathu tisamakumane ndi zochitika zomwe zolemba sizipita ku cache. Izi zimathandizira bwino kwambiri kubweza komvetsa chisoni kwa kukumbukira kwa QLC - liwiro lotsika kwambiri lolemba pomwe deta imalembedwa podutsa posungira. Ngati katundu wanu sagwirizana ndi izi, ndiye ndikupangira kuti muganizire mozama za momwe SSD yanu idzakhalire pansi pa katundu wotere, poganizira za TBW kuchokera pa pepala la deta.

#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

Kupanga Arrays

Choyamba, tiyenera kusintha makina. Izi ndizofunikira chifukwa dzina la wolandirayo ndi gawo la dzina lofanana kwinakwake mkati mwa mdadm ndipo limakhudza china chake kwinakwake. Zachidziwikire, ma arrays amatha kusinthidwa pambuyo pake, koma iyi ndi sitepe yosafunikira.

#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

Chifukwa chiyani -kulingalira-kuyera ...?Kupewa kuyambitsa masanjidwe. Pamagulu onse a RAID 1 ndi 6 izi ndizovomerezeka. Chilichonse chikhoza kugwira ntchito popanda kuyambitsa ngati ndi gulu latsopano. Kuphatikiza apo, kuyambitsa gulu la SSD pakupanga ndikuwononga gwero la TBW. Timagwiritsa ntchito TRIM/DISCARD ngati kuli kotheka pamagulu a SSD ophatikizidwa kuti "tiyambitse".

Pamagulu a SSD, RAID 1 DISCARD imathandizidwa kunja kwa bokosi.

Kwa SSD RAID 6 DISCARD arrays, muyenera kuyiyambitsa mu magawo a kernel module.

Izi ziyenera kuchitika kokha ngati ma SSD onse omwe amagwiritsidwa ntchito pamlingo wa 4/5/6 mudongosolo lino ali ndi chithandizo cha discard_zeroes_data. Nthawi zina mumakumana ndi ma drive achilendo omwe amauza kernel kuti ntchitoyi imathandizidwa, koma kwenikweni palibe, kapena ntchitoyo simagwira ntchito nthawi zonse. Pakalipano, chithandizo chimapezeka pafupifupi kulikonse, komabe, pali ma drive akale ndi firmware omwe ali ndi zolakwika. Pazifukwa izi, thandizo la DISCARD limayimitsidwa mwachisawawa pa RAID 6.

Chidziwitso, lamulo lotsatirali lidzawononga zonse zomwe zili pa NVMe zoyendetsa ndi "kuyambitsa" mndandanda ndi "zero".

#blkdiscard /dev/md0

Ngati china chake sichikuyenda bwino, yesani kutchulapo sitepe.

#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

Chifukwa chiyani chachikulu ...?Kuchulukitsa kukula kwa chunk kumakhala ndi zotsatira zabwino pa liwiro la kuwerenga mwachisawawa m'ma block mpaka kukula kwa chunk. Izi zimachitika chifukwa ntchito imodzi ya kukula koyenera kapena yaying'ono imatha kumaliza pa chipangizo chimodzi. Chifukwa chake, ma IOPS azida zonse amafotokozedwa mwachidule. Malinga ndi ziwerengero, 99% ya IO sichidutsa 512K.

RAID ili ndi 6 IOPS polemba nthawi zonse zochepa kuposa kapena zofanana ndi IOPS pagalimoto imodzi. Pamene, monga kuwerenga mwachisawawa, IOPS ikhoza kukhala yaikulu kangapo kuposa ya galimoto imodzi, ndipo apa kukula kwa chipika ndikofunika kwambiri.
Wolemba sakuwona mfundo yoyesera kukhathamiritsa gawo lomwe lili loyipa mu RAID 6 mwa-mapangidwe ndipo m'malo mwake amakwaniritsa zomwe RAID 6 ili bwino.
Tidzalipira zolemba zosawerengeka za RAID 6 ndi cache ya NVMe ndi njira zochepetsera.

Sitinathandizebe DISCARD pa RAID 6. Chifukwa chake "sitidzayambitsa" gululi pakadali pano. Tidzachita izi pambuyo pake, mutakhazikitsa OS.

SATA HDD

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

LVM pa NVMe RAID

Kuti tifulumire, tikufuna kuyika mizu yamafayilo pa NVMe RAID 1 yomwe ili /dev/md0.
Komabe, tidzafunikirabe gulu lofulumirali pazosowa zina, monga kusinthanitsa, metadata ndi LVM-cache ndi LVM-thin metadata, kotero tidzapanga LVM VG pagululi.

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

Tiyeni tipange magawo a mizu ya fayilo.

#lvcreate -L 128G --name root root

Tiyeni tipange magawo osinthana malinga ndi kukula kwa RAM.

#lvcreate -L 32G --name swap root

Kuyika kwa OS

Pazonse, tili ndi zonse zofunika kukhazikitsa dongosolo.

Yambitsani wizard yoyika makina kuchokera ku Ubuntu Live chilengedwe. Kuyika kwachizolowezi. Pokhapokha posankha ma disks kuti muyike, muyenera kufotokoza izi:

  • /dev/md1, - mount point /boot, FS - BTRFS
  • / dev/root/root (aka / dev/mapper/root-root), - mount point / (muzu), FS - BTRFS
  • / dev/root/ swap (aka / dev/mapper/root-swap), - gwiritsani ntchito ngati kugawa
  • Ikani bootloader pa /dev/sda

Mukasankha BTRFS ngati mizu yamafayilo, woyikirayo amangopanga ma voliyumu awiri a BTRFS otchedwa "@" ya / (root), ndi "@home" ya /home.

Tiyeni tiyambe kukhazikitsa...

Kuyikako kumatha ndi bokosi la zokambirana lomwe likuwonetsa cholakwika pakuyika bootloader. Tsoka ilo, simungathe kutuluka patsambali pogwiritsa ntchito njira zokhazikika ndikupitiliza kukhazikitsa. Timatuluka mudongosolo ndikulowanso, ndikumaliza pakompyuta yoyera ya Ubuntu Live. Tsegulani terminal, ndipo kachiwiri:

#sudo bash

Pangani malo a chroot kuti mupitilize kuyika:

#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

Tiyeni tikonze netiweki ndi dzina la alendo mu chroot:

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

Tiyeni tipite kumalo a chroot:

#chroot /mnt/chroot

Choyamba, timapereka paketi:

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

Tiyeni tiwone ndikukonza mapaketi onse omwe adayikidwa mokhota chifukwa chosakwanira kukhazikitsa dongosolo:

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

Ngati china chake sichikuyenda, mungafunike kusintha /etc/apt/sources.list kaye

Tiyeni tisinthe magawo a gawo la RAID 6 kuti tithandizire TRIM/DISCARD:

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

Tiyeni tisinthe magawo athu pang'ono:

#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

Chinali chiyani..?Tapanga malamulo a udev omwe angachite izi:

  • Khazikitsani kukula kwa block cache kwa RAID 2020 kuti ikhale yokwanira 6. Mtengo wokhazikika, ukuwoneka, sunasinthe kuyambira kukhazikitsidwa kwa Linux, ndipo sunakhale wokwanira kwa nthawi yayitali.
  • Sungani osachepera IO pa nthawi yonse ya macheke/masinthidwe osiyanasiyana. Izi ndikuteteza kuti masanjidwe anu asamangidwe mukamalumikizana kosatha pansi pa katundu.
  • Chepetsani kuchuluka kwa IO pa macheke/malunzanitsidwe a masanjidwe. Izi ndizofunikira kuti kulunzanitsa / kuyang'ana ma SSD RAID sikusungunuke ma drive anu kuti akhale owoneka bwino. Izi ndizowona makamaka kwa NVMe. (Mukukumbukira za radiator? Sindinali kuchita nthabwala.)
  • Letsani ma disks kuti ayimitse kuzungulira kwa spindle (HDD) kudzera pa APM ndikukhazikitsa nthawi yogona ya owongolera disk kukhala maola 7. Mutha kuletsa kwathunthu APM ngati ma drive anu atha kuchita (-B 255). Ndi mtengo wokhazikika, zoyendetsa zidzayima pambuyo pa masekondi asanu. Kenako OS ikufuna kukonzanso chosungira cha disk, ma disks adzazunguliranso, ndipo zonse zidzayambiranso. Ma disks ali ndi chiwerengero chochepa cha maulendo ozungulira. Kuzungulira kosavuta kotereku kumatha kupha ma disks anu m'zaka zingapo. Osati ma disks onse omwe amavutika ndi izi, koma athu ndi "laputopu" omwe ali ndi makonzedwe oyenera, omwe amachititsa kuti RAID iwoneke ngati mini-MAID.
  • Ikani zowerengera pa disk (zozungulira) 1 megabyte - midadada iwiri yotsatizana / chunk RAID 6
  • Letsani kuwerengera patsogolo pazotsatira zomwe.

Tiyeni tisinthe /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

Ndichoncho chifukwa chiyani..?Tidzafufuza / boot partition ndi UUID. Kutchula mayina kungasinthe mwachidziwitso.

Tidzafufuza magawo otsalawo ndi mayina a LVM mu /dev/mapper/vg-lv notation, chifukwa amazindikira ma partitions mwapadera.

Sitigwiritsa ntchito UUID pa LVM chifukwa UUID wa ma voliyumu a LVM ndi zithunzi zawo zitha kukhala zofanana.Phiri /dev/mapper/root-root.. kawiri?Inde. Ndendende. Chithunzi cha BTRFS. Fayilo iyi imatha kukhazikitsidwa kangapo ndi ma subvols osiyanasiyana.

Chifukwa cha mawonekedwe omwewo, ndikupangira kuti musamapange zithunzi za LVM zamavoliyumu a BTRFS. Mutha kudabwitsidwa mukayambiranso.

Tiyeni tikonzenso mdadm config:

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

Tiyeni tisinthe makonda a 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

Chinali chiyani..?Tathandiza kuti madamu oonda a LVM azikulirakulira akafika 90% ya malo omwe anthu amakhala ndi 5% ya voliyumu.

Tawonjezera kuchuluka kwa midadada ya cache cache ya LVM.

Taletsa LVM kusaka ma voliyumu a LVM (PV) pa:

  • zida zomwe zili ndi cache ya LVM (cdata)
  • zida zosungidwa pogwiritsa ntchito cache ya LVM, kudutsa posungira ( _mwambo). Pamenepa, chipangizo chosungidwacho chidzasinthidwabe kudzera mu cache (basi ).
  • zida zomwe zili ndi LVM cache metadata (cmeta)
  • zida zonse mu VG ndi zithunzi za mayina. Apa tidzakhala ndi zithunzi za disk zamakina enieni, ndipo sitikufuna kuti LVM pa wolandirayo atsegule ma voliyumu a mlendo OS.
  • zida zonse mu VG ndi zosunga zobwezeretsera dzina. Apa tidzakhala ndi zosunga zosunga zobwezeretsera zithunzi zamakina.
  • zida zonse zomwe dzina lake limathera ndi "gpv" (voliyumu ya alendo)

Tathandizira thandizo la DISCARD pomasula malo aulere pa LVM VG. Samalani. Izi zipangitsa kuti kuchotsa ma LV pa SSD kutenge nthawi yambiri. Izi makamaka zimagwira ntchito ku SSD RAID 6. Komabe, malinga ndi ndondomekoyi, tidzagwiritsa ntchito makonzedwe ochepa, kotero izi sizidzatilepheretsa konse.

Tiyeni tisinthe chithunzi cha initramfs:

#update-initramfs -u -k all

Ikani ndi kukonza grub:

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

Ndi disks ziti zomwe mungasankhe?Onse amene ali sd*. Dongosolo liyenera kuyambiranso kuchokera pagalimoto iliyonse ya SATA kapena SSD.

Chifukwa chiyani adawonjezera os-prober..?Chifukwa chodziyimira pawokha komanso manja okonda kusewera.

Sichigwira ntchito bwino ngati imodzi mwa ma RAID ili m'malo owonongeka. Imayesa kufufuza OS pa magawo omwe amagwiritsidwa ntchito pamakina omwe akuyenda pa hardware iyi.

Ngati mukuzifuna, mukhoza kuzisiya, koma kumbukirani zonse zomwe zili pamwambapa. Ndikupangira kuyang'ana maphikidwe ochotsera manja osamvera pa intaneti.

Ndi ichi tatsiriza kukhazikitsa koyamba. Yakwana nthawi yoti muyambitsenso OS yomwe yangoyikidwa kumene. Musaiwale kuchotsa bootable Live CD/USB.

#exit
#reboot

Sankhani iliyonse ya SATA SSD ngati chipangizo choyambira.

LVM pa SATA SSD

Pakadali pano, talowa kale mu OS yatsopano, tidakonza netiweki, apt, tatsegula emulator yomaliza, ndikuyambitsa:

#sudo bash

Tiyeni tipitilize.

"Yambani" mndandanda kuchokera ku SATA SSD:

#blkdiscard /dev/md2

Ngati sizikugwira ntchito, yesani:

#blkdiscard --step 65536 /dev/md2
Pangani LVM VG pa SATA SSD:

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

Chifukwa chiyani VG ina..?M'malo mwake, tili kale ndi VG yotchedwa mizu. Bwanji osawonjezera zonse mu VG imodzi?

Ngati pali ma PV angapo mu VG, ndiye kuti VG itsegule bwino, ma PV onse ayenera kukhalapo (pa intaneti). Kupatulapo ndi LVM RAID, yomwe sitigwiritsa ntchito mwadala.

Tikufunadi kuti ngati pali kulephera (werengani kutayika kwa data) pamtundu uliwonse wa RAID 6, makina ogwiritsira ntchito adzayamba mwachizolowezi ndikutipatsa mwayi wothetsa vutoli.

Kuti tichite izi, pamlingo woyamba wochotsa tidzalekanitsa mtundu uliwonse wa "media" mu VG yosiyana.

Kunena mwasayansi, magulu osiyanasiyana a RAID ndi a "magawo odalirika" osiyanasiyana. Simuyenera kupanga china chowalepheretsa powayika mu VG imodzi.

Kukhalapo kwa LVM pamlingo wa "hardware" kudzatilola kudula zidutswa zamagulu osiyanasiyana a RAID powaphatikiza m'njira zosiyanasiyana. Mwachitsanzo - kuthamanga nthawi yomweyo bcache + LVM woonda, bcache + BTRFS, LVM cache + LVM yopyapyala, kasinthidwe kake ka ZFS kamene kamakhala ndi ma cache, kapena kusakaniza kulikonse kwa gehena kuyesa ndikufanizira zonsezi.

Pamlingo wa "hardware", sitidzagwiritsa ntchito china chilichonse kupatula ma voliyumu akale "akuluakulu" a LVM. Kupatula pa lamuloli kungakhale kugawa zosunga zobwezeretsera.

Ndikuganiza pofika nthawiyi, owerenga ambiri anali atayamba kale kukayikira za chidole cha nesting.

LVM pa SATA HDD

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

VG yatsopano..?Tikufunadi kuti ngati gulu la disk lomwe tidzagwiritse ntchito posunga zosunga zobwezeretsera litalephera, makina athu ogwiritsira ntchito apitiliza kugwira ntchito moyenera, ndikusunga mwayi wopeza zomwe sizinasungidwe monga mwanthawi zonse. Chifukwa chake, kuti tipewe zovuta zoyambitsa VG, timapanga VG yosiyana.

Kukhazikitsa cache ya LVM

Tiyeni tipange LV pa NVMe RAID 1 kuti tigwiritse ntchito ngati chipangizo chosungira.

#lvcreate -L 70871154688B --name cache root

Chifukwa chiyani pali zochepa ...?Chowonadi ndi chakuti ma NVMe SSD athu alinso ndi cache ya SLC. 4 gigabytes "yaulere" ndi 18 gigabytes yamphamvu chifukwa cha malo aulere omwe ali mu 3-bit MLC. Cache iyi ikatha, ma NVMe SSD sadzakhala othamanga kwambiri kuposa SATA SSD yathu yokhala ndi cache. Kwenikweni, pazifukwa izi, sizomveka kuti tipange gawo la cache la LVM kukhala lokulirapo kuposa kuwirikiza kawiri cache ya SLC ya NVMe drive. Kwa ma drive a NVMe omwe amagwiritsidwa ntchito, wolemba amawona kuti ndizomveka kupanga ma gigabytes 32-64 a cache.

Kukula kwa magawo omwe apatsidwa kumafunika kukonza ma gigabytes 64 a cache, cache metadata, ndi zosunga zobwezeretsera metadata.

Kuonjezera apo, ndikuwona kuti pambuyo pozimitsa makina onyansa, LVM idzalemba cache yonse ngati yonyansa ndipo idzagwirizanitsanso. Komanso, izi zidzabwerezedwa nthawi iliyonse lvchange ikagwiritsidwa ntchito pa chipangizochi mpaka dongosolo liziyambiranso. Chifukwa chake, ndikupangira kukonzanso posungira pogwiritsa ntchito script yoyenera.

Tiyeni tipange LV pa SATA RAID 6 kuti tigwiritse ntchito ngati chipangizo chosungidwa.

#lvcreate -L 3298543271936B --name cache data

Chifukwa chiyani ma terabytes atatu okha..?Kuti, ngati kuli kofunikira, mutha kugwiritsa ntchito SATA SSD RAID 6 pazosowa zina. Kukula kwa malo osungidwa kumatha kuonjezedwa mwamphamvu, pakuwuluka, popanda kuyimitsa dongosolo. Kuti muchite izi, muyenera kuyimitsa kwakanthawi ndikuyambitsanso cache, koma mwayi wapadera wa LVM-cache, mwachitsanzo, bcache ndikuti izi zitha kuchitika pouluka.

Tiyeni tipange VG yatsopano ya caching.

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

Tiyeni tipange LV pachipangizo chosungidwa.

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

Apa tidatenga nthawi yomweyo malo onse aulere pa /dev/data/cache kotero kuti magawo ena onse ofunikira adapangidwa nthawi yomweyo /dev/root/cache. Ngati mudapanga china chake molakwika, mutha kuchisuntha pogwiritsa ntchito pvmove.

Tiyeni tipange ndikuyambitsa cache:

#lvcreate -y -L 64G -n cache cache /dev/root/cache
#lvcreate -y -L 1G -n cachemeta cache /dev/root/cache
#lvconvert -y --type cache-pool --cachemode writeback --chunksize 64k --poolmetadata cache/cachemeta cache/cache
#lvconvert -y --type cache --cachepool cache/cache cache/cachedata

Chifukwa chiyani ukuchulukirachulukira..?Kupyolera mu kuyesa kothandiza, wolembayo adatha kupeza kuti zotsatira zabwino zimatheka ngati kukula kwa LVM cache block kumagwirizana ndi kukula kwa chipika chochepa cha LVM. Kuphatikiza apo, kukula kwake kocheperako, kasinthidwe kabwinoko kamakhala kojambulidwa mwachisawawa.

64k ndiye kukula kochepa kololedwa kwa LVM woonda.

Samalani polembanso..!Inde. Mtundu uwu wa cache umalepheretsa kulemba kulunzanitsa ku chipangizo chosungidwa. Izi zikutanthauza kuti ngati posungira atayika, mukhoza kutaya deta pa chipangizo posungira. Pambuyo pake, wolembayo adzakuuzani zomwe mungachite, kuwonjezera pa NVMe RAID 1, zomwe zingatengedwe kuti zilipire ngoziyi.

Mtundu uwu wa cache unasankhidwa mwadala kuti ulipire kusalemba bwino kwachisawawa kwa RAID 6.

Tiyeni tiwone zomwe tili nazo:

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

[cachedata_corig] yokha iyenera kupezeka pa /dev/data/cache. Ngati china chake sichili bwino, gwiritsani ntchito pvmove.

Mutha kuletsa cache ngati kuli kofunikira ndi lamulo limodzi:

#lvconvert -y --uncache cache/cachedata

Izi zimachitika pa intaneti. LVM idzangogwirizanitsa cache ku disk, kuchotsa, ndi kutchulanso cachedata_corig kubwerera ku cachedata.

Kukhazikitsa LVM woonda

Tiyeni tiyerekeze kuchuluka kwa malo omwe timafunikira pa metadata yoonda ya 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"

Kuzungulira mpaka 4 gigabytes: 4294967296B

Chulukitsani ndi ziwiri ndikuwonjezera 4194304B ya metadata ya LVM PV: 8594128896B
Tiyeni tipange magawo osiyana pa NVMe RAID 1 kuti tiyike metadata yopyapyala ya LVM ndi zosunga zobwezeretsera pamenepo:

#lvcreate -L 8594128896B --name images root

Zachiyani..?Apa funso lingabwere: chifukwa chiyani ikani LVM metadata yopyapyala padera ngati idzasungidwa pa NVMe ndipo idzagwira ntchito mwachangu.

Ngakhale kuti liwiro ndilofunika pano, ndilotalikirana ndi chifukwa chachikulu. Chinthu chake ndi chakuti cache ndi mfundo yolephera. Chinachake chitha kuchitika, ndipo ngati metadata yopyapyala ya LVM ikasungidwa, ipangitsa kuti chilichonse chiwonongeke. Popanda metadata yathunthu, zidzakhala zosatheka kusonkhanitsa ma voliyumu ochepa.

Mwa kusuntha metadata ku voliyumu yosiyana yosasungidwa, koma yachangu, timatsimikizira chitetezo cha metadata pakatayika cache kapena katangale. Pankhaniyi, kuwonongeka konse komwe kumabwera chifukwa cha kutayika kwa cache kudzakhazikika mkati mwazochepa kwambiri, zomwe zipangitsa kuti njira yochira ikhale yosavuta potengera kukula kwake. Ndi kuthekera kwakukulu, zowonongekazi zidzabwezeretsedwa pogwiritsa ntchito zipika za FS.

Komanso, ngati chithunzithunzi cha voliyumu yopyapyala chidatengedwa kale, ndipo pambuyo pake chosungiracho chidalumikizidwa kamodzi, ndiye, chifukwa cha mapangidwe amkati a LVM woonda, kukhulupirika kwa chithunzicho kudzatsimikizika pakatayika cache. .

Tiyeni tipange VG yatsopano yomwe idzakhala ndi udindo wopereka zochepa:

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

Tiyeni tipange dziwe:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
Chifukwa -Z yKuphatikiza pa zomwe mawonekedwewa amapangidwira - kuteteza deta kuchokera ku makina amodzi kuti asadutse kupita ku makina ena enieni pamene akugawanso malo - zeroing imagwiritsidwanso ntchito kuonjezera liwiro la kulemba mwachisawawa muzitsulo zocheperapo 64k. Zolemba zilizonse zosakwana 64k kudera lomwe silinagawidwe kale la voliyumu yopyapyala zitha kukhala 64K m'mphepete mwa cache. Izi zidzalola kuti ntchitoyi ichitike kwathunthu kudzera mu cache, kudutsa chipangizo chosungidwacho.

Tiyeni tisunthire ma LV ku ma PV ofanana:

#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

Tiyeni tiwone:

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

Tiyeni tipange voliyumu yocheperako pamayeso:

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

Tidzayika phukusi la mayeso ndi kuyang'anira:

#apt-get install sysstat fio

Umu ndi momwe mungayang'anire kachitidwe kakusungirako kwathu munthawi yeniyeni:

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

Umu ndi momwe tingayesere masinthidwe athu:

#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

Mosamala! Zida!Khodi iyi idzayesa mayeso 36 osiyanasiyana, iliyonse imayenda kwa masekondi anayi. Theka la mayeso ndi ojambulira. Mutha kujambula zambiri pa NVMe mumasekondi 4. Kufikira 4 gigabytes pamphindikati. Chifukwa chake, mayeso aliwonse olembera amatha kudya mpaka ma gigabytes a 3 a SSD kuchokera kwa inu.

Kuwerenga ndi kulemba kusakanikirana?Inde. Ndizomveka kuyendetsa mayeso owerengera ndi kulemba padera. Kuphatikiza apo, ndizomveka kuwonetsetsa kuti ma cache onse amalumikizidwa kuti zolemba zomwe zidapangidwa kale zisakhudze kuwerenga.

Zotsatira zidzasiyana kwambiri pakuyambitsa koyamba ndi zina zotsatila pamene cache ndi voliyumu yopyapyala imadzaza, komanso kutengera ngati dongosololi linatha kugwirizanitsa ma cache omwe adadzazidwa panthawi yomaliza.

Mwa zina, ndikupangira kuyeza liwiro pa voliyumu yopyapyala kale yomwe chithunzithunzi chidangotengedwa. Wolembayo anali ndi mwayi wowona momwe zolemba mwachisawawa zimachulukira mwachangu atangopanga chithunzi choyamba, makamaka pomwe posungira sichinadzaze. Izi zimachitika chifukwa cholemba-pa-kulemba semantics, kuyanjanitsa kwa cache ndi midadada yopyapyala, komanso kuti kulemba mwachisawawa ku RAID 6 kumasandulika kuwerengedwa mwachisawawa kuchokera ku RAID 6 ndikutsatiridwa ndi kulembera ku cache. Pakusintha kwathu, kuwerenga mwachisawawa kuchokera ku RAID 6 mpaka nthawi za 6 (chiwerengero cha ma SATA SSD pamndandanda) mwachangu kuposa kulemba. Chifukwa midadada ya CoW imagawidwa motsatizana kuchokera padziwe lopyapyala, ndiye kujambula, makamaka, kumasinthanso kukhala motsatizana.

Zonse ziwirizi zitha kugwiritsidwa ntchito kuti mupindule.

Cache "coherent" zithunzi

Kuchepetsa chiopsezo cha kutayika kwa data pakawonongeka / kutayika kwa cache, wolemba akufuna kuyambitsa mchitidwe wozungulira zithunzi kuti zitsimikizire kukhulupirika kwawo pankhaniyi.

Choyamba, chifukwa metadata ya voliyumu yopyapyala imakhala pachida chosasungidwa, metadatayo ikhala yokhazikika ndipo zotayika zomwe zitha kutayika zidzadzipatula mkati mwa midadada ya data.

Kuzungulira kwazithunzi zotsatirazi kumatsimikizira kukhulupirika kwa data mkati mwazithunzi ngati cache itatayika:

  1. Pa voliyumu yopyapyala yokhala ndi dzina <name>, pangani chithunzithunzi chokhala ndi dzina <name>.cached
  2. Tiyeni tiyike malire osamuka pamtengo wokwanira: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. Mu lupu timayang'ana kuchuluka kwa midadada yonyansa mu cache: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' mpaka tipeze zero. Ngati zero ikusowa kwa nthawi yayitali, imatha kupangidwa mwakusintha kwakanthawi kache kuti mulembe. Komabe, poganizira za liwiro la magulu athu a SATA ndi NVMe SSD, komanso gwero lawo la TBW, mutha kugwira nthawiyo mwachangu osasintha mawonekedwe a cache, kapena zida zanu zitha kudya zonse zomwe zili mkati. masiku angapo. Chifukwa cha kuchepa kwazinthu, dongosololi, kwenikweni, silingathe kukhala pansi pa 100% kulemba katundu nthawi zonse. Ma NVMe SSD athu pansi pa 100% kulemba katundu adzathetsa gwero 3-4 ya tsikulo. Ma SATA SSD atha kukhalapo kawiri nthawi yayitali. Chifukwa chake, titha kuganiza kuti zolemetsa zambiri zimapita powerenga, ndipo timakhala ndi kuphulika kwakanthawi kochepa kwambiri kophatikizana ndi katundu wocheperako pakulemba.
  4. Titangogwira (kapena kupanga) zero, timatcha dzina <name> .cached ku <name>.committed. Zakale <name>.committed zachotsedwa.
  5. Mwachidziwitso, ngati cache ili ndi 100% yodzaza, ikhoza kupangidwanso ndi script, ndikuyichotsa. Ndi cache yopanda kanthu, dongosololi limagwira ntchito mofulumira polemba.
  6. Khazikitsani malo osamuka kukhala ziro: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata Izi zidzateteza kwakanthawi kache kuti asagwirizane ndi media yayikulu.
  7. Timadikirira mpaka zosintha zambiri zidziunjikira mu cache #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' kapena chowerengera chizimitsidwa.
  8. Timabwereza kachiwiri.

Chifukwa chiyani zovuta za kusamuka ...?Chowonadi ndi chakuti muzochita zenizeni, kujambula "mwachisawawa" kwenikweni sikungochitika mwachisawawa. Ngati tidalemba china chake ku gawo la 4 kilobytes kukula, pali kuthekera kwakukulu kuti mphindi zingapo zikubwerazi mbiri idzapangidwa ku gawo limodzi kapena limodzi la magawo oyandikana nawo (+- 32K).

Pokhazikitsa malo osamuka kupita ku ziro, timayimitsa kalunzanitsidwe ka SATA SSD ndikuphatikiza zosintha zingapo pa block imodzi ya 64K mu cache. Izi zimapulumutsa kwambiri gwero la SATA SSD.

Kodi code ili kuti..?Tsoka ilo, wolemba amadziona kuti ndi wosakwanira pakupanga zolemba za bash chifukwa amadziphunzitsa yekha 100% ndipo amachita chitukuko choyendetsedwa ndi "google", chifukwa chake amakhulupirira kuti code yoyipa yomwe imatuluka m'manja mwake sayenera kugwiritsidwa ntchito ndi aliyense. zina.

Ndikuganiza kuti akatswiri pankhaniyi azitha kufotokoza mozama zonse zomwe zafotokozedwa pamwambapa, ngati kuli kofunikira, ndipo, mwina, kuzipanga mokongola ngati ntchito yadongosolo, monga momwe wolemba adayesera.

Dongosolo losavuta lozungulira lotereli lidzatilola kuti tisamangokhalira kukhala ndi chithunzi chimodzi cholumikizidwa bwino pa SATA SSD, komanso kutilola, pogwiritsa ntchito pulogalamu ya thin_delta, kuti tipeze midadada yomwe idasinthidwa pambuyo pa kulengedwa kwake, ndikuyika zowonongeka pa. mabuku akuluakulu, kufewetsa kwambiri kuchira .

TRIM/DISCARD mu libvirt/KVM

Chifukwa kusungirako deta kudzagwiritsidwa ntchito kwa KVM yothamanga libvirt, ndiye kuti zingakhale bwino kuphunzitsa ma VM athu osati kungotenga malo aulere, komanso kumasula zomwe sizikufunikanso.

Izi zimachitika potengera thandizo la TRIM/DISCARD pama disks enieni. Kuti muchite izi, muyenera kusintha mtundu wowongolera kukhala virtio-scsi ndikusintha xml.

#virsh edit vmname
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='writethrough' io='threads' discard='unmap'/>
<source dev='/dev/images/vmname'/>
<backingStore/>
<target dev='sda' bus='scsi'/>
<alias name='scsi0-0-0-0'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>

<controller type='scsi' index='0' model='virtio-scsi'>
<alias name='scsi0'/>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</controller>

Kutaya kotereku kuchokera ku ma OS a alendo kumakonzedwa bwino ndi LVM, ndipo midadada imamasulidwa moyenera mu cache ndi dziwe lopyapyala. Kwa ife, izi zimachitika makamaka mochedwa, pochotsa chithunzi chotsatira.

BTRFS Backup

Gwiritsani ntchito zolemba zomwe zidapangidwa kale ndi kwambiri chenjezo ndi pa ngozi yake. Wolembayo adalemba izi yekha komanso yekha. Ndikukhulupirira kuti ogwiritsa ntchito ambiri a Linux ali ndi zida zofanana, ndipo palibe chifukwa chokopera za wina.

Tiyeni tipange voliyumu pachipangizo chosunga zobwezeretsera:

#lvcreate -L 256G --name backup backup

Tiyeni tiyipange mu BTRFS:

#mkfs.btrfs /dev/backup/backup

Tiyeni tipange malo okwera ndikuyika magawo amtundu wamafayilo:

#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

Tiyeni tipange zolembera zosunga zobwezeretsera:

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

Tiyeni tipange chikwatu cha zolemba zosunga zobwezeretsera:

#mkdir /root/btrfs-backup

Tiyeni tikopere script:

Zambiri zowopsa za bash. Gwiritsani ntchito mwakufuna kwanu. Osalemba makalata okwiya kwa wolemba ...#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

Akuchitanso chiyani..?Muli malamulo osavuta opangira zithunzi za BTRFS ndikuzikopera ku FS ina pogwiritsa ntchito BTRFS send/receve.

Kukhazikitsa koyamba kumatha kukhala kwanthawi yayitali, chifukwa ... Pachiyambi, deta yonse idzakopedwa. Kutsegulira kwina zikhala kwachangu kwambiri, chifukwa ... Zosintha zokha zidzakopera.

Script ina yomwe tiyika mu cron:

Palinso bash code#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

Zikuchita chiyani..?Amapanga ndi kulunzanitsa zithunzithunzi zowonjezera za voliyumu ya BTRFS yomwe ili pa FS yosunga zobwezeretsera. Pambuyo pake, imachotsa zithunzi zonse zomwe zidapangidwa masiku 60 apitawo. Pambuyo poyambitsa, zithunzi zojambulidwa za mavoliyumu omwe atchulidwa zidzawonekera mu /backup/btrfs/back/remote/ subdirectories.

Tiyeni tipereke ufulu wotsatira code:

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

Tiyeni tiwone ndikuyiyika mu cron:

#/usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/btrfs-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t btrfs-backup
#cat /var/log/syslog | grep btrfs-backup
#crontab -e
0 2 * * * /usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/btrfs-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t btrfs-backup

LVM yopyapyala zosunga zobwezeretsera

Tiyeni tipange dziwe lopyapyala pachipangizo chosunga zobwezeretsera:

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

Tiyeni tiyike ddrescue, chifukwa ... scripts adzagwiritsa ntchito chida ichi:

#apt-get install gddrescue

Tiyeni tipange chikwatu cha zolemba:

#mkdir /root/lvm-thin-backup

Tiyeni tikopere zolembedwa:

Zovuta zambiri mkati ...#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

Zikuchita chiyani...?Lili ndi malamulo angapo osinthira zithunzi zoonda ndi kulunzanitsa kusiyana pakati pa zithunzi zoonda ziwiri zolandilidwa kudzera pa thin_delta kupita ku chipika china chogwiritsa ntchito ddrescue ndi blkdiscard.

Script ina yomwe tiyika mu cron:

Bash pang'ono#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

Zikuchita chiyani...?Amagwiritsa ntchito zolemba zam'mbuyomu kupanga ndi kulunzanitsa zosunga zobwezeretsera zamavoliyumu woonda omwe atchulidwa. Cholembacho chidzasiya zithunzithunzi zosagwiritsidwa ntchito za mavoliyumu omwe atchulidwa, omwe amafunikira kuti awone zomwe zasintha kuyambira kugwirizanitsa komaliza.

Izi ziyenera kusinthidwa, kutchula mndandanda wa mavoliyumu oonda omwe makope osungira ayenera kupangidwa. Mayina omwe aperekedwa ndi ongowonetsera chabe. Ngati mukufuna, mutha kulemba script yomwe ingalumikizanitse ma voliyumu onse.

Tiyeni tipereke maufulu:

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

Tiyeni tiwone ndikuyiyika mu 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

Kukhazikitsa koyamba kudzakhala kwanthawi yayitali, chifukwa ... voliyumu woonda adzalumikizidwa bwino ndikukopera malo onse ogwiritsidwa ntchito. Chifukwa cha LVM metadata yopyapyala, tikudziwa kuti ndi midadada iti yomwe ikugwiritsidwa ntchito, ndiye kuti midadada yama voliyumu yokhayo yomwe imagwiritsidwa ntchito ndiyomwe imakopera.

Kuthamanga kotsatira kudzatengera zambiri chifukwa chakusintha kutsatira kudzera pa LVM metadata yopyapyala.

Tiyeni tiwone zomwe zidachitika:

#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

Kodi izi zikukhudzana bwanji ndi zidole zomangira zisa?

Mwachidziwikire, chifukwa ma voliyumu omveka a LVM LV amatha kukhala ma voliyumu akuthupi a LVM a ma VG ena. LVM imatha kukhala yobwerezabwereza, monga zidole zomangira zisa. Izi zimapereka LVM kusinthasintha kwambiri.

PS

M'nkhani yotsatira, tidzayesa kugwiritsa ntchito njira zingapo zosungiramo mafoni / KVM monga maziko opangira geo-distributed storage / vm cluster ndi redundancy m'makontinenti angapo pogwiritsa ntchito makompyuta apanyumba, intaneti yapakhomo ndi P2P.

Source: www.habr.com

Kuwonjezera ndemanga