NVMe 设备上的根文件系统

NVMe 设备上的根文件系统

我有一个 Intel 750 NVMe 驱动器。工作正常。嗯..有点。我想使用这个设备作为我的根文件系统。

我的 BIOS 不支持 NVMe 设备。

  1. 我在内核中启用了 nvme 驱动程序,而不是模块。我可以安装 nmve 设备。我将根文件系统复制到其中。

当我尝试将此设备用作 grub2 中的根文件系统时,我得到一个未知设备。

这是内核和参数的 grub2 行:

linux   /boot/kernel-4.1.6-gentoo root=/dev/nvme0n1p1 ro quiet

为什么是这样?驱动程序位于内核中。它不是一个模块。它不需要根文件系统中的任何内容。是否使用BIOS访问/dev/nvme0n1p1?

  1. 我的第二次尝试是使用 initramfs。我使用 genkernel 来创建 initramfs。

    /dev/nvme0n1p1 也有这个问题。它使用 initramfs 启动到 linux。但是,当它尝试通过 linuxrc 脚本挂载真正的根文件系统时,它在块设备检查上失败

.... 检查块设备或 /dev/nfs elif [ -b "${REAL_ROOT}" ] || [“${REAL_ROOT}”=“/dev/nfs”] ...

REAL_ROOT 设置为 dev/nvme0n1p1 (我添加了一些调试代码)

我修改了上面的脚本来挂载/dev/nvme0n1p1,但这也失败了。它不在那里。

奇怪的是......失败后它要求用户进入根文件系统......并且......我输入“/dev/nvme0n1p1”并且它工作正常。靴子。

另外,它会让你进入一个 shell.. 并且 /dev/nvme0n1p1 就在那里......以及测试

elif [ -b "${REAL_ROOT}" ]

穿过外壳。

那么,#1 中发生了什么。这应该有效吗?是否正在使用 BIOS(这会失败,因为我的 BIOS 不支持 NVMe)?

#2 很奇怪,对我来说看起来像是一个错误。话虽这么说……那么谁能使用 NVMe 作为根设备呢?我确信谷歌会从我的搜索中返回一些东西。

答案1

NVMe 设备与 Linux 内核中的许多其他 MTD 设备一样,依赖于异步初始化。控制器被内核发现后,块层将发起分区扫描,但内核不会等待(默认情况下)。这意味着在此类设备上挂载根文件系统的尝试要么会失败,要么会很糟糕,因为当内核尝试挂载根文件系统时,分区布局可能还不知道。

为了确保内核实际上等待根设备出现,而不是急于避免不可避免的恐慌,必须rootwait在引导加载程序/嵌入式命令行上传递一个选项(rootdelay使用显式超时是另一种选择,但rootwait显然更简单、更安全)。

该问题仅在直接启动内核时出现,因为 initramfs 激活可确保初始化任务的完成(或者可能只是引入足够的延迟,不确定)以完成分区扫描以及所有分区注册并可用。

相关内容