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

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

我想要将 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 /

在新电脑上,我全新安装了 Ubuntu 12.04,将备份文件移动到其中,然后使用以下命令使用备份文件进行恢复:

tar xvpfz backup.tgz -C /

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

error: no such device: ...

press any key to continue ...

我认为 Grub 损坏的原因是它所寻找的 UUID 与旧硬盘匹配,而不是与计算机的硬盘匹配。

我该如何修复 grub 以识别新硬盘?我在网上查找了“修复 GRUB UUID”的帮助,但步骤似乎过时或复杂。上面链接的 Mike 的回复让我相信有一种相当简单的方法可以修复此问题。

答案1

为了解决当前问题,您必须更改“/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

并用新的 UUID 替换旧的 UUID。

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

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

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

gksudo gedit /boot/grub/grub.cfg

重要提示:当然,如果您使用启动 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 在新计算机上复制旧计算机,正如我的评论中所指出的那样。

答案2

据推测这意味着 grub 启动并显示启动到 Ubuntu 的选项,但是当您选择它时它不会启动?

我认为有两种选择:

  1. 使用 GRUB 行编辑器修改 linux 启动选项以正确加载 linux(然后以 root 身份运行 grub-install 以永久设置正确的配置)。
  2. 从 Ubuntu USB 启动,挂载 ubuntu 磁盘分区,chroot 到其中,然后运行 ​​grub-install。

如果您只有 Ubuntu 并且只有一个硬盘,第一种情况应该更简单,在这种情况下选择“Ubuntu 恢复”选项,然后按“e”进行编辑:

该条目看起来应类似于:

insmod gzio
insmod part_msdos
insmod ext2
set root=('hd0,msdos0')
search --no-floppy --fs-uuid --set=root XXXXXX
linux /boot/vmlinuz-YYYYY root=UUID=XXXXXX ro recovery nomodeset
initrd /boot/initrd.img-YYYYY

删除“search”行,并将“linux”行中的“root=UUID=XXXXX”替换为“root=/dev/sda1”。尝试启动它,希望在短时间后它会为您提供 Ubuntu 恢复菜单,该菜单应该有一个 grub 选项,该选项应该可以正确地重新安装 grub。

否则,或者如果你不想直接使用 grub(应该带有健康警告,请使用 CD/USB 记忆棒,如https://help.ubuntu.com/community/Grub2/Installing#Reinstalling_GRUB_2

答案3

我没有编辑 fstab 和 grub,而是做了以下操作:

  1. 我在全新安装的 ubuntu 上备份了这些文件(tar -cvf /somedir/boot.tar /etc/fstab /boot/grub/grub.cfg
  2. 从备份恢复 ( tar -xvpf /mnt/remotebk/full.tar)
  3. 复制已恢复的 fstab 文件 ( cp /etc/fstab /somedir/fstab.restored)
  4. 恢复我全新安装的启动文件 ( tar -xvpf /somedir/boot.tar -C /)
  5. 重新启动并且它起作用了。

我正在使用 vmware 虚拟机,我执行此过程将一台 Linux 服务器从一台主机移动至另一台主机。

答案4

就我的情况而言,grub 安装的 UUID 与我的 Windows 分区的当前 UUID ( ) 不同sudo blkid(已在 grub.cfg 中确认)。我尝试了各种方法,但均未成功。最后,我使用文件管理器挂载了 Windows 分区并再次运行update-grub,UUID 在 grub.cfg 中成功更新。

相关内容