Friday, April 10, 2009

Multi boot with Grub

พอดีลง Ubuntu เพิ่มไว้ใน Hard Disk ที่เป็น SATA จากที่เคยมี Windows XP อยู่ใน SATA อีกตัวไว้ก่อนแล้ว
ก็เลยได้เมนูของ Grub มาให้เลือกเข้าได้ทั้ง Ubuntu และ Windows XP

วันดีคืนดี เจ้า SATA ที่มี Windows XP อยู่เกิดพัง แต่ไม่รู้ทำไม Ubuntu ก็พลอย boot ไม่ได้ไปด้วย
ค้นหาไป ๆ มา ๆ ก็ได้ความว่า Grub หาย ต้องติดตั้งใหม่ ซึ่งก็ทำได้ดังนี้
1. boot จาก live CD หรือ USB
2. เปิด Terminal แล้วเข้า grub โดยใช้คำสั่ง

sudo grub
find /boot/grub/stage1

3.จะได้ผลลัพธ์ว่ามี grub อยู่ที่ไหน เช่น (hd0,1)
4.ตามด้วยำคำสั่ง

root (hd0)
setup (hd0)

ตรง hd0 นี่คือเอามาจากผลของข้อ 3.
5.Reboot

หลังจากนั้นพอ Claim เจ้า SATA แล้วติดตั้ง Windows XP ลงไป (ตอนลงถอดเจ้า SATA ที่มี Ubuntu อยู่ออกก่อน กลัว grub หาย)
พอเสียบกลับเข้าไป ปรากฏว่าเข้า Windows XP ผ่านเมนูของ grub เดิมไม่ได้ ไม่แน่ใจว่าลำดับของ Hard Disk เปลี่ยนไปรึเปล่า
ก็เลยลองเรียก System Monitor ได้ความว่า Windows เป็น sda และ Ubuntu เป็น sdb ดังรูป
ubuntu-system-monitor

พอเรียกดู menu.lst ด้วยคำสั่ง
gksudo gedit /boot/grub/menu.lst


title Ubuntu 8.10, kernel 2.6.27-11-generic
root (hd0,0)
kernel /boot/vmlinuz-2.6.27-11-generic root=UUID=c177af43-de6b-44fa-8dcc-1ac6474a9326 ro quiet splash
initrd /boot/initrd.img-2.6.27-11-generic
quiet

title Ubuntu 8.10, kernel 2.6.27-9-generic
root (hd1,0)
kernel /boot/vmlinuz-2.6.27-9-generic root=UUID=c177af43-de6b-44fa-8dcc-1ac6474a9326 ro quiet splash
initrd /boot/initrd.img-2.6.27-9-generic
quiet


ก็เห็นว่า ลำดับของ Hard Disk น่าจะสลับกัน
เพราะที่ kernel ตอนที่ยังไม่ได้เปลี่ยนแปลงเป็น (hd1,0) แต่พอเปลี่ยนแล้วกลายเป็น (hd0,0)

หาข้อมูลจากหลายที่ ลองผิด ลองถูก สุดท้ายก็ได้ผลด้วยการแก้ menu.lst

title Microsoft Windows XP Professional
rootnoverify (hd1,0)
map (hd1) (hd0)
map (hd0) (hd1)
chainloader +1


พยายามเข้าใจเอาเองว่า จาก grub จะมองเห็น Ubuntu เป็น hd0 และ Windows เป็น hd1 แต่พอจะ boot จริง ๆ ต้องให้ Windows เป็น disk ตัวแรก
ก็เลยต้องสลับกันด้วยคำสั่ง
map (hd1) (hd0)
map (hd0) (hd1)

No comments: