← สารบัญบทเรียน M7 · Boot & Recovery
M7 · หัวข้อสอบ

การบูตและกู้ระบบ (Boot & Recovery)

บทนี้คือ “ฮีโร่กู้สถานการณ์” ของ RHCSA — เมื่อเครื่องบูตไม่ขึ้น หรือลืมรหัส root ขึ้นมา คุณจะรู้วิธีงัดเครื่องกลับมาให้ทำงานได้ และนี่คือเนื้อหาที่ข้อสอบ ชอบออกที่สุด

🌱 เขียนเพื่อคนที่ไม่เคยแตะ Linux มาก่อนเลย — ค่อยๆ ไปทีละขั้น

1ทำไมบทนี้สำคัญมาก

ถ้าให้เดิมพันว่าข้อสอบ RHCSA จะออกอะไรแน่ๆ — บทนี้คือคำตอบ เพราะข้อสอบเกือบทุกชุดมักจะมีโจทย์ประมาณนี้:

🎯 ทำไมข้อนี้ “กินคะแนน” เยอะ

ข้อรีเซ็ตรหัส root เป็นข้อที่ ถ้าทำไม่ได้ คุณจะล็อกอินเข้าเครื่องไม่ได้เลย — แปลว่าข้ออื่นๆ ที่ต้องใช้ root ก็พังตามไปด้วย! ดังนั้นถ้าฝึกบทนี้ให้คล่อง คุณจะ “ปลดล็อก” คะแนนอีกหลายข้อในเวลาเดียว

ข่าวดีคือ ขั้นตอนทั้งหมดเป็นสูตรตายตัว ท่องจำลำดับให้ได้แล้วทำซ้ำๆ จนคล่อง — ไม่ต้องเข้าใจลึกระดับวิศวกรก็สอบผ่านได้

2เครื่องบูตขึ้นมาได้ยังไง

ก่อนจะกู้ระบบเป็น เราต้องเข้าใจคร่าวๆ ก่อนว่า ตั้งแต่กดปุ่มเปิดเครื่อง จนถึงหน้า login มันเกิดอะไรขึ้นบ้าง ลำดับมีดังนี้:

🔌 ลำดับการบูต (จากเปิดเครื่อง → ถึงหน้า login)
1. เปิดเครื่อง (กดปุ่ม power)
2. BIOS / UEFI  ← เฟิร์มแวร์ในเมนบอร์ด ตรวจฮาร์ดแวร์เบื้องต้น
3. GRUB2        ← เมนูเลือกบูต (ตรงนี้แหละที่เราจะเข้าไปแก้รหัส root)
4. Kernel + initramfs ← โหลดหัวใจของระบบเข้าหน่วยความจำ
5. systemd      ← ตัวจัดการ เริ่มสตาร์ตบริการต่างๆ ตาม target
6. หน้า login   ← พร้อมให้เราล็อกอินเข้าใช้งาน
💡 เปรียบเทียบให้เห็นภาพ

ลองนึกถึง ลำดับการตื่นนอนแล้วเตรียมตัวออกจากบ้าน:

BIOS/UEFI = นาฬิกาปลุกดังขึ้น เราลืมตา เช็กว่าแขนขายังครบ (ตรวจฮาร์ดแวร์)
GRUB2 = ยืนหน้าตู้เสื้อผ้า เลือกว่าวันนี้จะใส่ชุดไหน (เลือกว่าจะบูต kernel ตัวไหน)
Kernel + initramfs = อาบน้ำแต่งตัว ใส่ชุดที่เลือก (โหลดระบบหลัก)
systemd = ทำกิจวัตรเช้า เปิดไฟ ชงกาแฟ เปิดประตู (สตาร์ตบริการทีละอย่าง)
หน้า login = พร้อมออกจากบ้านไปทำงาน (ใช้งานเครื่องได้)

📌 จำแค่นี้ก็พอ

คุณไม่ต้องท่องทุกขั้น แค่จำว่า GRUB2 มาก่อน → kernel → systemd และจุดที่เราจะ “แทรกแซง” เพื่อกู้รหัส root คือตอนอยู่ที่ เมนู GRUB2 (ขั้นที่ 3)

3Targets — โหมดการทำงานของระบบ

สมัยก่อน Linux ใช้คำว่า runlevel (ระดับการทำงาน เป็นตัวเลข 0–6) แต่ RHEL 9 ใช้ systemd ซึ่งเปลี่ยนมาเรียกว่า target แทน — มันคือ “โหมด” ว่าเครื่องจะเปิดบริการมากน้อยแค่ไหน

💡 เปรียบเทียบให้เห็นภาพ

นึกถึง โหมดของโทรศัพท์: โหมดปกติ (เปิดทุกอย่าง), โหมดประหยัดแบต (เปิดเท่าที่จำเป็น), โหมดเครื่องบิน (เปิดน้อยสุด) — target ก็คือการเลือกว่าเครื่อง Linux จะ “เปิดบริการ” มากน้อยแค่ไหนนั่นเอง

target ที่ต้องรู้จักมี 4 ตัวหลัก เทียบกับ runlevel เดิมได้ตามนี้:

Targetrunlevel เดิมทำอะไร
multi-user.target3โหมด text หลายผู้ใช้ ไม่มี GUI — โหมดที่เซิร์ฟเวอร์จริงใช้กันมากสุด
graphical.target5เหมือน multi-user แต่ มีหน้าจอกราฟิก (GUI) เพิ่มเข้ามา
rescue.target1 / sโหมดกู้ระบบ — เมาต์ดิสก์ให้ มีบริการพื้นฐาน ต้องใส่รหัส root
emergency.targetโหมดฉุกเฉินสุดๆ เปิดน้อยที่สุด ดิสก์เมาต์แบบอ่านอย่างเดียว ใช้ตอนระบบพังหนัก
💡 จำง่ายๆ

multi-user = ทำงานปกติแบบไม่มีจอสวย / graphical = มีจอสวย / rescue กับ emergency = ไว้กู้เครื่องเวลามีปัญหา (emergency เปิดน้อยกว่า rescue)

4ดูและตั้ง target เริ่มต้น

“target เริ่มต้น” คือโหมดที่เครื่องจะเข้าโดยอัตโนมัติทุกครั้งที่บูต เราดูและเปลี่ยนได้ด้วยคำสั่ง systemctl

⌨️ ดูว่าตอนนี้ตั้งไว้เป็นโหมดไหน
[root@server1 ~]# systemctl get-default
graphical.target

get-default = “ขอดูว่าโหมดเริ่มต้นคืออะไร” — ในตัวอย่างนี้เครื่องบูตเข้า GUI ทุกครั้ง

⌨️ เปลี่ยนโหมดเริ่มต้น (ถาวร — มีผลทุกครั้งที่บูต)
[root@server1 ~]# systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.

set-default = “ตั้งโหมดเริ่มต้นใหม่” — หลังจากนี้เครื่องจะบูตเข้าโหมด text ทุกครั้ง (เป็นโจทย์ที่ข้อสอบชอบถาม) การเปลี่ยนนี้ ถาวร ต้องรีบูตถึงจะเห็นผลเต็มที่

⌨️ สลับโหมดชั่วคราว (เดี๋ยวนี้ — ไม่ถาวร)
[root@server1 ~]# systemctl isolate graphical.target

isolate = “สลับไปโหมดนี้เดี๋ยวนี้เลย” แต่ ไม่ถาวร — พอรีบูตจะกลับไปใช้ค่า default เดิม เหมาะเวลาอยากลองโหมดอื่นชั่วคราวโดยไม่ต้องรีบูต

📌 set-default vs isolate ต่างกันตรงไหน

set-default = ถาวร (ตั้งค่าว่าบูตครั้งหน้าจะเข้าโหมดไหน) ส่วน isolate = ชั่วคราว (สลับเดี๋ยวนี้ พอรีบูตหาย) — ข้อสอบที่บอกว่า “ให้เครื่องบูตเข้า...” มักหมายถึง set-default

5รีเซ็ตรหัส root (หัวใจของบท)

นี่คือขั้นตอนที่ ต้องท่องให้ขึ้นใจ เพราะเป็นโจทย์ที่ออกสอบบ่อยที่สุด สถานการณ์คือ: คุณไม่รู้รหัส root และต้องตั้งรหัสใหม่ให้ได้ โดยไม่มีทางใช้ passwd ตามปกติ (เพราะล็อกอินเป็น root ไม่ได้ตั้งแต่แรก)

วิธีคือ แทรกเข้าไปตอนบูต เพื่อให้ได้ shell ที่เป็น root โดยไม่ต้องใส่รหัส มาทำทีละขั้น:

ขั้น 1: รีบูต แล้วที่เมนู GRUB กด e

รีบูตเครื่อง พอเห็นเมนู GRUB2 (มีรายการให้เลือกบูต) ให้ กดลูกศรไปที่บรรทัดบนสุด แล้วกดปุ่ม e (edit) เพื่อเข้าโหมดแก้ไข

ขั้น 2: หาบรรทัด linux แล้วเติม rd.break ต่อท้าย

เลื่อนหาบรรทัดที่ขึ้นต้นด้วยคำว่า linux (จะยาวมาก) เลื่อนเคอร์เซอร์ไป ท้ายสุดของบรรทัดนั้น แล้วพิมพ์เว้นวรรคตามด้วย rd.break

✏️ บรรทัด linux ก่อนและหลังแก้
ก่อนแก้:
linux ($root)/vmlinuz-5.14... root=/dev/mapper/rhel-root ro crashkernel=1G

หลังแก้ (เติม rd.break ต่อท้าย):
linux ($root)/vmlinuz-5.14... root=/dev/mapper/rhel-root ro crashkernel=1G rd.break

rd.break = สั่งให้บูตหยุดกลางทาง (ตอนที่ initramfs ยังคุมอยู่) ก่อนที่ระบบจริงจะขึ้นมา — ทำให้เราได้ shell มาทำงานต่อโดยยังไม่ต้องใส่รหัส

ขั้น 3: กด Ctrl+X เพื่อบูตต่อ

กด Ctrl+X (บางที่เขียนว่า F10) เพื่อบูตด้วยบรรทัดที่เราเพิ่งแก้ เครื่องจะบูตแล้วหยุดที่ switch_root prompt (จะเห็นข้อความ switch_root:/#)

ขั้น 4: รีเมาต์ /sysroot ให้เขียนได้

ตอนนี้ระบบจริงของเราถูกเมาต์ไว้ที่ /sysroot แต่เป็นแบบ อ่านอย่างเดียว เราต้องสั่งเมาต์ใหม่ให้เขียนได้ก่อน

⌨️ พิมพ์ทีละบรรทัด
switch_root:/# mount -o remount,rw /sysroot

remount,rw = เมาต์ /sysroot ใหม่ในโหมด rw (read-write = อ่าน-เขียนได้) ถ้าข้ามขั้นนี้ จะตั้งรหัสใหม่ไม่ได้เพราะดิสก์เขียนไม่ได้

ขั้น 5: chroot เข้าระบบจริง

⌨️ พิมพ์ทีละบรรทัด
switch_root:/# chroot /sysroot
sh-5.1# _

chroot /sysroot = “ย้ายตัวเองเข้าไปอยู่ในระบบจริง” ทำให้คำสั่งที่พิมพ์ต่อจากนี้มีผลกับระบบของเราจริงๆ (สังเกตว่า prompt เปลี่ยนเป็น sh-5.1#)

ขั้น 6: ตั้งรหัส root ใหม่

⌨️ พิมพ์ทีละบรรทัด
sh-5.1# passwd root
Changing password for user root.
New password: ********
Retype new password: ********
passwd: all authentication tokens updated successfully.

passwd root = ตั้งรหัสใหม่ให้ user ชื่อ root (พิมพ์รหัสแล้วจะไม่เห็นตัวอักษรบนจอ เป็นเรื่องปกติ) พิมพ์ซ้ำ 2 ครั้งให้ตรงกัน

ขั้น 7: ⭐ touch /.autorelabel — ห้ามลืมเด็ดขาด!

⌨️ พิมพ์ทีละบรรทัด (ขั้นที่สำคัญที่สุด)
sh-5.1# touch /.autorelabel

touch /.autorelabel = สร้างไฟล์เปล่าชื่อ .autorelabel ไว้ที่ / เพื่อ สั่งให้ SELinux ทำ relabel (ติดป้ายความปลอดภัยให้ไฟล์ใหม่ทั้งหมด) ตอนบูตครั้งหน้า

🚨 นี่คือสาเหตุอันดับ 1 ที่คนสอบตกข้อนี้!

ตอนที่เราแก้รหัสด้วย passwd ไฟล์ /etc/shadow ถูกเขียนใหม่ โดยไม่มีป้าย SELinux ที่ถูกต้อง ถ้าไม่สั่ง relabel เครื่องจะบูตขึ้นมาแต่ ล็อกอินไม่ได้ (รหัสถูกแต่เข้าไม่ได้) ทำให้นึกว่าทำพลาด ทั้งที่จริงแค่ลืมบรรทัดนี้

กฎเหล็ก: รีเซ็ตรหัส root ทีไร ต้องพิมพ์ touch /.autorelabel ทุกครั้ง — ท่องให้ติดปาก!

ขั้น 8: ออกแล้วรีบูต

⌨️ พิมพ์ exit สองครั้ง
sh-5.1# exit
switch_root:/# exit
(เครื่องจะบูตต่อ ทำ relabel แล้วรีบูตอีกรอบเอง — รอสักครู่)

exit ครั้งแรก = ออกจาก chroot / exit ครั้งที่สอง = ออกจาก switch_root shell แล้วบูตต่อ ระบบจะ relabel (อาจใช้เวลาสักพักและรีบูตเองอีกครั้ง) จากนั้นล็อกอินด้วยรหัสใหม่ได้เลย

✅ ลำดับที่ต้องท่อง (8 ขั้น)

GRUB กด e → เติม rd.breakCtrl+Xmount -o remount,rw /sysrootchroot /sysrootpasswd roottouch /.autorelabelexit exit

6กู้ระบบที่ /etc/fstab ผิดจนบูตไม่ขึ้น

ไฟล์ /etc/fstab คือรายการบอกระบบว่า “ตอนบูต ให้เมาต์ดิสก์ลูกไหน ไปไว้ที่โฟลเดอร์ไหน” (เดี๋ยวเจาะลึกในบท M8) ปัญหาคือ ถ้าเขียนผิดแม้แค่บรรทัดเดียว เช่นพิมพ์ชื่อดิสก์ผิด — เครื่องอาจบูตไม่ขึ้น แล้วตกไปที่ emergency mode

💡 เปรียบเทียบ

/etc/fstab เหมือน “รายการสัมภาระที่ต้องหยิบก่อนออกจากบ้าน” ถ้าในรายการเขียนว่า “หยิบกระเป๋าจากห้องที่ไม่มีอยู่จริง” คุณก็จะยืนงงหาไม่เจอ ออกจากบ้านไม่ได้ — เครื่องก็ค้างตรง emergency mode แบบเดียวกัน

เมื่อเครื่องตกไป emergency mode มันจะให้ใส่รหัส root แล้วได้ shell มา ขั้นตอนกู้คือ:

⌨️ กู้ fstab ใน emergency mode
Give root password for maintenance: ********
[root@server1 ~]# mount -o remount,rw /
[root@server1 ~]# vim /etc/fstab
(แก้บรรทัดที่ผิด หรือใส่ # หน้าบรรทัดที่มีปัญหาเพื่อปิดมันชั่วคราว)
[root@server1 ~]# systemctl daemon-reload
[root@server1 ~]# mount -a
[root@server1 ~]# reboot
mount -o remount,rw /เมาต์ / ใหม่ให้เขียนได้ (ตอน emergency มันเป็น read-only)
vim /etc/fstabแก้บรรทัดที่เขียนผิด — เคล็ดลับ: ลองใส่ # นำหน้าบรรทัดที่สงสัยเพื่อปิดมันก่อน
systemctl daemon-reloadสั่งให้ systemd อ่าน fstab ใหม่
mount -aทดสอบ! สั่งเมาต์ทุกบรรทัดใน fstab — ถ้า ไม่มี error แปลว่าแก้ถูกแล้ว บูตขึ้นแน่
rebootรีบูตเพื่อยืนยันว่ากลับมาบูตได้ปกติ
⚠️ ก่อน reboot ต้องรัน mount -a เสมอ

การรัน mount -a คือการ “ซ้อมบูต” — ถ้ามันไม่ขึ้น error แสดงว่า fstab ถูกแล้ว ถ้ารีบูตทันทีโดยไม่ทดสอบ แล้วยังผิดอยู่ คุณจะวนกลับมา emergency mode อีกรอบ เสียเวลาสอบฟรีๆ

📌 โยงไปบท M8

รายละเอียดของ /etc/fstab ว่าแต่ละช่องหมายถึงอะไร ใช้ UUID ยังไง จะอธิบายเต็มๆ ในบท M8 · Storage — ตอนนี้แค่รู้วิธี “กู้” ให้บูตกลับมาได้ก็พอ

7ดู log การบูต: journalctl

เวลาเครื่องมีปัญหาตอนบูต เราอยากรู้ว่า “อะไรพัง” — journalctl คือเครื่องมือดู log (บันทึกเหตุการณ์) ของระบบที่ systemd เก็บไว้ให้

⌨️ คำสั่งดู log ที่ใช้บ่อย
[root@server1 ~]# journalctl -b
(แสดง log ของการบูตรอบปัจจุบันทั้งหมด)

[root@server1 ~]# journalctl -xe
(แสดง log ล่าสุดท้ายสุด พร้อมคำอธิบายเพิ่ม เหมาะตอนหาว่าอะไรเพิ่งพัง)
journalctl -b-b = boot — แสดง log ตั้งแต่บูตรอบนี้ ใช้ดูว่าตอนบูตมีอะไรผิดพลาด
journalctl -xe-x เพิ่มคำอธิบาย / -e กระโดดไปท้ายสุด (ล่าสุด) — ดูปัญหาที่เพิ่งเกิดได้เร็ว
💡 เกร็ด

อยู่ในหน้า journalctl แล้วออกไม่เป็น? กด q เหมือนตอนอยู่ใน man นั่นแหละ (มันใช้ตัวเลื่อนหน้าตัวเดียวกัน)

8ข้อผิดพลาดที่ทำให้สอบตกบ่อย

9สรุปคำสั่งบทนี้ (Cheat Sheet)

จัดการ target

คำสั่งทำอะไร
systemctl get-defaultดูว่า target เริ่มต้นคืออะไร
systemctl set-default multi-user.targetตั้ง target เริ่มต้นเป็น text (ถาวร)
systemctl set-default graphical.targetตั้ง target เริ่มต้นเป็น GUI (ถาวร)
systemctl isolate graphical.targetสลับโหมดเดี๋ยวนี้ (ชั่วคราว ไม่ถาวร)

รีเซ็ตรหัส root (8 ขั้น เรียงลำดับ)

ขั้นทำอะไร
1ที่เมนู GRUB กด e
2ไปท้ายบรรทัด linux เติม rd.break
3กด Ctrl+X บูตต่อ
4mount -o remount,rw /sysroot
5chroot /sysroot
6passwd root (ตั้งรหัสใหม่)
7touch /.autorelabel ⭐ ห้ามลืม
8exit แล้ว exit (รีบูต)

กู้ fstab / ดู log

คำสั่งทำอะไร
mount -o remount,rw /เมาต์ / ใหม่ให้เขียนได้ (ใน emergency mode)
mount -a“ซ้อมบูต” — ทดสอบ fstab ว่าถูกไหมก่อนรีบูต
systemctl daemon-reloadให้ systemd อ่าน fstab ใหม่
journalctl -bดู log การบูตรอบปัจจุบัน
journalctl -xeดู log ล่าสุดพร้อมคำอธิบาย
✅ จบบทนี้คุณควรทำได้

เข้าใจลำดับการบูต (GRUB → kernel → systemd) → เปลี่ยน target เริ่มต้นได้ → รีเซ็ตรหัส root ได้คล่องโดยไม่ลืม touch /.autorelabel → และกู้ระบบที่ fstab ผิดให้กลับมาบูตได้ — ครบเครื่องสำหรับข้อสอบหมวด Boot & Recovery!