05 tháng 11, 2009

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

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.

5 nhận xét:

  1. GM bỏ bao công nghiên cứu quả này, thật choáng quá.

    Trả lờiXóa
  2. I'm Google Man :)

    Trả lờiXóa
  3. bác Lộc cho em copy bài này về ittip của em phát nhá ! 8-) . Reply em sớm để em biết đường mà copy. ghi nguồn là : 2eclass.tk nhở ?

    Trả lờiXóa
  4. Chả hiểu 2 ông trên, ông nào là svcoi nữa.
    Ông guest thì bảo copy về ittip, ông svcoi thì bảo copy từ blog của ông ấy ???

    Trả lờiXóa

Pằng pằng pằng......

Ngày 21/10 (thứ 6) là sinh nhật em.Nhưng do em và nhiều bác hôm đấy bận.Nên quyết định tổ chức trước 1 ngày.Tức là vào ngày mai,thứ 5,20/10....