从另一台机器恢复后如何修复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的反应让我希望有一种相当简单的方法来修复它。

要解决当前问题,您必须更改“/ 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生成它。

通过在终端中输入以下内容,将旧的UUID替换为“/boot/grub/grub.cfg”中的新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复制新计算机,如我的评论中所示。

大概这意味着grub启动并显示一个启动到Ubuntu的选项,但是当你选择它不启动时?

我认为有两种选择:

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

如果您只有Ubuntu并且只有一个硬盘,那么第一种情况应该更容易,在这种情况下选择“Ubuntu recovery”选项,然后按“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 

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

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

在我的例子中,安装grub的UUID与我目前的Windows分区UUID( sudo blkid )不同(在grub.cfg中确认)。 我尝试了各种方法失败了。 最后,我用文件管理器挂载了Windows分区并再次运行update-grub ,并在grub.cfg中成功更新了UUID。

我做了什么而不是编辑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服务器从一个主机移动到另一个主机。