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

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

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

linux   /bzImage root=UUID=666c2eee-193d-42db-a490-4c444342bd4e ro

如何通过 UUID 识别我的根分区而不需要 initramfs/initrd?

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

答案1

我发现答案埋藏在另一个线程:

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

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

sudo blkid

例如,这将打印

/dev/sda1: UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="ext2" PARTUUID="f3f4g3f4-02"

您现在可以修改 Linux 命令行,如下所示:

linux   /bzImage root=PARTUUID=f3f4g3f4-02 ro

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

答案2

lsblk具有各种选项可以显示正在使用的磁盘/分区/uuid

例如

% sudo lsblk -o UUID,PARTUUID,NAME,MOUNTPOINT 
UUID                                   PARTUUID           NAME                MOUNTPOINT
                                                          sda                 
d634adc8-69de-edd8-d491-a79e69aeff78   0008500a-01        |-sda1
195237da-8825-45fb-abf7-a62895bd0967                      | `-md0             /boot
d2cf1bcc-d51d-bf37-9723-3b505172fe5f   0008500a-02        `-sda2              
24bvXN-PVU1-kubI-Zgj5-W82i-3Z07-v80lME                      `-md1             
67fe5039-de46-4629-bd03-ee65a5dd0132                          |-godzilla-root /
ba70f1d1-89f0-4dd9-83a4-8bc9a74a6548                          `-godzilla-swap [SWAP]

所以我可以看到UUIDd634adc8-69de-edd8-d491-a79e69aeff78对应于/dev/sda3分区UUID0008500a-01

根据您的设置,您可以执行以下操作

root=/dev/sda1

或者

root=PARTUUID=0008600a-01

(在我的例子中,root它是 LVM 的一部分,因此无法以这种方式安装,但概念适用)

答案3

UUID=是无效的。照原样LABEL=。它们都标识文件系统,而不是在其中查找文件系统的分区。

来源:内核name_to_dev_t()do_mount.c

UUID 的唯一有效内核命令行条目是PARTUUID=。此 UUID 适用于分区本身,而不适用于其中包含的文件系统。 (参见blkid输出)

如果您使用 GPT 分区,请考虑PARTLABEL=使用更人性化的版本:)

相关内容