ubuntu: บันทึกการซ่อม grub

คราวก่อนบันทึก การติดตั้งหลายระบบปฏิบัติการ ปรากฎว่าเครื่องมีปัญหานิดหน่อย เลยต้องติดตั้ง WinMe กลับเข้าไป ทำให้ grub หายหมด จึงต้องทดลองซ่อมให้ grub คืนมา

คราวก่อน
/dev/hda1 เป็น WinMe
/dev/hda2 เป็น WinXP
/dev/hda3 เป็น extend
/dev/hda5 เป็น /boot
/dev/hda6 เป็น swap
/dev/hda7 เป็น /

เริ่มซ่อมดังนี้
บูตด้วยแผ่น Ubuntu Live CD 6.06.1 LTS

เปิด Terminal
Applications -> Accessories -> Terminal

แปลงตัวเป็น root
$ sudo su

สร้างจุดเมานต์ /mnt/root
# mkdir /mnt/root

เมานต์ให้ /dev/hda7 มาอยู่ที่ /mnt/root
# mount /dev/hda7 /mnt/root

เตรียมการย้ายรูตไปอยู่ที่ /mnt/root โดยต้องเมานต์ process และลิงก์ device ไปที่ใหม่
# mount -t proc none /mnt/root/proc
# mount -o bind /dev /mnt/root/dev
# mount -t sysfs none /mnt/root/sys

ย้ายรูต
# chroot /mnt/root /bin/bash

เนื่องจากแยก /boot เป็น /dev/hda5 เลยต้องเมานต์ลงมาทับ /boot
# mount /dev/hda5 /boot

คราวนี้ก็ทำตามวิธีของ คุณหมอ DrRider จาก ThaiLinuxCafe ได้แล้วครับ
# grub
grub> root (hd0,4)

Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0)

Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,4)/grub/stage2 /grub/menu
.lst"... succeeded
Done.

เรียบร้อยแล้วครับ ออกจาก grub ด้วยคำสั่ง quit แล้วก็บูตใหม่ได้เลย

update

  • หากใช้แผ่นเดเบียนแบบดิบ ๆ เมื่อบูตและทำงานผ่านขั้นตอน chroot แล้ว ถ้าขึ้นข้อผิดพลาดว่า
    Error Opening terminal: Bterm

    ให้ใช้คำสั่งว่า
    # export TERM=linux
    แล้วก็จะสามารถทำงานต่อจนจบได้ครับ