2010年(8)
分类: LINUX
2010-04-29 15:13:46
背景:
現在的Linux基本都使用Grub啟動。Grub根據事先的配置,載入kernel等。例如:在 /boot/grub/menu.lst 中,有
title Ubuntu 8.04.3 LTS, kernel 2.6.24-23-generic root (hd0,6) kernel /boot/vmlinuz-2.6.24-23-generic root=UUID=352b6906-7a3e-4c58-8652-d8d182c7293c ro quiet splash initrd /boot/initrd.img-2.6.24-23-generic |
可見,root是在 (hd0,6) 分區中的。(其中 hd0,6 是grub中的分區表示法,即 /dev/sda7)
問題:
當用戶重新分區後,無論是在windows中還是在Linux中,只要改變了硬盤分區,分區號就會相應改變,比如 /dev/sda7 變為 /dev/sda8。此時,若 grub 配置未做相應改變,重啟後便會無法挂載原分區,出現 Error 17。
解法:
重裝 grub 即可。
由於系統已不能進入,只好拿出 Live CD。以ubuntu為例:
1. 使用ubuntu live desktop CD進入系統,用戶名ubuntu,密碼直接回車。
2. 打開終端 (terminal),用 sudo fdisk -l 查看當前硬盤分區。(注:因為涉及系統操作,一定要加sudo)
例如:
$sudo fdisk -l /dev/sda Disk /dev/sda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x8a941a0f Device Boot Start End Blocks Id System /dev/sda1 * 1 1824 14651248+ 83 Linux /dev/sda2 1825 19209 139645012+ 83 Linux /dev/sda3 19210 19457 1992060 82 Linux swap / Solaris |
3. 重指定根分區,重裝grub。下面直接摘自其他網友:
$sudo grub
$find /boot/grub/stage1
#find命令会返回一个值,比如(hd0,7)
$root (hdx,x)
#如果find命令返回的(hd0,7),这里你就root (hd0,7)
$setup (hdx)
#如果find命令返回的是(hd0,num),你就 setup (hd0)
如果提示ok、成功后,重启系统,Done。