我们在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/Cyberax/mdtrim/ )在ext4 / 3一级RAID上修剪空白空间。 我们定期从cron开始,它对我们很好。
添加对其他RAID级别的支持是可能的,但我没有时间(或需要)。
正如这里所build议的你可以使用
lsblk -D
为了检查你的blockdevices是否通过了discard命令。
另请注意, lvm.conf中的部分设备包含一个选项issue_discards。 看到
man 5 lvm.conf
获取更多信息。