有两块硬盘分变装了Windows10和Ubuntu16.04,一块1T的装了Win10系统,不想装ubuntu的时候把win10的引导覆盖了,所以ubuntu装在了另外一块500G的硬盘上。结果用ubuntu引导界面选择'Windows 10 (loader) (on /dev/sda1)'启动失败结合百度来的一些方法改了grub.cfg文件终于引导启动成功。
1.启动ubuntu在查看grub.cfg文件内容
在终端中输入
gedit /boot/grub/grub.cfg
文件开头提示:这是自动生成的文件,不要直接编辑,应该修改/etc/grub.d以及/etc/default/grub下的文件然后运行 grub-mkconfig -o /boot/grub/grub.cfg 重新生成该文件,但是我看了,那两个文件,看不懂。。。
在文件中找到如下内容
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 10 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-B67A5C027A5BBE35' {
insmod ldm
insmod ntfs
set root='ldm/42290147-b94b-11e6-b3fa-708bcda81db5/Volume1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 --hint='ldm/42290147-b94b-11e6-b3fa-708bcda81db5/Volume1' B67A5C027A5BBE35
else
search --no-floppy --fs-uuid --set=root B67A5C027A5BBE35
fi
drivemap -s (hd0) ${root}
chainloader +1
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
set timeout=10
fi
### END /etc/grub.d/30_os-prober ###
看起来好像是grub想从ldm分区启动Windows10,先几下这段中加粗部分,Windows启动分区的uuid:B67A5C027A5BBE35
2.查找Windows10启动分区
重新启动ubuntu,在引导界面按e,再根据提示按F2,进入grub,通过ls (hd[01],msdos[123456789])找到与1中uuid对应的磁盘分区‘(hd1,msdos2)’,这是一个500M的分区,看起来像是Windows10安装时自动创建的隐藏分区,几下这个分区后按ESC退出到引导界面
3.编辑grub.cfg文件
重新进入ubuntu系统,打开终端,输入
sudo gedit /boot/grub/grub.cfg
在1中所列的代码后面加入如下代码
menuentry 'Windows 10' {
insmod ntfs
set root = 'hd1,msdos2'
search --no-floppy --fs-uuid --set=root B67A5C027A5BBE35
chainloader +1
}
保存,重启后就可以通过‘Windows 10’选项进入Windows系统
tips:网上其他方法说要在编辑完grub.cfg后运行update-grub 或者 grub-mkconfig -o /boot/grub/grub.cfg更新grub.cfg文件,但是实际情况是grub.cfg文件是根据/etc/grub.d以及/etc/default/grub下的文件自动生成的,运行更新之后,grub.cfg文件会回到最初状态。其实问题并没有完美解决,启动时会报错,但能进入Windows系统,而且我并不知道ldm分区是什么鬼,也看不懂/etc/grub.d以及/etc/default/grub的文件。还需继续努力
来源:oschina
链接:https://my.oschina.net/u/4404140/blog/3928460