在U盘上安装LFS

不想在硬盘上额外分区,所以安装LFS的时候选择了把它安装在U盘上。
按照官方手册安装LFS并启动,在引导结束后遇到了问题:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

问题

使用 GRUB 引导时没有遇到问题,修改 BIOS 中引导方式为Legacy Support后可以进入引导界面并成功进行引导,但是在引导结束后遇到了错误。

引导结束后屏幕上显示满屏的调试信息,然后卡住,同时笔记本的CapsLk指示灯不停闪烁,调试信息中比较明显的错误提示是:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

解决

在网上搜索报错信息之后看到了几种可能的原因,尝试修改GRUB配置文件、更改配置重新编译内核均无效,最后直接搜索lfs on usb,看到Booting LFS from USB stick ?里提到了initrd,搜索其相关信息,发现它在系统从 USB 启动时是十分重要的。

根据搜索到的信息,Linux 启动时会先加载内核及驱动,然后加载文件系统。当内核准备从 USB 加载文件系统时,USB 设备尚未初始化完毕,从而引起了如上的错误。解决方法是使用 initrd 来加载 USB 驱动,等到 USB 设备准备就绪时再让内核来加载文件系统。

按照 BLFS 中的About initramfs部分安装了脚本,然后安装cpio运行依赖并用mkinitramfs 4.15.3命令构建了initramfs,在 grub.cfg 中加入initrd /boot/initrd.img-4.15.3后尝试启动,再次失败,怀疑是内核编译选项有问题,于是在网上搜索内核编译选项需要哪些。

最终找到了LFS 7.8 Setting up grub to boot from flash drive,发现是 grub.cfg 中缺少了rootdelay=5,再次编译内核,修改 grub.cfg 后终于成功启动。

因此,在U盘上安装LFS需要的额外操作: