我克隆了一台具有以下分区的机器:
Device Type Label
/dev/sda
/dev/sda1 Ext4 boot
/dev/sda2 Linux LVM
/dev/system/ LV system
/dev/system/home LV home
/dev/system/root LV root
/dev/system/swap LV swap
这些由标签引用
/etc/fstab:
LABEL=root / ext4
LABEL=boot /boot ext4
LABEL=home /home ext4
LABEL=swap /swap swap
和 grub.cfg:
menuentry 'openSUSE, with linux <version>' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-<version>-simple-<UUID>' {
insmod ext2
set root='hd0,msdos1'
linux /vmlinuz-<version> root=/dev/mapper/system-root resume=/dev/disk/by-label/swap <other options>
initrd /initrd-<version>
}
我正在尝试在另一台相同的机器上安装此克隆。安装成功,但如果不按照 grub 提示符中的说明进行操作,我就无法启动机器:
grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-<version> root=/dev/sda1
grub> initrd /boot/initrd.img-<version>
grub> boot
我更希望获得不需要这些步骤的映像,但我不确定问题出在哪里(grub 配置、其他系统文件、clonezilla)。到目前为止我尝试过的事情:
- 编辑 /etc/defaults/grub 并取消注释“
GRUB_DISABLE_LINUX_UUID=true
” - 编辑 grub-mkconfig_lib 以注释掉这些行,以
search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}
防止在生成 grub.cfg 时添加它们 - (并重新生成
grub.cfg
) - 选择高级clonezilla安装并告诉它之后重新安装MBR(选项-j1。选项-g auto“在客户端磁盘MBR中重新安装grub”已默认选中)
我还可以尝试其他事情吗?
我确实注意到/boot/grub2/device.map
hd0 列出了“sda1”,但是当我安装克隆时,另一台机器的 HD 被检测为 sda1,所以我认为这可能不是罪魁祸首。
(我不确定这里或超级用户是否更适合这个问题,我很高兴它能够适当地迁移。)
答案1
最后,我通过对原始计算机的引导分区进行分区克隆并将其安装在其他计算机上并从高级选项中选择“-j1”来解决此问题。
额外的步骤有点烦人,但至少恢复启动分区的克隆只需要几秒钟。
答案2
解决此问题的工作过程是,在安装/克隆失败或 MBR 磁盘损坏后,我们必须手动安装 GRUB(2)。
现在,重新启动后,让我们修复 grub 引导:
sh:grub>set pager=1 # for paging long command outputs; There must be no spaces on either side of the equals sign.
grub> set root=(hd0,XY)
'grub> insmod /boot/grub/linux.mod # AFAIK, optional step
grub> linux /boot/vmlinuz-4.4.92-36-default root=/dev/sdaXY
grub> initrd /boot/initrd.img-4.4.92-36-default
grub> boot
成功启动 Linux 后,让修复永久生效:
# update-grub
# grub-install /dev/sda #or what ever your system disk is
如果出现错误update-grub command not found
不用担心,这只是一个 shell 脚本,旨在让事情变得更容易。实际上,它确实:
set -e
exec grub2-mkconfig -o /boot/grub/grub.cfg "$@"
运行 grub-install 后...您的系统应该恢复正常。我使用 Clonezilla 2016-02-10(将主笔记本电脑磁盘迁移到更大的 SSD)通过克隆的 OpenSuse Leap 42.2 完成了此操作。
参考文献:如何在 Linux 上拯救无法启动的 GRUB 2
在 Ubuntu 上修复损坏的 GRUB 2 引导加载程序
这是一种无需启动 Linux 即可使用的替代方法:
$ sudo fdisk -l (From this you need to find the device name of your physical drive that won't boot, something like “/dev/sdxy″ - where x is the drive and y is the root partition. Since I was using a software RAID, root (/) was on md1)
$ sudo mount /dev/sdxy /mnt (Mount the root partition)
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
$ sudo chroot /mnt (This will change the root of executables to your your drive that won't boot)
$ grub-mkconfig -o /boot/grub/grub.cfg (insure that there are NO error messages)
$ grub-install /dev/sdx (NOTE that this is the drive and not the partition. try grub-install --recheck /dev/sdxy if it fails)
Ctrl+D (to exit out of chroot)
$ sudo umount /mnt/dev
$ sudo umount /mnt/proc
$ sudo umount /mnt/sys
$ sudo umount /mnt
参考:http://redsunsoft.com/2016/06/how-to-repair-a-server-stuck-at-the-grub-prompt/
答案3
长话短说
在安装在 GPT 上的 Ubuntu 上,登录系统后使用 BootRepair。
和@jam有同样的问题,但就我而言,我有:
- Ubuntu 16.04,我想克隆
- 源磁盘(HDD,500 GB)
- 膜生物反应器
- Windows 双启动
- 目标磁盘(SSD,256 GB)
- GPT
因此,我/home
使用 Clonezilla 仅克隆了 linux 分区(sda5 - 用于系统,sda6 用于),而不是整个磁盘。
为了实现这一点,我在 SSD 上安装了clear ubuntu,像在 HDD 上创建分区一样创建分区,还添加了 ESP(EFI 系统分区)。然后我用 Clonezilla 覆盖这个分区(HDD 分区到 SSD)。结果,我得到了 GRUB 提示符。
然后我做了
grub> set root=(hd0,gpt2) # NOTICE: used gptX instead of simple number
grub> linux /boot/vmlinuz-<version> root=/dev/sda1
grub> initrd /boot/initrd.img-<version>
grub> boot
正如@jam 和@wp78de 所建议的那样(他的参考文献中也提到了这一点)。
然后我做了update-grub
并坚持grub-install
错误
grub-install: error: will not proceed with blocklists
原因在于 GPT。里面有一些有用的东西这线程,但最简单的方法是使用启动修复。我不知道 BootRepair 是否执行了一些特殊工作,但我检查了重新安装 GRUB,现在一切正常!
答案4
我在 MBR 启动方面遇到了完全相同的问题(Centos 7) - 无论我在磁盘、分区、Clonezilla 版本等方面尝试过什么 - 最后我购买了线程前面引用的 PartedMagic ISO - 尽管它使用了 CLonezilla - 显然,它在过程结束时发挥了一些魔力,因为克隆磁盘无需手动干预即可启动。
克雷格