我们在 Linux(当前为 2.6.37)上使用 RAID1+0 和 md 创建 md 设备,然后使用 LVM 在设备顶部提供卷管理,然后在 LVM 卷组上使用 ext4 作为我们的文件系统。
使用 SSD 作为驱动器,我们希望看到 TRIM 命令通过各层 (ext4 -> LVM -> md -> SSD) 传播到设备。
看起来最近的 2.6.3x 内核已经添加了很多新的与 SSD 相关的 TRIM 支持,包括更多的设备映射器场景的覆盖,但我们似乎仍然无法让它正确地级联。
这有可能吗?如果可以,怎么做?如果不行,有没有什么进展?
答案1
更新于 2020-06-17
回顾 2020 年的提交历史:
2010-08
:允许丢弃通过如果至少有一个底层设备支持,则转换为线性映射。
两年后,关于md
(LSR)有提交,其中之一:
2012-10
:MD:raid 10 支持 TRIM
— 基本上,自从我之前编辑我的答案以来的几个月内,Linux 内核就能够在设置中支持块丢弃。
先前版本的答案:
更新于 2012-07-17
更新。:感谢 Wodin 告知我这一情况——根据网站此功能已添加建议的最近。建议的!=公认, 尽管。
更新于 2011-02-01 不可能,因为 Linux Soft RAID 还不支持此功能(目前?)。
答案2
从 2.6.37 开始,它应该存在(来源)。内核不会在后台执行此操作,块丢弃过程目前设计为按需运行(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 而另一个没有,则这些磁盘之间的数据可能会不一致。但这不应该有关系,丢弃的数据是无用的。不过这会在重建时添加额外的副本。
答案3
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
答案4
您可以使用我的 MDTRIM 脚本(https://github.com/Cyberax/mdtrim/) 来修剪 ext4/3 1 级 RAID 上的空白空间。我们定期从 cron 启动它,它对我们来说效果很好。
可以添加对其他 RAID 级别的支持,但我没有时间(或不需要)这样做。