从硬盘启动自定义 CentOS 7 Live ISO 到 RAM

从硬盘启动自定义 CentOS 7 Live ISO 到 RAM

我正在尝试创建一个CentOS 7的定制包,它可以放置在非虚拟化服务器的内部硬盘驱动器中,并在UEFI环境中使用引导加载程序(例如grub)引导到RAM。

重点是创建一个可以从硬盘启动到 RAM 的单个包(例如 ISO、initramfs 等),这样每次启动都会保证预定义操作系统将被加载。这意味着除了日志文件之外,不会保存(持久)修改的设置或文件,日志文件将被重定向到硬盘驱动器。 RAM 的数量不会成为问题。

要求:1) 操作系统是 Rhel/Fedora/CentOS 2) 操作系统未安装在硬盘上,而是加载到 RAM(例如 tmpfs) 3) 操作系统在启动时从单个文件/包启动

到目前为止我已经尝试过: 使用 VMware 虚拟机,我创建了 CentOS 7 的最小自定义 Live ISO 映像,使用启动脚本定义图像的设置和内容,并使用livecd-creator创建实际的 Live ISO。

我还下载了官方的 CentOS-7-x86_64-LiveKDE-1810 ISO 进行测试,看看是否可以获得基于 CentOS 的 live ISO 以从硬盘启动。

这两个 ISO安装后工作并从 VMware 虚拟机以及典型服务器硬件上的 CD/DVD 驱动器启动。

我遇到的错误: 在尝试了具有不同内核参数的不同类型的 grub 菜单项后,我还没有设法让这些 ISO 之一从内部硬盘驱动器启动。我不知道问题是否出在 ISO 文件、grub 菜单项中的内核参数或两者中。

我尝试过的菜单项示例以及我找到它们的 URL:

http://man7.org/linux/man-pages/man7/dracut.cmdline.7.html

#iso-scan/filename
#Using iso-scan/filename with a Fedora/Red Hat/CentOS Live iso should
#just work by copying the original kernel cmdline parameters

menuentry 'Custom Centos7 {
 insmod iso9660
 insmod loopback               
 set isolabel='live_ks-x86-201902131038'
 set isofile='livecd-live_ks-201902131038.iso'
 loopback loop (hd0,gpt3)/images/$isofile
 linuxefi (loop)/isolinux/vmlinuz0 boot=isolinux iso-scan/filename=$isofile root=live:LABEL=$isolabel rd.live.image 
 initrdefi (loop)/isolinux/initrd0.img
}

上面的菜单项会导致引导显示以下消息:“dracut-initqueue[409]: /sbin/iso-scan: line 37: rmdir: command not find。我不确定这意味着什么..

如果我使用 LiveKDE ISO 尝试上述操作,例如更改以下内容:

set isolabel='CentOS-7-x86_64-LiveKDE-1810' set isofile='CentOS-7-x86_64-LiveKDE-1810.iso'

我收到错误:“dracut-initqueue[749]:安装:您必须指定文件系统类型”。即使我使用 rootfstype 指定文件系统类型,这种情况仍然存在,例如:

linuxefi (loop)/isolinux/vmlinuz0 boot=isolinux iso-scan/filename=$isofile root=live:LABEL=$isolabel rd.live.image rootfstype=auto

我还尝试了这里的不同条目: https://gist.github.com/Pysis868/27203177bdef15fbb70c

menuentry "CentOS 7 test" {
set isolabel='live_ks-x86-201902131038'
set isofile="/images/livecd-live_ks-201902131038.iso"
loopback loop (hd0,gpt3)$isofile
linuxefi (loop)/isolinux/vmlinuz0 noeject inst.stage2=hd:LABEL=UNJEB:$isolabel
initrdefi (loop)/isolinux/initrd0.img  

还尝试了上述方法: linuxefi (loop)/isolinux/vmlinuz0 noeject inst.stage2=hd:LABEL=UNJEB:/$isofile

但两者都以以下失败语句结束:“无法切换根:指定的切换根路径 /sysroot 似乎不是操作系统树,操作系统发布文件丢失”。我不确定 this 指的是哪个,所以不确定在哪里检查 os-release 文件。

我读到标签错误是很常见的,所以我使用losetup和blkid检查ISO的标签是否正确,例如:

sudo losetup loop8 /boot/images/livecd-live_ks-201902131038.iso
sudo blkid /dev/loop8

我检查过的其他帖子:

如何从硬盘上存储的 ISO 文件启动?

https://www.centos.org/forums/viewtopic.php?t=55412

问题: 问题是我不确定问题是否出在 ISO、内核参数或两者上。有人有 CentOS 7 Live ISO 的工作内核参数,我可以测试和复制吗?或者我可以在 initrd0.img 文件中检查或修改某些内容吗?

我还注意到 livecd-creator 使用 isolinux 作为 ISO 的引导加载程序,因此我想到尝试不同的引导加载程序,例如 syslinux,但我还没有时间测试它。

或者我会更好地尝试使用其他方法来实现目标,例如将所有必要的包添加到 initramfs 并使用它,或者尝试启动 squashfs 或其他东西?

相关内容