是否可以在内核启动时将子目录挂载为根文件系统?

是否可以在内核启动时将子目录挂载为根文件系统?

我正在尝试从我的主目录中的源安装 Linux(而不是创建专用分区)。基本系统(glibc、内核和 init)安装在 $HOME/lfs/root。我使用安装在我的 USB 驱动器内的 grub 启动此系统,以下是 grub.cfg 中的相关部分(我必须将 grub root 更改为 hd1,因为 hd0 是我的 USB 驱动器):

菜单项“自定义 linux HD”{ 设置 root='(hd1,1)' linux /home/thiago/lfs/root/boot/bzImage root=/dev/sda1/home/thiago/lfs/root ro }

似乎只有设备才是“root=”的有效参数。有什么办法可以解决这个问题吗?我不想弄乱我当前的分区。

答案1

我没有测试过,但理论上(使用最近的发行版和内核)您可以选择使用 initramfs 或 initrd。内核将首先以 root 身份使用 initramfs 运行,然后运行其启动脚本。启动脚本要做的最后一件事应该是调用pivot_root已挂载的“真实”root,然后运行真实的/sbin/init

如果您可以使 initramfs 或 initrd 工作,也许您可​​以调整启动脚本来在您想要的子目录中执行 pivot_root ?

答案2

我认为你做不到。但也许是时候看看虚拟化了?你将获得一个磁盘文件并在该磁盘中启动虚拟机。

相关内容