从另一台计算机还原后,如何在Grub中修复UUID?


22

我想将具有所有自定义项,文档,已安装软件等的Ubuntu 12.04完整备份文件备份到另一台计算机上。

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

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以识别新的硬盘驱动器?我在网上寻找帮助“ Fix GRUB UUID”,但步骤似乎过时或复杂。我上面链接的Mike的答复使我希望有一种相当简单的方法可以解决此问题。


1
为什么不使用clonezilla(clonezilla.org)制作旧计算机的快照并将其恢复到新计算机上呢?我认为这真的会更容易,因为您似乎想绝对保留所有内容。否则,进行备份(/ home,/ etc,/ usr / local,/ var)并恢复数据和自定义设置(软件除外)也非常容易。要解决当前的问题,您必须更改UUID (s)在/ etc / fstab和/boot/grub/menu.lst中。您可以使用Ubuntu安装CD来获取UUID [gparted或命令行]并进行更改。
Golboth 2012年

Answers:


19

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

重要提示:当然,如果使用启动CD来执行操作,则必须在“ / etc / fstab”:“ / media / xxxxx / etc / fstab”之前添加“ / media / xxxxx”。您也可以使用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将旧计算机复制到新计算机上,如我的评论所述。


谢谢哥伯斯。我最终使用了您的建议使用引导修复盘,并且该方法可行。
snowguy 2012年

请注意,clonezilla可能实际上无法解决此问题。我只是将我的整个硬盘(通过clonezilla)复制到SSD上,并且硬盘和SSD的UUID完全相同,最终在ssd上手动更改了uuid,然后在ssd上的上述文件中仍然具有备用硬盘可能的引导操作系统
Dennis Nolte

3

大概这意味着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启动选项(可能是因为它是唯一的操作系统,所以直接启动到Ubuntu)。无论如何,我感谢您的帮助。我最终创建了启动修复盘。
snowguy 2012年

非常感谢!当我愚蠢地更改了fstab的UUID并且Ubuntu无法启动时,您的回答使我免于陷入困境。
reexmonkey

0

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


该程序被调用update-grub,而不被调用grub-update。这并不是很明显,因为大多数grub命令都以开头grub-...
Fa11enAngel 2013年

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.