我想创建一个带有覆盖分区的可启动 Debian Live 操作系统(即保存更改)。但我想创建多个分区,而不是一个。我想将 syslinux 安装到一个分区,将 Debian OS-live 映像文件安装到另一个分区,最后将覆盖分区安装到另一个分区。为了实现这一点,我阅读了 Debian 官方页面以寻求帮助准备 USB 启动 Debian 操作系统的说明和 syslinux 文档。我使用 syslinux 命令,我设法获得启动菜单,并且可以加载vmlinuz-5.10.0-8-amd64图像,因为我将其复制到 sdb1 中 syslinux 的同一文件夹中(启动分区,即/mnt/sdb1/syslinux/vmlinuz-5.10.0-8-amd64)。但我无法加载位于 sdb2(第二个分区,即/mnt/sdb2/live/initrd.img-5.10.0-8-amd64)在 sdb1 的 syslinux 文件夹中的 menu.cfg 中使用此命令。我所做的就是在这里菜单配置文件下的文件/dev/sdb1/syslinux/文件夹 :
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
结果是:
命令根=/dev/sdb2和initrd=/dev/sdb2/live/initrd.img-5.10.0-8-amd64不起作用,它给出 ** 没有这样的文件或目录 ** 错误。请帮忙,为什么没有成功?我怎样才能让它发挥作用?
答案1
当您使用 时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 的这种自定义安装需要一些工作。