fstrim 似乎没有修剪使用 lvm 和 dm-crypt 的分区

fstrim 似乎没有修剪使用 lvm 和 dm-crypt 的分区

我尝试使用 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

相关内容