Khôi phục khởi động vào Ubuntu 9.10 sau khi cài lại Windows

0- Đôi điều về GRUB2

Bắt đầu từ Ubuntu 9.10, chương trình GRUB2 được dùng thay cho GRUB1 phổ biến xưa nay. GRUB2 được viết lại từ đầu, không phải bản nâng cấp của GRUB1 do đó có nhiều điểm khác so với GRUB1. Vì vậy tìm hiểu để làm chủ được nó là cần thiết.

GRUB (viết tắt của GRand Unified Bootloader) là chương trình khởi động hệ điều hành (bootloader) dùng phổ biến ở các hệ điều hành kiểu Unix: Linux, Solaris. Windows dùng bootloader là NTLDR. Nhiệm vụ của bootloader là tải hệ điều hành vào RAM sau đó trao quyền điều khiển máy tính cho hệ điều hành.

Khi máy tính khởi động, đầu tiên nó đọc ROM BIOS để tìm xem khởi động từ thiết bị nào (CDROM, ổ cứng, ổ mềm, ổ USB hay mạng). Tiếp theo, nó tải chương trình GRUB stage 1 từ Master Boot Record (MBR) của thiết bị đó vào RAM, sau đó GRUB stage 1 chỉ làm mỗi một việc là tìm GRUB stage 2 trên thiết bị khởi động, tải tiếp nó vào RAM và chuyển quyền điều khiển cho GRUB stage 2.

GRUB stage 2 sẽ cho hiện boot menu để người dùng chọn khởi động hệ điều hành nào đang có trên ổ cứng.

Lệnh cài GRUB stage 1 là “grub-install”. File cấu hình của GRUB stage 2 với Ubuntu (trước 9.10), Debian, openSUSE là /boot/grub/menu.lst; với Fedora là /boot/grub/grub.conf; với Ubuntu 9.10 là /boot/grub/grub.cfg/etc/default/grub.

Đặc biệt, người dùng không được phép chỉnh sửa /boot/grub/grub.cfg như với menu.lst.

1- Khôi phục GRUB2 sau khi cài lại Windows:

Khi cài chung Ubuntu 9.10 và Windows trên cùng một máy, có khi sau đó phải cài lại Windows vì virus, hỏng file, v.v… Windows sẽ ghi đè lên MBR, do đó khi khởi động máy chỉ vào thẳng Windows mà không có boot menu để chọn, do đó không khởi động được Ubuntu nữa.

Để khôi phục lại boot menu, theo một trong hai cách sau:

Cách 1: dùng đĩa CD của Ubuntu 9.10.

Boot máy bằng đĩa CD Ubuntu 9.10. Khi khởi động xong, mở Terminal ( Applications > Accessories > Terminal) rồi chạy lần lượt các lệnh sau:

(Giả sử Ubuntu cài trên partition sda3 của ổ cứng sda)

sudo -i(để chuyển sang user root).

mount /dev/sda3 /mnt

grub-install --root-directory=/mnt/ /dev/sda

mount --bind /proc /mnt/proc

mount --bind /dev /mnt/dev

mount --bind /sys /mnt/sys

chroot /mnt update-grub

umount /mnt/sys

umount /mnt/dev

umount /mnt/proc

exit

(Update 8/10/2011: cách này có thể làm đơn giản hơn một chút, xem tại đây)

Cách 2: Dùng chương trình grub4dos

Tải file zip mới nhất của grub4dos từ đây. Giải nén ra.

Với Windows XP:

Copy file grldr trong gói grub4dos vào C:\. Mở file ẩn boot.ini và thêm dòng sau vào file:

c:\grldr=”grub4dos”

Với Windows Vista và Windows 7:

Copy hai file grldr,grldr.mbr vào C:\. Tạo file boot.ini tại C:\ rồi copy và paste đoạn mã sau vào trong file:

[boot loader]
timeout=0
default=c:\grldr.mbr
[operating systems]
C:\grldr.mbr=”Grub4Dos”

Tạo file menu.lst trong C:\ , copy và paste đoạn mã sau vào trong file:

timeout 0
default 0
title grub2
find
--set-root /boot/grub/core.img
kernel /boot/grub/core.img
boot

Khởi động lại máy, chọn boot từ Grub4Dos. rồi chọn tiếp boot vào Ubuntu từ boot menu. Sau khi đã login vào Ubuntu, chạy lệnh sau trong Terminal để cài lại grub vào MBR:

sudo grub-install /dev/sda

2- Sửa một vài thông số khởi động.

Trong Ubuntu 9.10, nhấn Alt+F2 rồi chạy lệnh sau để mở file:

gksu gedit /etc/default/grub

Trong file này có một số thông số thay đổi được:

GRUB_DEFAULT=0 Trị số 0 quy định hệ điều hành tự động khởi động là ở hàng đầu tiên của boot menu , tức là Ubuntu 9.10. Muốn Windows khởi động tự động, xem nó ở hàng thứ mấy (đếm từ 0) trong boot menu rồi thay giá trị đó vào đây.

GRUB_TIMEOUT=”10″ 10 giây là thời gian boot menu chờ người dùng chọn hệ điều hành, nếu không chọn, hệ điều hành quy định ở GRUB_DEFAULT sẽ được khởi động. Muốn nhanh hơn có thể thay giá trị thấp hơn, ví dụ 5.

Sau khi sửa file nói trên, cần mở terminal chạy lại lệnh sudo update-grub.

3- Sửa file /boot/grub/grub.cfg

Mặc dù file này được bảo vệ rất kỹ, nhưng vẫn có thể sửa được với các lệnh sau:

sudo chmod +w /boot/grub/grub.cfg

sudo nano /boot/grub/grub.cfg

Ví dụ: khi trên máy đã cài Mandriva, sau khi cài Ubuntu 9.10 mặc dù trong boot menu có dòng dành cho Mandriva nhưng khi chọn nó thì Mandriva không khởi động được.

Nếu mở file grub.cfg như trên thì thấy đoạn dành cho Mandriva như sau:

menuentry “linux (on /dev/sda6)” {

insmod ext2

set root=(hd0,6)

search –no-floppy –fs-uuid –set 4c7b246a-654d-447d-8e6d-1b0b39f66eb1

linux /boot/vmlinuz BOOT_IMAGE=linux root=UUID=4c7b246a-654d-447d-8e6d-1b0b39f66eb1 splash=silent vga=788

initrd (hd0,5)/boot/initrd.img

}

Sửa lại dòng initrd (hd0,5) thành initrd (hd0,6) giống như dòng set root = (hd0,6) ở trên là boot vào Mandriva được.

Sửa tiếp dòng linux (on /dev/sda6) thành Mandriva (on /dev/sda6) để hiện tên Mandriva trên boot menu.

Chi tiết hơn về GRUB2 xem tại đây. và tại đây.

5 thoughts on “Khôi phục khởi động vào Ubuntu 9.10 sau khi cài lại Windows

  1. Anh oi cho em hoi, neu cai Ubuntu 10.04 tren 1HDD trc va cai openSuse sau nhung tren 1 HDD khac. Khi em boot vao thi grub stage cua openSuse khoi dong trc sau do la grub2 => no chay thang vao open Suse ma ko co ti dau vet gi cua U. Em set first boot cho HDD cai U roi nhung no van vao thang openSuse. Sua theo cach khoi phuc Grub2 nhung ko dc. Vay anh co cach nao chi em de due boot 2 OS nay khong.

    • openSUSE 11.2 vẫn dùng Grub1, không nhận được các hệ dùng Grub2. Dùng quyền root thêm vào file /boot/grub/menu.lst ba dòng sau:
      title Ubuntu 10.04
      root (hd0,x)
      kernel /boot/grub/core.img
      trong đó, ví dụ Ubbuntu đang cài ở ổ thứ nhất, partition 7 (sda7) -> (hd0,6), nếu cài ở ổ thứ hai, partition 5 (sdb5) -> (hd1,4)
      Nếu trót làm hỏng grub của openSUSE thì cách khôi phục xem http://wp.me/p2VXH-oK (dùng đĩa openSUSE)

  2. Chào bạn mình có thể hỏi bạn một câu ko. Mình cài winxp ở ổ C. Sau đó cài ubuntu ở ổ đĩa E. Do máy bị hư nên mình foramat lại máy. Khi khởi động lại máy nó cũng ko nhận được khởi động từ ubuntu. MÌnh cũng làm như bạn nói (dùng chương trình grub4dos) để khôi phục là khởi động từ ubuntu nhưng nó lại báo là không tìm thấy file
    find–set-root /boot/grub/core.img
    Bạn có thể giúp mình khắc phục lỗi này không.

Bình luận về bài viết này