'allow-discards' 和 'root_trim' Linux 参数究竟有什么作用?

Jan*_*alo 11 ssd trim

目前网上很多与 SSD 相关的说明都说你应该在你的 GRUB_CMDLINE_LINUX 中添加allow- discardsroot_trim=yes。我还没有找到一个说明为什么你应该这样做,即这些参数到底做了什么(如果有的话!)。关于这个的文档在哪里,它对这两个参数的用途有什么说明?

根据Cryptsetup 1.4.0 发行说明

从内核 3.1 开始,dm-crypt 设备可选择(不是默认情况下)支持块丢弃 (TRIM) 命令。如果要启用此操作,则必须在每次激活时使用 --allow-discards 手动启用它

cryptsetup luksOpen --allow-discards /dev/sdb test_disk 
Run Code Online (Sandbox Code Playgroud)

但是传递给内核时是一样的吗(通过 GRUB_CMDLINE_LINUX)?

编辑: Kernel.org 的内核参数列表(目前至少是 2013 年 1 月)没有这些选项中的任何一个。

qbi*_*qbi 7

根据我的理解,引导参数root_trim=yes是 Gentoo 特定的。其中genkernel有一个脚本,用于查找参数并--allow-discards使用 cryptsetup设置选项(请参阅他们的git 存储库)。此外,我发现许多 Ubuntu 或 Debian 用户的报告说它在没有root_trim参数的情况下工作。我在 Ubuntusupdate-initramfs脚本中也没有发现任何行。

所以总而言之,它不是引导参数,而是cryptsetup. 的文档--allow-discards可以在cryptsetup(8)的联机帮助页中找到:

--allow-discards
允许对设备使用丢弃 (TRIM) 请求。此选项仅与createluksOpenloopaesOpen 相关

警告:在启用此选项之前,请仔细评估特定的安全风险。例如,如果可以在设备上轻松找到丢弃的块,则允许在加密设备上丢弃可能会导致有关密文设备的信息(文件系统类型、已用空间等)泄漏。

需要内核版本 3.1 或更高版本。对于旧版本,该选项被忽略。

基于这篇关于 TRIM & dm-crypt 的博客,TRIM 是一种操作,其中上层(例如文件系统)通知设备哪些扇区不再使用(不再包含有效数据)并且设备不需要保留该数据内容.

在 Linux 术语中,此操作称为丢弃。在 SCSI 世界中,它被称为 UNMAP 命令。

丢弃操作可以用于两个目的:thin Provisioning(通知数据区可以返回到分配池)和用于SSD操作优化。

丢弃对于 SSD 优化最有用,因为内部架构使用比扇区更大的块,并且必须在执行写入操作之前擦除这些块。关于不需要保存数据的扇区的信息非常有用,因为文件系统将能够更有效地组织块,从而最大限度地减少数据碎片并增加磁盘寿命。

  • 允许丢弃的内核参数化可能是 Archism:显然 [在 Arch 中,您通知 GRUB 加密根](https://wiki.archlinux.org/index.php/Dm-crypt_with_LUKS#Discard.2FTRIM_support_for_solid_state_disks_.28SSD。 29)与(例如)“cryptdevice=/dev/mapper/root:root:allow-discards”。这可能是由于 [Arch 的 wiki 被 Ubuntu wiki 的 EncryptedFilesystems 称为“最佳参考”](https://help.ubuntu.com/community/EncryptedFilesystems#pagelocation) 被 Ubuntu 用户选择。 (4认同)