如何修改/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
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
相关产品推荐
相关产品推荐

