我无法获取 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?),并且在工作之前需要进行一些调整。
下一个链接将向您展示手动(某种程度上)执行此操作,因此您可以逐步完成,而不是经历痛苦的重新生成、重新启动、重复循环。
答案2
我不明白为什么这会给你带来这么多麻烦。你的看起来像是另一个例子XY问题。一个更简单的解决方案是:
从以下位置下载 CentOS iso这里;
在新虚拟机中从 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 让事情变得比他们需要的更加神秘。