可能在Linux上使用TRIM(丢弃)工作在ext4 + LVM +软件RAID上?

我们在Linux上使用RAID1 + 0和md(目前是2.6.37)来创buildmd设备,然后使用LVM在设备上提供卷pipe理,然后在LVM卷组上使用ext4作为我们的文件系统。

以SSD作为驱动器,我们希望看到TRIM命令通过层(ext4 – > LVM – > md – > SSD)传播到设备。

看起来最近的2.6.3x内核已经添加了很多新的与SSD有关的TRIM支持,包括更多的设备映射程序的覆盖范围,但是我们似乎仍然无法使其正确地级联。

这可能吗? 如果是这样,怎么样? 如果没有,是否有进展?

不可能,导致Linux软RAID不支持这个(还?)。

UPD。 :感谢Wodin让我知道 – 根据lkml.org/lkml/2012/3/11/261这个function最近被添加了。 build议 != 接受 ,但。

从2.6.37开始,它应该存在( 来源 ) 。 内核不会在后台执行,块丢弃进程目前devise为按需运行(cron脚本!)。 Dm-crypt支持尚不存在。

2011年1月13日,一个补丁被合并到dm-raid1.c中,其内容如下:

dm raid1: support discard Enable discard support in the DM mirror target. Also change an existing use of 'bvec' to 'addr' in the union. 

我不是100%,但我认为这是2.6.38的合并窗口。

前段时间EXT4增加了支持,就像LVM一样。 RAID是没有支持的一个关键。 截至2011年1月13日,似乎支持已被添加。 在2.6.38或2.6.39中查找它。


时间已经过去了,TRIM的支持肯定包含在3.7内核中 。 提交RAID10的内容如下 :

这使得MD RAID 10支持TRIM。 如果一个磁盘支持丢弃而另一个不支持discard_zero_data而另一个磁盘不支持discard_zero_data,则这些磁盘之间的数据可能不一致。 但是这不重要,丢弃的数据是没用的。 这将在重build中添加额外的副本。

Mdtrim可能需要更多的工作:

 Cyberax-mdtrim-0a40e8d# ./mdtrim.py -m /dev/md4 -s /home Scratch directory is /home, trimmer file size is 0 GB 790 MB Found slave sdc2 on /dev/sdc with MD offset 0 and partition offset 249856 Creating trimmer file 252,2: device not found in /dev Traceback (most recent call last): File "./mdtrim.py", line 120, in <module> if lines[2].find("assuming %d byte sectors" % sector_size) == -1: IndexError: list index out of range 

您可以使用我的MDTRIM脚本( https://github.com/Cyber​​ax/mdtrim/ )在ext4 / 3一级RAID上修剪空白空间。 我们定期从cron开始,它对我们很好。

添加对其他RAID级别的支持是可能的,但我没有时间(或需要)。

正如这里所build议的你可以使用

 lsblk -D 

为了检查你的blockdevices是否通过了discard命令。

另请注意, lvm.conf中的部分设备包含一个选项issue_discards。 看到

 man 5 lvm.conf 

获取更多信息。