如何使用 systemd boot 通过标签指定 cryptdevice?

如何使用 systemd boot 通过标签指定 cryptdevice?

我正在使用 systemd 启动运行 Arch Linux。我/boot/loader/entries/arch.conf当前使用如下行指定 luks 加密设备:

options        rw cryptdevice=/dev/sda1:ABC root=/dev/mapper/ABC

我知道我也可以使用 UUID 代替/dev/sda1.在这种情况下,内核选项行将如下所示:

options        rw cryptdevice=UUID=1f5cce52-8299-9221-b2fc-19cebc959f51:ABC root=/dev/mapper/ABC

但是,我可以使用分区吗标签或一卷标签或任何其他类型的标签?如果是这样,语法是什么?

答案1

如果您已经在使用新的 LUKS2 格式,则可以设置标签:

对于新的 LUKS2 容器:

# cryptsetup luksFormat --type=luks2 --label=foobar foobar.img
# blkid /dev/loop0
/dev/loop0: UUID="fda16145-822e-405c-9fe8-fe7e7f0ddb5e" LABEL="foobar" TYPE="crypto_LUKS"

对于现有 LUKS2 容器:

# cryptsetup config --label=barfoo /dev/loop0
# blkid /dev/loop0
/dev/loop0: UUID="fda16145-822e-405c-9fe8-fe7e7f0ddb5e" LABEL="barfoo" TYPE="crypto_LUKS"

但是,无法为更常见的 LUKS1 标头设置标签。


使用LUKS1,您只能在更高层上设置标签。例如,如果您使用 GPT 分区,则可以设置 PARTLABEL。

# parted /dev/loop0
(parted) name 1 foobar                                                    
(parted) print
Model: Loopback device (loopback)
Disk /dev/loop0: 105MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name    Flags
 1      1049kB  104MB  103MB               foobar

这将分区 1 的分区标签设置为“foobar”。

您可以识别它PARTLABEL=foobar或在其中找到它/dev/disk/by-partlabel/

# ls -l /dev/disk/by-partlabel/foobar 
lrwxrwxrwx 1 root root 13 Oct 10 20:10 /dev/disk/by-partlabel/foobar -> ../../loop0p1

同样,如果您在 LVM 之上使用 LUKS,则可以使用 VG/LV 名称。


与对待标签一样,要格外小心,确保每个标签不存在多次。 UUID 被认为是“普遍唯一”是有原因的。当尝试使用错误的设备时,您会遇到很多问题;它甚至可能导致数据丢失(例如,如果 cryptswap 在启动时格式化了错误的设备)。

答案2

cryptsetup可以在 a 上创建标签密码设备。查看 /dev/disk/by-label 以确保其匹配。所以

cryptdevice=LABEL={labelname}

以同样的方式作为

root=LABEL=ROOT

适用于ROOT带标签的根设备

相关内容