LUKS 丢弃/TRIM:冲突的内核命令行选项

LUKS 丢弃/TRIM:冲突的内核命令行选项

我对各种方式感到困惑LUKS//dmcryptcryptsetup我对通过 Linux 内核命令行启用 //discard/TRIM 操作的

  1. dracut联机帮助页

    rd.luks.allow-discards

    允许在所有 LUKS 分区上使用丢弃 (TRIM) 请求。

  2. systemd-cryptsetup-generator联机帮助页

    luks.options=, rd.luks.options=

    ...如果仅指定了没有 UUID 的选项列表,则它们适用于其他地方未指定的任何 UUID,并且在 /etc/crypttab 中没有条目。 ...

    论据rd.luks.options=discard建议这里

  3. Arch wiki 有关 LUKS 和 SSD 的部分 显示第三个以冒号分隔的字段:

    cryptdevice=/dev/sdaX:root:allow-discards

问题:

  1. discard和 和有什么区别allow-discards?前者是强制的,后者是可选的吗?
  2. 是否会luks.options=rd.luks.options=应用给定的cryptdevice=/dev/sda2(例如不是 UUID)?如果cryptdevice=给定一个 UUID,这是否算作“在其他地方指定”呢?
  3. 如果已经给出了选项,luks.options=是否会rd.luks.options=覆盖/追加/前置?cryptsetup=
  4. rd.luks.allow-discards如果到处都需要 TRIM,那么使用看起来最简单的方法有什么缺点吗?

答案1

这在一定程度上取决于您使用的发行版以及 dracut 在 initramfs 中包含哪些组件。

例如,该cryptdevice=选项被解释为加密钩子。因此,它仅与包含此挂钩的 initramfs 映像相关。

rd.luks.allow-discards和的缺点rd.luks.allow-discards=是它根本不起作用。这些选项的描述dracut.cmdline(7)不正确。我在 Fedora 26 下测试了它,它不起作用,甚至还有一个Fedora 19 的错误报告其中讨论了记录行为与实际行为之间的偏差,并因无法修复而关闭。

和更通用luks.options=rd.luks.options=因为您基本上可以在其中放置任何有效的 crypttab 选项,例如discard。由于它们的解释systemd-cryptsetup-generator不关心cryptdevice=您不能期望这些选项之间有有用的交互。

请注意,luks.options=仅对以下设备有效不是在 initramfs 映像文件中列出etc/crypttab

因此,要为启动期间打开的 dm-crypted 设备启用 dm-crypt 直通 SSD 修剪支持(也称为丢弃),您有 2 个选项:

  1. 添加rd.luks.options=discard到内核命令行并确保 initramfs 映像不包含etc/crypttab
  2. 将丢弃选项添加到相关条目中,/etc/crypttab并确保当前版本包含在 initramfs 映像中。

您可以用于lsinitrd /path/to/initramfs etc/crypttab检查 initramfs 映像、dracut -v -f /path/to/initramfs-image在更改后重新生成映像/etc以及dmsetup table查看加密设备是否实际上是使用丢弃选项打开的(相关条目应包含该字符串allow_discards)。

答案2

Necro回答问题:discard和allow-discards有什么区别?

AFAIK:DISCARD 是通过“mount”命令读取的,因此可以将其放在 fstab 和 crypttab 上,如下所示选项

ALLOW-DISCARDS 由“cryptsetup”命令读取,因此它在 fstab 或 cripttab 文件中没有位置。还有更多,但亲爱的读者,这有待您去发现。

相关内容