如果没有 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=
使用更人性化的版本:)