我无法从 GRUB2 获取 CentOS 7 iso(在硬盘上)启动

我无法从 GRUB2 获取 CentOS 7 iso(在硬盘上)启动

我无法获取 CentOS 7 ISO(在硬盘上)从安装在硬盘上的 GRUB2 引导。

我根据以下步骤尝试了本文

我的要求是从 VMWare VM 内的虚拟硬盘驱动器启动 CentOS ISO(即可启动的 .vmdk)。这些是要求,替代方案不是我目前正在寻找的。

我尝试在虚拟硬盘上安装 grub2 并修改 grub 配置来启动此 ISO

我在启动到最新 CentOS Gnome Live ISO 的 VM 上执行这两项活动(这是我使用的过程)

使用 4GB 虚拟硬盘 (vmdk) 创建新 VM(称为 VMDK_Stager)

安装并启动至CentOS-Live-GNOME.iso

打开终端运行命令

获取根目录

su

运行这些命令来暂存驱动器,并安装 grub 和创建分区

fdisk /dev/sda
n (for new partition, then select all defaults for blocks/sizing/etc.)
a (to activate)
w (to write changes and quit fdisk)

格式化分区

mkfs.ext4  /dev/sda1

挂载分区

mount /dev/sda1

更新涉及的安装包

yum install livecd-tools
yum upgrade grub2
yum upgrade dracut

在磁盘/分区上安装 Grub(这将创建/mnt/boot/grub2

   grub2-install /dev/sda --boot-directory=/mnt/boot

创建/mnt/boot/iso以存放 ISO 文件

mkdir /mnt/boot/iso
cd /mnt/boot/iso

复制CentOS-7-x86_64-GNOME-1603-02.iso(从 CentOS 镜像下载)到/mnt/boot/iso (我这样做是为了测试“已知良好”的 ISO)

创建自定义grub.cfg

#Begin /boot/grub2/grub.cfg
set default=0
set timeout=10
set root=(hd0,1)

menuentry 'CentOS-Live-GNOME' {
    set isolabel=CentOS-7-x86_64-GNOME-1603-02
    set isofile='/boot/iso/CentOS-7-x86_64-GNOME-1603-02.iso'
    loopback loop $isofile
    linux (loop)/isolinux/vmlinuz0 iso-scan/filename=$isofile root=live:CDLABEL=$isolabel ro rd.live.image quiet rhgb
    initrd (loop)/isolinux/initrd0.img
}

将此暂存的 vmdk 复制到主机上的另一个目录以供另一个 VM 使用(称为 VMDK_ISO_Booter) 创建 VM 并使用此 vmdk 作为唯一的硬盘驱动器

它以 dracut 提示符结尾,并表示/dev/disk/by-label找不到

答案1

几乎可以肯定,问题是使用了稍微不正确的 CDLABEL、grub 无法挂载 iso、内核参数与用于映像的参数不匹配,或者 ISO 存在一些不规则性的某种组合 - 我没有看看镜子上那个特定的。

您需要从 iso 上的 isolinux.cfg 文件中获取确切的标签

如果您有 CentOS-7-x86_64-LiveGNOME-1603-02.iso 文件中的行是:

 append initrd=initrd0.img root=live:CDLABEL=CentOS-7-x86_64-GNOME-1603-02 rootfstype=auto ro rd.live.image quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0 

这里有一个修改后的 grub.cfg 可供尝试(基于我拥有的 ISO;你的可能略有不同;他们显然删除了名称中的“Live”部分,或者你删除了。

menuentry "CentOS-Live-GNOME" {
    set isolabel="CentOS-7-x86_64-GNOME-1603-02"
    set isofile="/boot/iso/CentOS-7-x86_64-LiveGNOME-1603-02.iso"
    insmod iso9660
    loopback loop ${isofile}
    linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=CentOS-7-x86_64-GNOME-1603-02 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 iso-scan/filename=${isofile} 
    initrd (loop)/isolinux/initrd0.img
}

这可能会按原样工作,但请根据 isolinux.cfg 条目仔细检查标签和其余内核参数。

当/如果出现 dracut 提示符时,请在文件 sosreport.txt 中查找单词“loop” - 它应该给出 iso 所呈现的实际名称;然后您就可以进行更正。还要查看 /dev 上的设备;你能在/dev/disk/... by-id .. by-label .. by-uuid 等任何地方找到iso“设备”吗?任何这些引用都可以工作。它必须是完美的匹配;这是正在评估什么以及您收到的错误来自何处。

我所做的几乎与您所做的完全一样,但不久前使用的是 Fedora(fedora 19?),并且在工作之前需要进行一些调整。

下一个链接将向您展示手动(某种程度上)执行此操作,因此您可以逐步完成,而不是经历痛苦的​​重新生成、重新启动、重复循环。

https://help.ubuntu.com/community/Grub2/ISOBoot

答案2

我不明白为什么这会给你带来这么多麻烦。你的看起来像是另一个例子XY问题。一个更简单的解决方案是:

  1. 从以下位置下载 CentOS iso这里;

  2. 在新虚拟机中从 iso 安装 CentOS,几乎可以在任何虚拟机管理程序中安装:例如,我刚刚使用了 VirtualBox(确保vdmk在创建新虚拟机时选择磁盘格式);另外,请确保重新启动虚拟机至少两次,以便完成整个安装过程。关闭 CentOS 虚拟机。

您已完成:vmdk如果您已正确完成所有操作,则安装 CentOS 的磁盘已包含设置了引导标志的分区。现在,您可以将新创建​​的vmdk磁盘作为具有 SATA 控制器的硬盘安装在第二个 VM 中,也可能安装在另一个虚拟机管理程序(VMWare、Xen,凡是您能想到的)中。如果您想从第二个虚拟机中的 CentOS 磁盘启动,只需确保启动顺序允许您启动第一的从新磁盘,IECentOS 下创建的。

答案3

我通常为 qemu/virsh 虚拟机编写自己的 XML,但想法是告诉虚拟 BIOS 从 ISO 启动,对吧?因此,当您设置虚拟机时,告诉它 ISO 是 CD-ROM,在主机上给它一个空文件,充当要安装的硬盘,并设置引导顺序以尝试硬盘,然后光盘。然后启动虚拟机并按照屏幕提示进行正常安装。

安装程序会将 grub 放在虚拟硬盘上。

恕我直言,VMware 让事情变得比他们需要的更加神秘。

相关内容