Ren*_*ith 5 linux virtualbox grub-legacy
我有一个运行 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 虚拟机挂起,显示黑屏,唯一的文本是GRUB.
为什么不grub-install /dev/sdb1修改sdb1的MBR?这不是在新驱动器上安装 GRUB 的正确方法吗?
我不是 grub2 专家(抱歉)但尝试添加--skip-fs-probe到您的 grub-install 行中,我发现这会阻止创建/boot/grub/device.map可能导致引导到 grub 提示的内容。我认为没有这个参数grub-install,不是按照你说的去做,认为它比你更聪明,可能会做一些不同的事情。
另一件事是确保您使用正确的 grub-install(即用于 grub2 而不是用于原始 grub)。如果您在 Centos 中,这不是问题,但是 SystemRecoveryCD 两个版本都可用,因此您必须使用grub2-install. 我学会了艰难的方式...
正如@wurtel 指出的那样(荣誉),您应该指定一个驱动器而不是一个分区。Grub2 安装在整个磁盘驱动器的 0 扇区中,这个“存根”是在启动时运行的,但它需要知道磁盘上的位置,它应该安装用于下一启动阶段的文件 - 这就是--root-directory参数为了。(我认为。)
阅读man grub-install和谷歌搜索我发现它--root-directory并不真正用于 grub2 版本 1.99++,尽管它在我的经验中确实有效。您打算使用--boot-directory并引用实际的引导目录,因此这将为您提供:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Run Code Online (Sandbox Code Playgroud)
这就是我将由启动分区/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:强制,如果无法打开现有目标文件,请将其删除并重试v:详细,解释正在做什么cp取得进展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
您会注意到此处引用了您的旧分区。使用新分区的 UUID
您可以临时将所有 UUID 插入 fstab 中,以便于复制和粘贴:r !blkid
使用新分区的 UUID 更改 fstab 中的条目。它们应该看起来像这样:
# <file system> <mount point> <type> <options> <dump> <pass>
# Root partition
UUID=76fd1ffd-fb96-4ab4-be1a-42f8e9223983 / ext4 errors=remount-ro 0 1
# Boot partition
UUID=e560e29e-8752-4b83-b1ee-4b86c0009f0b /boot ext2 defaults 0 2
Run Code Online (Sandbox Code Playgroud)
blkid删除之前插入的 fstab的输出:r !blkid
mount --bind /dev /mnt/newRoot/dev
mount --bind /proc /mnt/newRoot/proc
mount --bind /sys /mnt/newRoot/sys
Run Code Online (Sandbox Code Playgroud)
mount --bind /usr/ /mnt/newRoot/usr/boot:mount /dev/sdb1 /mnt/newRoot/bootchroot /mnt/newRoot使新的根分区临时成为文件系统的根/boot/grub/grub.cfg使用以下命令创建 GRUB 配置文件update-grub2grub-install /dev/sdb。您不能在此处指定分区号exitumount /mnt/newRoot/*这些说明的灵感来自Oaktreepeak.com 的说明。
或者,您可以尝试Clonezilla来实现相同的目的。
| 归档时间: |
|
| 查看次数: |
31618 次 |
| 最近记录: |