Ubuntu18.04开机进grub问题的一个解决方法

前段时间把自家电脑Ubuntu16.04升级为18.04,之后就遇到了著名的Ubuntu启动进grub问题。
一段时间以来一直都是通过下面的命令来进入系统:

set root=(hd0,gpt4)
set prefix=(hd0,gpt4)/boot/grub
normal

之所以没有着急解决,一是网上的搜出来的解决方法无效;二是暂时没有太多时间研究这个。这两天因为又要升级到20.04了,所以想先把这个问题解决一下。
网上的解决方法大多是这样的,在进入系统之后,执行:

sudo update-grub
sudo grub-install /dev/sda

然而我执行之后再启动仍然会进grub,说明并不是grub没有install的原因。
后来通过浏览各种相关帖子了解到,很多机器grub会先在EFI分区上引导,然后再转移到真正的分区。我硬盘上确实有个(hd0,gpt1)分区,对应于/dev/sda1。于是我mount上该分区并查看:

sunty@sunty:/$ sudo mount /dev/sda1 /mnt
sunty@sunty:/$ tree /mnt
/mnt
└── EFI
    └── ubuntu
        ├── fbx64.efi
        ├── fw
        ├── fwupx64.efi
        ├── grub.cfg
        ├── grubx64.efi
        ├── mmx64.efi
        └── shimx64.efi

3 directories, 7 files

EFI下的ubuntu目录应该就是ubuntu系统的grub。如果我机器还有其他系统那么这里应该会有其他目录。
之后查看grub.cfg的内容:

sunty@sunty:~$ cat /mnt/EFI/ubuntu/grub.cfg
search.fs_uuid ff00f6d1-e536-4fce-a7b0-ee726fcffe90 root hd0,gpt2 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

虽然并不是很清楚第一行的意思,但是基本猜到应该是做了和我每次开机在grub里做的相同的事情,就是设置root变量。之后它一样设置了prefix变量。最后把控制权交给了另一个grub.cfg,既目标分区下的grub.cfg。
这里看到它似乎是把gpt2当作了真正的分区,而实际上应该是gpt4,问题会不会是这个原因造成的呢?沿着这个思路我们找到gpt4,也就是当前分区下的grub.cfg并查看:

sunty@sunty:~$ vim /boot/grub/grub.cfg

在vim里搜索gpt4,找到这样一段代码:

178    set root='hd0,gpt4'
179    if [ x$feature_platform_search_hint = xy ]; then
180        search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt4 --hint-efi=hd0,gpt4 --hint-baremetal=ahci0,gpt4  9b4182ce-972a-4737-b2a7-9b333cc848c3
181    else
182        search --no-floppy --fs-uuid --set=root 9b4182ce-972a-4737-b2a7-9b333cc848c3
183    fi

看到它除了设置root为(hd0,gpt4)外还提到了一个UUID:9b4182ce-972a-4737-b2a7-9b333cc848c3。那么这个UUID应该能够替换hd0的grub.cfg里的那串UUID。
sudo修改/mnt/EFI/ubuntu/grub.cfg,把uuid替换为从本分区找到的这个,把gpt2替换为gpt4:

sunty@sunty:~$ cat /mnt/EFI/ubuntu/grub.cfg
search.fs_uuid 9b4182ce-972a-4737-b2a7-9b333cc848c3 root hd0,gpt4 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

重新启动,发现直接进入了系统,问题解决!

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值