我在我的电脑上单独运行 Debian Wheezy,最近我将根分区复制到另一个分区同步我发现这种方法效果很好(我也知道 dd 和 ddrescue,但它们会在新分区上留下不可用的空间)。我使用以下命令为新分区生成了一个新的随机 UUID:sudo tune2fs -U 随机 /dev/hda9并更新了 fstab / 和 /home 条目。
然后,由于我对 GRUB 了解甚少,我使用了一个 gui(GRUB Customizer)来探测新的操作系统并向 GRUB 和 MBR 添加一个条目 - 它会创建一个 /etc/grub.d 条目,然后更新 GRUB。
在启动时,GRUB 列表包含新的操作系统(在 sda9 上),但它启动第一个操作系统(我从 -sda5 复制)。
/boot/grub/grub.cfg 包含新的 debian 操作系统,但它看起来像这样
set root='(hd0,msdos9)'
search --no-floppy --fs-uuid --set=root 64662470-0e58-4dfd-90ac-43227d773556
linux /boot/vmlinuz-3.2.0-2-amd64 root=UUID=cc3bca0d-aee4-4b9c-95c2-57212cc36d4d ro quiet
initrd /boot/initrd.img-3.2.0-2-amd64
第一个 uuid 是 sda9,但第二个 uuid 是 sda5。我可以在启动时更改第二个 uuid(使用 E),然后它会启动 sda9。
那么我该如何更正 grub.cfg,以便 sda9 GRUB 列表条目永久从 sda9 启动?
答案1
只需编辑/boot/grub/grub.cfg/
并将 sda5 的 UUID 替换为 sda9 的 UUID:
search --no-floppy --fs-uuid --set=root 64662470-0e58-4dfd-90ac-43227d773556
linux /boot/vmlinuz-3.2.0-2-amd64 root=UUID=64662470-0e58-4dfd-90ac-43227d773556
为了避免在将来的运行中出现此类错误update-grub
从您要使用的系统。如果你从旧操作系统运行它,它将拾取当前的根分区并设置 grub.cfg 从该分区启动。
答案2
当您update-grub
从运行时sda5
,它会读取/boot/grub/grub.cfg
从sda9
复制的sda5
。首先启动到 ,sda5
这是您的主操作系统。然后使用以下命令进行修复:
SourceUUID=cc3bca0d-aee4-4b9c-95c2-57212cc36d4d
TargetUUID=64662470-0e58-4dfd-90ac-43227d773556
sudo mkdir /mnt/clone
sudo mount -t auto -v /dev/sda9 /mnt/clone
sudo sed -i "s/$SourceUUID/$TargetUUID/g" /mnt/clone/boot/grub/grub.cfg
sudo update-grub
sudo umount /mnt/clone -l
我基于这个答案Ubuntu 16.04 LTS 克隆到新分区脚本。
答案3
我必须删除 /boot/grub/menu.lst(你应该先 cp 一个备份),然后 update-grub 表示同意生成一个新的。然后它检测到正确的分区 UUID 来引导。