【发布时间】:2016-08-05 08:31:14
【问题描述】:
我有一块嵌入式 ARM 板,正在试验 initramfs。
由于我的根文件系统是 EXT4 并且 EXT4 驱动程序内置在内核中(未编译为模块),我可以直接启动内核并挂载根文件系统,不需要 initramfs。 如果没有 initramfs,内核当然不会识别文件系统 UUID,因此 我使用分区标识符 PARTUUID 指定了 root,如内核文档中所述。有问题的引导参数如下所示: 根=PARTUUID=7acc80f1-01 这很好用。
现在,当我尝试使用 initramfs 引导相同的内核版本时,系统将无法引导。它抱怨找不到根设备。当我将引导参数更改为 使用文件系统 UUID 而不是 PARTUUID 时,它会再次起作用: 根=UUID=c9fd552c-921c-4ddb-bb46-fe557943d311 但这是为什么呢? 当内核首先原生支持 PARTUUID 时,为什么使用 initramfs 会导致更少的引导选项?
我想以在两种设置中都有效的独特方式指定 root,无论是否使用 initramfs。 /dev/sda1 等设备名称不是一个选项,因为它们在引导期间可能会有所不同(连接了多个磁盘)。
有什么线索吗?
感谢和问候,
提莫
P.S: 内核版本为 mainline 4.4.16。 U-Boot 是 2015.5。发行版是 Debian 8。
【问题讨论】:
-
小错字:U-Boot 版本是 2016.5,而不是 2015.5。
-
你可以edit你的问题来改进它(修正错误,附加额外的信息,等等)。
-
initramfs与分区无关。它只是一个在内核中虚拟挂载为分区的存档。 -
@AndyShevchenko:我真的不明白你想说什么。 initramfs 提供早期用户空间来挂载根文件系统(当需要某些驱动程序来实际访问磁盘/文件系统时,这对模块化内核很有用)。在这方面,它处理设备/分区/文件系统。但无论如何,我自己想通了这个问题。这是一个已知的 Debian 问题,请参阅下面的答案。
-
initramfs 不是分区。这就是我的观点。
标签: linux linux-kernel kernel initrd