是否可以让 SSD TRIM(丢弃)在 Linux 中的 ext4 + LVM + 软件 RAID 上运行?

是否可以让 SSD TRIM(丢弃)在 Linux 中的 ext4 + LVM + 软件 RAID 上运行?

我们在 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)有提交,其中之一:

— 基本上,自从我之前编辑我的答案以来的几个月内,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/Cyber​​ax/mdtrim/) 来修剪 ext4/3 1 级 RAID 上的空白空间。我们定期从 cron 启动它,它对我们来说效果很好。

可以添加对其他 RAID 级别的支持,但我没有时间(或不需要)这样做。

相关内容