TRIM 适用于 FAT32 吗?

TRIM 适用于 FAT32 吗?

我用过这个WebUpd8 指南帮我修剪我的固态硬盘在 Ubuntu 13.10 上。指南说

您必须确保分区是 EXT4 或 BTRFS。

不幸的是,我愚蠢地以为 HD 被格式化为 ext4;但它实际上是 FAT32。

var/log/trim表明它正在发挥作用:

*** Sun, 15 Dec 2013 11:30:42 +0000 ***
/: 50567962624 bytes were trimmed

但它真的起作用了吗?还是我必须重新格式化驱动器并重新开始?

抱歉,这听起来有点偏执。任何安慰都非常感谢。

答案1

我发现这是一个老问题...但它在关于这个主题的搜索中很早就出现了,所以似乎值得从内核源代码中给出答案。

Linux 文件系统实现可以通过两种不同的方式“支持”TRIM:

  • 它可以支持-o discard安装选项,因此空闲的块会被立即修剪

  • 它可以支持FITRIM读写控制,这是用户空间fstrim命令在收到请求时批量修剪所有当前空闲块的方法

给定的文件系统实现可以支持其中一个,或者两个,或者两者(或者都不支持)。

事实证明,FAT 实现已经能够做到discard 自内核 2.6.28 起。这甚至早于 mount 选项,后者直到 2.6.33 才出现。从 2.6.28 到 2.6.32,FAT 都是discard无条件写入的。从 2.6.33 开始,您可以控制是否写入。

至于FITRIMioctl,嗯,这已经成为一件事了在 2.6.37 中,但我没有看到任何迹象表明 FAT 文件系统代码支持它,即使在最新、最好的版本中(截至今天)4.13rc5. 其他几个文件系统也已经实现了它,但是似乎没人关心 FAT。

这有点太糟糕了,因为至少有一种非常常见的情况,你会想要一种一次性修剪所有现有空闲块的方法:你通过将dd整个磁盘映像从旧旋转驱动器迁移到闪亮的新 SSD,对古老的 Banana 6000 进行了很好的升级,因此现在,就 SSD 而言,所有这些块都已写入,无论它们对文件系统是否重要。因此,当然,您希望修剪文件系统认为空闲的块。

但也许还有希望。虽然我还没有机会尝试,但我认为这可能有效:

  1. 挂载文件系统(请务必使用-o discard)。
  2. 创建一些空文件。
  3. fallocate -n使用(分配块而不写入任何内容,因此不会对 SSD 造成太大的额外磨损)将它们放大到最大可能的大小。因为FAT32文件限制为略低于 4 GiB,所以您可能需要一堆临时文件来使用所有可用空间。 (要使此步骤起作用,您需要内核 4.5 或更高版本,其中FAT 有fallocate支持
  4. 一旦填满了所有可用空间,就删除临时文件,让所有释放的块都被discard使用。

fstrim当然,对于任何能够做到discard但不能做到的文件系统实现来说,这应该是一种强力的替代方案FITRIM

ps 我确实喜欢 Tom Yan 评论中提供的替代链接。我使用的是或多或少官方的 git repo,但我喜欢 Tom 链接的服务,因为您可以更轻松地在文件的不同版本之间切换以进行比较。

答案2

以下文件系统支持 TRIM:NTFS、HFS+、EXT4、Btrfs。

现在,许多操作系统都提供 TRIM 支持,旨在提高写入性能。TRIM 允许 NAND 闪存设备的控制器在从单元中删除数据之后和对该单元进行下一次写入之前管理擦除过程。

Linux 早在 2008 年底就开始支持 TRIM,但并非所有 Linux 支持的文件系统都支持 TRIM。Microsoft Windows 于 2009 年底在 Windows Server 2008 中开始支持 TRIM。OpenSolaris 于 2010 年中期开始支持 TRIM。移动设备的 Android 于 2013 年才开始支持 TRIM。

因此,目前许多(但并非所有)主流操作系统都支持 TRIM,目前仅适用于 SATA 接口。

TRIM(也拼作 trim)是串行 ATA (SATA) 接口中的一个特定命令,它告诉底层 NAND 闪存固态存储设备可以擦除哪些数据。TRIM 在概念上可以与旋转硬盘上的碎片整理实用程序进行比较,它通过主动释放空间来提高性能。

NAND 闪存将数据组织成页面,页面又被分组为块。数据可以在页面级别读写,但只能在块级别擦除。当从闪存介质中删除数据时,固态硬盘上的相关页面将被标记为删除,但不会被擦除——因为只有块可以擦除。当写入新文件时,标记为删除的各个页面会被分组为一个块,以便可以先擦除它们,为下一次写入腾出空间。

TRIM 命令允许操作系统通知固态硬盘 (SSD) 特定页面组中的哪些数据可以覆盖,从而允许固态硬盘控制器在主机启动删除和下一次写入之间管理擦除过程。通过将擦除从写入过程中移出,写入速度可以更快。

为了使 TRIM 发挥作用,主机的操作系统 (OS) 和存储驱动程序必须支持 TRIM 命令。TRIM SSD 关系的工作原理如下。例如,在 Windows 7 环境中,当固态硬盘报告其具有 TRIM 支持时,操作系统将禁用磁盘碎片整理并启用 TRIM。然后,当主机 SSD 上的文件被删除时,操作系统会向闪存控制器发送 TRIM 命令,告诉它可以删除哪些块。TRIM 也可以由用户手动启动或按天安排。

TRIM 是命令而非缩写,目前仅适用于 SATA 接口。SAS 委员会已将与 TRIM 类似的 UNMAP 添加到 SAS/SCSI 规范中。利亚·舒布

编辑

Trim 命令允许操作系统通知固态硬盘 (SSD) 哪些数据块不再使用并且可以从内部擦除。

TRIM 命令可让您的操作系统在您需要之前找到已标记的页面并将其清除干净。事先清理这些数据页可为您节省再次在数据页上书写的时间。这就像您的办公桌旁有自己的回收员,随时回收纸张。

为了正常工作,TRIM 必须得到您使用的固态硬盘和操作系统的支持。当操作系统和 SSD 都支持 TRIM 时,可以清理单个页面,并且您的固态硬盘将收到通知,告知页面现在为空白,可以写入。

并非所有文件系统都使用 Trim。可以自动发出 Trim 请求的文件系统包括 Ext4、Btrfs、FAT、GFS2 和 XFS。但是,出于性能考虑,默认情况下禁用此功能。

微软声称,TRIM仅在Windows 7上的NTFS上实现。

答案3

根据 2.6.33 的更新日志Linux 内核新手

FAT:放弃挂载选项

维基百科

自动修剪请求是 Ext4、Btrfs、FAT、GFS2 和 XFS。

所以是的,它得到了支持。但要确保将答案中的测试应用到问题。

更新

Smecki 已完成测试并确认(见评论) 表明 TRIM 正在 FAT32 卷上运行。

相关内容