我尝试使用 dm-crypt 和 LVM 设置 Fedora 25,但很难让 TRIM 工作。
$ sudo fstrim -av
/boot: 28.6 MiB (30003200 bytes) trimmed
/: 56.5 GiB (60672704512 bytes) trimmed
$ sudo fstrim -av
/boot: 0 B (0 bytes) trimmed
/: 56.5 GiB (60671877120 bytes) trimmed
从上面的输出中可以看出,重复运行fstrim
可以在未加密的情况下进行外部4 /boot
,但似乎对/
(位于同一磁盘上)没有影响。
设置为SSD -> dm-crypt -> LVM -> XFS
$ lsblk -D
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda 0 512B 2G 0
├─sda2 0 512B 2G 0
│ └─luks-dd5ce54a-34c9-540c-a4cf-2a712b8a3a5e 0 512B 2G 0
│ └─fedora-root 0 512B 2G 0
└─sda1 0 512B 2G 0
根据这问题,DISC-ZERO == 0
不应该是问题
# cat /etc/crypttab
luks-dd... UUID=dd.. none discard
# cat /etc/lvm/lvm.conf
devices {
...
issue_discards = 1
...
}
我还添加了rd.luks.options=discard
选项/etc/default/grub
,并更新了 initramfs 和 grub.cfg:
# grub2-mkconfig -o /boot/grub2/grub.cfg
# dracut -f
丢弃选项确实正确传播:
# dmsetup table luks-d...
0 233385984 crypt aes-xts-plain64 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 8:2 4096 1 allow_discards
我已经尝试过可以在网络上找到的上述设置的变体,但这似乎遵循手册页。我没有尝试使用不同的文件系统,但应该支持 XFS。
答案1
我认为您的测试与文档不符(man fstrim
)。
-v, --详细
详细执行。使用此选项,fstrim 将输出从文件系统向下传递到块堆栈到设备的字节数,以便可能丢弃。从存储设备的角度来看,该数字是最大丢弃量,因为调用重复的 FITRIM ioctl 将不断发送相同的扇区以重复丢弃。
fstrim 每次都会报告相同的潜在丢弃字节,但只有在丢弃之间写入的扇区才会被存储设备实际丢弃。此外,内核块层保留调整丢弃范围以适应 raid 条带几何结构、LVM 设置中不支持修剪的设备等的权利。这些减少不会反映在 fstrim_range.len(--length 选项)中。
我建议使用查找丢弃请求块跟踪相反,即在运行 fstrim 的同时。希望它能够显示丢弃请求是否正在提交到堆栈底部的块设备。您可以比较 sda1 和 sda2 之间的结果(全新启动后,以避免 sda1 上出现未记录的行为)。
btrace -a discard $DEV