从另一台机器恢复后如何修复 Grub 中的 UUID?

sno*_*guy 25 grub2 boot-failure

我想将 Ubuntu 12.04 的完整 tar 备份以及我所有的自定义、文档、安装的软件等还原到另一台机器上。

我使用以下命令进行了备份:

sudo su
cd /
tar cvpzf ububackup.tgz --exclude=/ububackup.tgz --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/tmp --exclude=/media /
Run Code Online (Sandbox Code Playgroud)

在新计算机上,我全新安装了 Ubuntu 12.04,将备份文件移至其中,然后使用以下备份文件进行恢复:

tar xvpfz backup.tgz -C /
Run Code Online (Sandbox Code Playgroud)

正如预期的那样(请参阅 Mike 对这个问题的回答:将具有所有设置的 Ubuntu 发行版从一台计算机复制到另一台计算机)这破坏了 grub。当我打开计算机时,出现错误:

error: no such device: ...

press any key to continue ...
Run Code Online (Sandbox Code Playgroud)

我相信 Grub 损坏的原因是它在旧硬盘驱动器上而不是在计算机硬盘驱动器上寻找匹配项的 UUID。

如何修复我的 grub 以识别新硬盘?我在网上寻找“修复 GRUB UUID”帮助,但这些步骤似乎过时或复杂。我上面链接到的 Mike 的回复让我希望有一种相当简单的方法来修复这个问题。

Gol*_*oth 24

要解决您当前的问题,您必须更改“/etc/fstab”和“/boot/grub/grub.cfg”中的 UUID(非常棘手)。

您可以使用 Ubuntu 安装 CD 通过 gparted 获取 UUID(您只需右键单击要获取 UUID 的分区,然后单击“信息”,然后选择 UUID 并使用 CTRL + 复制它C) 或命令行 ( sudo blkid)。

然后,您必须使用 gedit、nano 或其他方式在正确的卷上编辑“/etc/fstab”。

在终端中,键入:

gksudo gedit /etc/fstab
Run Code Online (Sandbox Code Playgroud)

并用新的 UUID 替换旧的 UUID。

重要提示:当然,如果您使用引导 CD 执行此操作,则必须在“/etc/fstab”之前添加“/media/xxxxx”:“/media/xxxxx/etc/fstab”。您也可以使用gksudo gedit并打开该文件来编辑自己。

警告:修改“/boot/grub/grub.cfg”非常棘手。它通常应该使用命令生成sudo update-grub

通过在终端中输入以下内容,将旧的 UUID 替换为“/boot/grub/grub.cfg”中的新 UUID:

gksudo gedit /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

重要提示:当然,如果您使用引导 CD 来执行此操作,则必须在“/boot/grub/grub.cfg”之前添加“/media/xxxxx”:“/media/xxxxx/boot/grub/grub.cfg”。配置文件”。您也可以使用gksudo gedit并打开该文件来编辑自己。

如果您使用棘手的解决方案,我建议您在sudo update-grub成功启动系统后启动。

一种更干净但简单的正确重新配置 grub 的方法可能是使用像“Boot-Repair-Disk”这样的引导修复磁盘:http : //sourceforge.net/p/boot-repair-cd/home/Home/

我希望这会帮助你解决你的问题。

但是,您可能会考虑使用 Clonezilla 在新计算机上复制旧计算机,如我的评论所示。