我有以下分区表:
NAME
nvme0n1
├─nvme0n1p1 part /boot
└─nvme0n1p2 part
└─crypt crypt
├─crypt-swap lvm [SWAP]
├─crypt-root lvm /
└─crypt-home lvm /home
由于驱动器是 SSD,我想执行修剪命令以提高磁盘本身的性能/使用寿命。
特别是,我想启用定期 TRIM。
由于第二个分区(即nvme0n1p2
)已加密,出于安全考虑,TRIM 将被禁止(https://wiki.archlinux.org/title/Dm-crypt/Specialties#Discard/TRIM_support_for_solid_state_drives_(SSD))。
但是,可以通过encrypt
在打开时进行配置来在加密分区上启用 TRIM。
当我的分区在内核启动时打开时,我修改了内核参数(即allow-discards
):
cryptdevice=/dev/sdaX:root:allow-discards
(请注意,分区命名和卷名称在上面的代码片段中不相关。)。
通过这样做,我确实能够成功地在磁盘上运行 TRIM 命令:
# cryptsetup luksDump /dev/nvme0n1p2 | grep Flags
Flags: allow-discards
和:
# fstrim ...
/home: [..] trimmed on ...
/: [..] trimmed on
到目前为止,一切都很好。
当我尝试恢复到原始状态时,问题出现了。
我已经删除了内核参数allow-discards
,但Flags
在分区上仍然显示allow-discards
并且fstrim
命令成功完成其工作。
- 这怎么可能?
- 如何恢复加密分区上的拒绝丢弃?
答案1
事实证明,LUK2可以在标头中永久存储元数据。
可以allow-discards
使用以下命令启用并存储在分区本身中(无需任何进一步的配置 - 例如内核参数):
cryptsetup --allow-discards --persistent refresh root
显然,我过去发出了这个命令来启用丢弃选项。
可以通过以下方式删除该标志:
cryptsetup --persistent refresh root
https://man7.org/linux/man-pages/man8/cryptsetup.8.html
在没有任何可选参数的情况下刷新设备将使用默认设置(与设备类型相关)刷新设备。