我可以让 SYSLINUX 从 NTFS 分区上的映像文件加载根文件系统吗?

我可以让 SYSLINUX 从 NTFS 分区上的映像文件加载根文件系统吗?

SYSLINUX 允许我从 FAT16 USB 驱动器启动,方法是从那里加载内核映像和初始 RAM 磁盘 (initrd) 映像。

为了获得更多空间和更快的访问速度,我可以在启动后从硬盘挂载 NTFS 分区,然后使用环回设备从那里挂载文件系统映像来替换 /home 甚至 chroot 到其中,但这是在启动过程之后,使得系统更新变得不可能。

有没有办法让 SYSLINUX 本身将 NTFS 分区中的 fs-image 作为根 fs 挂载?

或者我可以修改 initrd 映像,以便在启动过程中更早地挂载新的根文件系统吗?我知道如何挂载和修改该映像,但我迷失在其中的脚本中,不知道它们何时以及如何执行。

答案1

是的,这是可能的。它甚至可以与内置函数一起使用。只需编辑您的代码syslinux.cfg以包含以下内容:

LABEL linux
LINUX /boot/vmlinuz
APPEND root=/dev/disk/by-label/data rootfstype=ntfs loop=images/linux_root.img loopfstype=ext4 rw
INITRD /boot/initrd.img 

显然,您必须将内核映像 ( vmlinuz) 和初始 RAM 磁盘映像 ( initrd.img) 复制到要使用 SYSLINUX 启动的 FAT 分区。(该路径相对于分区根目录。)

root=参数指定根文件系统映像所在的设备和分区。当然,您也可以使用符号/dev/sda1/dev/disk/by-UUID/SOMECRYPTYCNUMBER版本。

指定rootfstype文件系统映像所在分区的文件系统。NTFS 和 FAT 均受开箱即用的支持。对于更奇特的格式,您需要编辑initrd.img以包含并加载适当的内核模块。

loop=给出相对于根文件系统映像所在分区基址的路径。loopfstype=指定其内部类型。显然,它将在/启动后挂载。如果此文件夹存在,则将自动挂载加载映像的分区/host。(如果它不是自动挂载在那里,您将无法将其挂载到其他任何地方。但如果是,您可以将它移动到另一个挂载点mount -m。)

initrd.img每次通过系统更新更新内核和 FAT 分区时,不要忘记复制并覆盖它们,否则启动时可能会发生奇怪的事情。

不幸的是,没有办法用同样的方式包含交换分区。您要么为此使用真实分区,要么尝试找到一种方法在从正在运行的系统启动后激活交换分区。

预计通过 NTFS 包装器安装的循环设备写入大约会占用 10% 的 CPU 开销。

相关内容