TRIM 已禁用,但其行为类似于已启用

Mac*_*z99 9 ssd trim space

我禁用了 TRIM 选项,并用随机文件填充了我的 SSD,这样就不会有可用空间。然而,当我从 bin 中删除这些文件并下载其他文件时,我毫无问题地完成了。也许我错了,但不应该有错误,因为由于 TRIM 禁用,SSD 中的整个空间仍然被占用?

Aus*_*arn 25

TL;DR:SSD 的物理块多于逻辑块,并且所有现代 SSD 固件在更新逻辑块的内容时都使用写时复制语义。

\n
\n

您\xe2\x80\x99误解了SSD固件的工作原理。

\n

SSD 固件区分逻辑存储块和物理存储块。操作系统只能看到逻辑块,看不到物理块,并且在任何给定时间点,每个逻辑块都准确映射到零个或一个物理块。在正常运行的 SSD 上,物理块总是多于逻辑块(在全新 SSD 上通常至少多 10%)。

\n

在内部,固件跟踪哪些逻辑块正在使用中,以及这些逻辑块映射到哪些物理块。当操作系统第一次写入逻辑块时,固件会选择一个未使用的物理块来存储数据,然后固件记录该新的块映射。然而,当操作系统重写逻辑块时,固件不会就地更改物理块,而是选择一个新的未使用的物理块,将更新的数据写入其中,更新块映射,然后将旧的物理块添加到内部需要清理的物理块列表。

\n

这种特殊处理在此上下文中称为\xe2\x80\x98磨损均衡\xe2\x80\x99,或者更一般地称为\xe2\x80\x98copy on write\xe2\x80\x99。这样做是为了防止闪存的各个物理块磨损太快,因为闪存存储是写入受限的(每次写入时,各个闪存单元实际上会损坏一点点)。

\n

大多数现代 SSD 更进一步,跟踪每个单独的物理块已被写入的次数,然后在需要写入数据时选择已写入最少的空闲物理块。然而,这种改进的方法有一个主要限制:固件无法知道逻辑块不再使用,这意味着作为已删除文件一部分的物理块将不会被删除。 \xe2\x80\x98freed\xe2\x80\x99 在固件中,直到映射到它的逻辑块再次被写入,因此原本理想的重写候选块实际上可能不会在很长一段时间内得到重用。您还可以通过在删除每个文件之前擦除每个文件的内容来解决此问题,因为这只会留下另一个物理块处于未使用状态,而这并不能真正解决问题。

\n

这就是 ATATRIM命令(以及其他存储协议中的等效命令)发挥作用的地方。它为操作系统提供了一种方法来告诉SSD固件\xe2\x80\x98嘿,我\xe2\x80\x99m这里没有存储任何数据,你可以继续重用这个块。\xe2\x80\x99。然而值得注意的是:

\n
    \n
  • TRIM(以及所有其他同等内容)主要是建议性的。固件实际上不需要对物理块执行任何操作,尽管在大多数使用中,被修剪的逻辑块将读回全零、全一或(不太常见)某些固定的字节模式。
  • \n
  • 由于多种原因,即使它\xe2\x80\x99s受支持,TRIM通常也不会作为操作系统释放文件系统中的块的一部分被调用(无论是为了删除文件,还是出于其他原因)。特别是,较旧的 ATA SSD 不支持排队TRIM命令(这使得这种内联使用对性能非常不利),并且某些设备即使在排队时也可能强制操作同步(也就是说,事情仍然必须等待它完成才能完成)。它处理任何其他命令),这几乎同样糟糕。
  • \n
  • TRIM不保证删除物理介质上的数据。根据 SSD,存储在相应物理块中的任何数据都可能会保留不确定的时间,直到写入设备所需的时间才会导致该物理块被重写。然而,如果不拆开并重新连接 SSD 或将其更新为使用自定义固件,通常无法恢复已修剪区域中的数据。
  • \n
\n

  • “TRIM(以及所有其他等效项)主要是建议性的。” => 并不总是如此。或多或少信誉良好的磁盘都宣传“修剪后可再现零”(RZAT) 功能,并且至少一些文件系统驱动程序在可用时积极使用此功能。 (2认同)

Tet*_*jin 20

不。

如果禁用 TRIM,驱动器将根据需要擦除未使用的空间。它只是不会在后台执行此操作。这通常会减慢你的写入速度。

  • 如果没有 TRIM,驱动器将不知道哪些空间已使用或未使用。它只会擦除*覆盖*上的空间,而不是在未使用时擦除空间。 (当然,驱动器具有一些预留空间,因此当整个逻辑容量充满驱动器在未来读取需要时必须生成的数据时,它们仍然可以处理覆盖。擦除块大小大于写入块大小,因此这个备用容量对于磨损均衡来说是必要的)。让 SSD 固件始终认为其已“满”确实会增加写入放大。 (14认同)
  • 草率和误导似乎不是增加困惑的初学者理解的有用方法。我使用了更精确的语言来明确我的意思以及我在这个答案中不同意的内容,但你可以说“驱动器有一些用于重新映射的空间容量,并且在覆盖时会擦除空间。”或者其他避免“擦除**未使用的**空间”的放置方式。如果没有 TRIM,只有当空间属于超额配置(物理而非逻辑空间)或从未被写入时才会被使用。 (7认同)
  • @PeterCordes - 我假设答案应该与问题处于同一水平。就这样。如果有人问如何驾驶汽车,你不会首先解释如何得出 95 RON。如果您想提供非常详细的答案,请随意。如果您想对此投反对票,请随意。不过,请不要继续在评论中指责我。谢谢。 (6认同)
  • @PeterCordes - 当然,但我的回答与问题相同,保持简单。 (4认同)
  • @PeterCordes - 简单化并不等于马虎。它“如何”做到这一点并不重要,重要的是它确实做到了。就文件系统而言,该空间未被使用。 (3认同)

gro*_*taj 14

看来您误解了 TRIM 的工作原理。

计算机可以随时随地将数据写入 SSD。该区域不必事先进行 TRIM-med。重写完全没问题,就像旋转硬盘一样。

TRIM 的作用是提前通知 SSD 某些区域不再包含有用的数据,并且不需要维护那里存储的任何内容。这使得SSD可以在任何方便的时候擦除它。反过来,这会将磁盘空间释放到可用磁盘空间池中,从而为磨损均衡机制提供更多空间来调整数据。

SSD 无需 TRIM 即可完全正常工作 - 由于磨损均衡效率低下,它们可能会速度较慢且使用寿命较短。

  • @akostadinov:这并没有纠正他们写的任何内容。他们从未说过它“必须”删除它,只是说它“允许”它。您的更正意味着通常不会观察到的行为; SSD 只能写入新页,并且必须一次擦除一个块(块大于页)。他们通常通过半热切地合并和清除块来响应 TRIM;另一种选择是最终达到所有页面都脏的程度,并且任何写入都需要读取碎片页面、清除块并写出碎片页面,然后才能执行请求的写入。 (3认同)

iBu*_*Bug 7

不。

TRIM 是“删除通知”,操作系统告诉驱动器“该区域已(逻辑上)删除”,以便驱动器可以随时擦除数据,通常是在空闲时间在后台擦除。

禁用 TRIM 后,驱动器仅在下次写入时才知道该块已被删除。对于SSD来说,它仍然要做通常的清理工作:找到一个空页来写入并更新LPT(逻辑-物理转换表)(如果需要的话)。

当您的驱动器充满数据时,SSD 将无处可写,因此它必须擦除一些现有的块。这会导致写入速度变慢,但不会导致无法写入。


顺便说一句,HDD 上的安全擦除通常涉及使用随机数据多次写入整个磁盘。然而,对于 SSD,我通常认为它足够安全,可以执行全驱动 TRIM ( blkdiscard) 并保持供电一段时间。