Sunday, August 29, 2021

Grub in a nutshell

                 ဒီ article လေးမှာ grub bootloader အကြောင်းလေးရှင်းပြမှာဖြစ်ပါတယ်။ အရင်ဆုံး Grub အလုပ်လုပ်ပုံလေးကို ပြောပြပါမယ်။ 

What is Grub? 

            Grub ဆိုတာက Linux system တွေမှာအသုံးပြုတဲ့ bootloader ဖြစ်ပါတယ်။ Bootloader ဆိုတာက Linux OS ကို boot တက်အောင် ပြုလုပ်ပေးတဲ့ service တစ်ခု ဖြစ်ပါတယ်။ Grub အကြောင်းရှင်းရင်းနဲ့ Linux OS ရဲ့ boot procedure အကြမ်းဖြင်းလေးကို ထည့်ပြောချင်ပါတယ်။ 


Linux Boot Process Procedure

Linux OS တစ်ခု စပြီး တက်ဖို့အတွက် လိုအပ်တာတွေကတော့

1. BIOS/POST (Power on Self Test)

2. MBR (Master Boot Record)

3. Grub

4. Kernel 

5. PID 1 (init <or> systemd)  

ဆိုပြီး ရှိပါတယ်။ စစချင်း Power on လိုက်တဲ့အချိန်မှာ POST ကစပြီး computer ရဲ့ Input/Output hardwares တွေ အလုပ်လုပ်မလုပ် စစ်ပါတယ်။ BIOS က စစ်ဆေးပြီးတဲ့အခါမှာ harddisk ရဲ့ special partition  ဖြစ်တဲ့ MBR မှာရှိတဲ့ Grub bootloader configuration ကို run စေပါတယ်။ ထို့နောက် Grub ကမှစဆင့် Linux Kernel ကို run စေပြီး Linux Kernel ကမှ Systemd ကို လွှဲပေးကာ Systemd (if using systemd) က /etc/systemd အောက်မှာ ရှိတဲ့ configuration အတိုင်း Linux OS ကို boot တက်စေပါတယ်။

So, what if grub gone wrong?

            အခု ဒီ Linux boot procedure လေးကိုကြည့်မယ်ဆိုရင် grub တစ်ခုခုဖြစ်သွားခဲ့သည်ရှိသော် linux kernel ကို မ run စေတော့ပဲ OS လဲ boot တက်လာမှာမဟုတ်တော့ဘူးဖြစ်ပါတယ်။ ဒီတော့ Linux OS ပေါ်မှာ ရှိတဲ့ Grub အကြောင်းလေးတွေကို ဆက်လေ့လာရအောင်။

What are the grub configurations file and their location?

1. /etc/default/grub


              ဒီ config file ကတော့ grub နဲ့ ပတ်သတ်ပြီး ဘာလို changesပဲဖြစ်ဖြစ် ပြုလုပ်ချင်ရင် ဒီ configuration file မှာသွားပြီး ပြင်ပေးရပါတယ်။ ဒီ file ကမှတစ်ဆင့်... 

2. /boot/grub2/grub.cfg



           /etc/default/grub က ပြုပြင်လိုက်တဲ့ changes မှန်သမျှကို ဒီ config file မှာ သွားပြီး update (or) new grub config file generate လုပ်ပါတယ်။ အရေးကြီးတာ တစ်ခုက ဒီ config file ကနေ တိုက်ရိုက် ပြုပြင်ဖို့ recommend မပေးထားပါဘူး။ ပြင်ချင်ရင် /etc/default/grub မှာသွားပြင်ရပါမယ်။

3. /etc/grub.d 



            အဲ့တော့ /etc/default/grub က ပြင်သမျှကို /boot/grub2/grub.cfg မှာ update ဖြစ်စေဖို့အတွက်  ဒီ /etc/grub.d directory အောက်မှာရှိတဲ့ shell script file တွေကနေ တစ်ဆင့် လုပ်ဆောင်ပေးပါတယ်။ ဒီ shell script file တွေကို "grub2-mkconfig" ဆိုတဲ့ grub program လေးက manage လုပ်ပေးပါတယ်။

Let's try editing Grub file

            အိုကေ ဒါဆို grub အကြောင်းလေး သိသွားပြီ ဆိုရင် grub file ကို manage လုပ်ကြည့်ရအောင်။ အရင်ဆုံး edit လုပ်မယ်ဆိုရင် /etc/default/grub မှာသွားပြီး ပြုလုပ်ရပါမယ်။ ဒီမှာတော့ grub menu default 5s ကို 10s ဆိုပြီး ပြောင်းလိုက်မယ်။ နောက် Grub Disable Recovery Menu ကို Enable လုပ်မယ်။

            Changes လုပ်ပြီးသွားပြီဆိုရင် /boot/grub2/grub.cfg file ကို update လုပ်ပေးရပါမယ်။ Update လုပ်ပေးဖို့အတွက် "grub2-mkconfig" command ကိုအသုံးပြုပြီး update လုပ်ပါတယ်။ ပြီးနောက် grub effect ဖြစ်မဖြစ် reboot ချပြီး ကြည့်ရအောင်။ အောက်ပုံမှာဆိုရင် timeout 10s ဖြစ်သွားပြီး grub menu မှာလဲ recovery options menu တွေ ပါ၀င်လာတာကို တွေ့ မှာဖြစ်ပါတယ်။ 





  

Can we backup grub config before changes?

            Yes, grub ကို တစ်ခုခု changes မပြုလုပ်ခင် config file ကို backup လုပ်ထားလို့ရပါတယ်။ Backup လုပ်ချင်ရင်တော့ /boot/grub2/ အောက်မှာရှိတဲ့ grub.cfg file ရယ် grubenv file ရယ်ကို rename လုပ်ပြီး backup လုပ်ထားလို့ရပါတယ်။ Boot မတက်နိုင်ခဲ့သည်ရှိသော် backup config file ကို rescue mode ဖြင့် တက်ပြီး ပြန်လည်အသုံးပြုနိုပါတယ်။ 


Let's purposely mess around with Grub


                    အိုကေ ဒါဆို bootloader error တက်အောင် ကျွန်တော်တို့ လက်ရှိ active ဖြစ်နေတဲ့ grub config file ကို delete ကျွေးလိုက်မယ် ပြီးနောက် reboot ချလိုက်တဲ့ အခါမှာ grub file မရှိတော့သည့်အတွက် kernel ကို ဆက် run စေတော့ပဲ grub shell နေရာမှာ ပဲဆက်မသွားတော့ပဲရှိနေမှာဖြစ်ပါတယ်။ 






    

            အခုဆိုရင် grub config file ကို ပြန်ပြီး rewrite လုပ်ဖို့အတွက် reboot ချ ISO ကို attache လုပ်ပြီး  rescue mode ဖြင့် တက်ရပါမယ်။ 




ပြီးရင်တော့ Rescue mode က  read-write mode ဖြင့် တက်မည် ကို confirm "1" ဖြင့် ရွေးပြီး chroot ဖြင့် root environment create လုပ်ပါမယ်။ 



Ok, How many ways to recover grub config file?


                    ၃မျိုးရှိပါတယ်။ ပထမတစ်မျိုးက backup လုပ်ထားတဲ့ config file တွေကို rename ပြန်လုပ်ပြီး boot ပြန်နိုင်တယ်။ အောက်ပုံမှာဆိုရင် /boot/grub2/ အောက်မှာ .bak file ဖြင့် backup သိမ်းထားတဲ့ file နှစ်ခု ကို rename ပြန်လုပ် reboot ချပြီး  grub ကို recover ပြန်လုပ်နိုင်ပါတယ်။






    
            ဒုတိယ နည်းလမ်းက ကိုယ့်မှာ backup file တွေမရှိတော့ဘူး ဒါပေမယ် /etc/default/grub file က ရှိသေးတယ် ဆိုရင် grub2-mkconfig command ကို အသုံးပြုပြီး grub config file ကို generate ကာ boot ပြန်တက်နိုင်ပါတယ်။





            ဒါဆို နောက်ဆုံး တစ်နည်းကတော့ အကယ်၍ /etc/default/grub file မှာ missing ဖြစ်သွားပြီဆိုရင် အရင်ဆုံး /etc/default/grub file ကို ပြန်ရေးပြီးတော့မှ grub2-mkconfig command ဖြင့် grub config ကို generate ပြန်လုပ်နိုင်မှာဖြစ်ပါတယ်။

အိုကေ ဒါကတော့ grub in a nutshell article လေးပဲဖြစ်ပါတယ်။ 

That's it 😊


Pls Like and Subscribe Our Root Of Info FB Page and Youtube Channel


https://www.facebook.com/rootofinfo


https://www.youtube.com/channel/UCkOi7WxhUBKONv3uD0CvuWw?view_as=subscriber


Thank you!!!



Share:

0 comments:

Post a Comment