因此,一旦我了解到(当然是这里)“live USB”无法安装或写入,我就停止尝试用我的文件更新我的 Debian 12 安装映像,并重新开始使用新的棒。复制了适当的内容,用我忠实的 LILO 将其烧录到 MBR 上,然后出现......奇怪的错误。十几份关于“女士,未找到阵列”的报告,最终:“警报!” 没有根文件系统”。(根 FS 绝对没有任何问题。)
然后我将内核和 initrd.img 从 Debian 12 棒复制到新棒,再次运行 LILO 并......胜利!棍子靴子。显然,之前的 initrd.img 缺少一些东西——在 HDD 启动时工作正常,但在 USB 记忆棒上无法工作。我可以诊断一下吗?弄清楚到底缺少了什么?我想了解有关 initrd.img 是如何创建的更多信息。也许重建有缺陷的.img?问题是 Debian 12 文件是 6.1.0-18 版本,而我的 HDD 运行的是 6.1.0-20,我希望 USB 是最新的。
我认为问题出在 LILO 和 USB 设备的组合上。我认为 LILO 希望设备标识保持不变。USB 设备可能会到处移动,尤其是在不同的计算机上。
我建议改用 GRUB,并确保它使用“搜索”命令通过 UUID(或标签)来定位磁盘。另外,请确保每个文件系统都是唯一的(即不要克隆磁盘),以便 UUID 是不同的。
至于initrd...听起来您复制的系统使用了一些RAID设备。这将使用“mdadm”(我相信您将其误复制为“女士”)。一般来说,initrd 应该在它将引导的系统上下文中生成。因此,您可以在 USB 上安装所有内容,挂载它,在该挂载中挂载(或绑定挂载)/proc、/dev、/sys 等,然后
chroot
挂载到已挂载的 USB。然后,您应该构建 initrd。(或者,如果可以启动它,则可以执行 do 并构建一个新的 initrd。)如果您确实希望在 USB 和普通磁盘上使用相同的 initrd,则可能需要安装相同的软件包子集来将内容放入
/usr/share/initramfs-tools/
. (其中的文件名通常是包名称,这有助于识别它们。)我不建议打扰。您可能还需要检查引导命令行,以确保它没有引用 RAID 设备。
如果您可以启动 USB,并且只想重建 initrd,并且假设您正在使用 initramfs-tools,则可以是:
或者如果这没有任何作用(因为你还没有 initrd):
要从主机重建 USB initrd,假设您的 USB 设备是
/dev/sdc
,其引导分区是/dev/sdc2
,根分区是/dev/sdc3
。假设您有一个空目录/mnt/usb
。并假设您已经作为 运行root
。此时,你逻辑上已经在USB设备中了(只不过所有的系统服务都在主机中运行,并且某些大小限制是错误的。现在要更新initrd,如上所述。
除非您想在运行时保留在 USB 文件系统中,否则您应该使用
exit
或 control-D 来离开 chroot。然后使用以下命令卸载所有内容:
通常,您不需要手动运行 update-initramfs,因为安装脚本会自动执行此操作。如果您从源代码安装内核,或者执行诸如构建新根(例如在 USB 上)之类的操作,则此操作可能会失败。