Saturday, January 31, 2015

Understanding LVM ( Logical Volume Manager) in Linux

               LVM ကိုတစ်နည်းအားဖြင့်ပြောရရင် storage devices (or) block devices တွေကို partition ပိုင်းတဲ့ အခါအသုံးပြုနိုင်တဲ့ technology feature တစ်ခုပဲဖြစ်ပါတယ်။ ဒါပေမယ့် advance partition tool တစ်ခုလို့သတ်မှတ်သည်မှာ lvm သည် ဒီ block devices တွေကို partition လုပ်ရာမှာ Static ပုံစံမျိုး မဟုတ်ပဲ Dynamic ပုံစံမျိုးတစ်နည်းအားဖြင့် သတ်မှတ်လိုက်သော partition ကို ပြန်၍ Resize လုပ်နိုင်တယ် နောက် partiton မှာ storage space နည်းနေရင် နောက် partitionတစ်ခုနှင့် combine လုပ်နိုင်တယ် နောက် Data Recovery အတွက်တွင်လဲ Snapshot function တွေအသုံးပြုနိုင်ပါတယ်။ တစ်ခြား advance features တွေဖြစ်တဲ့ Mirroring, Striping, Block Devices migration တွေရှိပါတယ်။ အခုဒီ post မှာတော့ lvm နှင့် storage devices​ တွေကို create လုပ်ပြမှာပါ။

                 Tutorials မစခင်အရင်ဆုံး LVM အလုပ်လုပ်ပုံကို ပြောပြချင်ပါတယ်။ LVM သည် ကြားခံတစ်ခုအနေနှင့် တစ်နည်းအားဖြင့် physical storage devices တွေကို logical deployment ပုံစံဖြင့် အသုံးပြုတာဖြစ်ပါတယ်။ ဥပမာ LVM ဖြင့် 100GB ရှိတဲ့ Size တစ်ခုပိုင်းလိုက်တယ်ဆိုလျှင် တစ်ကယ်တမ်း LVM အသုံးပြုသွားသည်မှာ physical storage device တစ်ခုထဲကလဲ ဖြစ်နိုင်သလို physical storage device 2 ခုပေါင်းပြီး တစ်ဖက် 50GB ဆီယူသုံးတာလဲ ဖြစ်နိုင်ပါတယ်။ ပုံမှန် standard partition တွေလိုမျိုး partition ပိုင်းရင် harddisk တစ်ခုထဲကနေယူသုံးတာမျိုးမဟုတ်ပဲ computer နဲ့ attached လုပ်ထားတဲ့ harddisk အကုန်လုံးဆီကနေမျှပြီး လှမ်းယူ အသုံးပြုနိုင်ခြင်းဖြစ်ပါတယ်။



                  

Physical Volume (PV), Volume Group (VG) and Logical Volume (LV)


                  Physical vol, Vol group and logical vol ဆိုသည်မှာ harddisk တစ်ခု LVM ကိုအသုံး ပြုနိုင်ဖို့အတွက် ပြုလုပ်ပေးရမည့် အဆင့်တွေဖြစ်ပါတယ်။


Physical Volume (pvcreate)

                  PV သည် LVM အသုံးပြုဖို့အတွက် physical base structure ဖြစ်ပါတယ်။ LVM ကို အသုံးပြုမယ့် harddisk တိုင်းကို အရင်ဆုံး physical volume ဖြစ်အောင်လုပ်ရမှာပါ။

Volume Group (vgcreate)

                  Physical Volume create လုပ်ထားတဲ့ harddisk တွေကိုvolume group ထဲသို့ထည့်ခြင်း ဖြစ်ပါတယ်။ တစ်နည်းအားဖြင့် harddisk တွေကို combine လုပ်ပြီး storage pool တစ်ခုအနေဖြင့်  create လုပ်လိုက်ခြင်းဖြစ်ပါတယ်။

Logical Volume (lvcreate)

                 နောက်ဆုံးအဆင့်အနေဖြင့် ထို volume group ထဲမှ storage space များကို စိတ်ကြိုက် customize လုပ်ပြီး logical volume အဖြစ် တစ်နည်းအားဖြင့် partition တစ်ခုအနေနဲ့ အသုံးပြုလို့ ရတဲ့အဆင့်ဖြစ်ပါတယ်။

                   အရင်ဆုံး LVM လုပ်မယ့် partition ကို #fdisk command ဖြင့် LVM format အရင်ချမှာ ဖြစ်ပါတယ်။ အခု vmware guest os ထဲမှာ "/dev/sdb" (2GB) နဲ့စမ်းမှာပါ။ အောက်ပုံတွင် ပြထားပါတယ်။


                ထို့နောက်မှာတော့ "/dev/sdb" partition ကို #fdisk command  ဖြင့် LVM system ရအောင် အရင်ဆုံး create လုပ်မှာဖြစ်ပါတယ်။ အောက်မှာ step by step ပုံပြထားပါတယ်။ #fdisk အသုံးပြုပုံကိုတော့အရင် post  တွေမှာပြောပြထားပြီးဖြစ်တဲ့အတွက်အသေးစိတ်မပြောတော့ပါ။ 







      



Creating LVM Partiton



                     
                   အခုအရင်ဆုံး ရလာတဲ့ partition "/dev/sdb1" ကို #pvcreate command ဖြင့် physical volume create လုပ်ပေးမှာဖြစ်ပါတယ်။ အောက်ပုံမှာ ပြထားပါတယ်။


             အခု #pvcreate နဲ့ "/dev/sdb1" ကို create လုပ်ပြီးနောက် နောက်ထပ် command တစ်ခုဖြစ်တဲ့ #pvdisplay (or) #pvs command ဖြင့် ကိုယ် create လုပ်လိုက်သော physical volume ကိုကြည့်နိုင် တယ်။


            Physical Volume ကိုတည်ဆောက်ပြီးတဲ့နောက် Volume Group တည်ဆောက်မှာ ဖြစ်ပါတယ်။ #vgcreate command ဖြင့်အသုံးပြုပြီး #vgdisplay (or) #vgs command ဖြင့် ပြန်ကြည့်နိုင်ပါတယ်။         

         
                   နောက်ဆုံးမှာ Logical Volume တည်ဆောက်တော့မှာဖြစ်ပြီး #lvcreate command 

ကိုအသုံးပြုထားပါတယ်။ အခု command ထဲမှာပါတဲ့ " -L  300M" ဆိုသည်မှာ အခုတည်ဆောက်မယ့် 

logical volume အတွက် Volume Group 500MB ထဲမှ size 300MB ယူမယ်ကို ပြောတာဖြစ်ပြီး " -n 

lv01" ဆိုသည်မှာ အခု logical volume ၏ Name ဖြစ်ပါတယ်။ 

                 

              အခုရလာတဲ့ lv partition ကို linux file system ext4 ဖြင့်အသုံးပြုနိုင်အောင် #mkfs 

command  ဖြင့် ပြုလုပ်ခြင်းဖြစ်ပါတယ်။

            Folder create လုပ်ပြီး lv partition "lv01" ကို "/etc/fstab" ထဲမှာ directory /mnt/lvfolder ထဲကို mount လုပ်ခြင်းဖြစ်ပါ တယ်။


         
               အခုဆိုလျှင် lvm ကိုအသုံးပြုပြီး partition တစ်ခုတည်ဆောက်ပြီးသွားပြီဖြစ်ပါတယ်။ ထို mount လုပ်ထားတဲ့ ထဲမှာ data တွေကို ထည့်သွင်းအသုံးပြုနိုင်ပြီဖြစ်ပါတယ်။ 

***Note***
           အခု ပြောသွားတဲ့ LVM ကိုနောက်ပိုင်း OS Installation လုပ်ရင် default အနေနဲ့ standard partition အစား lvm ကိုအသုံးများလာပြီဖြစ်ပါတယ်။ ချွင်းချက် အနေနဲ့ OS တင်ရာတွင် "/boot" အပိုင်းကိုတော့ lvm နှင့်အသုံးပြု၍ မရပဲ stardard partiton ဖြင့်သာ create လုပ်ရမည်။

Extending, Reducing and Snapshot in LVM


           အပေါ်မှာ လုပ်ပြသွားတဲ့ အပိုင်းက LVM ကိုအသုံးပြုပြီး partiton တည်ဆောက်သွားတာဖြစ်ပါတယ်။ အခုဒီအပိုင်းမှာ create လုပ်ခဲ့တဲ့ lvm partition ကို ကျွန်တော်တို့ ထပ်ပြီး extend လုပ်မယ် နောက် ပြန်ပြီး reduce လုပ်မယ် data recovery အနေနဲ့ LVM Snapshot ကိုဘယ်လို အသုံးပြုရမလဲ ဆိုတာ ပြောပေးသွားပါမယ်။


Extending logical volume in using #lvextend

            အခု ကျွန်တော်တို့ အပေါ်မှာတည်ဆောက်ခဲ့တဲ့ logical volume ကို extend လုပ်ပြမှာဖြစ်ပါတယ်။အောက်ကပုံမှာ #lvs command ဖြင့်ကြည့်လျှင် "lv01" သည် 196MB ပဲရှိပြီး ထို "lv01" ကို extend လုပ်ရန် volume group ထဲမှာ လုံလောက်သော storage ရှိရမည်ဖြစ်ပါတယ်။ #vgs command နှင့် ကြည့်လျှင် 300MB ကျန်နေတာကို တွေ့ရမည်။ လက်ရှိ "lvo1"သည် /mnt/lvmfolder နှင့် mount လုပ်ထားပါတယ်။


           
           အရင်ဆုံး mount လုပ်ထားသော "/mnt/lvmfolder" ကို unmount လုပ်ရမည်ဖြစ်ပါတယ်။ ထို့နောက် #lvextend ဖြင့် လက်ရှိ size ထက် 200MB ထပ်ပေါင်းမည်ဖြစ်ပါတယ်။ ထို့နောက် mount ပြန်လုပ်၍ file size ကို check ရာတွင် storage update မဖြစ်သေးတာကိုတွေ့ရမည်ဖြစ်ပါတယ်။ file system ကို ပြန် re-check လုပ်ရန်အတွက် #resize2fs ကိုအသုံးပြုပါတယ်။


 
Reducing Logical Volume using #lvreduce

             အရင်ဆုံး logical volume ကို reduce မလုပ်ခင် ထိုထဲတွင် ရှိသော data များကို *** backup *** လုပ်သင့်ပါတယ်။ logical volume ကို reduce လုပ်တာသည် extend လုပ်တာထက် ပို၍ steps များပြီး Risk ပို၍များသောကြောင့် ဖြစ်ပါတယ်။

Steps To follow for reducing Logical Volume
 1. Backup Data
 2. umount the filesystem #umount
 3. check the filesystem #e2fsck
 4. reduce the filesystem #resize2fs
 5. reduce the logical volume #lvreduce
 6. re-check the filesystem #e2fsck
 7. mount the filesystem #mount      


           ပုံထဲကအတိုင်း နောက်ဆုံး file size လျော့သွားလျှင် logical volume ကို reducing လုပ်တာ အဆင်ပြေသွားပြီဖြစ်ပါတယ်။


 Extending Volume Group using #vgextend

                OK! အခု ကျွန်တော်တို့ logical volume တွေကို storage support ပေးတဲ့ volume group ကို extend လုပ်မှာ ဖြစ်ပတယ်။ တစ်နည်းအားဖြင့် logical volume တွေဟာ လိုအပ်သော storage တွေကို ယခု volume group storage pool ထဲမှ ရရှိပြီး အသုံးပြုနိုင်တာဖြစ်ပါတယ်။
                 Volume Group ကို ဘယ်လို extend လုပ်မလဲ ?? ကျွန်တော်တို့ extend လုပ်ရန်အတွက် အရင်ဆုံး computer မှာ attached လုပ်ထားတဲ့ နောက်ထပ် physical hard disk တစ်ခုလုံး 'ဒါမှမဟုတ် လက်ရှိ အသုံးပြုနေတဲ့ hard disk ထဲက lvm မလုပ်ရသေးသော အပိုင်းကို အရင်ဆုံး physical volume တည်ဆောက်ရမည် ဖြစ်ပါတယ်။ ထို့နောက်မှာ ထိုphysical volume ကို အခု လက်ရှိ run နေတဲ့ volume group ထဲကို ထည့်ခြင်းဖြင့် volume group storage ကို တိုးအောင် ပြုလုပ်ရမှာဖြစ်ပါတယ်။


           အခု အရင်ဆုံး #fdisk ဖြင့် partiton တစ်ခု တည်ဆောက်မည်ဖြစ်ပြီး lvm partiton သတ်မှတ်ခြင်းဖြစ်ပါတယ်။


           
              အခု extend လုပ်တော့မှာဖြစ်လို့ အရင်ဆုံး #vgs ဖြင့် မူလ storage size ကိုကြည့်ပြီးနောက် #pvcreate ဖြင့် "/dev/sdb2" ကို အရင် physical volume လုပ်ပါမယ် ထို့နောက် #vgextend ဖြင့် ရရှိလာသော "/dev/sdb2" ကို volume group "vg01"ထဲကို ထည့်မှာဖြစ်ပါတယ်။ ပြီးရင်တော့ volume group သည် storage space 1GB ကျော် ရရှိသွားပြီးဖြစ်ပါတယ်။


Reducing volume group using #vgreduce

            အရင်ဆုံး volume group ကို reduce လုပ်သည်မှာ ထို volume group ထဲမှာ ချိတ်ဆက်ထားသော physical volume တစ်ခုခု ဥပမာ demage ဖြစ်သောကြောင့် replace လုပ်ရမည့် အခြေနေမျို:မှာ အသုံးပြုကြပါတယ်။ အခု ဒီမှာတော့ စောက ပေါင်းထားတဲ့ "/dev/sdb2" ကိုပဲ ပြန် reduce လုပ်ပြမည်ဖြစ်ပါတယ်။



            အရင်ဆုံး#pvdisplay command ဖြင့် physical volume နှစ်ခု ဖြစ်သော "/dev/sdb1" နှင့် "/dev/sdb2" တို့ volume group "vg01" နှင့်ချိတ်ဆက်ထားတာကို ပြထားခြင်းဖြစ်ပါတယ်။





             ထို့နောက် #vgreduce ဖြင့် "/dev/sdb2" physical volume အပိုင်းကို remove လုပ်လိုက်တာဖြစ်ပါတယ်။ သိထားရမည်မှာ တစ်ကယ်တွင် reduce မလုပ်ခင် physical volume အသစ်ကို volume group ထဲထည့်ထားပြီး ဖြစ်ရပါမည်။ထိုမှသာ logical volume တွေကို မထိခိုက်မှာဖြစ်ပါမယ်။ ပုံမှန်အားဖြင့်လည်း အခုဖြုတ်ထုတ်မည့် physical volume ကို logical volume တွေက ယူသုံးနေတယ်ဆိုလျှင် #vgreduce command ကို အသုံးပြုလို့ရမည်မဟုတ်ပါ။ 


Using Snapshot in LVM

                LVM ၏ snapshot features မှာ  ဥပမာ အနေဖြင့် logical volume တစ်ခု mount လုပ်ထားသော folder ကို changes တစ်ခုခု လုပ်ချင်တယ် လက်ရှိ folder ထဲမှာ ရှိနေတဲ့ data တွေကို လဲ အထိအခိုက် မခံချင်ဘူးဆိုလျှင် snapshot features  ကို အသုံးပြုနိုင်ပါတယ်။ ကျွန်တော်တို့ virutal machine snapshot လိုပဲ config  တစ်ခုခု မှားခဲ့ရင် revert ပြန်သွားလို့ရအောင် snapshot ပြုလုပ်ထား တာဖြစ်ပါတယ်။ အခု ဒီမှာကတော့ data ကို snapshot လုပ်ထားတာပေါ့။



           
             အခုပုံ မှာ အရင်ဆုံး "/mnt/lvmfolder" ထဲမှာ "importantdata.txt" ဆိုတာရှိပါတယ်။ ၄င်း data ကို snapshot လုပ်မှာဖြစ်ပါတယ်။ Snapshot  ကိုလဲ #lvcreate  command  ဖြင့်အသုံးရပြီး ထို command ထဲမှာ " -s " ဆိုတာ က "/dev/mapper/vg01-lv01" ကို snapshot လုပ်မယ် လို့ပြောတာဖြစ်ပါတယ်။ ပြီးလျှင် #lvs ဖြင့်ကြည့်လျှင် logical volume "lv-snap" ပေါ်လာမှာဖြစ်ပါတယ်။ထိုနောက် mount လုပ်ပြီးလျှင် ထိုထဲကို ကြည့်ပါက original logical volume အတိုင်းပဲ importantdata.txt  ဆိုတာရောက်နေမှာဖြစ်ပါတယ်။

               အခု ဒီနေရာမှာ snapshot သည် သူ snapshot လုပ်ထားတဲ့ အချိန်က data အတိအကျကိုပဲ မှတ်ထားပေးနိုင်တာဖြစ်ပြီး နောက်ပိုင်း မူလ folder ထဲကို modify လုပ်သော data တွေကို recover လုပ်ပေးနိုင်မှာမဟုတ်ပါ။ နောက် original size သည်ဘယ်လောက်ပဲ ကြီးနေပါစေ snapshot create လုပ်ရတွင် ထို file size  အတိုင်း ပေးရန်မလိုပါ ပြောချင်သည်မှာ snapshot  သည် actual original folder ၏ size ကို backup ယူတာမဟုတ်ပဲ snapshot ဖမ်းထားတဲ့ အချိန်တစ်ခုကိုသာ index ထောက်ထား တာဖြစ်လို့ original က 1TB file size ဖြစ်နေလဲ snapshot create လုပ်တဲ့အခါ 1TB size တူတူ ဖြစ်စရာမလိုပါ။


Recovering file using snapshot #lvconvert --merge 

             အခု demo အနေနဲ့ original folder ထဲက "importantdata.txt" ကိုဖျက်ပြီး snapshot လုပ်ထားတဲ့ logical volume "/dev/mapper/vg01-lv--snap"  ကနေလှမ်းယူပါမယ်။ 




           အခုပုံထဲမှာ ဆိုလျှင် အရင်ဆုံး file ကိုဖျက်လိုက်တယ် ပြီးတော့ mount လုပ်ထားတဲ့ "lvmfolder" ရော "lvmfolder-snap" ကိုပါ  အရင်ဆုံး unmount လုပ်လိုက်ပါတယ်။ ပြီးတော့မှ #lvconvert -merge command  ဖြင့် lost file ကို recover ပြန်လုပ်တာ ဖြစ်ပါတယ်။ #lvconvert  ကို မသုံးပဲ ဒီအတိုင်းcopy & past လုပ်လဲ ရပါတယ်။ ထို့နောက် "lvmfolder" ကို mount လုပ်ပြီး ပြန်ကြည့်လျှင် "importantdata.txt"ကို တွေ့ရမှာဖြစ်ပါတယ်။ 

***Note*** #lvconvert ကိုသုံးပြီးနောက် snapshot  logical volume မှာauto remove ဖြစ်သွားမှာဖြစ်ပါတယ်။ 
                 
                   အခု ဆိုရင် LVM ကိုအသုံးပြုပြီး partition တွေကို တည်ဆောက်တက်နိုင်ပြီ ဖြစ်ပါတယ်။


Share:

4 comments: