我有一个用CentOS运行的虚拟盒。
我已经将一个新的虚拟磁盘附加到现有的CentOS VM上,现在我正在尝试在这个新附加的磁盘上安装GRUB。
稍后,我将使用一个新准备的带有自定义根文件系统和内核的可引导硬盘启动第二个VM。
我尝试了以下步骤:
fdisk /dev/sdb创建了一个新分区。在分区时,我选择了选项主分区、分区号1和其他默认选项。mkfs.ext3 /dev/sdb1格式化磁盘。/media/new_drive。grub-install /dev/sdb1 --root-directory=/media/new_drive/。之后,带有新准备的硬盘的第二个VM没有启动;我得到了错误:could not read from the boot medium。似乎MBR没有在grub-install之后更新,但我可以看到在新驱动器上安装在/boot/grub下的GRUB。
但最糟糕的是,它破坏了我现有的CentOS GRUB: CentOS VM挂起显示一个黑色屏幕,唯一的文本是GRUB。
为什么grub-install /dev/sdb1不修改sdb1的MBR?这不是在新驱动器上安装GRUB的正确方式吗?
发布于 2015-03-19 13:48:20
我不是grub2专家(对不起),但是尝试将--skip-fs-probe添加到grub安装行中,我发现这会阻止创建/boot/grub/device.map,这会导致启动grub提示符。我认为,如果没有这个参数grub-install,而不是按您说的做,它会认为它比您更聪明,并且可能会做一些不同的事情。
另一件事是确保您使用的是正确的grub-安装(即grub2而不是原始grub)。如果您在Centos中,这不是一个问题,但是对于SystemRecoveryCD,这两个版本都是可用的,所以您必须使用grub2-install。我学到了艰难的方法..。
正如@wurtel所指出的(kudos),您应该指定一个驱动器,而不是一个分区。Grub2安装在整个磁盘驱动器的扇区0中,这个“存根”是在引导时运行的,但是它需要知道磁盘上的位置,它应该在下一阶段启动时安装文件--这就是--root-directory参数的作用。(我想)
通过阅读man grub-install和googling,我发现--root-directory并不真正适用于grub2版本的1.99++,尽管在我的经验中它确实有效。您应该使用--boot-directory并引用实际的引导目录,因此这将为您提供:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot发布于 2018-01-12 12:59:40
这就是我如何将由引导分区/boot和根分区/组成的Debian安装移动到一个新驱动器,并使用GNU GRUB使其可引导:
/dev/sda1)和新分区(/dev/sdb1):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBootcp -afv /mnt/oldBoot /mnt/newBoot。对cp -afv:的解释a代表“归档”,意思是:-R)- `f`: force, if an existing destination file cannot be opened, remove it and try again
- `v`: verbose, explain what is being donecp是否取得进展。umount /mnt/oldBoot && umount /mnt/newBoot/dev/sda2和/dev/sdb2):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRootcp -afv /mnt/oldRoot /mnt/newRootvi /etc/fstab:r !blkid复制和粘贴。blkid插入的fstab中删除:r !blkid的输出 mount --bind /dev /mnt/newRoot/dev
mount --bind /proc /mnt/newRoot/proc
mount --bind /sys /mnt/newRoot/sysmount --bind /usr/ /mnt/newRoot/usr/boot:mount /dev/sdb1 /mnt/newRoot/boot中chroot /mnt/newRoot使新的根分区临时成为文件系统的根/boot/grub/grub.cfg上使用update-grub2创建GRUB配置文件grub-install /dev/sdb。您不能在这里指定分区号exitumount /mnt/newRoot/*这些指令是受oaktreepeak.com的启发的。
或者,您可以尝试让克隆齐拉实现同样的目标。
https://unix.stackexchange.com/questions/191218
复制相似问题