คำถามเรื่อง Linux Boot Process เป็นคำถามวัดฐานรากความเข้าใจการทำงานร่วมกันระหว่าง Hardware, Kernel และ User-space ที่กรรมการสอบ RRK ชอบใช้ไล่ลำดับตั้งแต่ต้นจนจบ
Question: End-to-End Linux Boot Sequence & Troubleshooting
“ช่วยอธิบายขั้นตอนการบูตของ Linux Server ตั้งแต่วินาทีแรกที่กดปุ่ม Power จนกระทั่งระบบพร้อมให้บริการผู้ใช้ที่ Login Prompt หรือ Systemd Target:
- มีลำดับขั้นตอนหลักอะไรบ้าง ตั้งแต่ BIOS/UEFI –> Bootloader (GRUB2) –> Kernel –> Initramfs/Initrd –> Systemd (Init)?
- ตัว
initramfs(Initial RAM Filesystem) มีหน้าที่อะไร และทำไม Kernel ถึงต้องการมันก่อนที่จะ Mount Root Filesystem (/) จริง?- หากเซิร์ฟเวอร์บูตไม่ขึ้นและค้างอยู่ที่หน้าจอ
Emergency Modeหรือหลุดเข้าไปในหน้าต่างdracut:/#/(initramfs)ปัญหานี้มักเกิดจากสาเหตุใด และคุณจะแก้ปัญหาอย่างไร?”
แนวทางคำตอบและโครงสร้างเนื้อหา (Key Talking Points)
https://bytebytego.com/guides/linux-boot-process-explained
1. ลำดับการบูต 5 ขั้นตอนหลัก
- Step 1: Hardware & Firmware (BIOS / UEFI)
- รัน POST (Power-On Self-Test) ตรวจสอบความพร้อมของ CPU, RAM, อุปกรณ์เชื่อมต่อ
- อ่าน Boot Priority เพื่อมองหา Bootloader:
- Legacy BIOS: อ่าน Master Boot Record (MBR) ขนาด 512 bytes แรกของดิสก์
- Modern UEFI: อ่านไฟล์ Bootloader (
.efi) จากพาร์ทิชันพิเศษ ESP (EFI System Partition – FAT32) เช่น/EFI/BOOT/BOOTX64.EFI
- Step 2: Bootloader (GRUB2)
- โหลดหน้าต่างเมนูให้เลือก Kernel Version หรือใส่ Kernel Parameters (กด
eเพื่อแก้ไข) - ทำหน้าที่โหลดไฟล์ 2 ก้อนสำคัญขึ้นสู่ RAM:
vmlinuz(ตัวบีบอัดของ Linux Kernel)initramfs(หรือinitrd– อิมเมจระบบไฟล์ชั่วคราว)
- ส่งมอบการควบคุม (Execution Control) ให้ Kernel ทำงานต่อ
- โหลดหน้าต่างเมนูให้เลือก Kernel Version หรือใส่ Kernel Parameters (กด
- Step 3: Kernel Initialization
- Kernel คลายการบีบอัดตัวเองและเข้าควบคุม Hardware
- ตรวจสอบสถาปัตยกรรม CPU, ค้นพบและ Initialize ไดรเวอร์ฮาร์ดแวร์พื้นฐานที่ Built-in อยู่ในตัวมัน
- Step 4: The Bridge —
initramfs(Initial RAM Filesystem)- หน้าที่สำคัญ: เป็น Root Filesystem ขนาดเล็กจำลองบน RAM ที่บรรจุ Driver โมดูลที่จำเป็น (เช่น Storage Controller Driver, NVMe, SAS/SATA RAID, LVM, Software RAID, Multipath, หรือ Network driver ในกรณี iSCSI Boot)
- Kernel จะรันโมดูลใน
initramfsเพื่อให้รู้จัก Controller และ Storage $\rightarrow$ ทำการค้นหาและ Mount Root Filesystem (/) ของจริง ที่อยู่บนดิสก์ - เมื่อ Mount
/จริงสำเร็จ จะสั่งเปลี่ยน Root ชั่วคราวด้วยคำสั่งpivot_rootหรือswitch_rootไปยังดิสก์จริง และเคลียร์initramfsออกจาก RAM
- Step 5: Systemd (PID 1) & Targets
- รันโปรเซสแม่ตัวแรกของระบบคือ
/sbin/init(ซึ่งคือ Symlink ไปหาsystemd) - โหลด Configuration จาก
/etc/systemd/system/ - ประมวลผลและสตาร์ต Service ต่างๆ แบบคู่ขนาน (Parallel execution) ไปตามลำดับ Target:
basic.target$\rightarrow$sysinit.target$\rightarrow$multi-user.target(โหมด Text/CLI) หรือgraphical.target(โหมด GUI)
- รัน Service Network, SSHD และพร้อมเปิดรับ Connection
- รันโปรเซสแม่ตัวแรกของระบบคือ
2. เจาะลึกความจำเป็นของ initramfs (คำถามวัดกึ๋น)
- ทำไมไม่ฝัง Driver ทั้งหมดไว้ใน Kernel ตรงๆ?
- ถ้าฝังไดรเวอร์ของฮาร์ดแวร์ทุกค่ายในโลก ขนาด Kernel จะบวมเป็นหลายร้อย MB ทำให้การบูตช้าและเปลือง RAM มหาศาล
- บทบาทของ
initramfs:- เก็บเฉพาะ Driver ที่เครื่องนั้นต้องใช้ในการ “อ่านดิสก์ลูกแรก” เมื่ออ่านดิสก์จริงได้แล้ว Driver ที่เหลือจะค่อยไปอ่านจาก
/lib/modulesบนฮาร์ดดิสก์จริง
- เก็บเฉพาะ Driver ที่เครื่องนั้นต้องใช้ในการ “อ่านดิสก์ลูกแรก” เมื่ออ่านดิสก์จริงได้แล้ว Driver ที่เหลือจะค่อยไปอ่านจาก
3. การแก้ปัญหาเมื่อหลุดไปค้างที่ (initramfs) หรือ Emergency Mode
- สาเหตุยอดฮิต:
- UUID ใน
/etc/fstabไม่ตรง / เปลี่ยน Disk ใหม่: เมื่อระบบหา Disk UUID ของ Root (/) ไม่เจอ จะหยุดชะงักทันที - Filesystem Corrupted (ไฟล์ระบบพัง): เกิดจากการดับกะทันหัน ทำให้ Clean bit ไม่สมบูรณ์ ระบบปฏิเสธการ Mount
- LVM หรือ RAID ไม่ Activate: Driver คอนโทรลเลอร์ไม่โหลด หรือ Array มีปัญหาหลุด degraded
- UUID ใน
- วิธีแก้ไขหน้างาน:
- ใช้
lsblk -fหรือblkidดู UUID ของ Partition จริง เทียบกับข้อมูลที่ระบุใน boot parameter - รันตรวจสอบและซ่อมแซม Filesystem ด้วยตนเอง:
Bashfsck -y /dev/sda1 - หากติดเรื่อง Read-only ให้ Remount เพื่อเข้าไปแก้
/etc/fstab:
Bashmount -o remount,rw / vi /etc/fstab - ทำการพิมพ์
exitหรือrebootเพื่อให้ Kernel ดำเนินการบูตต่อ
- ใช้
โครงสรุป 30 วินาทีสำหรับตอบสัมภาษณ์
*”Linux Boot Sequence เริ่มจาก BIOS/UEFI ทำ POST และส่งต่อให้ GRUB2 โหลด Kernel (
vmlinuz) และinitramfsขึ้นสู่ RAMตัว
initramfsมีหน้าที่โหลด Storage/RAID Driver ที่จำเป็นเพื่อค้นหาและ Mount Root Filesystem (/) จริง บนดิสก์ จากนั้นส่งต่อการทำงานให้systemd(PID 1) เพื่อสตาร์ต Services แบบขนานตาม Target เช่นmulti-user.targetครับ”*

แผนภาพ Infographic ลำดับขั้นตอนการบูตของระบบ Linux ตั้งแต่ระดับเฟิร์มแวร์ฮาร์ดแวร์จนถึงระดับ User Space และ Systemd Targets
โครงสร้างลำดับขั้นตอน (Linux Boot Sequence Pipeline)
[ 1. Firmware ] BIOS / UEFI ──(POST & Boot Device Search)──► ESP / MBR
│
▼
[ 2. Bootloader ] GRUB2 ──(Load Kernel & Initramfs to RAM)──► /boot
│
▼
[ 3. Kernel ] vmlinuz ──(Decompress, Init Hardware Drivers)
│
▼
[ 4. Temp Root ] initramfs ──(Load RAID/LVM/Storage Drivers ──► Mount Real `/`)
│
▼
[ 5. Init (PID 1) ] systemd ──(Read /etc/systemd/system/ & Parallel Execution)
│
▼
[ 6. Targets ] sysinit.target ──► basic.target ──► multi-user.target / graphical.target
เจาะลึก 5 ขั้นตอนหลักในกระบวนการ
1. Hardware & Firmware Stage (BIOS / UEFI)
- POST (Power-On Self-Test): ตรวจสอบความพร้อมของอุปกรณ์ฮาร์ดแวร์พื้นฐาน (CPU, Memory, Mainboard)
- Boot Device Selection: ค้นหาอุปกรณ์บูตตามลำดับ Boot Priority
- Legacy BIOS: อ่าน MBR (Master Boot Record) ขนาด 512 ไบต์แรกของดิสก์
- UEFI: อ่านไฟล์ปฏิบัติการ
.efi(เช่นshimx64.efiหรือgrubx64.efi) จาก Partition พิเศษ ESP (EFI System Partition – FAT32)
2. Bootloader Stage (GRUB2)
- โหลดคอนฟิกูเรชันจาก
/boot/grub2/grub.cfgเพื่อแสดงเมนูให้เลือก Kernel - โหลดไฟล์ 2 ส่วนสำคัญเข้าสู่ RAM:
vmlinuz: ไบนารีเคอร์เนลของ Linux (บีบอัดอยู่)initramfs(หรือinitrd): อิมเมจระบบไฟล์ชั่วคราวบน RAM
- ส่งมอบการประมวลผล (Control) ให้กับ Linux Kernel
3. Kernel Stage
- เคอร์เนลทำการคลายการบีบอัดตัวเองและเข้าควบคุมเครื่อง
- เริ่มต้นโครงสร้างข้อมูลระดับระบบของระบบปฏิบัติการ (CPU Caches, Memory Paging, Interrupt Handlers)
4. The Bridge: initramfs (Initial RAM Filesystem)
- ทำหน้าที่เป็นระบบไฟล์รากชั่วคราวบน RAM เพื่อโหลดโมดูล/ไดรเวอร์เฉพาะทางที่จำเป็นต่อการเข้าถึง Storage:
- เช่น Storage Driver (NVMe, SAS), Software RAID (
mdadm), LVM (lvm2), Filesystem Driver (ext4, xfs) หรือ Multipath
- เช่น Storage Driver (NVMe, SAS), Software RAID (
- ทำการค้นหาและ Mount Root Filesystem จริง (
/) ที่อยู่บนดิสก์ - รันคำสั่ง
pivot_rootหรือswitch_rootเพื่อสลับการทำงานไปยัง Root Filesystem จริงบนดิสก์ และเคลียร์initramfsทิ้งจากหน่วยความจำ
5. Init System & Systemd Targets (User Space – PID 1)
- เคอร์เนลเรียกโปรเซสผู้ใช้ตัวแรกคือ
/sbin/initซึ่งเชื่อมโยง (Symlink) ไปยังsystemd(PID 1) systemdเริ่มต้นโหลด Unit Files และจัดคิวเริ่มการทำงานของ Service ต่างๆ แบบขนาน (Parallel Execution) ตามลำดับ Target:sysinit.target: ตรวจสอบและ Mount Filesystem เพิ่มเติม, ตั้งค่า Swap, สตาร์ต Udevbasic.target: เตรียมความพร้อมระบบพื้นฐาน Socket และ Timersmulti-user.target: สตาร์ต Service สำคัญ เช่น Network, SSHD, Database, Nginx (เทียบเท่า Runlevel 3 เดิม)graphical.target: สตาร์ต Display Manager / X11 / Wayland สำหรับเครื่องที่มี GUI (เทียบเท่า Runlevel 5 เดิม)
จุดเทียบระหว่าง System V Init (ระบบเดิม) กับ Systemd (ระบบปัจจุบัน)
| System V Init (Runlevels) | Systemd Equivalent (Targets) | วัตถุประสงค์การใช้งาน |
| Runlevel 0 | poweroff.target | ปิดเครื่อง (Halt / Shutdown) |
| Runlevel 1 (Single-user) | rescue.target | โหมดกู้คืนระบบแบบ Minimal (ไม่มี Network) |
| Runlevel 3 (Multi-user Text) | multi-user.target | โหมด CLI มาตรฐานสำหรับ Linux Server ทั่วไป |
| Runlevel 5 (Graphical) | graphical.target | โหมด Desktop GUI พร้อมระบบ Network |
| Runlevel 6 | reboot.target | รีสตาร์ตระบบ |
วิธีจำง่ายๆ ให้ใช้สูตรตัวย่อ “B – G – K – I – S – T” และเปรียบเทียบกับ “การขึ้นเวทีคอนเสิร์ต”
สูตรตัวย่อ: B – G – K – I – S – T
“Big Giant Kills Insects, Saves Town”
หรือท่องสั้นๆ: บอส – กรับ – เคอร์เนล – อีนิทแรม – ซิสเต็มดี – ทาร์เก็ต
| ขั้นตอน | ตัวย่อ | เปรียบเหมือนคอนเสิร์ต | ทำหน้าที่อะไรในระบบ |
| 1. BIOS / UEFI | B | ยามเฝ้าประตู / ช่างไฟ | เช็กไฟ POST และมองหาว่าจะไปหยิบกุญแจ (Bootloader) ที่ไหน |
| 2. GRUB2 | G | คนขับรถตู้ | ไปรับนักร้องหลัก (Kernel) กับกระเป๋าเครื่องมือ (initramfs) ขึ้นมาบนรถ (RAM) |
| 3. Kernel | K | นักร้องนำ (ตัวเอก) | ตัวระบบปฏิบัติการ ตื่นขึ้นมาคุมฮาร์ดแวร์ แต่ยังเปิดตู้เสื้อผ้าบนดิสก์จริงไม่เป็น |
| 4. Initramfs | I | กระเป๋าดอกกุญแจชั่วคราว | มีไดรเวอร์ (LVM, RAID) เอาไว้ไขเปิดตู้เสื้อผ้าจริง (Mount Root /) พอเปิดได้แล้วก็ทิ้งไป |
| 5. Systemd | S | ผู้จัดการวง (PID 1) | โปรเซสแรกที่เข้ามาจัดคิว สั่งทุกคนให้เริ่มทำงานพร้อมๆ กัน (Parallel) |
| 6. Targets | T | ฉากจบของการแสดง | เป้าหมายปลายทาง เช่น จบที่หน้าจอดำ CLI (multi-user) หรือหน้าจอภาพ GUI (graphical) |
จุดจำ 3 รอยต่อที่ชอบใช้ออกสอบ (ไม่ต้องจำทุกคำ จำแค่ 3 คู่)
- BIOS –> GRUB: ฮาร์ดแวร์ส่งงานให้ Bootloader
- Kernel + Initramfs –> Real Root: ดึงกุญแจชั่วคราวมาเปิดอ่านดิสก์จริง (
switch_root) - Initramfs –> Systemd: เลิกโหมดกู้ภัย เข้าสู่การรันเซอร์วิสให้คนใช้งาน
ท่องแค่ B – G – K – I – S – T ไล่จากล่างขึ้นบน จะนึกภาพตามสเต็ปออกทันทีโดยไม่ต้องท่องจำศัพท์เทคนิคยาวๆ
Lab Section
การทำแล็บจริงบน VM (VirtualBox, VMware, KVM หรือ Proxmox) จะทำให้เห็นภาพตรงรอยต่อของแต่ละสเต็ปชัดเจนมาก เพราะถ้าอ่านแค่ทฤษฎี เราจะนึกภาพไม่ออกว่า initramfs คืออะไร หรือ Kernel มันเปลี่ยนมือไปให้ systemd ตอนไหน
แนะนำ 4 แล็บเด็ด ที่ทำได้ง่าย ปลอดภัย (ทำบน VM สำรอง) และตรงกับที่ Google ชอบถามเป๊ะๆ ค่ะ:
แล็บที่ 1: ผ่าดูไส้ในของ initramfs (ทำความเข้าใจว่ามันคืออะไร)
initramfs ไม่ใช่ไฟล์ลึกลับ แต่มันคือไฟล์บีบอัด (Archive) แบบ CPIO ที่บรรจุไดเรกทอรีรากจำลอง ลองแกะออกมาดูได้เลยบนเครื่องทดสอบ:
Bash
# 1. สร้างโฟลเดอร์ทดลอง
mkdir -p /tmp/initrd_inspect && cd /tmp/initrd_inspect
# 2. คัดลอก initramfs ของเครื่องปัจจุบันมา (ดูชื่อไฟล์ใน /boot)
cp /boot/initramfs-$(uname -r).img ./initramfs.img # สำหรับ RHEL/CentOS
# หรือ cp /boot/initrd.img-$(uname -r) ./initramfs.img # สำหรับ Ubuntu/Debian
# 3. ใช้คำสั่ง unmkinitramfs (Debian/Ubuntu) หรือ lsinitrd (RHEL/CentOS)
# ถ้าเป็น RHEL/CentOS ดูข้างในได้เลยด้วย:
lsinitrd initramfs.img | grep -iE 'kernel/drivers/block|ext4|xfs'
# ถ้าเป็น Ubuntu/Debian แตกไฟล์ออกมาดู:
unmkinitramfs initramfs.img ./extracted/
ls -la ./extracted/main/
- สิ่งที่จะได้เห็น: คุณจะเห็นว่าข้างในมีโครงสร้างเหมือน Linux เล็กๆ ตัวหนึ่ง มี
/bin,/lib/modulesที่มีไดรเวอร์ Storage/RAID และมีสคริปต์ชื่อinitตัวเล็กๆ ที่เตรียมรันคำสั่งswitch_root
แล็บที่ 2: จำลองวิกฤต บูตหลุดเข้า (initramfs) หรือ dracut:# (Incident ยอดฮิต)
ทดลองแกล้งทำให้ระบบหา Root Disk ไม่เจอ เพื่อฝึกแก้ปัญหาหน้างาน:
Bash
# 1. แกล้งแก้ UUID ใน /etc/fstab (พิมพ์มั่วไป 1 ตัวอักษรตรงบรรทัด /)
sudo nano /etc/fstab
# 2. สั่ง Reboot เครื่อง
sudo reboot
- ผลลัพธ์: เครื่องจะบูตไม่ขึ้น และจะตกไปอยู่ที่หน้าจอ Emergency Mode หรือ
(initramfs)prompt - สิ่งที่ต้องฝึกแก้:
- พิมพ์คำสั่ง
journalctl -xbเพื่อดูว่ามันด่าบรรทัดไหน - ใช้
blkidหรือlsblk -fดู UUID จริง - สั่ง Remount disk เป็นเขียนได้:
mount -o remount,rw / - แก้ไข
/etc/fstabให้ถูกต้อง แล้วพิมพ์exitหรือrebootเพื่อให้เครื่องบูตขึ้นมาปกติ
- พิมพ์คำสั่ง
แล็บที่ 3: แฮกเข้า Root Shell ผ่าน GRUB (Kernel Parameter Injection)
นี่คือท่ามาตรฐานที่ SysAdmin ใช้เวลาลืมรหัสผ่าน root หรือกู้ระบบที่ Service พัง:
- สั่ง Reboot VM แล้วกดปุ่ม
ShiftหรือEscค้างไว้เพื่อให้เมนู GRUB ปรากฏ - ไฮไลต์ที่ Kernel ตัวบนสุดแล้วกดปุ่ม
e(Edit) - เลื่อนลูกศรลงมาหาบรรทัดที่ขึ้นต้นด้วย
linuxหรือlinux16 - เลื่อนไปท้ายบรรทัด เว้นวรรค 1 ทีแล้วเติมคำสั่ง:
Plaintextrd.break(หรือถ้าเป็น Ubuntu ให้ใช้init=/bin/bash) - กดปุ่ม
Ctrl + XหรือF10เพื่อสั่ง Boot
- ผลลัพธ์: Kernel จะหยุดทำงานทันทีหลังจากโหลด Driver เสร็จ และส่ง Shell สิทธิ์ root ให้เราก่อนที่
systemdจะเริ่มทำงานด้วยซ้ำ! คุณจะเห็นกับตาว่าจุดตัดระหว่าง Kernel กับ User-space อยู่ตรงนี้
แล็บที่ 4: ส่องดูลำดับและเวลาการบูตด้วย systemd-analyze
บนเครื่อง Linux ปกติที่บูตเสร็จแล้ว สามารถใช้คำสั่งของ systemd เพื่อดู Timeline การบูตจริงได้เลย:
Bash
# 1. ดูเวลารวมที่ใช้บูต แยกตามช่วง Kernel และ Userspace
systemd-analyze
# 2. ดูว่า Service ตัวไหนทำให้เครื่องบูตช้าสุด (เรียงลำดับเวลา)
systemd-analyze blame
# 3. สร้างภาพผังลำดับการบูต (Critical Chain)
systemd-analyze critical-chain
- สิ่งที่จะได้เรียนรู้: คุณจะเห็นว่า Service ไหนสตาร์ตก่อน-หลัง และเห็นชัดเจนว่า Service ต่างๆ ถูกรันขึ้นมาพร้อมกันแบบขนาน (Parallel) ไม่ได้รันทีละตัวเหมือนยุค SysV init เก่า
สรุป: แนะนำให้ลองเปิด VM ขึ้นมาตัวหนึ่งแล้วลองทำ แล็บที่ 1 กับ แล็บที่ 3 ดูค่ะ ใช้เวลาไม่เกิน 15 นาที แต่จะทำให้จำขั้นตอนและเห็นภาพจริงไปตอบสัมภาษณ์ได้อย่างมั่นใจแบบคนที่ทำแล็บผ่านมือมาเองเลยค่ะ