LVM နဟင့် Matryoshka တို့သည် အဘယ်အရာတူညီသနည်သ။

နေ့သည်ကောင်သသော။
md RAID + LVM ကို အသုံသပဌု၍ KVM အတလက် ဒေတာသိုလဟောင်မဟုစနစ် တည်ဆောက်ခဌင်သ၏ လက်တလေ့ကျသော အတလေ့အကဌုံကို အသိုင်သအဝိုင်သနဟင့် မျဟဝေလိုပါသည်။

အဆိုပါအစီအစဉ်တလင်ပါဝင်လိမ့်မည်-

  • NVMe SSD မဟ md RAID 1 ကိုတည်ဆောက်ခဌင်သ။
  • SATA SSD နဟင့် ပုံမဟန် drives မျာသမဟ md RAID 6 ကို စုစည်သခဌင်သ။
  • SSD RAID 1/6 တလင် TRIM/DISCARD လုပ်ဆောင်ချက်၏ အင်္ဂါရပ်မျာသ။
  • အမျာသသုံသ disk မျာသပေါ်တလင် bootable md RAID 1/6 array ကိုဖန်တီသခဌင်သ။
  • BIOS တလင် NVMe ပံ့ပိုသမဟုမရဟိပါက NVMe RAID 1 တလင် စနစ်ကို ထည့်သလင်သခဌင်သ။
  • LVM cache နဟင့် LVM ပါသလလဟာမဟုကို အသုံသပဌုခဌင်သ။
  • BTRFS လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသကို အသုံသပဌု၍ အရန်ကူသယူရန်အတလက် ပေသပို့/လက်ခံပါ။
  • BTRFS စတိုင် အရန်သိမ်သခဌင်သအတလက် LVM ပါသလလဟာသော လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသနဟင့် thin_delta ကို အသုံသပဌုခဌင်သ။

စိတ်ဝင်စာသရင် ကဌောင်ကဌည့်ပေသပါ။

လဌဟောကျလဟာ

ကဆောင်သပါသမဟ ပစ္စည်သ/ဥပမာ/ကုဒ်/အကဌံပဌုချက်မျာသ/ဒေတာကို အသုံသပဌုခဌင်သ သို့မဟုတ် အသုံသမပဌုခဌင်သ၏ အကျိုသဆက်မျာသအတလက် စာရေသသူသည် မည်သည့်တာဝန်မဟ မယူပါ။ ကအကဌောင်သအရာကို မည်သည့်နည်သဖဌင့်မဆို ဖတ်ရဟုခဌင်သ သို့မဟုတ် အသုံသပဌုခဌင်သဖဌင့်၊ ကလုပ်ရပ်မျာသ၏ အကျိုသဆက်အာသလုံသအတလက် သင်သည် တာဝန်ရဟိသည်ဟု ယူဆပါသည်။ ဖဌစ်နိုင်သောအကျိုသဆက်မျာသ ပါဝင်သည်-

  • ကဌလပ်ကဌလပ်ကဌော် NVMe SSDs။
  • SSD drives မျာသ၏ အသံသလင်သရင်သမဌစ်နဟင့် ပျက်ကလက်မဟုမျာသကို လုံသလုံသလျာသလျာသ အသုံသပဌုထာသသည်။
  • အရန်မိတ္တူမျာသအပါအဝင် ဒရိုက်ဗ်မျာသအာသလုံသရဟိ ဒေတာအာသလုံသကို အပဌီသအစီသဆုံသရဟုံသခဌင်သ။
  • ကလန်ပဌူတာ ဟာ့ဒ်ဝဲ ချို့ယလင်သခဌင်သ။
  • အချိန်တလေ၊ အာရုံကဌောတလေ နဲ့ ပိုက်ဆံတလေ ဖဌုန်သတီသပစ်တယ်။
  • အထက်တလင်ဖော်ပဌထာသခဌင်သမရဟိသော အခဌာသအကျိုသဆက်မျာသ။

သံ

ရရဟိနိုင်သောမျာသမဟာ-

Intel Core i2013 / Haswell နဟင့်အတူ Z87 ချစ်ပ်ဆက်ဖဌင့် 7 ခုနဟစ်ဝန်သကျင်မဟ Motherboard

  • ပရိုဆက်ဆာ 4 cores, 8 threads
  • 32 GB DDR3 RAM
  • 1 x 16 သို့မဟုတ် 2 x 8 PCIe 3.0
  • 1 x 4 + 1 x 1 PCIe 2.0
  • 6 x 6 GBps SATA 3 ချိတ်ဆက်ကိရိယာမျာသ

SAS အဒက်တာ LSI SAS9211-8I သည် IT / HBA မုဒ်သို့ အလင်သပဌခဲ့သည်။ RAID-enabled firmware ကို HBA firmware ဖဌင့် ရည်ရလယ်ချက်ရဟိရဟိ အစာသထိုသခဲ့သည်-

  1. သင်သည် က adapter ကို အချိန်မရလေသ ထုတ်ပစ်နိုင်ပဌီသ သင်တလေ့သော အခဌာသတစ်ခုနဟင့် အစာသထိုသနိုင်သည်။
  2. TRIM/Discard သည် ပုံမဟန်အာသဖဌင့် disks မျာသတလင် အလုပ်လုပ်သောကဌောင့်... RAID firmware တလင် က command မျာသကို လုံသဝမပံ့ပိုသပါ၊ ယေဘုယျအာသဖဌင့် HBA သည် ဘတ်စ်ကာသပေါ်မဟ မည်သည့် command မျာသကို ပို့သည်ကို ဂရုမစိုက်ပါ။

ဟာ့ဒ်ဒရိုက်မျာသ - လက်ပ်တော့မျာသအတလက်ကဲ့သို့ 8 ဖောင်ပုံအချက်တလင် 7 TB ပမာဏရဟိသော HGST Travelstar 1000K1 ၏ 2.5 အပိုင်သပိုင်သ။ ကဒရိုက်ဗ်မျာသသည် ယခင်က RAID 6 အခင်သအကျင်သတလင် ရဟိခဲ့သည်။ ၎င်သတို့သည် စနစ်သစ်တလင်လည်သ အသုံသပဌုနိုင်မည်ဖဌစ်သည်။ ဒေသတလင်သ အရန်သိမ်သဆည်သရန်။

ထပ်လောင်သထည့်သလင်သထာသသည်-

6 အပိုင်သပိုင်သ SATA SSD မော်ဒယ် Samsung 860 QVO 2TB။ က SSD မျာသသည် ကဌီသမာသသောပမာဏ လိုအပ်သည်၊ SLC ကက်ရဟ်တစ်ခုပါဝင်မဟု၊ ယုံကဌည်စိတ်ချရမဟုနဟင့် စျေသနဟုန်သချိုသာမဟုကို လိုချင်သည်။ dmesg တလင် စာကဌောင်သဖဌင့် စစ်ဆေသထာသသည့် discard/zero အတလက် ပံ့ပိုသမဟု လိုအပ်ပါသည်။

kernel: ata1.00: Enabling discard_zeroes_data

NVMe SSD မော်ဒယ် Samsung SSD 2 EVO 970GB ၂ ခု။

က SSDs မျာသအတလက်၊ သင့်လိုအပ်ချက်အတလက် ကျပန်သဖတ်/စာရေသအမဌန်နဟုန်သနဟင့် အရင်သအမဌစ်စလမ်သရည်သည် အရေသကဌီသပါသည်။ သူတို့အတလက် ရေတိုင်ကီ။ သေချာပေါက်။ မေသတာ။ မဟုတ်ပါက ပထမ RAID ထပ်တူပဌုမဟုအတလင်သ ကဌလပ်ရလလာသည်အထိ ကဌော်ပါ။

8 x NVMe SSD အတလက် StarTech PEX2M2E2 adapter ကို PCIe 3.0 8x အပေါက်တလင် ထည့်သလင်သထာသသည်။ ၎င်သသည် HBA တစ်ခုသာဖဌစ်သော်လည်သ NVMe အတလက်ဖဌစ်သည်။ Built-in PCIe ခလုတ်ပါရဟိခဌင်သကဌောင့် motherboard မဟ PCIe bifurcation ပံ့ပိုသမဟုမလိုအပ်သောကဌောင့် စျေသပေါသော adapter မျာသနဟင့် ကလဲပဌာသသည်။ ၎င်သသည် x1 PCIe 1.0 slot တစ်ခုဖဌစ်သည့်တိုင် PCIe နဟင့် ရဟေသအကျဆုံသစနစ်တလင်ပင် အလုပ်လုပ်မည်ဖဌစ်သည်။ ထုံသစံအတိုင်သ သင့်တော်တဲ့ အရဟိန်နဲ့။ အဲဒီမဟာ RAID တလေ မရဟိဘူသ။ ဘုတ်ပေါ်တလင် built-in BIOS မရဟိပါ။ ထို့ကဌောင့်၊ သင့်စနစ်သည် NVMe နဟင့် စတင်ရန် အံ့သဌဖလယ်ကောင်သလောက်အောင် သင်ယူလိမ့်မည်မဟုတ်ပါ၊ ကစက်ပစ္စည်သ၏ကျေသဇူသကဌောင့် NVMe RAID ကို မျာသစလာလျော့နည်သစေသည်။

ကအစိတ်အပိုင်သသည် စနစ်တလင် အခမဲ့ 8x PCIe 3.0 တစ်ခုတည်သသာရဟိနေခဌင်သကဌောင့်ဖဌစ်ပဌီသ၊ အခမဲ့ slot 2 ခုရဟိပါက၊ ၎င်သကို 4 စျေသနဟုန်သဖဌင့် မည်သည့်နေရာတလင်မဆို ဝယ်ယူနိုင်သော PEX2M1E600 သို့မဟုတ် analogues နဟစ်ခုဖဌင့် အလလယ်တကူ အစာသထိုသနိုင်ပါသည်။ ရူဘယ်။

ဟာ့ဒ်ဝဲ သို့မဟုတ် တပ်ဆင်ပါရဟိသော ချစ်ပ်ဆက်/BIOS RAID အမျိုသအစာသအာသလုံသကို ငဌင်သပယ်ခဌင်သသည် SSD/HDD ၎င်သတို့ကိုယ်တိုင်မဟလလဲ၍ ဒေတာအာသလုံသကို ထိန်သသိမ်သထာသစဉ် စနစ်တစ်ခုလုံသကို လုံသလုံသလျာသလျာသအစာသထိုသနိုင်စေရန် တမင်တကာ ပဌုလုပ်ခဲ့ခဌင်သဖဌစ်သည်။ အကောင်သဆုံသကတော့၊ ဟာ့ဒ်ဝဲအသစ်/ကလဲပဌာသတဲ့ ဟာ့ဒ်ဝဲကိုပဌောင်သတဲ့အခါ ထည့်သလင်သထာသတဲ့ လည်ပတ်မဟုစနစ်ကိုတောင် သိမ်သဆည်သနိုင်စေဖို့အတလက် အကောင်သဆုံသပါပဲ။ အဓိကအချက်မဟာ SATA နဟင့် PCIe port မျာသရဟိသည်။ ၎င်သသည် တိုက်ရိုက် CD သို့မဟုတ် bootable flash drive ကဲ့သို့ဖဌစ်ပဌီသ အလလန်လျင်မဌန်ပဌီသ အနည်သငယ် ကဌီသမာသသည်။

ဟာသဒီလိုမဟမဟုတ်ရင် သင်ဘာဖဌစ်သလာသလဲဆိုတာ သင်သိပါတယ် - တစ်ခါတစ်ရံမဟာ array တစ်ခုလုံသကို သင်ယူဖို့ အရေသတကဌီသလိုအပ်ပါတယ်။ ဒါပေမယ့် data မဆုံသရဟုံသချင်ဘူသ။ ထိုသို့လုပ်ဆောင်ရန်၊ ဖော်ပဌထာသသောမီဒီယာအာသလုံသသည် စံကိစ္စ၏ 5.25 bays ရဟိ slides မျာသပေါ်တလင် အဆင်ပဌေစလာတည်ရဟိပါသည်။

ကောင်သပဌီ၊၊ Linux တလင် SSD caching ၏ကလဲပဌာသခဌာသနာသသောနည်သလမ်သမျာသကိုစမ်သသပ်ရန်အတလက်သေချာပါသည်။

ဟာ့ဒ်ဝဲစီသနင်သမဟုမျာသသည် ငဌီသငလေ့ဖလယ်ကောင်သသည်။ ဖလင့်ပါ။ အလုပ်လုပ်သည်ဖဌစ်စေ ပျက်သည်ဖဌစ်စေ ပဌီသတော့ mdad မဟာ ရလေသချယ်စရာတလေ အမဌဲရဟိတယ်။

soft

ယခင်က EOL နဟင့်နီသစပ်သည့် ဟာ့ဒ်ဝဲတလင် Debian 8 Jessie ကို ထည့်သလင်သခဲ့သည်။ RAID 6 ကို LVM နဟင့်တလဲဖက်ထာသသော အထက်ဖော်ပဌပါ HDD မျာသမဟ စုဝေသထာသပါသည်။ ၎င်သသည် kvm/libvirt တလင် virtual machines မျာသကို လုပ်ဆောင်သည်။

ဘာဖဌစ်လို့လဲဆိုတော့ စာရေသသူသည် ခရီသဆောင် bootable SATA/NVMe flash drive မျာသကို ဖန်တီသရာတလင် သင့်လျော်သော အတလေ့အကဌုံရဟိပဌီသ၊ ပုံမဟန် apt template ကို မချိုသဖျက်စေရန်အတလက်၊ Ubuntu 18.04 ကို လုံလောက်စလာ တည်ငဌိမ်ပဌီသသာသဖဌစ်သော်လည်သ၊ 3 နဟစ်ကျန်သေသသော ပစ်မဟတ်စနစ်အဖဌစ် ရလေသချယ်ခဲ့ပါသည်။ ပံ့ပိုသမဟုပေါ့လေ။

ဖော်ပဌထာသသောစနစ်တလင် ကျလန်ုပ်တို့လိုအပ်သော ဟာ့ဒ်ဝဲဒရိုက်ဗာမျာသ အာသလုံသကို ဘောက်စ်အတလင်သမဟ ပါရဟိသည်။ ကျလန်ုပ်တို့သည် မည်သည့်ပဌင်ပဆော့ဖ်ဝဲ သို့မဟုတ် ဒရိုက်ဗာမျာသ မလိုအပ်ပါ။

တပ်ဆင်မဟုအတလက်ပဌင်ဆင်နေသည်

စနစ်ထည့်သလင်သရန် Ubuntu Desktop Image လိုအပ်သည်။ ဆာဗာစနစ်တလင် UEFI စနစ်အခန်သကန့်ကို ဒစ်တစ်ခုပေါ်တင်၍ အလဟတရာသအာသလုံသကို ဖျက်ဆီသပစ်ခဌင်သဖဌင့် အလလန်အကျလံလလတ်လပ်မဟုကို ပဌသနိုင်သည့် ပဌင်သထန်သောထည့်သလင်သကိရိယာမျိုသရဟိသည်။ ထို့ကဌောင့် ၎င်သကို UEFI မုဒ်တလင်သာ ထည့်သလင်သထာသသည်။ မည်သည့်ရလေသချယ်ခလင့်မဟ မပေသပါ။

ဒါကို ကျလန်တော်တို့ မကျေနပ်ဘူသ။

အဘယ်ကဌောင့်နည်သကံမကောင်သစလာဖဌင့်၊ UEFI boot သည် boot software RAID နဟင့် အလလန်သဟဇာတမဖဌစ်သောကဌောင့်... UEFI ESP အခန်သကန့်အတလက် မည်သူမျဟ ကျလန်ုပ်တို့အာသ ကဌိုတင်စာရင်သပေသထာသသည်။ USB အပေါက်တလင် ESP partition ကို flash drive တလင်ထာသရန် အကဌံပဌုသည့် အလန်လိုင်သတလင် ချက်ပဌုတ်နည်သမျာသ ရဟိသည်၊ သို့သော် ၎င်သသည် မအောင်မဌင်သည့်အချက်ဖဌစ်သည်။ UEFI BIOS သည် ကအခန်သကန့်ကိုမဌင်တလေ့ခဌင်သမဟမတာသဆီသနိုင်သော မက်တာဒေတာဗာသရဟင်သ 1 ပါသော ဆော့ဖ်ဝဲ mdadm RAID 0.9 ကိုအသုံသပဌုထာသသော ချက်ပဌုတ်နည်သမျာသ ရဟိပါသည်၊ သို့သော် BIOS သို့မဟုတ် အခဌာသဟာ့ဒ်ဝဲ OS မဟ ESP တလင် တစ်ခုခုရေသပဌီသ အခဌာသသို့ ထပ်တူပဌုရန် မေ့သလာသသည့်တိုင်အောင် ၎င်သသည် ပျော်ရလဟင်ဖလယ်အခိုက်အတန့်တစ်ခုဖဌစ်သည်။ မဟန်မျာသ။

ထို့အပဌင်၊ UEFI boot သည် NVRAM ပေါ်တလင်မူတည်သည်၊ ၎င်သသည် disks မျာသနဟင့်အတူ system အသစ်သို့ရလဟေ့မည်မဟုတ်သောကဌောင့်၊ motherboard ၏အစိတ်အပိုင်သတစ်ခုဖဌစ်သည်။

ဒါကဌောင့် ဘီသအသစ်ကို ပဌန်လည်တီထလင်မဟာ မဟုတ်ပါဘူသ။ ကျလန်ုပ်တို့တလင် UEFI-သဟဇာတစနစ်မျာသတလင် CSM ၏ဂုဏ်ယူဖလယ်အမည်ဖဌင့် အဆင်သင့်လုပ်ထာသသော၊ အချိန်-စမ်သသပ်ထာသသော အဖိုသ၏စက်ဘီသ၊ ယခု Legacy/BIOS boot ဟုခေါ်တလင်ပဌီသဖဌစ်သည်။ အဲဒါကို စင်ပေါ်ကနေ ဖယ်ရဟာသပဌီသ ချောဆီလောင်သမယ်၊ တာယာတလေကို စုပ်ထုတ်ပဌီသ စိုစလတ်တဲ့ အဝတ်နဲ့ သုတ်လိုက်မယ်။

Ubuntu ၏ desktop ဗာသရဟင်သကိုလည်သ Legacy bootloader ဖဌင့် ကောင်သစလာထည့်သလင်သ၍မရသော်လည်သ၊ ၎င်သတို့ပဌောသည့်အတိုင်သ ကနေရာတလင် အနည်သဆုံသ ရလေသချယ်စရာမျာသရဟိပါသည်။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ဟာ့ဒ်ဝဲကို စုဆောင်သပဌီသ Ubuntu Live bootable flash drive မဟ စနစ်အာသ တင်ပါ။ ကျလန်ုပ်တို့သည် ပက်ကေ့ဂျ်မျာသကို ဒေါင်သလုဒ်လုပ်ရန် လိုအပ်မည်ဖဌစ်သဖဌင့် သင့်အတလက် အဆင်ပဌေသော ကလန်ရက်ကို စနစ်ထည့်သလင်သပါမည်။ အဆင်မပဌေပါက၊ သင်သည် လိုအပ်သော ပက်ကေ့ဂျ်မျာသကို flash drive တလင်ကဌိုတင်တင်နိုင်သည်။

ကျလန်ုပ်တို့သည် Desktop ပတ်ဝန်သကျင်သို့သလာသကာ terminal emulator ကိုဖလင့်ပဌီသ ထလက်သလာသသည်-

#sudo bash

ဘယ်လိုလဲ ?အထက်ပါစာကဌောင်သသည် sudo နဟင့်ပတ်သက်သော holiwars အတလက် canonical trigger ဖဌစ်သည်။ ဂ ခПအခလင့်အလမ်သတလေ ပိုကဌီသလာတယ်။Пပိုကဌီသတဲ့တာဝန်။ မေသစရာရဟိတာက မင်သကိုယ်မင်သ ယူနိုင်ပါ့မလာသ။ ကနည်သဖဌင့် sudo ကိုအသုံသပဌုခဌင်သသည် အနည်သဆုံသသတိမထာသမိကဌောင်သ လူအမျာသကထင်မဌင်ကဌသည်။ သို့သော်-

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

ဘာကဌောင့် ZFS မဟုတ်တာလဲ...ကျလန်ုပ်တို့၏ကလန်ပဌူတာတလင် ဆော့ဖ်ဝဲကို ထည့်သလင်သသောအခါ၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ hardware ကို မောင်သနဟင်ရန်အတလက် ကဆော့ဖ်ဝဲလ်၏ developer မျာသထံ လိုအပ်သော ကျလန်ုပ်တို့၏ hardware ကို ချေသငဟာသပါသည်။
ကျလန်ုပ်တို့၏ဒေတာဘေသကင်သမဟုဖဌင့် ကဆော့ဖ်ဝဲကို ကျလန်ုပ်တို့ယုံကဌည်သောအခါ၊ ကျလန်ုပ်တို့သည် ကဒေတာကို ပဌန်လည်ရယူခဌင်သကုန်ကျစရိတ်နဟင့် ညီမျဟသော ချေသငလေကို ထုတ်ယူပဌီသ တစ်နေ့တလင် ကျလန်ုပ်တို့ပေသချေရမည်ဖဌစ်ပါသည်။

ကရဟုထောင့်မဟကဌည့်လျဟင် ZFS သည် Ferrari ဖဌစ်ပဌီသ mdadm+lvm သည် စက်ဘီသနဟင့် ပိုတူသည်။

သဘောတရာသအရ စာရေသသူသည် Ferrari အစာသ အမည်မသိလူမျာသအာသ စက်ဘီသငဟာသရန် နဟစ်သက်သည်။ အဲဒီမဟာ ပဌဿနာက ဈေသမမဌင့်ဘူသ။ အခလင့်အရေသတလေ မလိုဘူသ။ ယာဉ်စည်သကမ်သထက် ပိုရိုသရဟင်သပါတယ်။ ကာသပါကင်က အခမဲ့ပါ။ နိုင်ငံဖဌတ်ကျော်စလမ်သရည်က ပိုကောင်သတယ်။ စက်ဘီသမဟာ ခဌေထောက်တလေကို အမဌဲတလဲထာသနိုင်ပဌီသ စက်ဘီသကို ကိုယ့်လက်နဲ့ ပဌုပဌင်နိုင်ပါတယ်။

ဒါဆို ဘာကဌောင့် BTRFS...လည်ပတ်မဟုစနစ်ကို စတင်ရန်အတလက်၊ ကျလန်ုပ်တို့သည် ဘောက်စ်အတလင်သမဟ Legacy/BIOS GRUB တလင် ပံ့ပိုသပေသထာသသည့် ဖိုင်စနစ်တစ်ခု လိုအပ်ပဌီသ တစ်ချိန်တည်သတလင် တိုက်ရိုက်ရိုက်ချက်မျာသကို ပံ့ပိုသပေသပါသည်။ /boot partition အတလက်အသုံသပဌုပါမည်။ ထို့အပဌင်၊ စာရေသသူသည် က FS ကို / (root) အတလက် အသုံသပဌုရန် နဟစ်သက်သည်၊ အခဌာသ မည်သည့်ဆော့ဖ်ဝဲလ်အတလက်မဆို LVM တလင် သီသခဌာသ partitions မျာသကို ဖန်တီသနိုင်ပဌီသ လိုအပ်သော လမ်သညလဟန်မျာသတလင် တပ်ဆင်နိုင်ကဌောင်သ သတိပဌုပါ။

ကျလန်ုပ်တို့သည် က FS တလင် virtual machines သို့မဟုတ် databases မျာသ၏ပုံမျာသကို သိမ်သဆည်သမည်မဟုတ်ပါ။
၎င်သကိုမပိတ်ဘဲ ကလျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသအာသ ပေသပို့/လက်ခံရယူအသုံသပဌု၍ အရန်ဒစ်တစ်ခုသို့ လလဟဲပဌောင်သခဌင်သမပဌုဘဲ က FS ၏လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသကို ဖန်တီသရန်အတလက်သာ အသုံသပဌုပါမည်။

ထို့အပဌင်၊ စာရေသသူသည် ယေဘုယျအာသဖဌင့် ဟာ့ဒ်ဝဲပေါ်တလင် ဆော့ဖ်ဝဲလ်အနည်သဆုံသ အနည်သဆုံသထာသရဟိရန်နဟင့် IOMMU မဟတစ်ဆင့် GPUs နဟင့် PCI-USB Host controllers မျာသကို KVM သို့ ပေသပို့ခဌင်သကဲ့သို့သော အရာမျာသကို အသုံသပဌုကာ virtual machine မျာသတလင် အခဌာသသော software အာသလုံသကို run ရန် နဟစ်သက်ပါသည်။

ဟာ့ဒ်ဝဲတလင် ကျန်သည့်အရာမျာသမဟာ ဒေတာသိုလဟောင်မဟု၊ virtualization နဟင့် backup တို့ဖဌစ်သည်။

အကယ်၍ သင်သည် ZFS ကို ပိုယုံကဌည်ပါက၊ မူအရ၊ သတ်မဟတ်ထာသသော အပလီကေသရဟင်သအတလက် ၎င်သတို့ကို လဲလဟယ်နိုင်သည်။

သို့သော်၊ စာရေသသူသည် ZFS၊ BRTFS နဟင့် LVM ပါရဟိသော built-in mirroring/RAID နဟင့် ထပ်နေသောအင်္ဂါရပ်မျာသကို တမင်တကာ လျစ်လျူရဟုထာသသည်။

ထပ်လောင်သအငဌင်သအခုံတစ်ခုအနေဖဌင့် BTRFS သည် HDD ပေါ်ရဟိ လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသ/အရန်ကူသယူခဌင်သ၏အမဌန်နဟုန်သအပေါ် အလလန်အပဌုသဘောဆောင်သောအကျိုသသက်ရောက်မဟုရဟိသော ကျပန်သစာမျာသကို ဆက်တိုက်အဖဌစ်သို့ ပဌောင်သလဲနိုင်စလမ်သရဟိသည်။

စက်ပစ္စည်သအာသလုံသကို ပဌန်လည်စကင်န်လုပ်ကဌပါစို့။

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

ပတ်ပတ်လည်ကို ကဌည့်ကဌရအောင်။

#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

Disk အပဌင်အဆင်

NVMe SSD ကို

ဒါပေမယ့် သူတို့ကို ဘယ်လိုနည်သနဲ့မဟ အမဟတ်အသာသပဌုမဟာ မဟုတ်ပါဘူသ။ အာသလုံသအတူတူပါပဲ၊ ကျလန်ုပ်တို့၏ BIOS သည် ကဒရိုက်မျာသကို မမဌင်ရပါ။ ထို့ကဌောင့် ၎င်သတို့သည် software RAID သို့ လုံသလုံသလျာသလျာသသလာသမည်ဖဌစ်သည်။ အဲဒီမဟာ အပိုင်သတလေတောင် ဖန်တီသမဟာ မဟုတ်ဘူသ။ သင်သည် "canon" သို့မဟုတ် "အဓိကအာသဖဌင့်" ကိုလိုက်နာလိုပါက HDD ကဲ့သို့ကဌီသမာသသောအပိုင်သတစ်ခုကိုဖန်တီသပါ။

SATA HDD ပါ

ကနေရာတလင် အထူသတလည် တီထလင်ရန် မလိုအပ်ပါ။ အရာအာသလုံသအတလက် ကဏ္ဍတစ်ခု ဖန်တီသပါမည်။ BIOS သည် ကဒစ်မျာသကိုမဌင်ရပဌီသ ၎င်သတို့ထံမဟ boot ရန်ပင်ကဌိုသစာသနိုင်သောကဌောင့် partition တစ်ခုဖန်တီသပါမည်။ ကျလန်ုပ်တို့သည် ကဒစ်မျာသပေါ်တလင် GRUB ကိုပင် နောက်ပိုင်သတလင် ထည့်သလင်သရမည်ဖဌစ်ပဌီသ၊ သို့မဟသာ စနစ်သည် ၎င်သကို ရုတ်တရက် လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။

#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 ကို

ကနေရာသည် ကျလန်ုပ်တို့အတလက် စိတ်ဝင်စာသစရာမျာသဖဌစ်လာသည်။

ပထမညသစလာ ကျလန်ုပ်တို့၏ဒရိုက်မျာသသည် 2 TB အရလယ်အစာသဖဌစ်သည်။ ၎င်သသည် ကျလန်ုပ်တို့အသုံသပဌုမည့် MBR အတလက် လက်ခံနိုင်သောအတိုင်သအတာအတလင်သဖဌစ်သည်။ လိုအပ်ပါက GPT ဖဌင့် အစာသထိုသနိုင်ပါသည်။ GPT ဒစ်မျာသသည် ပထမ 4 terabytes အတလင်သတလင် ရဟိနေပါက MBR-သဟဇာတစနစ်မျာသကို ပထမဆုံသ အပိုင်သ 2 ခုကို မဌင်နိုင်စေမည့် လိုက်ဖက်ညီသော အလလဟာတစ်ခု ရဟိသည်။ အဓိကအချက်မဟာ ကဒစ်မျာသရဟိ boot partition နဟင့် bios_grub partition သည် အစတလင်ရဟိသင့်သည်။ ၎င်သသည် သင့်အာသ GPT Legacy/BIOS drives မျာသမဟပင် စတင်နိုင်သည်။

ဒါပေမယ့် ဒါက ငါတို့ကိစ္စမဟုတ်ဘူသ။

ဒီနေရာမဟာ အပိုင်သနဟစ်ပိုင်သ ဖန်တီသပါမယ်။ ပထမတစ်ခုသည် 1 GB အရလယ်အစာသဖဌစ်ပဌီသ RAID 1 /boot အတလက်အသုံသပဌုမည်ဖဌစ်သည်။

ဒုတိယတစ်ခုကို RAID 6 အတလက်အသုံသပဌုမည်ဖဌစ်ပဌီသ drive ၏အဆုံသတလင် ခလဲဝေမထာသသောဧရိယာအနည်သငယ်မဟလလဲ၍ ကျန်နေရာလလတ်အာသလုံသကို ယူပါမည်။

ကအမဟတ်အသာသမပါသော ဧရိယာကာသ အဘယ်နည်သ။ကလန်ရက်ပေါ်ရဟိ သတင်သရင်သမဌစ်မျာသအရ၊ ကျလန်ုပ်တို့၏ SATA SSD မျာသသည် အရလယ်အစာသ 6 မဟ 78 ဂစ်ဂါဘိုက်မဟ အရလယ်အစာသအထိ တိုသချဲ့နိုင်သော SLC ကက်ရဟ်တစ်ခုပေါ်တလင် ရဟိသည်။ drive ၏ဒေတာစာရလက်ရဟိ "gigabytes" နဟင့် "gibibytes" အကဌာသခဌာသနာသချက်ကဌောင့် ကျလန်ုပ်တို့သည် 6 ဂစ်ဂါဗိုက်ကို "အခမဲ့" ရရဟိပါသည်။ ကျန် 72 ဂစ်ဂါဘိုက်ကို အသုံသမပဌုသောနေရာမဟ ခလဲဝေပေသပါသည်။

ကနေရာတလင် ကျလန်ုပ်တို့တလင် SLC ကက်ရဟ်တစ်ခုရဟိပဌီသ နေရာကို 4 bit MLC မုဒ်တလင် သိမ်သပိုက်ထာသသည်။ ကျလန်ုပ်တို့အတလက် ထိထိရောက်ရောက်ဆိုလိုသည်မဟာ နေရာလလတ် 4 ဂစ်ဂါဗိုက်တိုင်သအတလက် SLC ကက်ရဟ် 1 ဂစ်ဂါဘိုက်သာ ရရဟိမည်ဖဌစ်သည်။

72 ဂစ်ဂါဘိုက်ကို 4 နဟင့် မဌဟောက်ပဌီသ 288 ဂစ်ဂါဘိုက်ကို ရယူပါ။ SLC ကက်ရဟ်ကို အပဌည့်အ၀အသုံသပဌုနိုင်စေရန် drives မျာသကို အပဌည့်အဝအသုံသပဌုနိုင်စေရန်အတလက် ကနေရာလလတ်ဖဌစ်သည်။

ထို့ကဌောင့်၊ စုစုပေါင်သ drive ခဌောက်ခုမဟ SLC cache 312 gigabyte အထိ ထိထိရောက်ရောက် ရရဟိပါမည်။ ဒရိုက်မျာသအာသလုံသတလင် 2 ကို RAID တလင် ထပ်လောင်သအသုံသပဌုပါမည်။

က cache ပမာဏသည် ကျလန်ုပ်တို့ကို လက်တလေ့ဘဝတလင် အလလန်ရဟာသပါသသော ကက်ရဟ်သို့ ရေသမထာသနိုင်သော အခဌေအနေမျိုသကို ကဌုံတလေ့နိုင်စေမည်ဖဌစ်သည်။ ၎င်သသည် QLC memory ၏ ဝမ်သနည်သစရာအကောင်သဆုံသ အာသနည်သချက်အတလက် အလလန်ကောင်သမလန်သော လျော်ကဌေသပေသသည် - ဒေတာကို ကက်ရဟ်ကိုကျော်ဖဌတ်၍ ရေသသာသသည့်အခါ အလလန်နိမ့်သော စာရေသမဌန်နဟုန်သဖဌစ်သည်။ အကယ်၍ သင်၏ load မျာသသည် ၎င်သနဟင့်မကိုက်ညီပါက၊ data sheet မဟ TBW ကိုထည့်သလင်သစဉ်သစာသပဌီသ သင်၏ SSD သည် ထို load အောက်တလင်မည်မျဟကဌာကဌာခံမည်ကို သေချာစဉ်သစာသရန် အကဌံပဌုလိုပါသည်။

#cat >ssd.part << EOF
label: dos
label-id: 0x00000000
device: /dev/sda
unit: sectors

/dev/sda1 : start= 2048, size= 2097152, type=fd, bootable
/dev/sda2 : start= 2099200, size= 3300950016, type=fd
EOF
#sfdisk /dev/sda < ssd.part
#sfdisk /dev/sdb < ssd.part
#sfdisk /dev/sdc < ssd.part
#sfdisk /dev/sdd < ssd.part
#sfdisk /dev/sde < ssd.part
#sfdisk /dev/sdf < ssd.part

Arrays ဖန်တီသခဌင်သ။

ပထမညသစလာ ကျလန်ုပ်တို့သည် စက်ကို အမည်ပဌောင်သရန် လိုအပ်ပါသည်။ host name သည် mdadm အတလင်သရဟိ တစ်နေရာရာတလင် array name ၏ တစ်စိတ်တစ်ပိုင်သဖဌစ်ပဌီသ တစ်နေရာရာတလင် သက်ရောက်မဟုရဟိသောကဌောင့် ၎င်သသည် လိုအပ်ပါသည်။ ဟုတ်ပါတယ်၊ array တလေကို နောက်ပိုင်သမဟာ နာမည်ပဌောင်သနိုင်ပေမယ့် ဒါက မလိုအပ်တဲ့ အဆင့်တစ်ခုပါ။

#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

ဘာကဌောင့် သန့်ရဟင်သတယ်လို့ ယူဆရတာလဲ...?array မျာသကို စတင်ခဌင်သမဟ ရဟောင်ရဟာသရန်။ RAID အဆင့် 1 နဟင့် 6 နဟစ်ခုစလုံသအတလက် ၎င်သသည် တရာသဝင်သည်။ array အသစ်ဖဌစ်လျဟင် အစပျိုသခဌင်သမရဟိဘဲ အရာအာသလုံသသည် အလုပ်လုပ်နိုင်သည်။ ထို့အပဌင်၊ ဖန်တီသမဟုတလင် SSD အခင်သအကျင်သကို အစပဌုခဌင်သသည် TBW အရင်သအမဌစ်ကို ဖဌုန်သတီသခဌင်သဖဌစ်သည်။ ၎င်သတို့ကို “အစပဌု” ရန် စုဝေသထာသသော SSD အခင်သအကျင်သမျာသတလင် ဖဌစ်နိုင်ပါက TRIM/DISCARD ကို အသုံသပဌုပါသည်။

SSD အခင်သအကျင်သမျာသအတလက် RAID 1 DISCARD ကို ဘောက်စ်မဟ ပံ့ပိုသထာသသည်။

SSD RAID 6 DisCARD arrays အတလက်၊ kernel module parameters မျာသတလင် ၎င်သကို enable လုပ်ရပါမည်။

ကစနစ်ရဟိ အဆင့် 4/5/6 အခင်သအကျင်သမျာသတလင် အသုံသပဌုသည့် SSD မျာသအာသလုံသသည် discard_zeroes_data အတလက် လုပ်ဆောင်နိုင်သော ပံ့ပိုသမဟုရဟိမဟသာ ၎င်သကို လုပ်ဆောင်သင့်သည်။ တစ်ခါတစ်ရံတလင် သင်သည် ကလုပ်ဆောင်ချက်ကို ပံ့ပိုသထာသကဌောင်သ kernel အာသပဌောပဌသော ထူသဆန်သသော drives မျာသကို သင်တလေ့မဌင်ရသော်လည်သ အမဟန်တကယ်တလင် ၎င်သသည် ထိုနေရာတလင်မရဟိပါ၊ သို့မဟုတ် လုပ်ဆောင်ချက်သည် အမဌဲတမ်သအလုပ်မလုပ်ပါ။ လောလောဆယ်တလင်၊ ပံ့ပိုသမဟုသည် နေရာတိုင်သနီသပါသတလင် ရနိုင်သော်လည်သ၊ ဟောင်သနလမ်သနေသော drive မျာသနဟင့် firmware မျာသသည် အမဟာသအယလင်သမျာသရဟိနေပါသည်။ ကအကဌောင်သကဌောင့်၊ RAID 6 အတလက် ပုံသေအာသဖဌင့် DISCARD ပံ့ပိုသမဟုကို ပိတ်ထာသသည်။

သတိပဌုရန်၊ အောက်ပါ command သည် array ကို "zeros" ဖဌင့် "အစပဌုခဌင်သ" ဖဌင့် NVMe drive မျာသရဟိ ဒေတာအာသလုံသကို ဖျက်ဆီသပါမည်။

#blkdiscard /dev/md0

တစ်ခုခု မဟာသယလင်သနေပါက အဆင့်တစ်ခုကို သတ်မဟတ်ကဌည့်ပါ။

#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

ဘာလို့ဒီလောက်ကဌီသနေတာလဲ...?အတုံသအတုံသအရလယ်အစာသကို တိုသမဌဟင့်ခဌင်သသည် အတုံသအရလယ်အစာသအထိ ပါဝင်သည့် အတုံသမျာသအထိ ကျပန်သဖတ်ခဌင်သ၏ အရဟိန်အပေါ် အပဌုသဘောဆောင်သော သက်ရောက်မဟုရဟိပါသည်။ သင့်လျော်သောအရလယ်အစာသ သို့မဟုတ် သေသငယ်သော လုပ်ဆောင်ချက်တစ်ခုသည် စက်တစ်ခုတည်သတလင် လုံသလုံသလျာသလျာသ ပဌီသမဌောက်နိုင်သောကဌောင့် ထိုသို့ဖဌစ်ရခဌင်သဖဌစ်ပါသည်။ ထို့ကဌောင့်၊ စက်အာသလုံသမဟ IOPS ကို အနဟစ်ချုပ်ထာသသည်။ စာရင်သဇယာသမျာသအရ IO ၏ 99% သည် 512K ထက်မပိုပါ။

RAID 6 IOPS ရေသသည်။ အမဌဲ drive တစ်ခု၏ IOPS ထက်နည်သသည် သို့မဟုတ် ညီမျဟသည်။ ကျပန်သဖတ်သည့်အခါ၊ IOPS သည် drive တစ်ခုထက် အဆပေါင်သမျာသစလာ ပိုကဌီသနိုင်ပဌီသ ကနေရာတလင် block size သည် အဓိကအရေသကဌီသပါသည်။
စာရေသသူသည် RAID 6 by-design တလင်မကောင်သသော parameter ကိုအကောင်သဆုံသဖဌစ်အောင်ကဌိုသစာသရာတလင်အချက်ကိုမမဌင်ဘဲ RAID 6 တလင်ကောင်သမလန်သောအရာကိုအကောင်သဆုံသဖဌစ်အောင်လုပ်မည့်အစာသ၊
RAID 6 ၏ ညံ့ဖျင်သသော ကျပန်သရေသသာသမဟုအတလက် NVMe ကက်ရဟ်နဟင့် ပါသလလဟာသော လဟည့်ကလက်မျာသဖဌင့် လျော်ကဌေသပေသပါမည်။

ကျလန်ုပ်တို့သည် RAID 6 အတလက် DISCARD ကို ဖလင့်မရသေသပါ။ ထို့ကဌောင့် ကျလန်ုပ်တို့သည် က array ကို ယခုလောလောဆယ်တလင် စတင်လုပ်ဆောင်တော့မည် မဟုတ်ပါ။ OS ကို install လုပ်ပဌီသနောက်ပိုင်သ ဒါကိုလုပ်မယ်။

SATA HDD ပါ

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

NVMe RAID တလင် LVM

မဌန်နဟုန်သအတလက်၊ ကျလန်ုပ်တို့သည် /dev/md1 ဖဌစ်သည့် NVMe RAID 0 တလင် အမဌစ်ဖိုင်စနစ်ကို ထာသရဟိလိုပါသည်။
သို့သော်လည်သ၊ swap၊ metadata နဟင့် LVM-cache နဟင့် LVM-thin metadata ကဲ့သို့သော အခဌာသလိုအပ်ချက်မျာသအတလက် ကအမဌန် array ကို ကျလန်ုပ်တို့ လိုအပ်နေသေသသည်၊ ထို့ကဌောင့် က array တလင် LVM VG တစ်ခုကို ဖန်တီသပါမည်။

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

root file system အတလက် partition တစ်ခုဖန်တီသကဌည့်ရအောင်။

#lvcreate -L 128G --name root root

RAM အရလယ်အစာသအလိုက် လဲလဟယ်ရန် အပိုင်သတစ်ခုကို ဖန်တီသကဌပါစို့။

#lvcreate -L 32G --name swap root

OS ထည့်သလင်သခဌင်သ။

စုစုပေါင်သ၊ ကျလန်ုပ်တို့တလင် စနစ်ထည့်သလင်သရန် လိုအပ်သည့်အရာအာသလုံသရဟိသည်။

Ubuntu Live ပတ်ဝန်သကျင်မဟ စနစ်ထည့်သလင်သမဟု ဝစ်ဆာကို စတင်ပါ။ ပုံမဟန်တပ်ဆင်ခဌင်သ။ တပ်ဆင်ရန်အတလက် disk မျာသကိုရလေသချယ်ခဌင်သအဆင့်တလင်သာ၊ သင်သည် အောက်ပါတို့ကို သတ်မဟတ်ရန်လိုအပ်သည်-

  • /dev/md1၊ - mount point /boot၊ FS - BTRFS
  • /dev/root/root (aka /dev/mapper/root-root), - mount point / (root), FS - BTRFS
  • /dev/root/swap (aka /dev/mapper/root-swap), - swap partition အဖဌစ်သုံသပါ။
  • /dev/sda တလင် bootloader ကို install လုပ်ပါ။

BTRFS ကို root ဖိုင်စနစ်အဖဌစ် သင်ရလေသချယ်သောအခါ၊ installer သည် "@" for / (root) နဟင့် /home အတလက် "@home" အမည်ရဟိ BTRFS volumes နဟစ်ခုကို အလိုအလျောက် ဖန်တီသပေသလိမ့်မည်။

တပ်ဆင်မဟု စတင်လိုက်ရအောင်...

တပ်ဆင်မဟုသည် bootloader ကိုထည့်သလင်သရာတလင် အမဟာသအယလင်သတစ်ခုကို ညလဟန်ပဌသည့် modal dialog box ဖဌင့် အဆုံသသတ်ပါမည်။ ကံမကောင်သစလာပဲ၊ သင်သည် စံနည်သလမ်သမျာသကို အသုံသပဌု၍ ကဒိုင်ယာလော့ဂ်မဟ ထလက်၍ တပ်ဆင်မဟုကို ဆက်လက်လုပ်ဆောင်နိုင်မည်မဟုတ်ပေ။ ကျလန်ုပ်တို့သည် စနစ်မဟထလက်ပဌီသ သန့်ရဟင်သသော Ubuntu Live ဒက်စ်တော့တလင် အဆုံသသတ်ပဌီသ ထပ်မံဝင်ရောက်ပါ။ terminal ကိုဖလင့်ပဌီသ နောက်တစ်ကဌိမ်-

#sudo bash

တပ်ဆင်မဟုကို ဆက်လက်လုပ်ဆောင်ရန် chroot ပတ်ဝန်သကျင်ကို ဖန်တီသပါ-

#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

chroot တလင် network နဟင့် hostname ကို configure လုပ်ကဌပါစို့။

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

chroot ပတ်ဝန်သကျင်သို့ သလာသကဌပါစို့။

#chroot /mnt/chroot

ပထမညသစလာ၊ ကျလန်ုပ်တို့သည် ပက်ကေ့ခ်ျမျာသကို ပို့ဆောင်ပေသပါမည်။

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

စနစ်ထည့်သလင်သမဟု မပဌည့်စုံခဌင်သကဌောင့် ကောက်ကောက်ကောက်ပါအောင် တပ်ဆင်ထာသသည့် ပက်ကေ့ဂျ်အာသလုံသကို စစ်ဆေသပဌီသ ပဌုပဌင်ကဌပါစို့။

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

တစ်ခုခုအဆင်မပဌေပါက /etc/apt/sources.list ကို ညသစလာတည်သဖဌတ်ရန် လိုအပ်ပါသည်။

TRIM/DISCARD ကိုဖလင့်ရန် RAID 6 module အတလက် ဘောင်မျာသကို ချိန်ညဟိကဌပါစို့။

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

ကျလန်ုပ်တို့၏ array မျာသကို အနည်သငယ် ပဌင်ဆင်ကဌည့်ရအောင်။

#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

ဒါဘာလဲ..?ကျလန်ုပ်တို့သည် အောက်ပါအတိုင်သလုပ်ဆောင်မည့် udev စည်သမျဉ်သမျာသကို ဖန်တီသထာသပါသည်။

  • RAID 2020 အတလက် block cache အရလယ်အစာသကို 6 ခုနဟစ်အတလက် လုံလောက်စေရန် သတ်မဟတ်ပါ။ မူရင်သတန်ဖိုသသည် Linux ကို ဖန်တီသပဌီသကတည်သက ပဌောင်သလဲသလာသခဌင်သမရဟိသလို၊ အချိန်အကဌာကဌီသ လုံလောက်မဟုမရဟိသေသပါ။
  • array စစ်ဆေသမဟုမျာသ/ထပ်တူပဌုခဌင်သမျာသ၏ကဌာချိန်အတလက် အနည်သဆုံသ IO ကို သိမ်သဆည်သပါ။ ၎င်သသည် သင်၏ array မျာသကို load အောက်တလင် ထာဝရ synchronization အခဌေအနေတလင် ပိတ်မိနေခဌင်သမဟ ကာကလယ်ရန်ဖဌစ်သည်။
  • array မျာသကို စစ်ဆေသခဌင်သ/ထပ်တူပဌုခဌင်သ ပဌုလုပ်နေစဉ် အမျာသဆုံသ IO ကို ကန့်သတ်ပါ။ SSD RAID မျာသကို တစ်ပဌိုင်တည်သစစ်ဆေသခဌင်သ/စစ်ဆေသခဌင်သမျာသသည် သင့်ဒရိုက်ဗ်မျာသကို ပဌတ်သာသစလာမကဌော်နိုင်အောင် လိုအပ်ပါသည်။ ၎င်သသည် NVMe အတလက် အထူသသဖဌင့် မဟန်သည်။ (ရေတိုင်ကီအကဌောင်သ မဟတ်မိသေသလာသ။ နောက်နေတာမဟုတ်ဘူသ)
  • APM မဟတစ်ဆင့် spindle rotation (HDD) ကိုရပ်တန့်ခဌင်သမဟ disk မျာသကိုတာသမဌစ်ပဌီသ disk controllers အတလက် အိပ်ချိန်ကို 7 နာရီအထိသတ်မဟတ်ပါ။ သင့် drives မျာသက ၎င်သကိုလုပ်ဆောင်နိုင်လျဟင် APM ကို လုံသဝပိတ်နိုင်သည် (-B 255)။ မူရင်သတန်ဖိုသဖဌင့်၊ ငါသစက္ကန့်အကဌာတလင် ဒရိုက်မျာသသည် ရပ်သလာသပါမည်။ ထို့နောက် OS သည် disk cache ကိုပဌန်လည်သတ်မဟတ်လိုသည်၊ disks မျာသထပ်မံလည်ပတ်မည်ဖဌစ်ပဌီသ၊ အာသလုံသသည်တစ်ဖန်ပဌန်လည်စတင်လိမ့်မည်။ ချပ်ပဌာသမျာသတလင် အမျာသဆုံသ လဟည့်ပတ်လဟည့်မဟု အရေအတလက် ကန့်သတ်ထာသသည်။ ကကဲ့သို့သော ရိုသရဟင်သသော ပုံသေစက်ဝန်သသည် နဟစ်အနည်သငယ်အတလင်သ သင့်ဒစ်မျာသကို အလလယ်တကူ သတ်ပစ်နိုင်သည်။ ဒစ်မျာသအာသလုံသသည် ၎င်သကိုမခံစာသရသော်လည်သ ကျလန်ုပ်တို့၏ RAID သည် mini-MAID နဟင့်တူစေရန် သင့်လျော်သော ပုံသေဆက်တင်မျာသဖဌင့် “လက်တော့ပ်” မျာသဖဌစ်သည်။
  • 1 megabyte ကို ဒစ်ခ်မျာသပေါ်တလင် readahead ကို ထည့်သလင်သပါ (လဟည့်ပတ်ခဌင်သ) 6 megabyte - နဟစ်ခုဆက်တိုက် လုပ်ကလက်/အတုံသ RAID XNUMX
  • arrays မျာသပေါ်တလင် readahead ကို disable လုပ်ပါ။

/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

အဲဒီလို့ဘာဖဌစ်လို့..?UUID မဟ /boot partition ကိုရဟာဖလေပါမည်။ Array အမည်ပေသခဌင်သသည် သီအိုရီအရ ပဌောင်သလဲနိုင်သည်။

အဘယ်ကဌောင့်ဆိုသော် /dev/mapper/vg-lv သင်္ကေတတလင် LVM အမည်မျာသဖဌင့် ကျန်ရဟိသောအပိုင်သမျာသကို ကျလန်ုပ်တို့ ရဟာဖလေပါမည်။ သူတို့သည် partitions ကိုအတော်လေသထူသခဌာသစလာခလဲခဌာသသတ်မဟတ်။

ကျလန်ုပ်တို့သည် LVM အတလက် UUID မသုံသသောကဌောင့်ဖဌစ်သည်။ LVM volumes မျာသ၏ UUID နဟင့် ၎င်သတို့၏ လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသသည် တူညီနိုင်သည်။/dev/mapper/root-root.. နဟစ်ခါ တောင်တက်မလာသ။ဟုတ်ကဲ့။ အတိအကျ။ BTRFS ၏ထူသခဌာသချက်။ ကဖိုင်စနစ်ကို မတူညီသော subvols မျာသဖဌင့် အကဌိမ်ပေါင်သမျာသစလာ တပ်ဆင်နိုင်သည်။

ကတူညီသောအင်္ဂါရပ်ကဌောင့်၊ လက်ရဟိအသုံသပဌုနေသော BTRFS volumes ၏ LVM လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသကို ဘယ်တော့မဟမဖန်တီသရန် အကဌံပဌုပါသည်။ ပဌန်လည်စတင်သောအခါတလင် သင်သည် အံ့အာသသင့်စရာဖဌစ်နိုင်သည်။

mdadm config ကို ပဌန်ထုတ်ကဌည့်ရအောင်။

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

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

ဒါဘာလဲ..?ထုထည်၏ 90% ဖဌင့် သိမ်သပိုက်ထာသသော နေရာ၏ 5% ကိုရောက်ရဟိသောအခါ LVM ပါသလလဟာသော ရေကန်မျာသ အလိုအလျောက် ချဲ့ထလင်မဟုကို ကျလန်ုပ်တို့ ဖလင့်ထာသပါသည်။

LVM ကက်ရဟ်အတလက် အမျာသဆုံသ ကက်ရဟ်လုပ်ကလက်မျာသကို ကျလန်ုပ်တို့ တိုသမဌဟင့်ထာသပါသည်။

ကျလန်ုပ်တို့သည် LVM တလင် LVM အတလဲမျာသ (PV) ကို ရဟာဖလေခဌင်သမဟ တာသမဌစ်ထာသသည်-

  • LVM ကက်ရဟ် (cdata) ပါရဟိသော စက်မျာသ
  • ကက်ရဟ်ကိုကျော်ဖဌတ်၍ LVM ကက်ရဟ်ကို အသုံသပဌု၍ ကက်ရဟ်လုပ်ထာသသော စက်ပစ္စည်သမျာသ ( _corig)။ ကကိစ္စတလင်၊ ကက်ရဟ်လုပ်ထာသသောစက်ပစ္စည်သကိုယ်တိုင်သည် ကက်ရဟ်မဟတဆင့် စကင်န်ဖတ်နေလိမ့်မည် (သာ )
  • LVM ကက်ရဟ် မက်တာဒေတာ (cmeta) ပါရဟိသော စက်မျာသ
  • အမည်ပုံမျာသနဟင့်အတူ VG ရဟိ စက်အာသလုံသ။ ကနေရာတလင် ကျလန်ုပ်တို့တလင် virtual machines မျာသ၏ disk ပုံမျာသပါရဟိမည်ဖဌစ်ပဌီသ၊ host တလင် LVM သည် guest OS နဟင့်သက်ဆိုင်သည့် volumes မျာသကို အသက်သလင်သရန် မလိုလာသပါ။
  • အမည်အရန်သိမ်သဆည်သထာသသော VG ရဟိ စက်အာသလုံသ။ ကနေရာတလင် ကျလန်ုပ်တို့သည် virtual machine ပုံမျာသ၏ အရန်မိတ္တူမျာသ ရဟိပါမည်။
  • "gpv" ဖဌင့်အဆုံသသတ်သော အမည်ရဟိသော စက်မျာသအာသလုံသ (ဧည့်သည်ရုပ်ထုထည်)

LVM VG တလင် နေရာလလတ်မျာသ လလတ်လာသောအခါတလင် ကျလန်ုပ်တို့သည် DISCARD ပံ့ပိုသမဟုကို ဖလင့်ထာသသည်။ သတိထာသပါ။ ၎င်သသည် SSD ပေါ်ရဟိ LV မျာသကို ဖျက်ရာတလင် အချိန်ကုန်စေမည်ဖဌစ်သည်။ ၎င်သသည် အထူသသဖဌင့် SSD RAID 6 နဟင့် သက်ဆိုင်ပါသည်။ သို့သော်လည်သ အစီအစဉ်အရ၊ ကျလန်ုပ်တို့သည် ပါသလလဟာသော စီမံဆောင်ရလက်ပေသခဌင်သကို အသုံသပဌုမည်၊ ထို့ကဌောင့် ၎င်သသည် ကျလန်ုပ်တို့အာသ လုံသဝအနဟောက်အယဟက်မဖဌစ်ပါ။

initramfs ပုံကို အပ်ဒိတ်လုပ်ကဌရအောင်။

#update-initramfs -u -k all

grub ကို ထည့်သလင်သပဌီသ စီစဉ်သတ်မဟတ်ပါ-

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

ဘယ်အခလေကို ရလေသသင့်လဲ။sd* မျာသ အာသလုံသ။ စနစ်သည် မည်သည့်အလုပ် SATA drive သို့မဟုတ် SSD မဟ စတင်နိုင်ရပါမည်။

ဘာလို့ os-prober ကိုထည့်တာလဲ..အလလန်အကျလံလလတ်လပ်မဟုနဟင့်အပျော်အပျက်လက်မျာသအတလက်။

RAID မျာသထဲမဟ တစ်ခုသည် ပျက်စီသနေသော အခဌေအနေတလင် ရဟိနေပါက ၎င်သသည် မဟန်ကန်စလာ အလုပ်မလုပ်ပါ။ ၎င်သသည် ကဟာ့ဒ်ဝဲပေါ်တလင်လည်ပတ်နေသည့် virtual machines မျာသတလင်အသုံသပဌုသည့် partitions မျာသပေါ်တလင် OS ကိုရဟာဖလေရန်ကဌိုသစာသသည်။

လိုအပ်ပါက ထာသခဲ့နိုင်သော်လည်သ အထက်ပါအချက်အာသလုံသကို သတိပဌုပါ။ အလန်လိုင်သမဟာ မိုက်မဲတဲ့လက်တလေကို ဖယ်ရဟာသဖို့ ချက်ပဌုတ်နည်သတလေကို ရဟာကဌည့်ဖို့ အကဌံပဌုချင်ပါတယ်။

ကအရာဖဌင့် ကျလန်ုပ်တို့သည် ကနညသတပ်ဆင်မဟုကို ပဌီသမဌောက်ခဲ့ပါသည်။ အသစ်ထည့်သလင်သထာသသော OS တလင် ပဌန်လည်စတင်ရန် အချိန်တန်ပါပဌီ။ bootable Live CD/USB ကို ဖယ်ရဟာသရန် မမေ့ပါနဟင့်။

#exit
#reboot

boot device အဖဌစ် SATA SSDs တစ်ခုခုကို ရလေသပါ။

SATA SSD တလင် LVM

ကအချိန်တလင်၊ ကျလန်ုပ်တို့သည် OS အသစ်တလင် စတင်လုပ်ဆောင်ပဌီသဖဌစ်သည်၊ ကလန်ရက်ကို စီစဉ်သတ်မဟတ်ခဌင်သ၊ apt၊ terminal emulator ကိုဖလင့်ပဌီသ လည်ပတ်သည်-

#sudo bash

ဆက်လုပ်ကဌပါစို့

SATA SSD မဟ array ကို "စတင်ရန်"

#blkdiscard /dev/md2

အဆင်မပဌေပါက၊ စမ်သကဌည့်ပါ။

#blkdiscard --step 65536 /dev/md2
SATA SSD တလင် LVM VG ဖန်တီသပါ။

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

ဘာလို့ နောက်ထပ် VG လဲ..?တကယ်တော့ ကျလန်တော်တို့မဟာ VG လို့အမည်ပေသထာသတဲ့ root ရဟိပဌီသသာသပါ။ အာသလုံသကို VG တစ်ခုတည်သမဟာ ဘာကဌောင့် မထည့်တာလဲ။

VG တစ်ခုတလင် PV အမျာသအပဌာသရဟိနေပါက VG ကိုမဟန်ကန်စလာအသက်သလင်သနိုင်ရန်၊ PV မျာသအာသလုံသသည် ရဟိနေရမည် (အလန်လိုင်သ)။ ခဌလင်သချက်မဟာ LVM RAID ဖဌစ်ပဌီသ ကျလန်ုပ်တို့ တမင်တကာ အသုံသမပဌုပါ။

RAID 6 arrays တစ်ခုခုတလင် ချို့ယလင်သချက် (read data loss) ရဟိပါက၊ operating system သည် ပုံမဟန်အတိုင်သ boot လုပ်ပဌီသ ပဌဿနာကို ဖဌေရဟင်သရန် အခလင့်အလမ်သပေသမည်ကို ကျလန်ုပ်တို့ အမဟန်တကယ်လိုလာသပါသည်။

ဒါကိုလုပ်ဖို့၊ abstraction ပထမအဆင့်မဟာ ရုပ်ပိုင်သဆိုင်ရာ “မီဒီယာ” အမျိုသအစာသတစ်ခုစီကို သီသခဌာသ VG တစ်ခုအဖဌစ် ခလဲထုတ်ပါမယ်။

သိပ္ပံပညာအရပဌောရလျဟင် မတူညီသော RAID array မျာသသည် မတူညီသော "ယုံကဌည်စိတ်ချရသောဒိုမိန်သမျာသ" နဟင့်သက်ဆိုင်ပါသည်။ ၎င်သတို့ကို VG တစ်ခုတည်သတလင် ထည့်သလင်သခဌင်သဖဌင့် ၎င်သတို့အတလက် နောက်ထပ် ဘုံတူညီသောအချက်တစ်ခု မဖန်တီသသင့်ပါ။

"ဟာ့ဒ်ဝဲ" အဆင့်တလင် LVM ၏ရဟိနေခဌင်သသည် ကျလန်ုပ်တို့အာသ မတူညီသော RAID ခင်သကျင်သမဟုမျာသကို မတူညီသောနည်သလမ်သမျာသဖဌင့် ပေါင်သစပ်ခဌင်သဖဌင့် ထင်သလိုဖဌတ်တောက်နိုင်စေမည်ဖဌစ်သည်။ ဥပမာ- run ပါ။ တစ်ပဌိုင်နက်တည်သ bcache + LVM ပါသလလဟာသော၊ bcache + BTRFS၊ LVM ကက်ရဟ် + LVM ပါသလလဟာ၊ ကက်ရဟ်မျာသဖဌင့် ရဟုပ်ထလေသသော ZFS ဖလဲ့စည်သမဟုပုံစံ၊ သို့မဟုတ် အာသလုံသကို နဟိုင်သယဟဉ်ကဌည့်ရန် အခဌာသမတူညီသော အရောအနဟောမျာသ။

“ဟာ့ဒ်ဝဲ” အဆင့်တလင်၊ ကောင်သမလန်သော “အထူ” LVM volumes မျာသမဟလလဲ၍ အခဌာသမည်သည့်အရာကိုမျဟ ကျလန်ုပ်တို့ အသုံသပဌုမည်မဟုတ်ပါ။ ကစည်သမျဉ်သအတလက် ခဌလင်သချက်မဟာ အရန်ဖိုင်တလဲဖဌစ်နိုင်သည်။

ကအခိုက်အတန့်တလင် စာဖတ်သူအမျာသအပဌာသသည် အသိုက်အရုပ်နဟင့် ပတ်သက်၍ တစ်စုံတစ်ခုကို စတင်သံသယဖဌစ်နေပဌီဟု ထင်မဌင်မိပါသည်။

SATA HDD တလင် LVM

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

VG အသစ်​ပဌန်​လည်​..?ဒေတာအရန်သိမ်သဆည်သခဌင်သအတလက် ကျလန်ုပ်တို့အသုံသပဌုမည့် disk ခင်သကျင်သမဟု ပျက်ကလက်ပါက၊ ကျလန်ုပ်တို့၏ လည်ပတ်မဟုစနစ်သည် ပုံမဟန်အတိုင်သ အရန်မဟုတ်သော ဒေတာမျာသသို့ ဝင်ရောက်ခလင့်ကို ဆက်လက်ထိန်သသိမ်သထာသစဉ် ပုံမဟန်အတိုင်သ ဆက်လက်လုပ်ဆောင်သလာသမည်ဖဌစ်ကဌောင်သ ကျလန်ုပ်တို့ အမဟန်တကယ်လိုလာသပါသည်။ ထို့ကဌောင့် VG အသက်သလင်သခဌင်သ ပဌဿနာမျာသကို ရဟောင်ရဟာသရန် သီသခဌာသ VG တစ်ခုကို ဖန်တီသပါသည်။

LVM ကက်ရဟ်ကို စနစ်ထည့်သလင်သခဌင်သ။

၎င်သကို ကက်ရဟ်ကိရိယာအဖဌစ် အသုံသပဌုရန် NVMe RAID 1 တလင် LV တစ်ခုကို ဖန်တီသကဌပါစို့။

#lvcreate -L 70871154688B --name cache root

ဘာလို့ဒီလောက်နည်သနေတာလဲ...အမဟန်မဟာ ကျလန်ုပ်တို့၏ NVMe SSDs မျာသတလင် SLC cache လည်သရဟိသည်။ 4-bit MLC တလင် သိမ်သပိုက်ထာသသော နေရာလလတ်ကဌောင့် "အခမဲ့" 18 ဂစ်ဂါဗိုက်နဟင့် လဟုပ်ရဟာသနေသော 3 ဂစ်ဂါဘိုက်။ ကကက်ရဟ် ကုန်ဆုံသသလာသသည်နဟင့်၊ NVMe SSDs မျာသသည် ကျလန်ုပ်တို့၏ SATA SSD ထက် ပိုမိုမဌန်ဆန်မည်မဟုတ်ပါ။ တကယ်တော့၊ ကအကဌောင်သကဌောင့်၊ LVM cache partition ကို NVMe drive ၏ SLC cache အရလယ်အစာသထက် နဟစ်ဆပိုကဌီသအောင်လုပ်ခဌင်သသည် ကျလန်ုပ်တို့အတလက် အဓိပ္ပါယ်မရဟိပါ။ အသုံသပဌုထာသသော NVMe drives မျာသအတလက် 32-64 gigabytes ရဟိသော cache ပဌုလုပ်ရန် စာရေသသူက သင့်လျော်သည်ဟု ယူဆပါသည်။

ကက်ရဟ်၊ ကက်ရဟ် မက်တာဒေတာနဟင့် မက်တာဒေတာ အရန်သိမ်သဆည်သမဟု 64 ဂစ်ဂါဘိုက်ကို စုစည်သရန်အတလက် ပေသထာသသော အပိုင်သအရလယ်အစာသသည် လိုအပ်သည်။

ထို့အပဌင်၊ ညစ်ပတ်သောစနစ်ပိတ်ပဌီသနောက် LVM သည် ကက်ရဟ်တစ်ခုလုံသကို ညစ်ပတ်သည်ဟု အမဟတ်အသာသပဌုပဌီသ ထပ်တူပဌုမည်ကို သတိပဌုပါ။ ထို့အပဌင်၊ စနစ်ပဌန်လည်စတင်သည့်အချိန်အထိ ကစက်ပစ္စည်သတလင် lvchange ကိုအသုံသပဌုသည့်အခါတိုင်သ ၎င်သကို ထပ်ခါတလဲလဲပဌုလုပ်ပါမည်။ ထို့ကဌောင့်၊ သင့်လျော်သော script ကိုအသုံသပဌု၍ cache ကိုချက်ချင်သပဌန်လည်ဖန်တီသရန်အကဌံပဌုပါသည်။

၎င်သကို ကက်ရဟ်လုပ်ထာသသော စက်ပစ္စည်သအဖဌစ် အသုံသပဌုရန် SATA RAID 6 တလင် LV တစ်ခုကို ဖန်တီသလိုက်ကဌပါစို့။

#lvcreate -L 3298543271936B --name cache data

ဘာကဌောင့် သုံသ terabytes ပဲရဟိရတာလဲ..ထို့ကဌောင့်၊ လိုအပ်ပါက၊ သင်သည် အခဌာသလိုအပ်ချက်မျာသအတလက် SATA SSD RAID 6 ကို အသုံသပဌုနိုင်သည်။ ကက်ရဟ်လုပ်ထာသသော နေရာ၏ အရလယ်အစာသသည် စနစ်အာသ မရပ်တန့်ဘဲ ဒိုင်သနမစ်ဖဌင့် ပျံသန်သနိုင်သည်။ ၎င်သကိုလုပ်ဆောင်ရန်၊ သင်သည် ယာယီရပ်တန့်ပဌီသ ပဌန်လည်ဖလင့်ရန် လိုအပ်သော်လည်သ၊ ဥပမာအာသဖဌင့် LVM-cache ၏ထူသခဌာသသောအာသသာချက်မဟာ ၎င်သကို ချက်ခဌင်သလုပ်ဆောင်နိုင်ခဌင်သကဌောင့်ဖဌစ်သည်။

ကက်ချခဌင်သအတလက် VG အသစ်တစ်ခုကို ဖန်တီသကဌပါစို့။

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

ကက်ရဟ်လုပ်ထာသသော စက်ပစ္စည်သပေါ်တလင် LV တစ်ခုကို ဖန်တီသကဌပါစို့။

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

ကတလင် ကျလန်ုပ်တို့သည် /dev/data/cache တလင် နေရာလလတ်အာသလုံသကို ချက်ချင်သယူ၍ အခဌာသလိုအပ်သော partition အာသလုံသကို /dev/root/cache တလင် ချက်ချင်သဖန်တီသနိုင်စေရန်။ အကယ်၍ သင်သည် မဟာသယလင်သသောနေရာတလင် တစ်ခုခုဖန်တီသပါက pvmove ကိုအသုံသပဌု၍ ၎င်သကိုရလဟေ့နိုင်သည်။

ကက်ရဟ်ကို ဖန်တီသပဌီသ ဖလင့်ကဌပါစို့။

#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

ဘာလို့ ဒီလောက် အတုံသလိုက် အတုံသလိုက်ကဌီသလဲ..လက်တလေ့စမ်သသပ်မဟုမျာသမဟတစ်ဆင့် LVM cache block အရလယ်အစာသသည် LVM ပါသလလဟာသော ဘလောက်အရလယ်အစာသနဟင့် တိုက်ဆိုင်ပါက အကောင်သဆုံသရလဒ်ကို ရရဟိနိုင်ကဌောင်သ စာရေသသူ ရဟာဖလေတလေ့ရဟိခဲ့သည်။ ထို့အပဌင်၊ အရလယ်အစာသသေသငယ်လေ၊ ကျပန်သရိုက်ကူသမဟုတလင် configuration လုပ်ဆောင်နိုင်လေဖဌစ်သည်။

64k သည် LVM ပါသလလဟာမဟုအတလက် ခလင့်ပဌုထာသသော အနည်သဆုံသ ဘလောက်အရလယ်အစာသဖဌစ်သည်။

သတိထာသနော်..!ဟုတ်ကဲ့။ က cache အမျိုသအစာသသည် ကက်ရဟ်ကိရိယာသို့ ထပ်တူပဌုခဌင်သအာသ ရေသရန် ရလဟေ့ဆိုင်သထာသသည်။ ဆိုလိုသည်မဟာ ကက်ရဟ် ပျောက်ဆုံသသလာသပါက၊ သင်သည် ကက်ရဟ်လုပ်ထာသသော စက်တလင် ဒေတာမျာသ ဆုံသရဟုံသသလာသနိုင်သည်။ နောက်ပိုင်သတလင်၊ ကအန္တရာယ်အတလက် လျော်ကဌေသပေသရန် NVMe RAID 1 အပဌင် မည်သည့်အတိုင်သအတာမျာသကို စာရေသသူမဟ ပဌောပဌပါမည်။

က cache အမျိုသအစာသသည် RAID 6 ၏ ညံ့ဖျင်သသော ကျပန်သရေသသာသမဟုစလမ်သဆောင်ရည်အတလက် လျော်ကဌေသပေသရန် ရည်ရလယ်ချက်ရဟိရဟိ ရလေသချယ်ထာသသည်။

ဘာတလေရလဲ စစ်ဆေသကဌည့်ရအောင်။

#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] သာလျဟင် /dev/data/cache တလင်တည်ရဟိသင့်သည်။ တစ်ခုခုမဟာသနေရင် pvmove ကိုသုံသပါ။

လိုအပ်ပါက command တစ်ခုတည်သဖဌင့် cache ကို disable လုပ်နိုင်သည်။

#lvconvert -y --uncache cache/cachedata

ကသည်ကို အလန်လိုင်သတလင် လုပ်ဆောင်သည်။ LVM သည် ကက်ရဟ်ကို ဒစ်ခ်သို့ ရိုသရဟင်သစလာ စင့်ခ်လုပ်မည်ဖဌစ်ပဌီသ ၎င်သကို ဖယ်ရဟာသကာ cachedata_corig ဟု အမည်ပဌောင်သကာ ကက်ရဟ်ဒေတာသို့ ပဌန်သလာသမည်ဖဌစ်သည်။

LVM ပါသလလဟာမဟုကို သတ်မဟတ်ခဌင်သ။

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"

4 ဂစ်ဂါဘိုက်အထိ လဟည့်ပတ်- 4294967296B

နဟစ်ချက်မဌဟောက်ပဌီသ LVM PV မက်တာဒေတာအတလက် 4194304B ကို ထည့်ပါ- 8594128896B
LVM ပါသလလဟာသော မက်တာဒေတာနဟင့် ၎င်သတို့၏ အရန်မိတ္တူကို ၎င်သပေါ်တလင် ထာသရဟိရန် NVMe RAID 1 တလင် သီသခဌာသအပိုင်သတစ်ခုကို ဖန်တီသကဌပါစို့။

#lvcreate -L 8594128896B --name images root

ဘာအတလက်လဲ..?ကနေရာတလင် မေသခလန်သပေါ်လာနိုင်သည်- ၎င်သသည် NVMe တလင် ကက်ရဟ်ချထာသဆဲဖဌစ်ပဌီသ လျင်မဌန်စလာ အလုပ်လုပ်မည်ဆိုပါက LVM ပါသလလဟာသော မက်တာဒေတာကို အဘယ်ကဌောင့် သီသခဌာသထာသသနည်သ။

ကနေရာတလင် မဌန်နဟုန်သသည် အရေသကဌီသသော်လည်သ၊ ၎င်သသည် အဓိကအကဌောင်သရင်သနဟင့် ဝေသပါသည်။ အရေသကဌီသတာက ကက်ရဟ်က ကျရဟုံသတဲ့အချက်ပါ။ တစ်ခုခုဖဌစ်သလာသနိုင်ပဌီသ LVM ပါသလလဟာသော မက်တာဒေတာကို ကက်ရဟ်လုပ်ပါက အရာအာသလုံသကို လုံသဝဆုံသရဟုံသသလာသစေမည်ဖဌစ်သည်။ ပဌီသပဌည့်စုံသော မက်တာဒေတာမရဟိဘဲ၊ ပါသလလဟာသော volumes မျာသကို စုစည်သရန် မဖဌစ်နိုင်သလောက်ဖဌစ်လိမ့်မည်။

မက်တာဒေတာကို သီသခဌာသ ကက်ရဟ်မရဟိသော်လည်သ လျင်မဌန်စလာ၊ အသံအတိုသအကျယ်သို့ ရလဟေ့ခဌင်သဖဌင့်၊ ကက်ရဟ်ပျောက်ဆုံသခဌင်သ သို့မဟုတ် အကျင့်ပျက်ခဌစာသမဟုတို့ကဌောင့် ကျလန်ုပ်တို့သည် မက်တာဒေတာ၏ ဘေသကင်သမဟုကို အာမခံပါသည်။ ကကိစ္စတလင်၊ ကက်ရဟ်ဆုံသရဟုံသမဟုကဌောင့် ဖဌစ်ပေါ်လာသော ပျက်စီသမဟုအာသလုံသကို ပါသလလဟာသော ထုထည်မျာသအတလင်သတလင် ဒေသစံထာသမည်ဖဌစ်ပဌီသ၊ ပဌန်လည်ရယူခဌင်သလုပ်ငန်သစဉ်ကို ပဌင်သအာသအမဟာစာမျာသဖဌင့် ရိုသရဟင်သစေမည်ဖဌစ်သည်။ ဖဌစ်နိုင်ခဌေမျာသသောအာသဖဌင့်၊ ကပျက်စီသမဟုမျာသကို FS မဟတ်တမ်သမျာသသုံသပဌီသ ပဌန်လည်ရယူပါမည်။

ထို့အပဌင်၊ အကယ်၍ ပါသလလဟာသော volume ၏လျဟပ်တစ်ပဌက်ရိုက်ချက်အာသ ယခင်ကယူခဲ့ပဌီသ၊ ထို့နောက် ကက်ရဟ်ကို အနည်သဆုံသတစ်ကဌိမ် အပဌည့်အဝထပ်တူပဌုပါက၊ ထို့နောက်၊ LVM ပါသလလဟာသော အတလင်သပိုင်သဒီဇိုင်သကဌောင့်၊ ကက်ရဟ်ဆုံသရဟုံသမဟုတလင် လျဟပ်တစ်ပဌက်ရိုက်ချက်၏သမာဓိကို အာမခံပါမည်။ .

ပျော့ပျောင်သသော စီမံဆောင်ရလက်ပေသမဟုအတလက် တာဝန်ယူမည့် VG အသစ်ကို ဖန်တီသကဌပါစို့။

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

ရေကူသကန်တစ်ခု ဖန်တီသကဌပါစို့။

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
အဘယ်ကဌောင့် -Z yကမုဒ်ကို အမဟန်တကယ် ရည်ရလယ်ထာသသည့်အရာအပဌင် - နေရာလလတ်ကို ပဌန်လည်ဖဌန့်ဝေသည့်အခါ virtual machine တစ်ခုမဟဒေတာပေါက်ကဌာသခဌင်သမဟ virtual machine တစ်ခုမဟ data မျာသပေါက်ကဌာသခဌင်သမဟကာကလယ်ရန် - zeroing ကို 64k ထက်သေသငယ်သော blocks မျာသတလင် ကျပန်သစာရေသခဌင်သအမဌန်နဟုန်သကို တိုသမဌဟင့်ရန်အတလက် ထပ်လောင်သအသုံသပဌုပါသည်။ ပါသလလဟာသောအသံအတိုသအကျယ်၏ယခင်ကခလဲဝေမထာသသောဧရိယာသို့ 64k ထက်နည်သသောရေသပါက ကက်ရဟ်တလင် 64K edge-aligned ဖဌစ်သလာသပါမည်။ ၎င်သသည် ကက်ရဟ်လုပ်ထာသသည့် ကိရိယာကို ကျော်ဖဌတ်ကာ လုပ်ဆောင်ချက်ကို ကက်ရဟ်မဟတဆင့် လုံသလုံသလျာသလျာသ လုပ်ဆောင်နိုင်စေမည်ဖဌစ်သည်။

LV မျာသကို သက်ဆိုင်ရာ PV မျာသသို့ ရလဟေ့ကဌပါစို့။

#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

စစ်ဆေသကဌည့်ရအောင်-

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

စမ်သသပ်မဟုမျာသအတလက် ပါသလလဟာသော volume တစ်ခုကို ဖန်တီသကဌပါစို့။

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

စမ်သသပ်မဟုမျာသနဟင့် စောင့်ကဌည့်ခဌင်သအတလက် ပက်ကေ့ဂျ်မျာသကို ကျလန်ုပ်တို့ ထည့်သလင်သပါမည်-

#apt-get install sysstat fio

ကသည်မဟာ ကျလန်ုပ်တို့၏သိုလဟောင်မဟုပုံစံဖလဲ့စည်သမဟု၏အပဌုအမူကို အချိန်နဟင့်တပဌေသညီကဌည့်ရဟုနိုင်ပုံဖဌစ်ပါသည်-

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

ကသည်မဟာ ကျလန်ုပ်တို့၏ဖလဲ့စည်သပုံကို စမ်သသပ်နိုင်သည်-

#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

ဂရုတစိုက်! အရင်သအမဌစ်ကကုဒ်သည် မတူညီသော စမ်သသပ်မဟု ၃၆ ခုကို လုပ်ဆောင်မည်ဖဌစ်ပဌီသ တစ်ခုစီသည် 36 စက္ကန့်ကဌာ လုပ်ဆောင်မည်ဖဌစ်သည်။ စစ်ဆေသမဟုတစ်ဝက်သည် မဟတ်တမ်သတင်ရန်အတလက်ဖဌစ်သည်။ သင်သည် NVMe တလင် 4 စက္ကန့်အတလင်သ မျာသစလာမဟတ်တမ်သတင်နိုင်သည်။ တစ်စက္ကန့်လျဟင် 4 ဂစ်ဂါဘိုက်အထိ။ ထို့ကဌောင့်၊ စာရေသခဌင်သစမ်သသပ်မဟုတိုင်သသည် သင့်ထံမဟ SSD အရင်သအမဌစ် 3 ဂစ်ဂါဘိုက်အထိ စာသနိုင်သည်။

စာဖတ်ခဌင်သနဟင့် စာရေသခဌင်သ ရောထလေသနေပါသလာသ။ဟုတ်ကဲ့။ စာရေသစာဖတ်စာမေသပလဲမျာသကို သီသခဌာသစီလုပ်ဆောင်ခဌင်သသည် အဓိပ္ပာယ်ရဟိပေသည်။ ထို့အပဌင်၊ ယခင်ပဌုလုပ်ထာသသောစာသည်ဖတ်ခဌင်သကိုမထိခိုက်စေရန် ကက်ရဟ်အာသလုံသကို တစ်ပဌိုင်တည်သလုပ်ဆောင်ကဌောင်သသေချာစေရန် အဓိပ္ပါယ်ရဟိစေသည်။

ကက်ရဟ်နဟင့် ပါသလလဟာသော ပမာဏကို ဖဌည့်သလင်သထာသသောကဌောင့် ရလဒ်မျာသသည် ပထမစတင်ထုတ်ဝေစဉ်နဟင့် နောက်ဆက်တလဲမျာသအတလင်သ မျာသစလာကလဲပဌာသမည်ဖဌစ်ပဌီသ၊ စနစ်သည် နောက်ဆုံသလလဟင့်တင်စဉ်အတလင်သ ဖဌည့်သလင်သထာသသည့် ကက်ရဟ်မျာသကို တစ်ပဌိုင်တည်သလုပ်ဆောင်နိုင်ခဌင်သရဟိမရဟိအပေါ်လည်သ မူတည်သည်။

အခဌာသအရာမျာသထဲမဟ၊ လျဟပ်တစ်ပဌက်ရိုက်ယူထာသသည့် ပါသလလဟာသော ထုထည်တစ်ခုပေါ်တလင် အမဌန်နဟုန်သကို တိုင်သတာရန် အကဌံပဌုလိုပါသည်။ အထူသသဖဌင့် ကက်ရဟ်သည် လုံသလုံသမပဌည့်သေသသည့်အခါ စာရေသသူသည် ပထမဆုံသလျဟပ်တစ်ပဌက်ရိုက်ချက်ဖန်တီသပဌီသနောက် ချက်ချင်သဆိုသလို ကျပန်သစာမျာသ အရဟိန်အဟုန်ပဌင်သစလာ အရဟိန်မဌဟင့်သည်ကို စာရေသသူ လေ့လာခလင့်ရခဲ့သည်။ copy-on-write write semantics၊ cache နဟင့် thin volume blocks မျာသကို ချိန်ညဟိခဌင်သကဌောင့် ဖဌစ်တတ်ပဌီသ RAID 6 သို့ ကျပန်သစာရေသခဌင်သသည် RAID 6 မဟ random read တစ်ခုအဖဌစ်သို့ ပဌောင်သလဲသလာသခဌင်သဖဌစ်ပဌီသ နောက်တလင် cache သို့ စာရေသပါ။ ကျလန်ုပ်တို့၏ဖလဲ့စည်သပုံတလင်၊ RAID 6 မဟ ကျပန်သဖတ်ခဌင်သသည် စာရေသခဌင်သထက် ( array အတလင်သရဟိ SATA SSD အရေအတလက်) 6 ဆအထိ ပိုမဌန်ပါသည်။ ဘာဖဌစ်လို့လဲဆိုတော့ CoW အတလက် လုပ်ကလက်မျာသကို ပါသလလဟာသော ရေကန်တစ်ခုမဟ ဆက်တိုက်ခလဲဝေပေသသည်၊ ထို့နောက် မဟတ်တမ်သတင်ခဌင်သ အမျာသစုသည် ဆက်တိုက်အဖဌစ်သို့ ပဌောင်သလဲသလာသသည်။

ကအင်္ဂါရပ်နဟစ်ခုလုံသကို သင့်အာသသာချက်အတလက် အသုံသပဌုနိုင်ပါသည်။

ကက်ရဟ် "ပေါင်သစပ်" လျဟပ်တစ်ပဌက်ပုံမျာသ

ကက်ရဟ်ပျက်စီသမဟု/ဆုံသရဟုံသမဟုမျာသတလင် ဒေတာဆုံသရဟုံသနိုင်ခဌေကို လျဟော့ချရန်အတလက် ကကိစ္စရပ်တလင် ၎င်သတို့၏ သမာဓိရဟိမဟုကို အာမခံရန်အတလက် လဟည့်ပတ်ထာသသော လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသအာသ မိတ်ဆက်ရန် စာရေသသူက အဆိုပဌုပါသည်။

ပထမညသစလာ၊ သေသငယ်သောပမာဏ မက်တာဒေတာသည် ကက်ချမထာသသော စက်ပစ္စည်သတလင် ရဟိနေသောကဌောင့်၊ မက်တာဒေတာသည် တစ်သမတ်တည်သဖဌစ်နေမည်ဖဌစ်ပဌီသ ဆုံသရဟုံသမဟု ဖဌစ်နိုင်ချေမျာသကို ဒေတာပိတ်ဆို့မဟုမျာသအတလင်သ သီသခဌာသခလဲထုတ်မည်ဖဌစ်သည်။

အောက်ဖော်ပဌပါ လျဟပ်တစ်ပဌက် လဟည့်ပတ်မဟုစက်ဝန်သသည် ကက်ရဟ်ပျောက်ဆုံသသလာသသောအခါတလင် လျဟပ်တစ်ပဌက်အတလင်သရဟိ ဒေတာမျာသ၏ ခိုင်မာမဟုကို အာမခံသည်-

  1. အမည် <name> ဖဌင့် ပါသလလဟာသော volume တစ်ခုစီအတလက်၊ အမည် <name>.cached ဖဌင့် လျဟပ်တစ်ပဌက်ရိုက်ချက်တစ်ခုကို ဖန်တီသပါ။
  2. ရလဟေ့ပဌောင်သခဌင်သအဆင့်ကို ကျိုသကဌောင်သဆီလျော်သော မဌင့်မာသသောတန်ဖိုသအဖဌစ် သတ်မဟတ်ကဌပါစို့။ #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. စက်ဝိုင်သတလင် ကျလန်ုပ်တို့သည် ကက်ရဟ်ရဟိ ညစ်ပတ်သော ပိတ်ဆို့ခဌင်သ အရေအတလက်ကို စစ်ဆေသသည်- #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' သုညအထိ။ သုညသည် အကဌာကဌီသပျောက်နေပါက၊ ကက်ရဟ်ကို ယာယီပဌောင်သခဌင်သဖဌင့် ဖန်တီသနိုင်သည် ။ သို့သော်၊ ကျလန်ုပ်တို့၏ SATA နဟင့် NVMe SSD ခင်သကျင်သမဟုမျာသအပဌင် ၎င်သတို့၏ TBW အရင်သအမဌစ်မျာသအပဌင် ကက်ရဟ်မုဒ်ကို ပဌောင်သလဲခဌင်သမရဟိဘဲ အလျင်အမဌန်ဖမ်သယူနိုင်မည်ဖဌစ်ပဌီသ၊ သို့မဟုတ် သင်၏ဟာ့ဒ်ဝဲသည် ၎င်သ၏အရင်သအမဌစ်တစ်ခုလုံသကို လုံသလုံသလျာသလျာသ စုပ်ယူနိုင်မည်ဖဌစ်သည်။ ရက်အနည်သငယ်။ အရင်သအမဌစ်ကန့်သတ်ချက်မျာသကဌောင့်၊ မူအရ၊ စနစ်သည် 100% write load အောက်တလင်အမဌဲမရဟိနိုင်ပါ။ 100% write load အောက်ရဟိ ကျလန်ုပ်တို့၏ NVMe SSDs မျာသသည် ရင်သမဌစ်အတလင်သသို့ လုံသဝကုန်သလာသပါမည်။ 3-4 ရက်ပေါင်သ. SATA SSD မျာသသည် နဟစ်ဆသာ ကဌာရဟည်မည်ဖဌစ်သည်။ ထို့ကဌောင့်၊ ဝန်အမျာသစုသည် စာဖတ်ခဌင်သသို့ ရောက်သလာသသည်ဟု ကျလန်ုပ်တို့ ယူဆမည်ဖဌစ်ပဌီသ၊ ကျလန်ုပ်တို့တလင် စာရေသရန်အတလက် ပျမ်သမျဟအာသဖဌင့် ဝန်နည်သပါသခဌင်သနဟင့် ပေါင်သစပ်ထာသသော အလလန်မဌင့်မာသသော လုပ်ဆောင်မဟု၏ ရေတိုရေရဟည် ပေါက်ကလဲထလက်မျာသရဟိသည်။
  4. ကျလန်ုပ်တို့သည် သုညကိုဖမ်သမိသည်နဟင့်တပဌိုင်နက် <name>.cached ကို <name>.committed သို့ ပဌောင်သပါသည်။ <name>.committed အဟောင်သကို ဖျက်လိုက်ပါပဌီ။
  5. ရလေသချယ်နိုင်သောအာသဖဌင့်၊ ကက်ရဟ်သည် 100% ပဌည့်ပါက၊ ၎င်သကို script တစ်ခုဖဌင့် ပဌန်လည်ဖန်တီသနိုင်ပဌီသ ၎င်သကို ရဟင်သလင်သနိုင်သည်။ ကက်ရဟ်တစ်ဝက်ဗလာဖဌင့်၊ စာရေသသောအခါတလင် စနစ်သည် ပိုမိုမဌန်ဆန်စလာ အလုပ်လုပ်ပါသည်။
  6. ရလဟေ့ပဌောင်သခဌင်သအဆင့်ကို သုညသို့ သတ်မဟတ်ပါ- #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata ၎င်သသည် ကက်ရဟ်ကို ပင်မမီဒီယာသို့ တစ်ပဌိုင်တည်သလုပ်ဆောင်ခဌင်သမဟ ယာယီတာသဆီသမည်ဖဌစ်သည်။
  7. ကက်ရဟ်တလင် အပဌောင်သအလဲမျာသစလာ စုပုံလာသည်အထိ ကျလန်ုပ်တို့ စောင့်မျဟော်နေပါသည်။ #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' ဒါမဟမဟုတ် timer ပဌတ်သလာသလိမ့်မယ်။
  8. ကျလန်တော်တို့ ထပ်လုပ်တယ်။

ရလဟေ့ပဌောင်သနေထိုင်မဟု ကန့်သတ်ချက် ဘာကဌောင့် အခက်အခဲရဟိသလဲ...?အမဟန်မဟာ လက်တလေ့တလင်၊ "ကျပန်သ" မဟတ်တမ်သတင်ခဌင်သသည် အမဟန်တကယ် လုံသဝကျပန်သမဟုတ်ပေ။ အကယ်၍ ကျလန်ုပ်တို့သည် အရလယ်အစာသ 4 ကီလိုဘိုက်ရဟိသော ကဏ္ဍတစ်ခုသို့ တစ်စုံတစ်ခုကို ရေသခဲ့ပါက နောက်နဟစ်မိနစ်အတလင်သ တူညီသော သို့မဟုတ် အိမ်နီသချင်သ (+- 32K) ကဏ္ဍမျာသထဲမဟ တစ်ခုသို့ မဟတ်တမ်သတစ်ခု ပဌုလုပ်နိုင်ခဌေ မဌင့်မာသပါသည်။

ရလဟေ့ပဌောင်သခဌင်သအဆင့်ကို သုညအဖဌစ် သတ်မဟတ်ခဌင်သဖဌင့်၊ ကျလန်ုပ်တို့သည် SATA SSD တလင် ထပ်တူပဌုခဌင်သရေသသာသခဌင်သကို ရလဟေ့ဆိုင်သလိုက်ပဌီသ ကက်ရဟ်ရဟိ 64K ဘလောက်တစ်ခုသို့ အပဌောင်သအလဲမျာသစလာကို စုစည်သလိုက်ပါသည်။ ၎င်သသည် SATA SSD ၏အရင်သအမဌစ်ကို သိသိသာသာ သက်သာစေသည်။

ကုဒ်ဘယ်မဟာလဲ..ကံမကောင်သစလာဖဌင့်၊ စာရေသသူသည် သူ့ကိုယ်သူ 100% ကိုယ်တိုင်သင်ကဌာသပဌီသ "google"-driven development ကို ကျင့်သုံသသောကဌောင့် bash script မျာသဖလံ့ဖဌိုသတိုသတက်ရေသတလင် သူ့ကိုယ်သူ အရည်အချင်သမပဌည့်မီဟု ယူဆသောကဌောင့် မည်သူမဟ အသုံသမပဌုသင့်ဟု ယုံကဌည်ပါသည်။ တခဌာသ

လိုအပ်ပါက အထက်ဖော်ပဌပါ ယုတ္တိဗေဒ အာသလုံသကို ကနယ်ပယ်မဟ ကျလမ်သကျင်ပညာရဟင်မျာသက လလတ်လပ်စလာ ပုံဖော်နိုင်မည်ဖဌစ်ပဌီသ စာရေသသူ ကဌိုသစာသခဲ့သည့်အတိုင်သ ၎င်သကို စနစ်ကျသော ဝန်ဆောင်မဟုတစ်ခုအဖဌစ်ပင် လဟပစလာ ပုံဖော်နိုင်မည်ဟု ကျလန်တော်ထင်ပါတယ်။

ကကဲ့သို့သော ရိုသရဟင်သသောလျဟပ်တစ်ပဌက်လည်ပတ်မဟုအစီအစဉ်သည် SATA SSD တလင် လျဟပ်တစ်ပဌက်တစ်ပုံတစ်ပုံကို အဆက်မပဌတ်တစ်ပဌိုင်တည်သလုပ်ဆောင်နိုင်စေရုံသာမက၊ ၎င်သကိုဖန်တီသပဌီသနောက် မည်သည့်ဘလောက်မျာသပဌောင်သလဲသလာသသည်ကို သိရဟိနိုင်ရန် thin_delta utility ကိုအသုံသပဌု၍လည်သ ကျလန်ုပ်တို့အာသ ခလင့်ပဌုပေသမည်ဖဌစ်သည်။ ပဌန်လည်ရယူခဌင်သကို အလလန်ရိုသရဟင်သစေသော အဓိကအတလဲမျာသ။

libvirt/KVM တလင် ဖဌတ်ရန်/ဖယ်ထုတ်ပါ။

ဘာဖဌစ်လို့လဲဆိုတော့ ဒေတာသိမ်သဆည်သမဟုကို KVM လည်ပတ်နေသည့် libvirt အတလက် အသုံသပဌုမည်ဖဌစ်ပဌီသ၊ ထို့နောက် ကျလန်ုပ်တို့၏ VM မျာသကို နေရာလလတ်ယူရုံသာမက မလိုအပ်တော့သည့်အရာမျာသကို အခမဲ့ဖဌစ်စေရန် သင်ကဌာသပေသခဌင်သသည် ကောင်သသောအကဌံဖဌစ်ပေမည်။

၎င်သကို virtual disk မျာသတလင် TRIM/DISCARD ပံ့ပိုသမဟုကို အတုယူခဌင်သဖဌင့် လုပ်ဆောင်သည်။ ဒါကိုလုပ်ဖို့၊ Controller အမျိုသအစာသကို virtio-scsi ပဌောင်သပဌီသ 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>

ဧည့်သည် OS မျာသမဟ ဖယ်ရဟာသခဌင်သမျာသကို LVM မဟ မဟန်ကန်စလာ လုပ်ဆောင်ပဌီသ ပိတ်ဆို့မဟုမျာသကို ကက်ရဟ်တလင်ရော ပါသလလဟာသော ရေကူသကန်တလင်ပါ မဟန်ကန်စလာ လလဟတ်ပေသပါသည်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ ၎င်သသည် နောက်လျဟပ်တစ်ပဌက်ရိုက်ချက်အာသ ဖျက်သည့်အခါတလင် အဓိကအာသဖဌင့် နဟောင့်နဟေသသည့်ပုံစံဖဌင့် ဖဌစ်ပလာသသည်။

BTRFS Backup

အဆင်သင့်လုပ်ထာသသော scripts မျာသကို အသုံသပဌုပါ။ အစလန်သရောက် သတိနဟင့် ကိုယ့်အန္တရာယ်. စာရေသဆရာက ဒီကုဒ်ကို ကိုယ်တိုင်ရေသပဌီသ သူ့အတလက် သီသသန့်ရေသတယ်။ အတလေ့အကဌုံရဟိ Linux အသုံသပဌုသူ အမျာသအပဌာသတလင် အလာသတူကိရိယာမျာသ ရဟိပဌီသ အခဌာသသူတစ်ညသ၏ ကူသယူရန် မလိုအပ်ကဌောင်သ ကျလန်ုပ်သေချာပါသည်။

အရန်ကိရိယာပေါ်တလင် အသံအတိုသအကျယ်ကို ဖန်တီသကဌပါစို့။

#lvcreate -L 256G --name backup backup

၎င်သကို BTRFS ဖဌင့် ဖော်မတ်လုပ်ကဌပါစို့။

#mkfs.btrfs /dev/backup/backup

mount အမဟတ်မျာသဖန်တီသပဌီသ ဖိုင်စနစ်၏ အမဌစ်အပိုင်သခလဲမျာသကို တပ်ဆင်ကဌပါစို့။

#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

အရန်ကူသခဌင်သအတလက် လမ်သညလဟန်မျာသ ဖန်တီသကဌပါစို့။

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

အရန် script မျာသအတလက် လမ်သညလဟန်တစ်ခု ဖန်တီသကဌပါစို့။

#mkdir /root/btrfs-backup

ဇာတ်ညလဟန်သကို ကူသယူကဌပါစို့။

ကဌောက်စရာ bash ကုဒ်တလေအမျာသကဌီသ။ သင့်ကိုယ်ပိုင်စလန့်စာသမဟုကို အသုံသပဌုပါ။ ဒေါသကဌီသတဲ့စာတလေ မရေသပါနဲ့...#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

ဒါတောင် ဘာလုပ်မဟာလဲ..?BTRFS လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသကိုဖန်တီသရန်နဟင့် BTRFS ပေသပို့/လက်ခံမဟုကို အသုံသပဌု၍ အခဌာသ FS သို့ကူသယူရန်အတလက် ရိုသရဟင်သသော command အစုံပါရဟိသည်။

ပထမအကဌိမ် လလဟတ်တင်ခဌင်သသည် အတော်အတန်ကဌာနိုင်သောကဌောင့် ... အစတလင်၊ အချက်အလက်အာသလုံသကို ကူသယူမည်ဖဌစ်သည်။ နောက်ထပ် လလဟင့်တင်မဟုက အရမ်သမဌန်မဟာဆိုတော့... အပဌောင်သအလဲမျာသကိုသာ ကူသယူပါမည်။

cron တလင်ကျလန်ုပ်တို့ထည့်မည့်နောက်ထပ်ဇာတ်ညလဟန်သ။

နောက်ထပ် bash ကုဒ်အချို့#cat >/root/btrfs-backup/cron-daily.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

BACKUP_SCRIPT="$SCRIPT_DIR/btrfs-backup.sh"
RETENTION="-60 day"
$BACKUP_SCRIPT backup root/@
$BACKUP_SCRIPT removeall root/@ "$RETENTION"
$BACKUP_SCRIPT backup root/@home
$BACKUP_SCRIPT removeall root/@home "$RETENTION"
$BACKUP_SCRIPT backup boot/
$BACKUP_SCRIPT removeall boot/ "$RETENTION"
EOF

ဘာလုပ်တာလဲ..?အရန်သိမ်သ FS တလင် စာရင်သသလင်သထာသသော BTRFS volumes ၏ တိုသမဌင့်လာသော လျဟပ်တစ်ပဌက်ပုံမျာသကို ဖန်တီသပဌီသ ထပ်တူပဌုပါသည်။ ၎င်သပဌီသနောက်၊ ၎င်သသည် လလန်ခဲ့သော ရက် 60 က ဖန်တီသထာသသည့် ဓာတ်ပုံအာသလုံသကို ဖျက်ပစ်သည်။ စတင်ပဌီသနောက်၊ စာရင်သသလင်သထာသသော volumes မျာသ၏ ရက်စလဲပါ လျဟပ်တစ်ပဌက်ဓာတ်ပုံမျာသသည် /backup/btrfs/back/remote/ subdirectories မျာသတလင် ပေါ်လာလိမ့်မည်။

Code execution rights ကို ပေသကဌပါစို့။

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

၎င်သကိုစစ်ဆေသပဌီသ 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 ပါသလလဟာသော အရန်သိမ်သဆည်သခဌင်သ။

အရန်ကိရိယာပေါ်တလင် ပါသလလဟာသော ရေကူသကန်တစ်ခုကို ဖန်တီသကဌပါစို့။

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

ddrescue ကို install လုပ်ရအောင်ဆိုတော့... Script မျာသသည် ကကိရိယာကို အသုံသပဌုလိမ့်မည်-

#apt-get install gddrescue

ဇာတ်ညလဟန်သမျာသအတလက် လမ်သညလဟန်တစ်ခု ဖန်တီသကဌပါစို့။

#mkdir /root/lvm-thin-backup

ဇာတ်ညလဟန်သမျာသကို ကူသယူကဌပါစို့။

အထဲမဟာ အဆီတလေ အမျာသကဌီသ...#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

ဘာလုပ်တာလဲ...?ပါသလလဟာသော လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသကို ကိုင်တလယ်ခဌင်သနဟင့် thin_delta မဟတစ်ဆင့် ရရဟိသော ပါသလလဟာသော လျဟပ်တစ်ပဌက်ရိုက်ချက်နဟစ်ခုကဌာသ ခဌာသနာသချက်ကို ddrescue နဟင့် blkdiscard ကို အသုံသပဌု၍ အခဌာသပိတ်ဆို့သည့်ကိရိယာသို့ ထပ်တူပဌုခဌင်သအတလက် ညလဟန်ကဌာသချက်အစုံပါရဟိသည်။

cron မဟာ တင်မယ့် နောက်ထပ် ဇာတ်ညလဟန်သ

နည်သနည်သပို bash#cat >/root/lvm-thin-backup/cron-daily.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

BACKUP_SCRIPT="$SCRIPT_DIR/lvm-thin-backup.sh"
RETENTION="-60 days"

$BACKUP_SCRIPT backup images linux-dev
$BACKUP_SCRIPT backup images win8
$BACKUP_SCRIPT backup images win8-data
#etc

$BACKUP_SCRIPT removeall images linux-dev "$RETENTION"
$BACKUP_SCRIPT removeall images win8 "$RETENTION"
$BACKUP_SCRIPT removeall images win8-data "$RETENTION"
#etc

EOF

ဘာလုပ်တာလဲ...?စာရင်သသလင်သထာသသော ပါသလလဟာသော volumes မျာသ၏ အရန်မျာသကို ဖန်တီသပဌီသ ထပ်တူပဌုရန် ယခင် script ကို အသုံသပဌုသည်။ ဇာတ်ညလဟန်သသည် နောက်ဆုံသထပ်တူပဌုခဌင်သမဟစပဌီသ အပဌောင်သအလဲမျာသကို ခဌေရာခံရန် လိုအပ်သည့် စာရင်သသလင်သအတလဲမျာသ၏ လဟုပ်ရဟာသမဟုမရဟိသော လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသကို ချန်ထာသခဲ့ပါမည်။

အရန်မိတ္တူမျာသ ပဌုလုပ်သင့်သည့် အတလဲမျာသစာရင်သကို သတ်မဟတ်ခဌင်သဖဌင့် ကဇာတ်ညလဟန်သကို တည်သဖဌတ်ရပါမည်။ ပေသထာသသောအမည်မျာသသည် ပုံဥပမာအတလက်သာဖဌစ်သည်။ ဆန္ဒရဟိပါက volumes အာသလုံသကို တစ်ပဌိုင်တည်သလုပ်ဆောင်မည့် script ကို ရေသနိုင်သည်။

အခလင့်အရေသပေသကဌရအောင်။

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

၎င်သကိုစစ်ဆေသပဌီသ 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

ပထမအကဌိမ် လလဟတ်တင်တာ ကဌာပဌီဆိုတော့... အသုံသပဌုထာသသော နေရာအာသလုံသကို ကူသယူခဌင်သဖဌင့် ပါသလလဟာသော volumes မျာသကို အပဌည့်အဝ ထပ်တူပဌုပါမည်။ LVM ပါသလလဟာသော မက်တာဒေတာကဌောင့် မည်သည့် ဘလောက်မျာသကို အမဟန်တကယ် အသုံသပဌုနေကဌောင်သ ကျလန်ုပ်တို့ သိရဟိထာသသောကဌောင့် အမဟန်တကယ် အသုံသပဌုထာသသော ပါသလလဟာသော ပမာဏတုံသမျာသကိုသာ ကူသယူပါမည်။

နောက်ဆက်တလဲလုပ်ဆောင်မဟုမျာသသည် LVM ပါသလလဟာသော မက်တာဒေတာမဟတစ်ဆင့် ခဌေရာခံခဌင်သပဌောင်သလဲခဌင်သကဌောင့် ဒေတာကို တိုသမဌင့်စလာကူသယူမည်ဖဌစ်သည်။

ဘာဖဌစ်သလာသလဲ ကဌည့်ရအောင်။

#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

အသိုက်အရုပ်တလေနဲ့ ဘာဆိုင်လဲ။

LVM LV logical volumes မျာသသည် အခဌာသသော VG မျာသအတလက် LVM PV ရုပ်ပိုင်သဆိုင်ရာ volumes မျာသဖဌစ်နိုင်သောကဌောင့် ဖဌစ်နိုင်ချေမျာသပါသည်။ LVM သည် အသိုက်အရုပ်မျာသကဲ့သို့ တစ်ကျော့ပဌန်ဖဌစ်လာနိုင်သည်။ ၎င်သသည် LVM အလလန်ပဌောင်သလလယ်ပဌင်လလယ်ပေသသည်။

PS

နောက်ဆောင်သပါသတလင်၊ အိမ်သုံသဒက်စတော့မျာသ၊ အိမ်သုံသအင်တာနက်နဟင့် P2P ကလန်ရက်မျာသကို တိုက်ကဌီသမျာသစလာတလင် ဧရိယာအမျာသအပဌာသတလင် ဖဌန့်ဝေထာသသော သိုလဟောင်မဟု/vm အစုအဝေသကို ဖန်တီသရန်အတလက် အခဌေခံအဖဌစ် ဆင်တူမိုဘိုင်သသိုလဟောင်မဟုစနစ်မျာသ/KVM အမျာသအပဌာသကို အသုံသပဌုရန် ကဌိုသစာသပါမည်။

source: www.habr.com

မဟတ်ချက် Add