Maxay LVM iyo Matryoshka wadaagaan?

Maalin wacan.
Waxaan jeclaan lahaa inaan bulshada la wadaago waayo-aragnimadayda wax-ku-oolka ah ee dhismaha nidaamka kaydinta xogta ee KVM anigoo isticmaalaya md RAID + LVM.

Barnaamijka waxaa ka mid noqon doona:

  • Dhismaha md RAID 1 ee NVMe SSD.
  • Isku xirka md RAID 6 ee SATA SSD iyo darawalada caadiga ah.
  • Tilmaamaha hawlgalka TRIM/DISCARD ee SSD RAID 1/6.
  • Abuuritaanka bootable md RAID 1/6 array ee saxannada caadiga ah.
  • Ku rakibida nidaamka NVMe RAID 1 marka aysan jirin taageero NVMe ah ee BIOS.
  • Isticmaalka kaydka LVM iyo LVM khafiif ah.
  • Isticmaalka sawir-qaadista BTRFS oo u dir / hel gurmad.
  • Isticmaalka sawirada khafiifka ah ee LVM iyo thin_delta ee qaabka BTRFS kaabaynta.

Haddii aad xiisaynayso, fadlan eeg bisad.

Foomka codsiga

Qoraagu wax mas'uuliyad ah kama saarna cawaaqibka ka dhalan kara isticmaalka ama isticmaalin la'aanta agabka/tusaale/code/talooyin/xogta maqaalkan. Markaad akhrido ama u isticmaasho qoraalkan si kastaba, waxaad la wareegaysaa mas'uuliyadda dhammaan cawaaqibka falalkan. Cawaaqibta suurtagalka ah waxaa ka mid ah:

  • NVMe SSDs-la shiilay.
  • Si dhammaystiran loo adeegsaday ilaha duubista iyo fashilka darawallada SSD.
  • Luminta dhammaystiran ee dhammaan xogta dhammaan darawallada, oo ay ku jiraan nuqullada kaydinta.
  • Qalab kombuyuutar oo khaldan.
  • Waqti lumis, neerfayaasha iyo lacagta.
  • Cawaaqibta kale ee aan kor ku xusnayn.

Birta

La heli karo waxay ahaayeen:

Motherboard laga bilaabo ilaa 2013 oo wata Z87 Chipset, oo ay ku dhameystiran yihiin Intel Core i7 / Haswell.

  • Processor-ka 4 nooc, 8 dunta
  • 32 GB DDR3 RAM
  • 1 x 16 ama 2 x 8 PCIe 3.0
  • 1 x 4 + 1 x 1 PCIe 2.0
  • 6 x 6 GBps SATA 3 xiriiriye

Adapter-ka SAS LSI SAS9211-8I ayaa u iftiimiyay habka IT/HBA. Firmware karti u leh RAID ayaa si ula kac ah loogu bedelay HBA firmware si:

  1. Waad tuuri kartaa adabtaradan wakhti kasta oo aad ku bedeli kartaa mid kasta oo kale oo aad la kulanto.
  2. TRIM/ Tuur ayaa si caadi ah ugu shaqaynaysay saxannada, sababtoo ah... gudaha RAID firmware amaradan gabi ahaanba lama taageero, iyo HBA, guud ahaan, ma daneeyaan waxa amarrada lagu kala qaado baska.

Hard Drive-ka - 8 xabbo oo HGST Travelstar 7K1000 oo leh 1 TB oo ah qaab 2.5 ah, sida laptops. Darawaladani waxay hore ugu jireen RAID 6. Waxay sidoo kale yeelan doonaan isticmaalka nidaamka cusub. Si loo kaydiyo kaydka maxaliga ah

Intaa waxaa dheer:

6 xabbadood SATA SSD model Samsung 860 QVO 2TB. SSD-yadani waxay u baahdeen mug weyn, joogitaanka kaydka SLC, isku halaynta, iyo qiimo jaban ayaa la rabay. Taageerada tuurista/eber ayaa loo baahnaa, kaas oo lagu hubiyay xariiqda dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

2 xabbo oo ah nooca NVMe SSD Samsung SSD 970 EVO 500GB.

SSD-yadan, xawaaraha wax-akhriska/qorista random iyo awoodda agabka baahiyahaaga ayaa muhiim u ah. Radiator iyaga. Waa daruuri. Dhab ahaantii. Haddii kale, shiil ilaa ay qadhaadh yihiin inta lagu guda jiro wada shaqaynta RAID ee ugu horreysa.

StarTech PEX8M2E2 adabtarada 2 x NVMe SSD oo lagu rakibay booska PCIe 3.0 8x. Tani, mar labaad, waa HBA oo keliya, laakiin loogu talagalay NVMe. Waxay kaga duwan tahay adapters-ka raqiis ah in aysan u baahnayn taageerada PCIe bifurcation ka Motherboard-ka sababtoo ah joogitaanka gudaha PCIe-ga. Waxay ku shaqeyn doontaa xitaa nidaamka qadiimiga ah ee PCIe, xitaa haddii ay tahay x1 PCIe 1.0 booska. Dabcan, xawaaraha ku habboon. Ma jiraan wax RAIDs ah. Ma jiro BIOS-ku-dhismay oo saaran. Marka, nidaamkaagu sixir uma baran doono inuu ku xidho NVMe, in ka yar ma sameeyo NVMe RAID iyada oo ay ugu wacan tahay qalabkan.

Qaybtan waxa kaliya oo ay sabab u tahay jiritaanka hal kaliya oo bilaash ah 8x PCIe 3.0 ee nidaamka, iyo, haddii ay jiraan 2 boos oo bilaash ah, si fudud ayaa loogu beddeli karaa laba dinaar PEX4M2E1 ama analogues, oo meel kasta laga iibsan karo qiimo dhan 600 rubles.

Diidmada dhammaan noocyada qalabka ama Chipset/BIOS RAIDs-ku-dhismay ayaa si badheedh ah loo sameeyay, si ay u awoodaan inay si buuxda u beddelaan nidaamka oo dhan, marka laga reebo SSD/HDD laftooda, iyadoo la ilaalinayo dhammaan xogta. Fikrad ahaan, si aad u badbaadiso xitaa nidaamka qalliinka ee lagu rakibay markaad u guurto qalab cusub / kala duwan. Waxa ugu muhiimsan waa in ay jiraan SATA iyo dekedaha PCIe. Waa sida CD-ga tooska ah ama flash drive-ka bootable-ka ah, oo aad u dheereeya oo xoogaa yar.

HumorHaddii kale, waad ogtahay waxa dhacaya - mararka qaarkood waxaad u baahan tahay inaad si degdeg ah u qaadato dhammaan shaxanka si aad u qaadato. Laakiin ma rabo inaan lumiyo xogta. Si tan loo sameeyo, dhammaan warbaahinta la sheegay waxay ku habboon yihiin boggaga 5.25 bays ee kiiska caadiga ah.

Hagaag, iyo, dabcan, tijaabinta hababka kala duwan ee kaydinta SSD ee Linux.

Weerarada qalabku waa caajis. Daar. Ama way shaqeysaa ama ma qabato. Iyo mdadm mar walba waxaa jira doorashooyin.

Jilicsan

Markii hore, Debian 8 Jessie ayaa lagu rakibay qalabka, kaas oo ku dhow EOL. RAID 6 waxaa laga soo ururiyay HDD-yada kor ku xusan oo lagu lamaanay LVM. Waxay ku shaqaynaysay mashiinada farsamada ee kvm/libvirt.

Sababtoo ah Qoraagu wuxuu leeyahay waayo-aragnimo ku habboon abuurista SATA/NVMe flash drives la qaadan karo, iyo sidoo kale, si aan loo jebin qaabka caadiga ah ee habboon, Ubuntu 18.04 waxaa loo doortay nidaamka bartilmaameedka, kaas oo mar hore si ku filan loo xasiliyay, laakiin weli wuxuu leeyahay 3 sano taageero mustaqbalka.

Nidaamka la soo sheegay wuxuu ka kooban yahay dhammaan darawalada qalabka aan u baahannahay meel ka baxsan sanduuqa. Uma baahnno software dhinac saddexaad ama darawal

Diyaarinta rakibaadda

Si loo rakibo nidaamka waxaan u baahanahay Ubuntu Desktop Image. Nidaamka server-ku wuxuu leeyahay nooc ka mid ah rakibe xoog leh, kaas oo muujinaya madax-bannaani xad-dhaaf ah oo aan la curyaami karin iyada oo lagu riixayo qaybta nidaamka UEFI mid ka mid ah saxannada, oo xumeynaya dhammaan quruxda. Sidaa darteed, waxaa lagu rakibay kaliya qaabka UEFI. Ma bixiyo wax ikhtiyaar ah

Kuma faraxsanin arrintan.

Waa maxay sababta?Nasiib darro, kabaha UEFI aad ayuu u liidataa la jaanqaadi kara boot software RAID, sababtoo ah... Qofna nama siinayo boos celin loogu talagalay qaybta UEFI ESP. Waxaa jira cuntooyin online ah oo soo jeedinaya in qaybta ESP lagu dhejiyo flash drive ee dekedda USB, laakiin tani waa barta guuldarada. Waxaa jira cuntooyin loo isticmaalo software mdadm RAID 1 oo leh nooca metadata 0.9 kaas oo aan ka hortagaynin UEFI BIOS inuu arko qaybtan, laakiin tani waxay nooshahay ilaa wakhtiga farxadda marka BIOS ama qalab kale oo OS ah uu wax u qoro ESP oo iloobo inuu ku dhejiyo kuwa kale muraayadaha.

Intaa waxaa dheer, kabaha UEFI waxay kuxirantahay NVRAM, taas oo aan la socon doonin saxanadaha nidaamka cusub, sababtoo ah waa qayb ka mid ah Motherboard-ka.

Markaa, dib u curin mayno taayir cusub. Waxaan horay u haysanay baaskiil awoowe oo diyaarsan, waqti-la tijaabiyay, oo hadda loo yaqaan boot Legacy/BIOS, oo sita magaca faan ee CSM ee nidaamyada ku habboon UEFI. Waxa aanu ka soo saareynaa shafka, saliidayn, tuujin taayirada oo aanu ku tirtiri doonaa maro qoyan.

Nooca desktop-ka ee Ubuntu sidoo kale laguma rakibi karo si sax ah bootloader Legacy, laakiin halkan, sida ay yiraahdaan, ugu yaraan waxaa jira xulashooyin.

Oo sidaas daraaddeed, waxaan ka soo ururin hardware iyo shuban nidaamka ka Ubuntu Live flash drive bootable. Waxaan u baahan doonaa inaan soo dejinno xirmooyinka, si aan u dejino shabakadda adiga kuu shaqeysa. Haddii ay shaqayn waydo, waxa aad hore ugu shuban kartaa baakadaha lagama maarmaanka u ah flash-ka.

Waxaan galeynaa deegaanka Desktop-ka, waxaan bilownay emulator-ka terminal, oo aan ka baxno:

#sudo bash

Sidee…?Xariiqda kore waa kicinta canonical ee holiwars ee ku saabsan sudo. C bΠΎfursadaha ka weyn ayaa iman iyoΠΎmasuuliyad weyn. Su'aashu waxay tahay inaad adigu iska qaadi karto. Dad badan ayaa u maleynaya in isticmaalka sudo habkan aysan ugu yaraan taxaddar lahayn. Si kastaba ha ahaatee:

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

Waa maxay sababta aan ZFS...?Marka aan ku rakibno software kombuyuutarkeena, waxaan dhab ahaan u amaahinnaa qalabkeena kuwa soosaarayaasha software-ka ah si ay u wadaan.
Marka aan ku aamino software-kan ilaalinta xogtayada, waxaan qaadanaa deyn u dhiganta kharashka soo celinta xogtan, taas oo aan bixin doono maalin.

Marka laga eego dhinacan, ZFS waa Ferrari, mdadm+lvm-na waxa ay u badan tahay sida baaskiilka.

Ujeeddo ahaan, qoraagu wuxuu doorbidayaa inuu amaahiyo baaskiil ku amaahiyo shakhsiyaad aan la garanayn halkii Ferrari. Halkaa, qiimaha arrintu maaha mid sarreeya. Looma baahna xuquuq. Ka fudud shuruucda taraafikada. Baarkinku waa bilaash. Awoodda waddan-goboleed ayaa ka fiican. Waxaad had iyo jeer ku dhejin kartaa lugaha baaskiilka, oo waxaad ku hagaajin kartaa baaskiilka gacmahaaga.

Waa maxay sababta BTRFS...?Si loo furo nidaamka qalliinka, waxaan u baahanahay nidaam faylal ah oo lagu taageerayo Legacy/BIOS GRUB oo ka baxsan sanduuqa, isla markaana taageera sawir-qaadista tooska ah. Waxaan u isticmaali doonaa qaybta / kabaha. Intaa waxaa dheer, qoraagu wuxuu doorbidaa inuu u isticmaalo FS-kan / (xididka), isagoo aan iloobin in la ogaado in software kasta oo kale aad u abuuri karto qaybo kala duwan LVM oo ku dheji tusmooyinka lagama maarmaanka ah.

Ma ku kaydin doono wax sawiro ah mashiinada farsamada ama xogta macluumaadka FS kan.
FS-gan waxa kaliya oo loo isticmaali doonaa in lagu abuuro sawir-qaade nidaamka iyada oo aan la damin ka dibna ku wareejinta sawir-qaadayaashan saxanka kaydka ah iyada oo la adeegsanayo dirida/qaadashada.

Intaa waxa dheer, qoraagu guud ahaan waxa uu door bidayaa in uu ugu yaraan software-ka si toos ah ugu hayo qalabka oo uu ku socodsiiyo dhammaan software-yada kale ee mishiinnada farsamada ah isaga oo isticmaalaya waxyaabo ay ka mid yihiin u gudbinta GPU-yada iyo PCI-USB Host kontaroolayaasha KVM iyada oo loo marayo IOMMU.

Waxa kaliya ee ku haray qalabku waa kaydinta xogta, farsamaynta iyo kaydinta.

Haddii aad ku kalsoon tahay ZFS wax badan, markaa, mabda'a ahaan, codsiga la cayimay waa la beddeli karaa.

Si kastaba ha ahaatee, qoraagu wuxuu si badheedh ah u iska indhatiray muraayadda ku dhex dhisan/RAID iyo astaamaha dib u dhigista ee ay leeyihiin ZFS, BRTFS iyo LVM.

Sida dood dheeri ah, BTRFS waxay awood u leedahay inay u rogto qoraallo aan kala sooc lahayn oo isku xiga, taasoo saameyn aad u wanaagsan ku leh xawaaraha isku-dubbaridka sawir-qaadista/kaabta ee HDD.

Aan dib u sawirno dhammaan qalabka:

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

Bal aan eegno hareeraha:

#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

Qaabaynta diskka

NVMe SSD

Laakiin sinaba uma calaamadayn doono. Dhammaan isku mid, BIOS-keena ma arko darawalladan. Marka, waxay gabi ahaanba aadi doonaan software RAID. Xataa ma abuuri doono qaybo halkaas. Haddii aad rabto inaad raacdo "canon" ama "maamul ahaan", samee hal qayb oo weyn, sida HDD.

SATA HDD

Looma baahna in wax gaar ah la abuuro halkan. Wax walba hal qayb ayaan u samayn doonaa. Waxaan abuuri doonaa qayb sababtoo ah BIOS-ku wuxuu arkayaa saxanadahaan oo laga yaabo inay xitaa isku dayaan inay ka bootiyaan iyaga. Waxaan xitaa GRUB ku dhejin doonaa saxanadahan hadhow si nidaamku si lama filaan ah tan u sameeyo.

#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

Tani waa halka ay arrimuhu nagu xiiseeyaan.

Marka hore, darawaladayadu cabbirkoodu waa 2 TB. Tani waxay ku dhex jirtaa xadka la aqbali karo ee MBR, taas oo ah waxa aan isticmaali doono. Haddii loo baahdo, waxaa lagu beddeli karaa GPT. Saxannada GPT waxay leeyihiin lakab iswaafajin kara oo u oggolaanaya nidaamyada ku habboon MBR inay arkaan 4-ta qaybood ee ugu horreeya haddii ay ku yaalliin 2 terabyte ee hore. Waxa ugu muhiimsan waa in qaybta boot-ka iyo qaybta bios_grub ee saxanadahani ay ahaato bilowga. Tani waxay xitaa kuu ogolaaneysaa inaad ka bilowdo GPT Legacy/BIOS drives.

Laakiin tani maaha arrinteena.

Halkan waxaan ku abuuri doonaa laba qaybood. Midka ugu horreeya wuxuu noqon doonaa 1 GB oo cabbir ah waxaana loo isticmaali doonaa RAID 1 / boot.

Midka labaad waxaa loo isticmaali doonaa RAID 6 wuxuuna qaadan doonaa dhammaan inta soo hartay ee bilaashka ah marka laga reebo meel yar oo aan la cayimin oo ku taal dhamaadka wadista.

Waa maxay aaggan aan la calaamadayn?Sida laga soo xigtay ilaha shabakadda, SATA SSD-yadayadu waxay saaran yihiin kayd si firfircoon loo ballaarin karo oo SLC ah oo u dhexeeya 6 ilaa 78 gigabytes. Waxaan ku helnaa 6 gigabytes "bilaash" sababtoo ah farqiga u dhexeeya "gigabyte" iyo "gibibytes" ee xaashida xogta wadista. Inta soo hartay 72 gigabytes waxaa laga qoondeeyay meel aan la isticmaalin.

Halkan waa in la ogaadaa in aan haysano kayd SLC ah, booskana waxaa lagu hayaa 4 bit MLC mode. Taas oo anaga si wax ku ool ah uga dhigan tahay in 4 gigabytes ee meel banaan ah aan heli doono kaliya 1 gigabyte ee kaydka SLC.

Ku dhufo 72 gigabytes 4 oo hel 288 gigabytes. Kani waa booska xorta ah ee aynaan calaamadin doonin si aanu ugu ogolano wadayaasha inay si buuxda u isticmaalaan kaydka SLC.

Markaa, waxaanu si wax ku ool ah u heli doonaa ilaa 312 gigabytes ee kaydka SLC wadar ahaan lix darawal. Dhammaan darawallada, 2 ayaa loo isticmaali doonaa RAID dib-u-celinta.

Qadarkan kaydku wuxuu noo ogolaanayaa inaan si aad u naadir ah nolosha dhabta ah ula kulanno xaalad qoraalku aanu gelin kaydka. Tani waxay si aad u wanaagsan u magdhabisaa dib-u-dhaca murugada leh ee xusuusta QLC - xawaaraha qorista ee aadka u hooseeya marka xogta la qoro iyadoo laga gudbayo kaydka. Haddii culeyskaagu uusan u dhigmin tan, markaa waxaan kugula talinayaa inaad si adag uga fikirto inta SSD-gaagu uu ku sii jiri doono culeyska noocaas ah, adoo tixgelinaya TBW xaashida xogta.

#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

Samaynta Habab

Marka hore, waxaan u baahanahay inaan magaca ka bedelno mashiinka. Tani waa lama huraan sababtoo ah magaca martida loo yahay waa qayb ka mid ah magaca diyaarinta meel gudaha mdadm oo wax saameeya meel. Dabcan, arraysyada dib ayaa loo magacaabi karaa, laakiin tani waa tallaabo aan loo baahnayn.

#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

Waa maxay sababta -malay-nadiif...?Si aad uga fogaato bilaabista habaynta. Labada heerarka RAID 1 iyo 6 tani waa ansax. Wax kastaa way shaqayn karaan iyada oo aan la bilaabin haddii ay tahay hannaan cusub. Waxaa intaa dheer, bilaabista shaxanka SSD marka la abuurayo waa qashinka TBW. Waxaan isticmaalnaa TRIM/DISCARD halka ay suurtagal tahay si aan u "billowno" SSD-yada la isugu keeno.

Qaababka SSD, RAID 1 DISCARD waxaa lagu taageeraa meel ka baxsan sanduuqa.

SSD RAID 6 DISCARD arrays, waa inaad awood u gelisaa cabirrada moduleka kernel-ka.

Tani waa in la sameeyaa kaliya haddii dhammaan SSD-yada loo isticmaalo heerka 4/5/6 ee nidaamkan ay leeyihiin taageero shaqo oo discard_zeroes_data. Mararka qaarkood waxaad la kulantaa darawallada qariibka ah oo u sheega kernel-ka in shaqadan la taageeray, laakiin dhab ahaantii ma jirto, ama shaqadu mar walba ma shaqeyso. Waqtigan xaadirka ah, taageerada ayaa laga heli karaa ku dhawaad ​​meel kasta, si kastaba ha ahaatee, waxaa jira wadis duug ah iyo firmware oo leh khaladaad. Sababtan awgeed, taageerada DISCARD waa la naafo si caadi ah RAID 6.

Fiiro gaar ah, amarka soo socdaa wuxuu burburin doonaa dhammaan xogta NVMe Drives isagoo "bilaabi doona" qaabka "eber".

#blkdiscard /dev/md0

Haddii ay wax qaldamaan, isku day inaad qeexdo tallaabo.

#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

Waa maxay sababta aad u weyn...?Kordhinta cabbirka jajabku waxay saamayn togan ku yeelanaysaa xawaaraha akhrinta random ee baloogyada ilaa cabbirka la wada dhan yahay. Tani waxay dhacdaa sababtoo ah hal hawlgal oo cabbirka ku habboon ah ama ka yar ayaa gebi ahaanba lagu dhammaystiri karaa hal qalab. Sidaa darteed, IOPS ee qalabka oo dhan waa la soo koobay. Marka loo eego tirakoobka, 99% IO kama badna 512K.

RAID 6 IOPS qoraal kasta had iyo jeer in ka yar ama la mid ah IOPS ee hal baabuur. Marka, sida aan kala sooc lahayn loo akhriyo, IOPS waxay dhawr jeer ka weynaan kartaa ta hal baabuur, oo halkan cabbirka xannibaadda ayaa muhiimad muhiim ah leh.
Qoraagu ma arko barta isku dayga lagu hagaajinayo halbeegyada xun ee RAID 6 nashqadeynta taa beddelkeedana wuxuu wanaajiyaa waxa RAID 6 ku wanaagsan yahay.
Waxaan magdhow siin doonaa qorista nasiibka xun ee RAID 6 oo wadata kaydka NVMe iyo tabaha dhuuban bixinta.

Wali ma aanaan suurtagelin DISCARD ee RAID 6. Markaa β€œma daah-furi doono” shaxdan hadda. Waxaan tan sameyn doonaa mar dambe, ka dib marka la rakibo OS.

SATA HDD

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

LVM ee NVMe RAID

Xawaaraha, waxaan rabnaa in aan dhigno nidaamka faylka xididka NVMe RAID 1 kaas oo ah / dev/md0.
Si kastaba ha ahaatee, waxaan wali u baahan doonaa qaabkan degdega ah ee baahiyaha kale, sida isdhaafsiga, metadata iyo LVM-cache iyo metadata LVM-khafiif ah, marka waxaan ku abuuri doonaa LVM VG shaxdan.

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

Aynu abuurno qayb ka mid ah nidaamka faylka xididka.

#lvcreate -L 128G --name root root

Aynu abuurno qayb isku beddelasho iyadoo loo eegayo cabbirka RAM-ka.

#lvcreate -L 32G --name swap root

Ku rakibida OS

Guud ahaan, waxaan haynaa wax kasta oo lagama maarmaanka u ah si loo rakibo nidaamka.

Ka bilow saaxir rakibaadda nidaamka deegaanka Ubuntu Live. Ku rakibida caadiga ah. Kaliya marxaladda xulashada saxannada rakibaadda, waxaad u baahan tahay inaad qeexdo kuwan soo socda:

  • /dev/md1, - Buur dhibic /boot, FS - BTRFS
  • /dev/root/root (aka /dev/mapper/root-root), - barta buurta / (xididka), FS - BTRFS
  • /dev/root/swap (aka /dev/mapper/root-swap), - u isticmaal sida qayb beddelashada
  • Ku rakib bootloader-ka /dev/sda

Markaad doorato BTRFS nidaamka faylka xididka, rakibayuhu wuxuu si toos ah u abuuri doonaa laba qaybood oo BTRFS ah oo lagu magacaabo "@" ee / (xididka), iyo "@home" ee / guriga.

Aan bilowno rakibaadda...

Rakibadu waxay ku dhammaan doontaa sanduuqa wada-hadalka moodeelka oo tilmaamaya khaladka rakibidda bootloader-ka. Nasiib darro, ma awoodi doontid inaad ka baxdo wada hadalkan adigoo isticmaalaya hab caadi ah oo sii wad rakibidda. Waanu ka baxnay nidaamka oo markale galnay, anagoo ku dhamaanayna desktop Ubuntu Live nadiif ah. Fur terminalka, oo mar labaad:

#sudo bash

Abuur deegaan chroot si aad u sii waddo rakibidda:

#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

Aynu ku habeyno shabakada iyo magaca martida ee chroot:

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

Aan galno deegaanka chroot:

#chroot /mnt/chroot

Marka ugu horeysa, waxaan gaarsiin doonaa xirmooyinka:

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

Aan hubino oo aan hagaajino dhammaan baakadaha si qalloocan loogu rakibay nidaamka rakibidda oo aan dhamaystirnayn awgeed:

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

Haddii ay wax shaqayn waayaan, waxaa laga yaabaa inaad u baahato inaad wax ka beddesho /etc/apt/sources.list marka hore

Aan hagaajino cabbirada moduleka RAID 6 si aan awood ugu yeesho TRIM/DISKARD:

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

Aan wax yar hagaajinno shaxdeena:

#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

maxay ahayd..?Waxaan abuurnay xeerar udev ah oo sameyn doona kuwa soo socda:

  • Deji cabbirka kaydinta xannibaadda ee RAID 2020 si ay ugu filnaato 6. Qiimaha caadiga ah, waxay u muuqataa, isma beddelin tan iyo abuurista Linux, oo kuma filna muddo dheer.
  • Hayso ugu yaraan IO inta lagu jiro hubinta diyaarinta/isku-dhafka. Tani waa si looga hortago in shaxankaagu ay ku xayirmaan xaalad wada shaqayn weligeed ah oo culaysku saaran yahay.
  • Xaddid IO-ga ugu badnaan inta lagu jiro hubinta/isku-dubbaridka habraaca. Tani waxay lama huraan u tahay si isku-xidhka/hubinta SSD RAID-yada aysan u shiileynin darawalladaada mid qallafsan. Tani waxay si gaar ah run ugu tahay NVMe. (Xusuuso hiitarka? Maan kaftamin.)
  • Ka mamnuuc saxanka inay joojiyaan wareegtada spindle-ka (HDD) ee loo maro APM oo u deji wakhtiga hurdada ee maamulayaasha saxanka ilaa 7 saacadood. Waxaad gabi ahaanba joojin kartaa APM haddii darawaladaadu ay samayn karaan (-B 255). Qiimaha caadiga ah, darawaladu waxay joogsan doonaan shan ilbiriqsi ka dib. Kadib OS-gu wuxuu rabaa inuu dib u dejiyo cache-ga diskka, saxannada ayaa mar kale soo laaban doona, wax walbana mar kale ayay bilaaban doonaan. Saxeexyadu waxay leeyihiin tirada ugu badan ee wareegyada lafdhabarta. Wareegga caadiga ah ee fudud ee noocaas ah wuxuu si fudud u dili karaa saxanadahaaga dhowr sano gudahood. Dhammaan saxanadaha oo dhan kuma dhacaan tan, laakiin kuweenna waa kuwa "laptop", oo leh goobaha ku habboon ee ku habboon, taas oo ka dhigaysa RAID mid u eg mini-MAID.
  • Ku rakib akhriska madaxa saxannada (wareegaya) 1 megabyte - laba baloog oo isku xigta / jajab RAID 6
  • Dami akhrinta madax-xanuunka ee sabuuradaha laftooda.

Aynu wax ka beddelno /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

Waa maxay sababtu..?Waxaan raadin doonaa qaybta / kabaha ee UUID. Magacaabista array aragti ahaan way isbedeli kartaa.

Waxaan ka raadin doonaa qaybaha soo haray ee magacyada LVM ee /dev/mapper/vg-lv notation, sababtoo ah Waxay si gaar ah u aqoonsadaan qaybaha.

Uma isticmaalno UUID LVM sababtoo ah UUID ee mugga LVM iyo sawirradoodu waxay noqon karaan isku mid.Buur /dev/mapper/root-root.. laba jeer?Haa Dhab ahaantii. Tilmaamaha BTRFS. Nidaamka faylkan waxaa lagu dhejin karaa dhowr jeer oo leh subvols kala duwan.

Sifadan la mid ah awgeed, waxaan ku talinayaa in aan marnaba la abuurin sawir-qaadista LVM ee mugga BTRFS ee firfircoon. Waxaa laga yaabaa inaad la yaabto markaad dib u bilowdo.

Aan dib u soo kicinno mdadm config:

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

Aynu hagaajino dejinta 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

maxay ahayd..?Waxaan awoodnay balaadhinta tooska ah ee barkadaha khafiifka ah ee LVM markii la gaarey 90% booska la haysto 5% mugga.

Waxaan kordhinay tirada ugu badan ee kaydinta kaydka LVM.

Waxaan ka hor istaagnay LVM inay ka raadiso mugga LVM (PV) ee:

  • Aaladaha ay ku jiraan kaydka LVM (cdata)
  • Aaladaha la kaydiyay iyadoo la adeegsanayo kaydka LVM iyadoo la marayo khasnadda (_corig). Xaaladdan oo kale, aaladda la kaydiyay lafteeda ayaa wali lagu baadhi doonaa kaydka (kaliya ).
  • Aaladaha ay ku jiraan xogta badan ee kaydka LVM (cmeta)
  • dhammaan aaladaha ku jira VG ee leh sawirrada magaca. Halkan waxaan ku yeelan doonaa sawirada diskka ee mashiinada farsamada, mana rabno LVM martigeliyaha inuu kiciyo mugga ay leeyihiin OS-ga martida.
  • dhammaan aaladaha ku jira VG oo leh magaca kaydinta. Halkan waxaan ku heli doonaa nuqul ka mid ah sawirada mashiinka farsamada.
  • dhamaan aaladaha magacooda ku dhamaado β€œgpv” (mugga jirka martida)

Waxaan awoodnay taageerada DISCARD markii meel bannaan lagu sii deynayo LVM VG. Taxaddar. Tani waxay ka dhigi doontaa tirtirida LV-yada SSD-ga waqti badan qaadata. Tani waxay si gaar ah u khusaysaa SSD RAID 6. Si kastaba ha ahaatee, sida uu qorshuhu yahay, waxaanu isticmaali doonaa bixinta khafiifka ah, markaa tani nagama hor istaagi doonto gabi ahaanba.

Aynu cusboonaysiinno sawirka initramfs:

#update-initramfs -u -k all

Ku rakib oo habee grub:

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

Saxankee ayaa dooranaya?Dhammaan inta sd*. Nidaamku waa inuu awood u leeyahay inuu ka bootiyo SATA drive kasta ama SSD.

Maxay ku dartay os-prober..?Xornimada xad dhaafka ah iyo gacmaha ciyaarta.

Si sax ah uma shaqeyso haddii mid ka mid ah RAID-yada uu ku jiro xaalad hoos u dhacday. Waxay isku daydaa inay ka raadiso OS-ka qaybaha loo isticmaalo mishiinnada farsamada gacanta ee ku shaqeeya qalabkan.

Haddii aad u baahan tahay, waad ka tagi kartaa, laakiin maskaxda ku hay dhammaan kuwa kor ku xusan. Waxaan kugula talinayaa in aad raadiso cuntooyin aad uga takhalusi lahayd gacmaha xun ee internetka.

Sidan ayaanu ku dhamaystirnay rakibiddii hore. Waa waqtigii dib loo bilaabi lahaa OS-ka cusub ee la rakibay. Ha iloobin in aad ka saarto CD/USB-ka tooska ah ee bootable-ka ah.

#exit
#reboot

Dooro mid ka mid ah SATA SSDs sida qalabka boot.

LVM ee SATA SSD

Halkaa marka ay marayso, waxaan horayba u galnay OS-ka cusub, habeynay shabakadda, apt, furnay emulator-ka terminal, oo bilaabay:

#sudo bash

Aan sii wadno.

"Bilow" diyaarinta SATA SSD:

#blkdiscard /dev/md2

Haddii aysan shaqayn, markaas isku day:

#blkdiscard --step 65536 /dev/md2
Ku samee LVM VG SATA SSD:

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

Waa maxay sababta VG kale..?Dhab ahaantii, waxaan horay u haysanay VG oo la magac baxay xidid. Maxaa wax walba loogu dari waayay hal VG?

Haddii ay jiraan dhawr PV-yada VG-ga, markaa si VG-ga si sax ah loogu hawlgeliyo, dhammaan PV-yada waa inay joogaan (online). Marka laga reebo waa LVM RAID, oo aan si ula kac ah u isticmaalin.

Waxaan runtii rabnaa in haddii ay jirto guuldarro (akhri xogta lumis) mid kasta oo ka mid ah RAID 6, nidaamka qalliinka ayaa si caadi ah u kicin doona wuxuuna na siinayaa fursad aan ku xallinno dhibaatada.

Si tan loo sameeyo, heerka koowaad ee abstraction waxaan ka sooci doonaa nooc kasta oo "warbaahinta" jireed VG gaar ah.

Si cilmiyeysan u hadlaayo, noocyada kala duwan ee RAID waxay ka tirsan yihiin "meelo la isku halleyn karo" oo kala duwan. Waa inaadan u abuurin meel kale oo guul darro ah iyaga oo ku dhejinaya hal VG.

Joogitaanka LVM ee heerka "hardware" wuxuu noo ogolaanayaa inaan si aan kala sooc lahayn u gooyo qaybo ka mid ah noocyada kala duwan ee RAID-yada iyadoo la isku darayo siyaabo kala duwan. Tusaale ahaan - orod Isla markaa bcache + LVM khafiif ah, bcache + BTRFS, LVM cache + LVM khafiif ah, qaabayn adag oo ZFS ah oo leh khasnado, ama wax kasta oo isku dhaf ah oo cadaab ah si loo isku dayo oo loo barbardhigo dhammaan.

Marka la eego heerka "hardware", ma isticmaali doono wax kale oo aan ahayn mugga hore ee "qararan" LVM. Marka laga reebo qaanuunkan waxa laga yaabaa inay tahay qaybta kaydinta.

Waxaan u maleynayaa waqtigan, akhristayaasha badan ayaa durba bilaabay inay ka shakiyaan wax ku saabsan caruusada buulka.

LVM ku saabsan SATA HDD

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

VG cusub mar kale..?Waxaan dhab ahaantii rabnaa in haddii shaxanka diskooga ee aan u isticmaali doono kaydinta xogta uu guuldareysto, nidaamkayaga hawlgalka wuxuu sii wadi doonaa inuu si caadi ah u shaqeeyo, iyada oo la ilaalinayo helitaanka xogta aan kaydka ahayn sida caadiga ah. Sidaa darteed, si looga fogaado dhibaatooyinka firfircoonida VG, waxaan abuurnaa VG gaar ah.

Dejinta kaydka LVM

Aan ku abuurno LV NVMe RAID 1 si aan ugu isticmaalno qalab kaydin ahaan.

#lvcreate -L 70871154688B --name cache root

Maxay u yar tahay...?Xaqiiqdu waxay tahay in NVMe SSD-yadayadu ay sidoo kale leeyihiin kayd SLC ah. 4 gigabytes "free" iyo 18 gigabytes oo firfircoon sababtoo ah booska xorta ah ee ku jira 3-bit MLC. Marka kaydkan la dhammeeyo, NVMe SSDs aad uga dhaqso badan maayaan SATA SSD-yada kaydka leh. Dhab ahaantii, sababtan awgeed, macno nooguma fadhido inaan samayno qaybta kaydka LVM oo aad uga weyn laba jeer cabbirka kaydka SLC ee darawalka NVMe. Dariiqyada NVMe ee la isticmaalo, qoraagu wuxuu u arkaa inay macquul tahay in la sameeyo 32-64 gigabytes oo kayd ah.

Cabbirka qaybta la siiyay ayaa loo baahan yahay si loo abaabulo 64 gigabytes oo kayd ah, kaydinta xogta badan, iyo kaydinta xogta badan.

Intaa waxaa dheer, waxaan ogsoonahay in ka dib xidhitaanka nidaamka wasakhda ah, LVM waxay calaamadin doontaa dhammaan khasnadaha inay wasakh yihiin oo ay mar kale isku dhejin doonaan. Waxaa intaa dheer, tan waa lagu soo celin doonaa mar kasta oo lvchange loo isticmaalo qalabkan ilaa nidaamka dib loo bilaabo. Sidaa darteed, waxaan kugula talinayaa inaad isla markiiba dib u abuurto kaydka adoo isticmaalaya qoraalka ku habboon.

Aan ku abuurno LV SATA RAID 6 si aan ugu isticmaalno qalab kaydsan.

#lvcreate -L 3298543271936B --name cache data

Waa maxay sababta kaliya saddex terabytes..?Markaa, haddii loo baahdo, waxaad u isticmaali kartaa SATA SSD RAID 6 baahiyo kale. Baaxadda booska kaydsan ayaa loo kordhin karaa si firfircoon, duullimaad, iyada oo aan la joojin nidaamka. Si tan loo sameeyo, waxaad u baahan tahay inaad si ku-meel-gaar ah u joojiso oo aad dib-u-soo-geliso kaydka, laakiin faa'iidada gaarka ah ee LVM-cache, tusaale ahaan, bcache waa in tan lagu samayn karo duullimaad.

Aynu abuurno VG cusub oo kaydinta

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

Aan ku abuurno LV qalabka kaydsan

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

Halkan waxaan isla markiiba ku qaadnay dhammaan boosaska bilaashka ah ee / dev/data/cache si dhammaan qaybaha kale ee lagama maarmaanka ah loo abuuray isla markiiba / dev/root/cache. Haddii aad wax ku abuurtay meel khaldan, waxaad ku dhaqaajin kartaa adigoo isticmaalaya pvmove.

Aan abuurno oo aan awoodno kaydka:

#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

Waa maxay sababta chunks-ka noocaas ah..?Tijaabooyin wax ku ool ah, qoraagu wuxuu awooday inuu ogaado in natiijada ugu fiican la gaaro haddii cabbirka xajmiga LVM ee kaydka uu ku beegan yahay xajmiga dhumucda khafiifka ah ee LVM. Waxaa intaa dheer, inta yar ee cabbirka, si fiican u qaabaynta u qabata duubista aan tooska ahayn.

64k waa cabbirka ugu yar ee loo ogol yahay LVM dhuuban.

Ka digtoonow in dib loo qoro..!Haa Noocan ah khasnadaha dib u dhigista waxay ku qoraan wada shaqaynta aaladda kaydsan. Tani waxay ka dhigan tahay in haddii kaydku lumo, laga yaabo inaad lumiso xogta qalabka kaydsan. Ka dib, qoraagu wuxuu kuu sheegi doonaa tallaabooyinka, marka lagu daro NVMe RAID 1, ayaa la qaadi karaa si loo magdhabo khatartan.

Noocan khasnado waxaa loo doortay si ula kac ah si loo magdhabo wax qabadka qoraalka randomka ee liita ee RAID 6.

Aan hubino waxa aan helnay:

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

Kaliya [cachedata_corig] waa inuu ku yaal /dev/data/cache. Haddii ay wax khaldan yihiin, markaa isticmaal pvmove.

Waxaad joojin kartaa kaydka haddii loo baahdo hal amar:

#lvconvert -y --uncache cache/cachedata

Tan waxaa lagu sameeyaa on-line. LVM waxay si fudud ula jaanqaadi doontaa kaydka saxanka, ka saari doonta, oo dib u magacaabi doonta cachedata_corig oo ku celin doonta kaydka xogta.

Dejinta LVM khafiif ah

Aynu qiyaas ahaan qiyaasno inta boos ee aan ugu baahanahay xogta dhuuban ee 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"

Wareega ilaa 4 gigabytes: 4294967296B

Laba ku dhufo oo ku dar 4194304B xogta badan ee LVM PV: 8594128896B
Aan ka abuurno qayb gaar ah NVMe RAID 1 si aan u dhigno xogta dhuuban ee LVM iyo nuqulkooda kaydinta dusheeda:

#lvcreate -L 8594128896B --name images root

Maxay..?Halkan su'aashu waxay ka soo bixi kartaa: maxaa yeelay LVM metadata dhuuban si gooni ah u dhig haddii ay wali ku kaydsan tahay NVMe oo ay si dhakhso ah u shaqeyn doonto.

Inkasta oo xawaaraha halkan muhiim yahay, way ka fog tahay sababta ugu weyn. Xaqiiqdu waxay tahay in kaydku yahay barta guuldarada. Wax ayaa ku dhici kara, oo haddii xogta dhuuban ee LVM la kaydiyo, waxay keeni doontaa in wax walba si buuxda u lumaan. Haddii aan la helin xog badan oo dhamaystiran, waxa ay noqon doontaa ku dhawaad ​​aan macquul ahayn in la isku keeno mugga khafiifka ah.

Marka loo raro xogta badan ee aan kaydsanayn, laakiin degdeg ah, mugga, waxaanu dammaanad qaadaynaa badbaadada xogta badan haddii ay dhacdo khasaare khasnado ama musuqmaasuq. Xaaladdan oo kale, dhammaan waxyeelada ay keento lumista kaydka ayaa lagu meelayn doonaa gudaha mugga khafiifka ah, taas oo fududayn doonta nidaamka soo kabashada iyadoo la raacayo amarada baaxadda leh. Iyada oo ay suurtogal tahay, waxyeeladan waxa lagu soo celin doonaa iyada oo la isticmaalayo FS.

Waxaa intaa dheer, haddii sawirka mugga khafiifka ah hore loo qaaday, ka dibna kaydinta si buuxda ayaa loo wada shaqeeyay ugu yaraan hal mar, ka dibna, sababtoo ah naqshadda gudaha ee LVM dhuuban, daacadnimada sawir-qaadista ayaa la dammaanad qaadi doonaa haddii ay dhacdo luminta kaydka. .

Aan abuurno VG cusub oo mas'uul ka noqon doona bixinta khafiifinta:

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

Aan abuurno barkad:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
Sababta -Z yMarka lagu daro waxa qaabkan dhab ahaantii loogu talagalay - si looga hortago xogta hal mashiinnada farsamada ah inay u daadato mishiin kale marka dib loo qaybinayo meel bannaan - eber ayaa sidoo kale loo isticmaalaa si loo kordhiyo xawaaraha qorista random ee blocks ka yar 64k. Qori kasta oo ka yar 64k meel aan hore loo qoondayn oo mugga khafiifka ah waxay noqon doontaa 64K cidhif-ku-habboon ee khasnadda. Tani waxay u oggolaan doontaa in qalliinka lagu sameeyo gebi ahaanba khasnadda, iyada oo laga gudbayo aaladda kaydsan.

Aan u wareejino LV-yada PV-yada u dhigma:

#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

Aan hubino:

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

Aynu abuurno mug khafiif ah oo imtixaannada:

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

Waxaan rakibi doonaa baakado loogu talagalay baaritaannada iyo la socodka:

#apt-get install sysstat fio

Tani waa sida aad u ilaalin karto hab-dhaqanka qaabaynta kaydintayada wakhtiga dhabta ah:

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

Tani waa sida aan u tijaabin karno qaabeyntayada:

#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

Si taxadar leh! Khayraadka!Koodhkani wuxuu socon doonaa 36 imtixaan oo kala duwan, mid walbana wuxuu socon doonaa 4 ilbiriqsi. Kala bar imtixaanada waa duubis Waxaad wax badan ku duubi kartaa NVMe gudaha 4 sekan. Ilaa 3 gigabytes ilbiriqsikii. Marka, imtixaan kasta oo qoraal ah ayaa adiga kaa cuni kara ilaa 216 gigabytes ee kheyraadka SSD.

Akhriska iyo qoraalka isku dhafan?Haa Waxa macno leh in si gooni ah loo wado imtixaannada wax-akhrinta iyo qorista. Waxaa intaa dheer, waxaa macno leh in la hubiyo in dhammaan khasnado la wada siman yahay si qoraal hore loo sameeyay uusan u saameyn akhrinta.

Natiijooyinku aad bay u kala duwanaan doonaan inta lagu jiro bilawga koowaad iyo kuwa ku xiga marka kaydka iyo mugga khafiifka ah ay buuxsamaan, iyo sidoo kale waxay ku xidhan tahay haddii nidaamku ku guulaysto in uu isku xidho khasnadaha la buuxiyay intii lagu jiray bandhiggii u dambeeyay.

Waxyaabo kale, waxaan ku talinayaa in lagu cabbiro xawaaraha mug khafiif ah oo buuxa kaas oo sawir la qaaday. Qoraagu waxa uu fursad u helay in uu u kuurgalo sida qoraallada random-ka ay u dardargeliyaan isla markiiba ka dib markii ay abuureen sawir-qaadistii ugu horreysay, gaar ahaan marka kaydku aanu weli si buuxda u buuxin. Tani waxay ku dhacdaa iyada oo ay sabab u tahay semantics-ku-qorista nuqul-ku-qorista, is-waafajinta kaydka iyo baloogyada mugga khafiifka ah, iyo xaqiiqda ah in qoraal random ah loo diro RAID 6 waxay isu beddeshaa akhrin random ah oo laga soo bilaabo RAID 6 oo ay ku xigto qoraal khasnadda. Qaabeyntayada, akhriska random ee RAID 6 waa ilaa 6 jeer (tirada SATA SSDs ee shaxda) ka dhaqso badan qorista. Sababtoo ah baloogyada CoW waxaa si isdaba joog ah loogu qoondeeyay barkad dhuuban, ka dibna duubista, inta badan, sidoo kale waxay isu beddeshaa taxane.

Labadan astaamoodba waxa loo isticmaali karaa faa'iidadaada.

Cache "isku xidhan" sawir qaade

Si loo yareeyo khatarta luminta xogta haddii ay dhacdo burbur/luminta kaydka, qoraagu wuxuu soo jeedinayaa inuu soo bandhigo dhaqanka beddelka sawir-qaadista si loo dammaanad qaado daacadnimadooda kiiskan.

Marka hore, sababta oo ah metadata mugga khafiifka ah waxay ku dul nooshahay aalad aan la kaydin, xogtu waxay ahaan doontaa mid joogto ah oo khasaaraha suurtagalka ah ayaa lagu go'doomin doonaa baloogyada xogta.

Wareega wareega sawirka sawirka ee soo socda ayaa dammaanad qaadaya hufnaanta xogta ku jirta sawir-qaadista haddii ay dhacdo in khasnado lumo:

  1. Mug kasta oo khafiif ah oo leh magaca , samee sawir sawir leh magaca . cached
  2. Aynu dejinno heerka socdaalka qiime sare oo macquul ah: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. Loop-ka waxaan ku hubineynaa tirada baloogyada wasakhda ah ee ku jira kaydka: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' ilaa aan ka helno eber. Haddii eberku uu maqan yahay muddo aad u dheer, waxa la abuuri karaa iyadoo si ku meel gaadh ah kaydka loogu beddelo hab qoraal ah. Si kastaba ha noqotee, iyada oo la tixgelinayo sifooyinka xawaaraha ee SATA iyo NVMe SSD, iyo sidoo kale kheyraadkooda TBW, waxaad awoodi doontaa inaad si dhakhso ah u qabato wakhtiga adigoon bedelin qaabka kaydka, ama qalabkaagu wuxuu si buuxda u cuni doonaa dhammaan agabkiisa gudaha dhowr maalmood. Sababo la xiriira xaddidnaanta kheyraadka, nidaamku, mabda'a ahaan, ma awoodo in uu ka hooseeyo 100% culeyska wax qorista mar kasta. NVMe SSD-yadayada 100% ka hooseeya culeyska qoraalka ayaa si buuxda u dhameyn doona kheyraadka gudaha 3-4 maalmood. SATA SSDs waxay socon doontaa laba jeer oo keliya inta ay dheer tahay. Sidaa darteed, waxaan u qaadaneynaa in culeyska intiisa badan uu aado wax-akhrinta, waxaanan leenahay waqti gaaban oo dillaaca oo ah waxqabad aad u sarreeya oo ay weheliso culeys yar oo celcelis ahaan qoraal ah.
  4. Isla markii aanu qabanay (ama samaynay) eber, waxaanu dib u magacaabin .cached to .go'day. Kan hore ee .go'ay waa la tirtiray.
  5. Ikhtiyaar ahaan, haddii kaydku 100% buuxo, waxaa dib loo abuuri karaa qoraal, sidaas awgeed waa la nadiifiyaa. Cache badh-madhan, nidaamku si dhakhso leh ayuu u shaqeeyaa marka la qorayo.
  6. Deji xadka socdaalka eber: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata Tani waxay si ku meel gaar ah uga ilaalin doontaa kaydinta in ay la mid noqoto warbaahinta ugu muhiimsan.
  7. Waxaan sugeynaa ilaa inta isbedelo badan ay ku ururaan khasnadda #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' ama saacaduhu wuu dami doonaa.
  8. Mar kale ayaan ku celinaynaa.

Waa maxay sababta ay ugu adag tahay heerka socdaalka...?Shayga ayaa ah in ficil ahaan dhabta ah, duubista "random" dhab ahaantii maahan mid aan kala sooc lahayn. Haddii aan wax u qorno qayb dhan 4 kilobytes oo cabbirkeedu dhan yahay, waxaa jirta suurtogalnimo sare oo ah in labada daqiiqo ee soo socda la sameeyo rikoodh la mid ah ama mid ka mid ah qaybaha deriska ah (+- 32K).

Anagoo dejinaya heerka socdaalka eber, waxaan dib u dhigeynaa qorista isku-duwidda SATA SSD waxaanan isku geyneynaa dhowr isbeddel oo hal 64K ah oo kayd ah. Tani waxay si weyn u badbaadinaysaa kheyraadka SATA SSD.

Aaway koodka..?Nasiib darro, qoraagu wuxuu isku arkaa inuu yahay mid aan ku filneyn horumarinta qoraallada bash sababtoo ah 100% waa is-baray oo ku dhaqma horumarinta "google", sidaas darteed wuxuu aaminsan yahay in code-ka xun ee ka soo baxa gacmihiisa uusan qofna isticmaalin. kale.

Waxaan u maleynayaa in xirfadlayaasha goobtan ay awood u yeelan doonaan inay si madax-bannaan u muujiyaan dhammaan caqli-galnimada kor lagu sharraxay, haddii loo baahdo, iyo, laga yaabee, xitaa si qurux badan u naqshadeeyaan adeeg nidaamsan, sida qoraagu isku dayay inuu sameeyo.

Nidaamka wareeg ee sawirka fudud ee noocan oo kale ah wuxuu noo ogolaanayaa inaan si joogto ah u haysanno hal sawir oo si buuxda ugu wada shaqeeya SATA SSD, laakiin sidoo kale waxay noo ogolaan doontaa, adoo isticmaalaya utility thin_delta, si aan u ogaano blocks la bedelay ka dib abuuritaankiisa, oo sidaas darteed soo dejiso waxyeelada Mugga ugu muhiimsan, oo si weyn u fududeynaya soo kabashada .

TRIM/ku tuur libvirt/KVM

Sababtoo ah Kaydinta xogta waxaa loo isticmaali doonaa KVM socodsiinta libvirt, markaa waxay ahaan lahayd fikrad wanaagsan in la baro VM-yadayada kaliya maaha inay qaataan meel bannaan, laakiin sidoo kale inay xoreeyaan wixii aan hadda loo baahnayn.

Tan waxaa lagu sameeyaa iyadoo lagu dayanayo taageerada TRIM/DISCARD ee saxannada casriga ah. Si tan loo sameeyo, waxaad u baahan tahay inaad u beddesho nooca kontoroolka virtio-scsi oo aad wax ka beddesho 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>

DISCARD-yada noocan oo kale ah ee OS-yada martida waxaa si sax ah u habeeya LVM, baloogyadana si sax ah ayaa loogu sii daayay kaydka iyo barkadda dhuuban labadaba. Xaaladeena, tani waxay inta badan ku dhacdaa hab dib u dhac ah, marka la tirtirayo sawirka soo socda.

Kaabta BTRFS

Isticmaal qoraallo diyaarsan oo leh xad dhaaf ah taxaddar iyo khatartiisa. Qoraagu wuxuu u qoray xeerkan laftiisa oo si gaar ah naftiisa u qoray. Waxaan hubaa in isticmaaleyaal badan oo khibrad u leh Linux ay leeyihiin qalab isku mid ah, mana jirto baahi loo qabo in la koobiyeeyo qof kale.

Aan ku abuurno mugga qalabka kaydka:

#lvcreate -L 256G --name backup backup

Aan u qaabaynno BTRFS:

#mkfs.btrfs /dev/backup/backup

Aynu abuurno dhibcooyinka buurta oo aynu dul saarno qaybaha hoose ee nidaamka faylka:

#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

Aan abuurno hagayaal loogu talagalay kaydinta:

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

Aynu abuurno hagaha qoraallada kaydinta:

#mkdir /root/btrfs-backup

Aan koobiyeeyo qoraalka:

Cod bash badan oo cabsi leh. Isticmaal khatartaada Ha u qorin warqado xanaaq badan qoraaga...#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

Maxay qabtaa xitaa..?Ka kooban amarro fudud oo loogu talagalay abuurista sawir-qaadista BTRFS oo lagu koobiyeeyo FS kale iyadoo la adeegsanayo BTRFS diri/qaadid.

Daahfurka ugu horreeya wuxuu noqon karaa mid dheer, sababtoo ah ... Bilowga, dhammaan xogta waa la koobiyli doonaa Bilaabidda dheeraadka ah waxay noqon doontaa mid aad u dhakhso badan, sababtoo ah ... Kaliya isbeddellada ayaa la koobiyli doonaa

Qoraal kale oo aan ku dhejin doono cron:

Qaar kale oo bash code ah#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

Maxay qabtaa..?Wuxuu abuuraa oo isku-dubbaridaa sawir-qaadista korodhka ee mugga BTRFS ee liiska kaydinta FS. Taas ka dib, waxay tirtirtaa dhammaan sawirada la sameeyay 60 maalmood ka hor. Daah-furka ka dib, sawir-qaadyo taariikhaysan oo mugga liiska ku qoran ayaa ka soo bixi doona /backup/btrfs/back/remote/directories.

Aynu siinno xuquuqaha fulinta koodka:

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

Aan hubino oo aan gelino 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 kaabayaal khafiif ah

Aan ku abuurno barkad dhuuban aaladda kaydinta:

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

Aynu rakibno ddrescue, sababtoo ah... scripts ayaa isticmaali doona qalabkan:

#apt-get install gddrescue

Aan u abuurno hagaha qoraallada:

#mkdir /root/lvm-thin-backup

Aan koobiyeeyo qoraalada:

Bash badan oo gudaha ah...#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

Maxay qabtaa...?Waxay ka kooban tahay amarro kala duwan oo lagu maareynayo sawir-qaadista khafiifka ah iyo is-waafajinta farqiga u dhexeeya laba sawir oo khafiif ah oo laga helay thin_delta qalab kale oo xannibaya iyadoo la adeegsanayo ddrescue iyo blkdiscard.

Qoraal kale oo aan ku dhejin doono cron:

In yar oo bash ah#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

Maxay qabtaa...?Wuxuu adeegsadaa qoraalkii hore si uu u abuuro oo uu isu waafajiyo kaydinta mugga khafiifka ah ee liiska ku jira. Qoraalku wuxuu ka tagi doonaa sawir-qaadyo aan firfircoonayn oo mugga liiska ku qoran, kuwaas oo loo baahan yahay si loola socdo isbeddellada tan iyo isku-dubaridkii u dambeeyay.

Qoraalkan waa in la tafatiray, iyadoo lagu qeexayo liiska mugga khafiifka ah ee nuqullada kaydinta loo samaynayo. Magacyada la bixiyay waxaa loogu talagalay ujeeddooyin tusaaleyn oo keliya. Haddii aad rabto, waxaad qori kartaa qoraal isku-dubbari doona dhammaan cadadka.

Aan siino xuquuqda:

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

Aan hubino oo aan gelino 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

Daahfurka ugu horreeya wuxuu noqon doonaa mid dheer, sababtoo ah ... mugga khafiifka ah ayaa si buuxda isula jaanqaadi doona iyadoo la koobiyeynayo dhammaan meelaha la isticmaalay. Thanks to LVM metadata khafiif ah, waxaan ognahay blocks dhab ahaan la isticmaalo, marka kaliya dhab ahaan loo isticmaalo blocks mugga dhuuban waa la koobiyn doonaa.

Socodyada soo socda ayaa koobi doona xogta si kordheysa iyada oo ay uga mahadcelinayaan beddelka la socodka xogta badan ee LVM.

Aan aragno waxa dhacay:

#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

Maxay tani ka qabtaa caruusadaha buulkiisa?

Waxay u badan tahay, marka la eego in LVM LV mugga macquulka ah ay u noqon karaan LVM PV VG-yada kale. LVM waxay noqon kartaa mid soo noqnoqota, sida caruusadaha buulkooda leh. Tani waxay siinaysaa LVM dabacsanaan xad dhaaf ah.

PS

Maqaalka soo socda, waxaan isku dayi doonaa inaan isticmaalno dhowr habab kaydinta mobilada / KVM oo aasaas u ah abuurista kaydinta juqraafi qaybsan / kutlada vm oo leh dib-u-dhac ku saabsan dhowr qaaradood iyadoo la adeegsanayo miisaska guriga, internetka guriga iyo shabakadaha P2P.

Source: www.habr.com

Add a comment