我想启动 SLES 并从 ramdisk 中运行它。我想设置机器,以便它们启动 PXE 启动,并且作为 PXE 启动过程的一部分,它们会跨过作为根文件系统的映像,然后启动它。
有人做过这个或类似的吗?
我的想法是,这initrd
几乎是我想要的,尽管太小且功能不足。所以我做了一个最小的安装,然后做了一个 cpio 来创建我自己的自定义initd
。 (大约是 350M,虽然很大,但对于这个目的来说已经足够了)。
fsck
当它尝试启动时遇到问题/dev/shm/root
。阻止这种情况发生的正确方法是什么(我尝试通过设置/etc/fstab
,但效果不佳)。作为下一个选项,我设置了一个 sysconfig 文件来强制 READONLYROOT,这让我启动了 init 进程直到它切换到的点,/etc/init.d/rc3.d
但现在我无法让它继续下去。
任何建议或想法,或者如果其他人已经这样做了,那就太好了。
附言。设置是具有 1TB RAM 的大型节点,我不想为操作系统提供本地文件系统,替代方案是让 NFS 服务器作为根文件系统,但我不想要 NFS 流量,因此 RAM 磁盘似乎是不错的选择。
答案1
我取得了很好的进步。
我编辑了文件 /etc/init.d/boot.d/boot.rootfsck 以将 ramfs 作为文件系统类型例外添加到 fsck 进程中。 (第 79 行)。
aufs|tmpfs|afs|cifs|nfs|novell|smb|ramfs|UNKNOWN*) MAY_FSCK=0 ;;
执行此操作后,不再需要使用 READONLYROOT 进行 sysconfig。
完成此操作后,我设置 pxelinux.cfg 以获得引导行,如下所示:
LABEL SLES11 InMemory OS
KERNEL suseBig/vmlinuz-3.0.74-0.6.8-default
APPEND initrd=suseBig/suseImage rdinit=/sbin/init
TIMEOUT 100
文件 suseImage 是 SLES 工作安装的整个根文件系统的 cpio 存档,但针对 root 修改了 /etc/fstab 行。 (我必须通过从另一个工作操作系统(在另一个磁盘上)访问这个工作 SLES 环境来构建 CPIO 存档)
rootfs / rootfs defaults 0 0
一旦这一切都就位,节点就会愉快地启动,我现在有了一个可以工作的 SLES ramdisk 版本,可以通过 PXE 在网络上启动。 (所以启动速度很慢,但之后操作系统就没有网络流量了)。它没有持久性,但我在应用程序层解决了我的情况。