对于我的双系统笔记本,windows升级之后,覆盖了原来的ubuntu grub;
我的ubuntu是从sda的legacy启动,而windows是UEFI启动的.
查看分区:
grub rescue>ls
寻找ubuntu所在分区:
grub rescue>ls (hd0,gpt1)
如果是ubuntu正确的分区会显示ext4(或者ext2吧),重复此命令一直到找到正确的ubuntu所在分区即可(我的分区为 (hd0,gpt4))
修改启动分区:
grub rescue>root=(hd0,gpt4)
grub rescue>prefix=/boot/grub
grub rescue>set root=(hd0,gpt4)
grub rescue>insmod normal
到这里如果一切正常,继续,否则说明ubuntu所在分区不正确,先找好再继续。
grub rescue>normal(进入启动菜单)
按C进入命令行模式:
grub>set root=hd0,gpt4
grub>set prefix=(hd0,gpt4)/boot/grub
grub>linux /vmlinuz root=/dev/sda4(可按Tab键自动补全/vmlinuz)
grub>initrd /initrd.img (可按Tab键自动补全/initrd*)
grub>boot
进入ubuntu修复grub:
sudo update-grub
sudo grub-install /dev/sda //重建grub到第一个硬盘mbr
据说[1],运行这些之后,重启,OK!
但我的笔记本,运行上述的最后一个命令时“sudo grub-install /dev/sda” ,提示
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
======于是我要创建BIOS Boot Partition,还要设置bios_grub标志label:
#sudo fsdisk -l (显示所有的磁盘信息,但此时并没有发现有一个小的ext4分区(大约1M),用于创建BIOS Boot Partition)
我又尝试安装boot-repair(ubuntu软件库里的),但是并不能修复grub分区,同样提示“GPT detected. Please create a BIOS-Boot partition”
所以看来BIOS Boot分区是必须的啦!
我又安装了gparted(通过apt-get install安装即可),查看了一下分区,发现是有一个小的1M的分区,发现此分区根本没有名字,所以刚才fsdisk -l并没有显示该分区;于是我对该分区新建了一个分区(1M,)格式化为ext4,之后这个小的分区被系统命名为 /sda6
然后,需要对他设置bios_grub 标签(我是通过命令行,gparted好像也是可以的):
#parted /dev/sdb set 6 bios_grub on
#parted /dev/sdb print (查看分区)
显示:
数字 开始: End 大小 文件系统 Name 标志
1 1049kB 85.1GB 85.1GB ntfs Basic data partition msftdata
2 85.1GB 85.9GB 835MB ntfs 隐藏分区, diag
6 85.9GB 85.9GB 1049kB bios_grub
3 85.9GB 86.1GB 201MB fat32 Basic data partition 启动, esp
4 86.1GB 118GB 32.0GB ext4
5 118GB 128GB 9932MB linux-swap(v1)
好了,终于有bios_grub标志了!!!
#sudo grub-install /dev/sda
提示成功,搞定!
参考:
[1] http://blog.csdn.net/wangyuchen890119/article/details/7338022
参考:
[2] https://blog.hostonnet.com/grub-install-warning-this-gpt-partition-label-contains-no-bios-boot-partition-embedding-wont-be-possible