我想创建一个带有覆盖分区的可启动 Debian Live OS(即保存更改)。但我想创建多个分区,而不是一个。我想将 syslinux 安装到一个分区,将 Debian OS-live Image 文件安装到另一个分区,最后将分区覆盖到另一个分区。为此,我阅读了官方 Debian 页面以获取有关准备 USB 以启动 Debian OS和 syslinux 文档的帮助描述。我使用了 syslinux 命令,我设法获得了启动菜单,我可以加载vmlinuz-5.10.0-8-amd64映像,因为我将它复制到与 sdb1 中的 syslinux 相同的文件夹中(启动分区,即/mnt/sdb1/syslinux/vmlinuz -5.10.0-8-amd64)。但我无法加载位于 sdb2 中的 initrd.img 文件(第二个分区,即/mnt/sdb2/live/initrd.img-5.10.0-8-amd64)在 sdb1 的 syslinux 文件夹中的 menu.cfg 中使用此命令。我所做的是在/dev/sdb1/syslinux/文件夹下的menu.cfg文件中:
INCLUDE stdmenu.cfg
MENU title Main Menu
DEFAULT Debian GNU/Linux 64 bit
LABEL Debian GNU/Linux 64 bit
SAY "Booting Debian GNU/Linux Live (kernel 5.10.0-8-amd64)..."
LINUX vmlinuz-5.10.0-8-amd64
APPEND root=/dev/sdb2 fromhd=/dev/sdb initrd=/dev/sdb2/live/initrd.img-5.10.0-8-amd64 boot=live swap=true persistence persistence-storage=filesystem persistence-media=removable-usb union=overlay components locales=tr_TR.UTF-8 splash
结果是:
命令root=/dev/sdb2和initrd=/dev/sdb2/live/initrd.img-5.10.0-8-amd64不起作用,它给出 ** No such file or directory ** 错误。请帮助,为什么它没有工作?我怎样才能让它工作?
当您使用 时
APPEND
,您只是在内核命令行中添加参数。但是对于现代内核,加载initrd.img
文件是引导加载程序的工作,而不是内核的工作。GRUB 和 SYSLINUX 都initrd
为此目的使用该命令。由于历史原因,Syslinux 理解
initrd=
上线的选项APPEND
并专门处理。该行的所有其他选项APPEND
都只是交给内核(和 initrd 脚本)进行处理。但是 Syslinux 不知道 Linux 在启动时将如何命名各种设备,而且在我看来 Syslinux 没有办法(至少没有记录的方式)来引用它当前启动的设备以外的任何其他设备。
该
Loading vmlinuz-5.10.0-8-amd64... ok
消息由 Syslinux 打印,就像下一行一样。将 initrd 文件与内核文件放在不同的分区意味着 Syslinux 根本无法访问 initrd 文件。Syslinux 需要它的配置、内核和 initrd 文件都在同一个分区中。现代版本的 GRUB 足够灵活,可以做你想做的事,但这样的 GRUB 自定义安装需要做一些事情。