- สาเหตุทั่วไปที่ทำให้ตัวจัดการบูตล้มเหลว ได้แก่ การติดตั้ง Windows หรือการปรับขนาดพาร์ติชั่น
- วิธีการกู้คืนระบบโดยใช้คำสั่ง GRUB ในบรรทัดคำสั่งโดยตรง โดยไม่จำเป็นต้องพึ่งพาความช่วยเหลือจากภายนอก
- ดำเนินการติดตั้ง Loader ใหม่ทั้งหมดโดยใช้สภาพแวดล้อม LiveUSB และเทคนิค chroot
- การจัดการรายการบูต EFI และการล้างไดเร็กทอรีที่เหลืออยู่บนระบบสมัยใหม่

ผมเชื่อว่าคุณคงเคยเจอปัญหาแบบนี้: คุณเปิดคอมพิวเตอร์ด้วยความตื่นเต้น แต่แทนที่จะเห็นเมนูเลือกระบบปฏิบัติการตามปกติ คุณกลับเจอกับหน้าจอสีดำและข้อความที่อ่านไม่ออก ทำให้คุณงงงวยไปหมด การทำให้GRUB boot manager เสียหาย เป็นปัญหาคลาสสิกในหมู่ผู้ใช้ Linux ไม่ว่าจะเกิดจากความประมาทขณะจัดการพาร์ติชั่น หรือเพราะ Windows ตัดสินใจว่า bootloader ของตนเองสำคัญกว่าและได้เขียนทับการทำงานของเราไปแล้ว
ข่าวดีก็คือ แม้ว่าคุณอาจรู้สึกเหมือนถูกล็อกอยู่นอกบ้าน แต่ก็มีหลายวิธีที่จะกลับเข้าไปได้ ขึ้นอยู่กับว่าคุณมีไดรฟ์ USB ที่บูตได้หรือไม่ หรือสามารถใช้งานคอนโซลกู้คืนได้หรือไม่ กระบวนการก็จะแตกต่างกันไป แต่สิ่งสำคัญคืออย่าตกใจ มาดูกันว่ามีวิธีแก้ปัญหาใดบ้างที่จะช่วยกู้คืนระบบปฏิบัติการ Debian, Ubuntu หรือระบบปฏิบัติการที่ใช้ Debian เป็นพื้นฐานให้กลับมาใช้งานได้อีกครั้ง
ทำไม GRUB ถึงล้มเหลว?

ก่อนที่จะทำการแก้ไขระบบ สิ่งสำคัญคือต้องเข้าใจว่าเกิดอะไรขึ้นเพื่อป้องกันไม่ให้เกิดขึ้นอีก โดยทั่วไปแล้ว เมื่อติดตั้ง Windows หลังจาก Linux ระบบของ Microsoft จะเขียนทับเซกเตอร์บูต MBRทำให้ GRUB ถูกลบไป นอกจากนี้ยังพบได้บ่อยมากที่ตัวชี้บูตจะถูกเปลี่ยนแปลงและระบบอาจสูญหายไปเมื่อจัดการพาร์ติชั่นดิสก์เพื่อเพิ่มพื้นที่ว่างในไดรฟ์ข้อมูล
ในบางกรณีที่เกิดขึ้นไม่บ่อยนักการอัปเดตเคอร์เนลหรือระบบอาจทำให้บูตโหลดเดอร์เสียหายได้ แม้แต่ในการตั้งค่าบูตสามระบบที่ซับซ้อน (เช่น Windows, Mac และ Linux ที่ใช้ OpenCore) ตัวจัดการบูตของบุคคลที่สามอาจเขียนทับการตั้งค่า GRUB ทำให้คุณติดอยู่ที่พรอมต์คำสั่ง
การกู้คืนอย่างรวดเร็วจากคอนโซล GRUB

ถ้าโชคดีพอที่คอมพิวเตอร์จะบูตขึ้นมาได้ แต่กลับแสดงหน้าจอคำสั่ง (grub>) ทันที คุณสามารถลองกู้คืนกระบวนการบูตได้โดยไม่ต้องใช้ซีดีหรือแฟลชไดรฟ์ USB ขั้นแรก ให้กดปุ่ม 'c' เพื่อเข้าสู่คอนโซลหากคุณยังไม่ได้อยู่ในนั้น เมื่อเข้าไปแล้ว เป้าหมายคือ ระบุตำแหน่งที่ระบบอยู่ เรียกใช้คำสั่ง lsซึ่งจะแสดงรายการดิสก์และพาร์ติชั่นที่มีอยู่ เช่น (hd0,msdos1)
เมื่อคุณเห็นรายการแล้ว คุณต้องค้นหาพาร์ติชั่นที่มีโฟลเดอร์ /boot อยู่ ลองใช้คำสั่งต่อไปนี้เพื่อทำเช่นนั้น: ls (hd0,1)/ จนกว่าคุณจะพบไฟล์ระบบ เมื่อพบแล้ว คุณต้องบอกตัวจัดการว่าจะค้นหาเคอร์เนลระบบได้ที่ใดโดยใช้คำสั่ง set prefix=(hd0,1)/boot/grub และรักษาความปลอดภัยระดับรากด้วย set root=(hd0,1). สังเกตว่า โดยปกติแป้นพิมพ์จะเป็นภาษาอังกฤษดังนั้น วงเล็บและเครื่องหมายทับจะอยู่บนแป้นที่แตกต่างจากปกติ
ขั้นตอนสุดท้ายในโหมดนี้คือการโหลดเคอร์เนล เราใช้คำสั่ง linux /boot/vmlinuz... root=/dev/sda1 (โดยแทนที่เวอร์ชันเคอร์เนลด้วยเวอร์ชันของคุณและพาร์ติชันด้วยพาร์ติชันที่ถูกต้อง) หลังจากนั้น เราจะรันคำสั่งนี้ initrd /boot/initrd... และสุดท้ายคำสั่ง bootเพื่อหลีกเลี่ยงการทำเช่นนี้ทุกครั้งที่คุณเปิดเครื่องพีซี เมื่อเข้าสู่ระบบ Linux แล้ว คุณต้องเปิดเทอร์มินัลในฐานะผู้ใช้ root และเรียกใช้คำสั่งต่อไปนี้ grub-install / dev / sda ตามด้วย update-grub2 y update-initramfs -u.
การติดตั้งระบบใหม่แบบละเอียดโดยใช้ LiveUSB และ Chroot

หากวิธีการก่อนหน้านี้ล้มเหลว เราจำเป็นต้องใช้สภาพแวดล้อมภายนอก สร้าง... USB ที่สามารถบูตได้ด้วย Rufus ใช้ระบบปฏิบัติการที่ใช้ Debian เป็นพื้นฐาน (เช่น Ubuntu) แล้วบูตจากระบบนั้น เมื่อเข้าสู่ระบบแล้ว ให้ใช้คำสั่งต่อไปนี้ sudo fdisk -l สำหรับ ระบุให้แน่ชัดว่าพาร์ติชั่นรูทของคุณอยู่ที่ใด และถ้าคุณมีพาร์ติชั่นแยกต่างหาก ก็คือพาร์ติชั่นสำหรับบูต ตัวอย่างเช่น ถ้าไดเร็กทอรีรูทของคุณคือ /dev/sda2 คุณจะต้องทำการเมานต์มันที่ /mnt โดยใช้คำสั่ง sudo mount /dev/sda2 /mnt.
เพื่อให้ระบบทำงานได้ราวกับว่าเราอยู่ภายในระบบที่เสียหายของคุณ เราจำเป็นต้องเชื่อมต่อไดเร็กทอรีเสมือนของระบบ ซึ่งทำได้โดย... คำสั่งผูก: sudo mount --bind /dev /mnt/dev, sudo mount --bind /dev/pts /mnt/dev/pts, sudo mount --bind /proc /mnt/proc y sudo mount --bind /sys /mnt/sysเมื่อโครงสร้างนี้เสร็จสมบูรณ์แล้ว เราจะดำเนินการต่อไป sudo chroot /mntซึ่งทำให้เราสามารถดำเนินการโดยตรงกับระบบฮาร์ดไดรฟ์ได้
เมื่อเราเข้าสู่ระบบหลักเรียบร้อยแล้ว เราจะดำเนินการติดตั้งใหม่ครั้งสุดท้าย grub-install --boot-directory=/boot/ --recheck /dev/sdaเพื่อทำให้งานเสร็จสมบูรณ์ เราจะสร้างไฟล์การกำหนดค่าขึ้นใหม่ด้วย grub-mkconfig -o /boot/grub/grub.cfgสิ่งที่เหลืออยู่ก็คือการออกจาก chroot ด้วยคำสั่ง exit จากนั้นรีสตาร์ทคอมพิวเตอร์เพื่อตรวจสอบว่าทุกอย่างกลับสู่สภาวะปกติแล้ว
กรณีพิเศษ: UEFI, EFI และความขัดแย้งของไดเร็กทอรี
ในระบบสมัยใหม่ที่ใช้ UEFI บางครั้งปัญหาไม่ได้อยู่ที่ว่า GRUB หายไป แต่เป็นเพราะว่ามี... รายการบูตที่ขัดแย้งกันหลายรายการ เนื่องจากการติดตั้งครั้งก่อน ในกรณีเหล่านี้ คุณสามารถลองเริ่มคอมพิวเตอร์โดยใช้ configfile (hdN,gptM)/boot/grub/grub.cfgเมื่อคุณเข้าสู่ระบบได้แล้ว สิ่งสำคัญคือต้องล้างข้อมูลส่วนที่เหลือจากเวอร์ชันเก่าๆ ออกไปให้หมด
ในการทำความสะอาดระบบปฏิบัติการอย่าง MAX นั้น มีเครื่องมือต่างๆ เช่น check-efi-installหากคุณตรวจพบไดเร็กทอรีที่ล้าสมัยใน /boot/efi/EFI/ คุณสามารถลบไดเร็กทอรีเหล่านั้นได้โดยใช้คำสั่ง rm -rf เพื่อหลีกเลี่ยงความสับสนเมื่อเริ่มต้นระบบ นอกจากนี้ หากปัญหาเกิดจาก Windows ซ่อนพาร์ติชั่น EFI คุณสามารถใช้ diskpart จาก CMD ของ Windows เพื่อกำหนดตัวอักษรให้กับพาร์ติชั่นนั้น และลบโฟลเดอร์ของระบบปฏิบัติการที่คุณไม่ได้ใช้งานแล้วด้วยตนเอง ซึ่งจะเป็นการลบร่องรอยของตัวโหลดเก่าออกไป
หากวิธีทั้งหมดนี้ไม่ได้ผล ให้ตรวจสอบ BIOS และตรวจสอบให้แน่ใจว่าได้ปิดใช้งาน Secure Boot แล้วและตั้งค่าโหมดบูตเป็น UEFI แทนที่จะเป็น Legacy/CSM นอกจากนี้ ควรตรวจสอบว่าไม่ได้เปิดใช้งานการป้องกันการเขียน NVRAM เนื่องจากจะทำให้คำสั่ง grub-install ไม่สามารถเขียนรายการบูตใหม่ลงในเมนบอร์ดได้
เพื่อแก้ไขข้อผิดพลาดเหล่านี้ ไม่ว่าจะเป็นการจัดการคอนโซลกู้คืน การบังคับติดตั้ง chroot ใหม่จากไดรฟ์ USB หรือการล้างรายการ EFI ที่เสียหาย กุญแจสำคัญอยู่ที่การระบุพาร์ติชันอย่างถูกต้องและตรวจสอบให้แน่ใจว่าบูตโหลดเดอร์ชี้ไปยังเคอร์เนลระบบปฏิบัติการที่ถูกต้อง
นักเขียนผู้หลงใหลเกี่ยวกับโลกแห่งไบต์และเทคโนโลยีโดยทั่วไป ฉันชอบแบ่งปันความรู้ผ่านการเขียน และนั่นคือสิ่งที่ฉันจะทำในบล็อกนี้ เพื่อแสดงให้คุณเห็นสิ่งที่น่าสนใจที่สุดเกี่ยวกับอุปกรณ์ ซอฟต์แวร์ ฮาร์ดแวร์ แนวโน้มทางเทคโนโลยี และอื่นๆ เป้าหมายของฉันคือการช่วยคุณนำทางโลกดิจิทัลด้วยวิธีที่เรียบง่ายและสนุกสนาน
