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

Mou*_*inX 5 kernel dm-crypt luks systemd-boot

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

options        rw cryptdevice=/dev/sda1:ABC root=/dev/mapper/ABC
Run Code Online (Sandbox Code Playgroud)

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

options        rw cryptdevice=UUID=1f5cce52-8299-9221-b2fc-19cebc959f51:ABC root=/dev/mapper/ABC
Run Code Online (Sandbox Code Playgroud)

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

fro*_*utz 4

如果您已经在使用新的 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"
Run Code Online (Sandbox Code Playgroud)

对于现有 LUKS2 容器:

# cryptsetup config --label=barfoo /dev/loop0
# blkid /dev/loop0
/dev/loop0: UUID="fda16145-822e-405c-9fe8-fe7e7f0ddb5e" LABEL="barfoo" TYPE="crypto_LUKS"
Run Code Online (Sandbox Code Playgroud)

但是,无法为更常见的 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
Run Code Online (Sandbox Code Playgroud)

这将分区 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
Run Code Online (Sandbox Code Playgroud)

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


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