情景:本本裝有Ubuntu 12.04 + Win7 32。重裝Win7 64后,Ubuntu啟動菜單被覆蓋。
恢復的方法有多種,思路都一樣。第一步,進入Linux環境;第二步。修改Grub使其重新覆蓋windows的MBR。
我使用的方法為easyBCD。
步驟:
在win7上安裝easyBCD;打開該軟件后如下圖:
可以看到只有一個啟動項。我們再加一個引導Linux的啟動項,如下圖:點擊添加新條目->NeroGrub->安裝。
安裝成功后在C盤會看到以下NeoGrub文件和NST文件夾。
重啟,選擇NeoGrub,然后便能進入grub。
到這里之后,進行下一步操作之前,我們先要明白自己的硬盤分區是什么結構。以我的為例:
右擊計算機->管理->磁盤管理,如下圖:
(備注:以sd表示磁盤,磁盤0表示為sda,若有磁盤1,則表示為sdb,磁盤2表示為sdc……)
系統保留分區為sda1,C盤系統盤為sda2,DEF三個邏輯分區合起來為一個擴展分區,叫sda3,然后具體的D盤為sda4,E盤為sda5,F盤為sda6,Linux分區為sda7,linux交換空間為sda8。
但是在Ubuntu 下看到的跟這個略為不同:
用fdisk -l命令查看:
可以看見區別么?少了sda4。我在網上查資料,說是linux約定sda1~4為基本分區(主分區+擴展分區),所以不可能把sda4這個稱呼給D盤,因為D盤是邏輯分區。
另一個區別是linux把自己的系統分區和交換空間也放在擴展分區里的。
好,說到這里,我們繼續恢復Ubuntu Grub的步驟。
通過以上的鋪墊,我們知道了Linux系統分區位於sda8。不知道也沒關系,一個個分區試也能試出來。
grub> root(hd0,x) grub> ls 輪換使用上述兩個命令,直到看到了linux系統下的文件夾(如lost+found,etc等等),此時的(hd0,x)即是linux分區。另一個區別是linux文件系統格式為ext2(或者ext3、ext4)。windows分區為ntfs。
之前的操作到了重啟,選擇NeoGrub啟動菜單進入grub命令行,用root(hdm,n)命令選擇m塊硬盤上的n分區。對我的機器來說就是:
grub> root(hd0,7)
有同學可能會納悶了,之前不是說在sda8分區上嗎,怎么選擇的是(hd0,7)啊。這是因為hd(hard drive)是從0開始計數的,而sda從1開始。從hd0也能看出hd是從0的。hd0就表示你的第一塊硬盤。下一步:
grub> kernel /boot/vmlinuz-x.x.x-xx-generic root=/dev/sda8
vmlinuz-x.x.x-xx-generic中的x為kernel的版本,可以按Tab鍵自動補全,也可以用 ls /boot/ 命令查看一下。下一步:
grub> initrd /boot/initrd.img-x.x.x-xx.generic
最后一步:
grub> boot
這樣就能進入Ubuntu 了。
進去之后,修改grub,用grub覆蓋windows 7的MBR:
$ sudo update-grub
$ sudo grub-install /dev/sda
大功告成,重啟。