สำหรับผู้ดูแลระบบ 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 คือ
-
แสดง boot menu ให้เลือก Kernel หรือระบบปฏิบัติการ
-
โหลด Linux Kernel จาก
/boot -
โหลด
initramfsหรือ initial RAM filesystem -
ส่ง kernel command-line parameters เช่น
ro,quiet,console=ttyS0 -
ช่วยให้ผู้ดูแลระบบเข้า 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 -
kernelpath ของ kernel -
argskernel parameters -
initrdpath ของ 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
ขั้นตอนทั่วไปคือ
-
เปิดเครื่องหรือ reboot
-
ที่หน้า GRUB menu เลือก kernel ที่ต้องการ
-
กดปุ่ม
e -
หา line ที่ขึ้นต้นด้วย
linux -
เพิ่ม parameter ท้ายบรรทัด
-
กด
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
-
อย่าแก้
/boot/grub2/grub.cfgโดยตรง
ไฟล์นี้ควรถูกสร้างจากเครื่องมือ ไม่ใช่แก้ด้วยมือ -
ใช้
grubbyสำหรับจัดการ kernel parameters
โดยเฉพาะงานเพิ่ม/ลบ parameter และเปลี่ยน default kernel -
สำรองไฟล์ก่อนแก้เสมอ
อย่างน้อยควร backup/etc/default/grubและ config path ที่ระบบใช้อยู่ -
มี console access ก่อน reboot
โดยเฉพาะเครื่อง remote server -
เก็บ kernel รุ่นก่อนหน้าไว้อย่างน้อย 1 รุ่น
เพื่อ fallback เมื่อ kernel ใหม่มีปัญหา -
ทดสอบใน 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

