如何在没有 initramfs/initrd 的情况下通过 UUID 识别根分区

dae*_*ejk 9 linux grub boot kernel uuid

如果没有 initramfs/initrd 支持,以下内核命令行将无法工作:

linux   /bzImage root=UUID=666c2eee-193d-42db-a490-4c444342bd4e ro
Run Code Online (Sandbox Code Playgroud)

如何在不需要 initramfs/initrd 的情况下通过 UUID 识别我的根分区?

我不能使用类似的设备名称/dev/sda1,因为分区驻留在 USB 记忆棒上并且需要在不同的机器上工作。

dae*_*ejk 6

我发现答案隐藏在另一个线程中

UUID 标识文件系统,而 PARTUUID 标识分区(即重新格式化后保持不变)。如果没有 initramfs/initrd,内核只支持 PARTUUID。

要查找机器中块设备的 PARTUUID,请使用

sudo blkid
Run Code Online (Sandbox Code Playgroud)

这将打印,例如

/dev/sda1: UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="ext2" PARTUUID="f3f4g3f4-02"
Run Code Online (Sandbox Code Playgroud)

您现在可以按如下方式修改您的 linux 命令行:

linux   /bzImage root=PARTUUID=f3f4g3f4-02 ro
Run Code Online (Sandbox Code Playgroud)

这将从具有 PARTUUID f3f4g3f4-02 的分区启动,在本例中为/dev/sda1.