11/5/09

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. và tại đây.







1 comment:

Anonymous said...

gioi oi copy cua nhau!!! lam mai o được