ทำความเข้าใจ GRUB2 บน Rocky Linux 10: Boot Loader ที่ SysAdmin ควรรู้

ทำความเข้าใจ GRUB2 บน Rocky Linux 10: Boot Loader ที่ SysAdmin ควรรู้

สำหรับผู้ดูแลระบบ Linux หนึ่งในสถานการณ์ที่ทำให้ใจหายที่สุดคือ “อัปเดตระบบแล้ว reboot ไม่กลับมา” โดยเฉพาะเครื่อง Server ที่ตั้งอยู่คนละที่ ไม่มีจอ ไม่มี Keyboard และเข้าถึงได้เฉพาะ SSH เท่านั้น

เบื้องหลังช่วงเวลาสั้น ๆ ระหว่างกดเปิดเครื่องกับระบบ Linux พร้อมใช้งาน มีส่วนสำคัญที่ชื่อว่า GRUB2 ทำหน้าที่เลือก Kernel, โหลด initramfs และส่งค่า boot parameters ให้ระบบปฏิบัติการเริ่มทำงานได้ถูกต้อง

บทความนี้จะพาทุกท่านทำความเข้าใจ GRUB2 บน Rocky Linux 10 แบบ Hands-on สำหรับงาน SysAdmin จริง โดยเน้นคำสั่งที่ควรรู้ วิธีตรวจสอบ boot entries การเปลี่ยน default kernel การเพิ่ม kernel parameter และข้อควรระวังก่อนแก้ไข bootloader


GRUB2 คืออะไร

GRUB2 ย่อมาจาก GRand Unified Bootloader version 2 เป็น boot loader ที่ใช้กันอย่างแพร่หลายใน Linux distribution ตระกูล Enterprise Linux เช่น Rocky Linux, AlmaLinux, RHEL และ Fedora

หน้าที่หลักของ GRUB2 คือ

  1. แสดง boot menu ให้เลือก Kernel หรือระบบปฏิบัติการ

  2. โหลด Linux Kernel จาก /boot

  3. โหลด initramfs หรือ initial RAM filesystem

  4. ส่ง kernel command-line parameters เช่น ro, quiet, console=ttyS0

  5. ช่วยให้ผู้ดูแลระบบเข้า rescue mode หรือเลือก Kernel รุ่นก่อนหน้าได้เมื่อระบบมีปัญหา

ใน Rocky Linux 10 โครงสร้างการจัดการ boot entries จะเกี่ยวข้องกับแนวคิด Boot Loader Specification หรือ BLS มากขึ้น ผู้ดูแลระบบจึงไม่ควรแก้ไฟล์ grub.cfg โดยตรงเหมือนสมัยเก่า แต่ควรใช้เครื่องมืออย่าง grubby และตรวจสอบไฟล์ใน /boot/loader/entries/


พื้นฐานที่จำเป็นก่อนเริ่ม

บทความนี้ทดสอบแนวคิดกับสภาพแวดล้อมดังนี้

  • OS: Rocky Linux 10.x

  • Kernel: 6.12.x

  • Boot Loader: GRUB2

  • สิทธิ์ผู้ใช้: user ที่ใช้ sudo ได้

  • เหมาะกับ: Server, VM, Lab, Cloud Instance และเครื่องทดสอบ

ตรวจสอบเวอร์ชันระบบก่อนเริ่ม

cat /etc/os-release
uname -r

ตัวอย่างผลลัพธ์ที่ควรเห็น

NAME="Rocky Linux"
VERSION="10.x (Red Quartz)"

ตรวจสอบว่าเครื่อง boot แบบ UEFI หรือ BIOS/Legacy

if [ -d /sys/firmware/efi ]; then
  echo "Boot Mode: UEFI"
else
  echo "Boot Mode: BIOS/Legacy"
fi

คำสั่งนี้สำคัญมาก เพราะตำแหน่งไฟล์ bootloader และพฤติกรรมบางอย่างอาจต่างกันระหว่าง UEFI กับ BIOS/Legacy


⚠️ คำเตือนก่อนแก้ไข GRUB2

GRUB2 เป็นส่วนที่เกี่ยวข้องกับการ boot ระบบโดยตรง หากแก้ผิด เครื่องอาจ boot ไม่ขึ้นได้ โดยเฉพาะ Server ที่ไม่มี console access

ก่อนแก้ไขควรทำสิ่งต่อไปนี้เสมอ

# ตรวจสอบ default kernel ปัจจุบัน
sudo grubby --default-kernel

# ดู kernel parameters ที่ระบบใช้อยู่จริงหลัง boot
cat /proc/cmdline

# ตรวจสอบ boot entries ทั้งหมด
sudo grubby --info=ALL

หากเป็น VM แนะนำให้ทำ Snapshot ก่อน หากเป็นเครื่องจริงควรมีช่องทางเข้า console เช่น IPMI, iDRAC, iLO, Proxmox Console, VMware Console หรือ KVM Console


โครงสร้างไฟล์สำคัญของ GRUB2 บน Rocky Linux 10

ไฟล์และ directory ที่ SysAdmin ควรรู้มีดังนี้

/etc/default/grub

ไฟล์นี้ใช้เก็บค่า default สำหรับ GRUB เช่น timeout และ kernel command-line หลัก

/etc/grub.d/

เป็น directory ที่เก็บ script สำหรับสร้าง GRUB configuration

/boot/grub2/grub.cfg

เป็นไฟล์ configuration ที่ GRUB2 ใช้อ่านตอน boot โดยทั่วไปไฟล์นี้ถูก generate จากเครื่องมือ ไม่ควรแก้ไขตรง ๆ

/boot/loader/entries/

เป็น directory สำคัญในระบบที่ใช้ BLS โดยจะมีไฟล์ .conf สำหรับ kernel แต่ละตัว

/boot/vmlinuz-*
/boot/initramfs-*.img

เป็นไฟล์ Kernel และ initramfs ที่ถูกโหลดระหว่าง boot

/boot/efi/EFI/rocky/

พบได้บนระบบที่ติดตั้งแบบ UEFI ใช้เก็บไฟล์ bootloader สำหรับ firmware แบบ UEFI

ตรวจสอบไฟล์ GRUB symlink ที่ระบบใช้อยู่

ls -l /etc/grub2*.cfg

ดู path จริงของไฟล์

readlink -f /etc/grub2.cfg
readlink -f /etc/grub2-efi.cfg

Screenshot แนะนำ: ภาพผลลัพธ์ ls -l /etc/grub2*.cfg เพื่อให้ผู้อ่านเห็นว่าเครื่องตนเองอ้างอิงไฟล์ GRUB ไปที่ใด


เข้าใจ Boot Process แบบย่อ

ลำดับการ boot ของ Rocky Linux 10 แบบเข้าใจง่ายคือ


อธิบายแบบ SysAdmin คือ

  • BIOS/UEFI เริ่มทำงานจาก firmware ของเครื่อง

  • GRUB2 แสดง boot menu และเลือก kernel

  • Kernel เริ่มทำงานและ mount root filesystem

  • initramfs เตรียม driver/storage/LVM/RAID ที่จำเป็น

  • systemd เริ่ม service ต่าง ๆ

  • เครื่องพร้อมใช้งาน

ถ้าระบบ boot ไม่ขึ้น ปัญหาอาจเกิดได้หลายจุด เช่น GRUB หา kernel ไม่เจอ, kernel parameter ผิด, initramfs ไม่มี driver, root filesystem เสีย หรือ service หลักล้มเหลวหลัง boot


ตรวจสอบ Boot Entries ด้วย grubby

บน Rocky Linux 10 เครื่องมือที่ควรรู้จักคือ grubby เพราะใช้จัดการ boot entries และ kernel parameters ได้ปลอดภัยกว่าการแก้ grub.cfg ตรง ๆ

ติดตั้งเครื่องมือที่จำเป็น

sudo dnf install -y grubby grub2-tools

ดู default kernel ปัจจุบัน

sudo grubby --default-kernel

ดูรายการ boot entries ทั้งหมด

sudo grubby --info=ALL

หาก output ยาวมาก สามารถใช้ less

sudo grubby --info=ALL | less

ตัวอย่างข้อมูลที่ควรสังเกต

index=0
kernel="/boot/vmlinuz-6.12.0-xxx.el10.x86_64"
args="ro crashkernel=... quiet"
initrd="/boot/initramfs-6.12.0-xxx.el10.x86_64.img"

ความหมายคือ

  • index ลำดับ entry ใน boot menu

  • kernel path ของ kernel

  • args kernel parameters

  • initrd path ของ initramfs


ตรวจสอบ BLS Entries

ดูไฟล์ boot entries จริง

ls -lh /boot/loader/entries/

เปิดดูไฟล์ตัวอย่าง

sudo sed -n '1,120p' /boot/loader/entries/*.conf

ตัวอย่างโครงสร้างไฟล์ BLS

title Rocky Linux (6.12.0-xxx.el10.x86_64) 10
version 6.12.0-xxx.el10.x86_64
linux /vmlinuz-6.12.0-xxx.el10.x86_64
initrd /initramfs-6.12.0-xxx.el10.x86_64.img
options root=/dev/mapper/rocky-root ro quiet

จุดสำคัญคือ kernel parameter ของแต่ละ entry จะอยู่ในบรรทัด options

อย่างไรก็ตาม ไม่แนะนำให้แก้ไฟล์เหล่านี้ด้วยมือถ้าไม่จำเป็น ควรใช้ grubby เพื่อให้ระบบจัดการให้ถูกต้อง


เปลี่ยน Default Kernel

กรณีที่ update kernel แล้วเครื่องมีปัญหา ผู้ดูแลระบบอาจต้องเลือก boot ด้วย kernel รุ่นก่อนหน้า

ดูรายการ kernel ทั้งหมดก่อน

sudo grubby --info=ALL | grep '^kernel'

ตัวอย่างผลลัพธ์

kernel="/boot/vmlinuz-6.12.0-211.16.1.el10.x86_64"
kernel="/boot/vmlinuz-6.12.0-124.8.1.el10.x86_64"
kernel="/boot/vmlinuz-0-rescue-xxxxxxxx"

ตั้ง default kernel เป็นรุ่นที่ต้องการ

sudo grubby --set-default /boot/vmlinuz-6.12.0-124.8.1.el10.x86_64

ตรวจสอบอีกครั้ง

sudo grubby --default-kernel

จากนั้น reboot เพื่อทดสอบ

sudo systemctl reboot

หลัง boot กลับมา ตรวจสอบ kernel ที่ใช้อยู่จริง

uname -r

เพิ่ม Kernel Parameter ให้ทุก Boot Entry

ตัวอย่างกรณีใช้งานจริง เช่น ต้องการเพิ่ม serial console ให้ VM หรือ Cloud Instance

sudo grubby --update-kernel=ALL --args="console=ttyS0,115200"

ตรวจสอบว่าเพิ่มสำเร็จหรือไม่

sudo grubby --info=ALL | grep console

หลัง reboot ตรวจสอบค่าที่ kernel ใช้งานจริง

cat /proc/cmdline

หากต้องการลบ parameter ออก

sudo grubby --update-kernel=ALL --remove-args="console=ttyS0,115200"

หมายเหตุ: ควรเพิ่มเฉพาะ parameter ที่เข้าใจผลกระทบแล้ว เพราะบางค่ามีผลต่อ network, storage, security และ boot behavior โดยตรง


เพิ่ม Kernel Parameter เฉพาะ Kernel ปัจจุบัน

ถ้าต้องการแก้เฉพาะ kernel ที่ใช้อยู่ปัจจุบัน

sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="console=ttyS0,115200"

ตรวจสอบ entry ของ kernel ปัจจุบัน

sudo grubby --info=/boot/vmlinuz-$(uname -r)

ลบ parameter ออกจาก kernel ปัจจุบัน

sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="console=ttyS0,115200"

แนวทางนี้เหมาะกับการทดสอบก่อนนำไปใช้กับทุก kernel


ปรับ Timeout ของ GRUB Menu

หากต้องการให้ GRUB menu แสดงนานขึ้น เช่น 5 วินาที เพื่อให้เลือก kernel ได้ทัน ให้แก้ไฟล์ /etc/default/grub

สำรองไฟล์ก่อน

sudo cp -a /etc/default/grub /etc/default/grub.bak.$(date +%F-%H%M)

เปิดไฟล์

sudo nano /etc/default/grub

แก้หรือเพิ่มค่า

GRUB_TIMEOUT=5

จากนั้น generate configuration ใหม่

if [ -d /sys/firmware/efi ]; then
  sudo grub2-mkconfig -o "$(readlink -f /etc/grub2-efi.cfg)"
else
  sudo grub2-mkconfig -o "$(readlink -f /etc/grub2.cfg)"
fi

ตรวจสอบว่าไม่มี error

echo $?

หากได้ 0 หมายถึงคำสั่งสำเร็จ

Screenshot แนะนำ: ภาพไฟล์ /etc/default/grub หลังตั้ง GRUB_TIMEOUT=5 และผลลัพธ์คำสั่ง grub2-mkconfig


แก้ Kernel Parameter ชั่วคราวตอน Boot

กรณีเครื่อง boot ไม่ขึ้น อาจต้องแก้ parameter ชั่วคราวจากหน้า GRUB menu

ขั้นตอนทั่วไปคือ

  1. เปิดเครื่องหรือ reboot

  2. ที่หน้า GRUB menu เลือก kernel ที่ต้องการ

  3. กดปุ่ม e

  4. หา line ที่ขึ้นต้นด้วย linux

  5. เพิ่ม parameter ท้ายบรรทัด

  6. กด Ctrl + x เพื่อ boot ด้วยค่าชั่วคราว

ตัวอย่าง parameter สำหรับเข้า rescue target

systemd.unit=rescue.target

หรือ emergency mode

emergency

การแก้แบบนี้มีผลเฉพาะ boot รอบนั้นเท่านั้น หลัง reboot ค่าจะหายไป เหมาะสำหรับการกู้ระบบหรือแก้ปัญหาเฉพาะหน้า


ตั้งรหัสผ่านให้ GRUB2

เครื่องที่มีคนเข้าถึง console ได้ เช่น ห้อง Lab, Data Center, เครื่องเรียนการสอน หรือเครื่องที่วางในพื้นที่สาธารณะ ควรพิจารณาตั้งรหัสผ่านให้ GRUB2 เพื่อป้องกันการแก้ boot parameters โดยไม่ได้รับอนุญาต

ตรวจสอบว่ามีคำสั่ง grub2-setpassword หรือไม่

command -v grub2-setpassword

ถ้าไม่พบ ให้ติดตั้งเครื่องมือเพิ่มเติม

sudo dnf install -y grub2-tools-extra

ตั้งรหัสผ่าน GRUB2

sudo grub2-setpassword

ระบบจะให้กรอกรหัสผ่าน 2 ครั้ง จากนั้นตรวจสอบไฟล์ที่ถูกสร้าง

sudo ls -l /boot/grub2/user.cfg

⚠️ ควรเก็บรหัสผ่านนี้อย่างปลอดภัย เพราะหากลืม อาจกระทบต่อการแก้ไข boot menu ในภายหลัง


Rebuild GRUB Configuration อย่างปลอดภัย

หากแก้ /etc/default/grub หรือ script ใน /etc/grub.d/ แล้วต้อง rebuild config ให้สำรองไฟล์ก่อน

GRUB_CFG="$(readlink -f /etc/grub2.cfg)"
sudo cp -a "$GRUB_CFG" "/root/grub.cfg.$(date +%F-%H%M).bak"

สำหรับ UEFI ให้ใช้ path ที่ระบบชี้จริง

if [ -d /sys/firmware/efi ]; then
  GRUB_CFG="$(readlink -f /etc/grub2-efi.cfg)"
else
  GRUB_CFG="$(readlink -f /etc/grub2.cfg)"
fi

echo "Using GRUB config: $GRUB_CFG"
sudo cp -a "$GRUB_CFG" "/root/grub.cfg.$(date +%F-%H%M).bak"
sudo grub2-mkconfig -o "$GRUB_CFG"

หลังสั่งงานแล้วควรอ่าน output ให้ครบ หากมี error ต้องแก้ก่อน reboot


ตรวจสอบหลัง Reboot

หลัง reboot กลับมา ให้ตรวจสอบว่าเครื่องใช้ kernel และ parameters ตามที่ต้องการหรือไม่

uname -r

ดู kernel command line ที่ใช้งานจริง

cat /proc/cmdline

ตรวจสอบ default kernel

sudo grubby --default-kernel

ตรวจสอบ service ที่ล้มเหลว

systemctl --failed

ดู log ของ boot ปัจจุบัน เฉพาะ warning ขึ้นไป

journalctl -b -p warning

ถ้าทุกอย่างปกติ แสดงว่าการปรับ GRUB2 สำเร็จ


Troubleshooting ปัญหาที่พบบ่อย

1. เครื่อง Boot ไม่ขึ้นหลัง Update Kernel

แนวทางแก้ไข

  • เข้า console

  • เลือก kernel รุ่นก่อนหน้าจาก GRUB menu

  • หลัง boot ได้แล้ว ตั้ง default kernel กลับเป็นรุ่นที่เสถียร

sudo grubby --info=ALL | grep '^kernel'
sudo grubby --set-default /boot/vmlinuz-<kernel-version>
sudo systemctl reboot

2. แก้ Kernel Parameter แล้วระบบมีปัญหา

ตรวจสอบค่าที่ใช้อยู่

cat /proc/cmdline

ลบ parameter ที่เพิ่มไว้

sudo grubby --update-kernel=ALL --remove-args="<parameter>"

ตัวอย่าง

sudo grubby --update-kernel=ALL --remove-args="console=ttyS0,115200"

3. ไม่เห็น GRUB Menu

ตรวจสอบค่า timeout

grep GRUB_TIMEOUT /etc/default/grub

ตั้งค่าใหม่ เช่น 5 วินาที

sudo nano /etc/default/grub
GRUB_TIMEOUT=5

แล้ว rebuild config

if [ -d /sys/firmware/efi ]; then
  sudo grub2-mkconfig -o "$(readlink -f /etc/grub2-efi.cfg)"
else
  sudo grub2-mkconfig -o "$(readlink -f /etc/grub2.cfg)"
fi

4. grubby ไม่พบ Boot Entries

ตรวจสอบ BLS entries

ls -lh /boot/loader/entries/

ตรวจสอบไฟล์ kernel

ls -lh /boot/vmlinuz-*
ls -lh /boot/initramfs-*

หากไฟล์หายหรือเสีย อาจต้อง reinstall kernel package หรือกู้จาก backup/snapshot

5. ระบบเจอ Kernel แต่ Boot แล้วค้าง

ตรวจสอบ initramfs และ rebuild หากมีการเปลี่ยน driver, storage, LVM หรือ module สำคัญ

sudo dracut -f

จากนั้น reboot และตรวจสอบ log อีกครั้ง

sudo systemctl reboot

Best Practices สำหรับ SysAdmin

  1. อย่าแก้ /boot/grub2/grub.cfg โดยตรง
    ไฟล์นี้ควรถูกสร้างจากเครื่องมือ ไม่ใช่แก้ด้วยมือ

  2. ใช้ grubby สำหรับจัดการ kernel parameters
    โดยเฉพาะงานเพิ่ม/ลบ parameter และเปลี่ยน default kernel

  3. สำรองไฟล์ก่อนแก้เสมอ
    อย่างน้อยควร backup /etc/default/grub และ config path ที่ระบบใช้อยู่

  4. มี console access ก่อน reboot
    โดยเฉพาะเครื่อง remote server

  5. เก็บ kernel รุ่นก่อนหน้าไว้อย่างน้อย 1 รุ่น
    เพื่อ fallback เมื่อ kernel ใหม่มีปัญหา

  6. ทดสอบใน VM ก่อนใช้กับ Production
    Bootloader เป็นจุดที่ผิดพลาดแล้วกระทบหนัก ควรทดสอบก่อนเสมอ


สรุป

GRUB2 บน Rocky Linux 10 เป็นส่วนสำคัญของกระบวนการ boot ที่ผู้ดูแลระบบควรเข้าใจ ไม่ใช่แค่เพื่อปรับแต่ง boot menu แต่เพื่อแก้ปัญหาเมื่อระบบ boot ไม่ขึ้นหลัง update kernel หรือเปลี่ยน configuration สำคัญ

แนวทางที่ควรจำคือ ใช้ grubby ในการดูและแก้ boot entries, ตรวจสอบ BLS entries ที่ /boot/loader/entries/, หลีกเลี่ยงการแก้ grub.cfg โดยตรง และสำรองไฟล์ก่อนเปลี่ยนค่าเสมอ

สำหรับผู้เริ่มต้น แนะนำให้ทดลองใน Rocky Linux 10 VM ก่อน เช่น Proxmox, VirtualBox หรือ VMware จากนั้นลองดู boot entries, เปลี่ยน timeout, เพิ่ม kernel parameter แบบไม่กระทบระบบ และฝึก rollback kernel เพื่อเตรียมพร้อมสำหรับงานดูแล Server จริง



Write by Dr.Arnut Ruttanatirakul
SysAdmin Knowledge
https://www.sysadmin.in.th
June 11, 2026