You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改/EFI/ubuntu/grub.cfg以去除UUID依赖,实现克隆镜像盘的无缝启动

如何修改/EFI/ubuntu/grub.cfg以去除UUID依赖,实现克隆镜像盘的无缝启动

嘿,这个问题我之前帮朋友处理过,正好能给你捋清楚!

首先得说清楚为什么你改了/etc/default/grub却没解决问题:那个配置文件是用来生成/boot/grub/grub.cfg的,而EFI分区里的/EFI/ubuntu/grub.cfg是GRUB启动时最先加载的「引导器入口配置」,它是独立的,不会被update-grub自动更新,所以得手动修改它。

下面是具体的操作步骤:

1. 先挂载EFI分区

EFI分区默认不会自动挂载到系统里,所以得先把它挂上来:

  • 找出你的EFI分区:运行 sudo blkid,找输出里TYPE="vfat"的分区,比如/dev/sda1
  • 创建临时挂载点:sudo mkdir -p /mnt/efi
  • 挂载EFI分区:sudo mount /dev/sdX1 /mnt/efi(把sdX1替换成你刚才找到的EFI分区路径)

2. 编辑EFI目录下的grub.cfg

现在可以修改那个惹麻烦的配置文件了:

  • 用文本编辑器打开它:sudo nano /mnt/efi/EFI/ubuntu/grub.cfg
  • 你会看到第一行类似这样的内容:

    search.fs_uuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx root hd0,gpt2

  • 这行就是用UUID定位系统分区的核心问题所在,我们把它改成不依赖UUID的方式:
    推荐用磁盘标签的方式(最稳妥,因为克隆后的镜像盘会和原盘共享相同标签):
    • 先给你的系统根分区设置一个标签,比如 sudo e2label /dev/sdX2 ubuntu-root(把sdX2换成你的根分区路径,比如/dev/sda2)
    • 然后把刚才那行带UUID的搜索命令替换成:
      search --no-floppy --fs-label --set=root ubuntu-root
      
    如果你不想用标签,也可以改成按分区的GPT位置(但要注意,当你把磁盘换槽位时,hd0可能会变成hd1,所以不如标签靠谱):
    search --no-floppy --set=root hd0,gpt2
    

3. 收尾工作

  • 保存修改:在nano里按Ctrl+O,回车确认,再按Ctrl+X退出
  • 卸载EFI分区:sudo umount /mnt/efi

最后要提醒你:下次用rsync同步镜像盘时,修改后的grub.cfg会自动同步到镜像盘里,之后不管你用原盘还是镜像盘启动,GRUB都能正常找到系统分区,再也不会因为UUID不匹配卡壳了!

备注:内容来源于stack exchange,提问作者OldBikerPete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:04:53