解决办法如下:
使用启动优盘启动后
1、查看分区情况
sudo fdisk -lu /dev/sda
显示如下:
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xde6c93b8
Device Boot Start End Blocks Id System
/dev/sda1 63 58589054 29294496 83 Linux
/dev/sda2 58589184 976773119 459091968 5 Extended
/dev/sda5 58591232 967903231 454656000 83 Linux
/dev/sda6 967905280 976773119 4433920 82 Linux swap / Solaris
2、将system为linux的分区挂载
sudo mount /dev/sdax /mnt #x为/所在的分区
sudo mount /dev/sdax /mnt/boot #当/boot为单独分区
若没有/mnt/boot,可以使用mkdir创建
3、修复grub
sudo grub-install --root-directory=/mnt /dev/sda
参考资料:
http://blog.sina.com.cn/s/blog_a2d4803001013vqk.html
当使用grub-install出现提示,没有文件或命令时,可尝试以下方法:
原因:grub没有在系统所在分区找到命令文件
1、重启进入grub rescue #出错信息为error: file not found
2、使用set命令查看prefix和root
3、使用ls命令查看硬盘分区 #显示(hd0,msdos1)等
(hd0,msdos1)相当于sda1,以此类推。
4、逐个硬盘分区查找系统和grub命令文件所在位置
系统查找:ls (hd……)/ #注意不要丢掉'/'
#若结果出现许多系统文件,则可能为系统所在分区
#但绝大多数情况下,由于安装系统时已经选择了分区,因此此步主要是验证
grub命令文件查找:ls (hd……)/boot/grub
#若出现大量mod文件,则为grub命令文件所在位置
5、根据前一步的结果设置prefix和root
set prefix=(hd……)/boot/grub #grub命令文件所在位置
set root=(hd……) #系统文件所在分区
6、insmod normal #加载normal模块
7、normal #进入normal模式
8、insmod linux #加载linux命令模块
9、linux /boot/vmlinuz-…… root=/dev/sdXY ro #载入linux核心
#vmlinuz-……文件应该在系统文件/boot里,可使用tab自动补全
#sdXY为系统所在分区,例如sda1。应根据前面查找结果确定
#不要丢掉最后的'ro'
10、initrd /boot/initrd-…… #加载initrd
11、boot #启动系统
12、前面所做修改实际上并没有写入grub,因此需在启动系统保存设置
可使用updata-grub和grub-install修复
参考资料:
https://help.ubuntu.com/community/Grub2/Troubleshooting
附:除以上方法,可使用boot-repair
boot-repair是一个图形化界面的grub修复工具
建议下载iso文件,刻录启动盘或制作启动u盘
具体信息参考:https://help.ubuntu.com/community/Boot-Repair