我似乎找不到这个问题的答案,所以我想我会在这里问:
在/etc/fstab
ext4 中使用 mount 命令时,您将添加discard
在 SSD 上激活 TRIM 的选项。同样,该discard
选项会在 btrfs 卷上激活 TRIM,如在btrfs.wiki.kernel.org。 Btrfs 本质上应该启用写入时复制,如果是这种情况,丢弃选项是否会有效禁用写入时复制?
我想象 TRIM 删除所有包含以前版本文件的块。如果写入时复制仍然有效,如果最终没有任何块被清零,那么从长远来看,这不会降低 SSD 的性能吗?
答案1
写入时复制意味着分配的块不会被覆盖 - 相反,当文件中的数据块发生更改时,会使用新数据分配一个新块,并且文件会更新为引用新块而不是原始块。当旧块不再被文件系统的任何部分引用时,它就会被释放。写入时复制并不意味着不会释放任何块。
该discard
选项只是告诉 Btrfs 向底层设备报告空闲块。 Btrfs 已经跟踪哪些块是空闲的,并将此信息报告给底层设备不会影响写入时复制行为。
答案2
写入时复制并不意味着保留对不再使用的块的引用。这些块本身成为可用空间(除非被另一个快照使用),据我所知,从那时起,btrfs 甚至不再知道它们属于它们现在保存先前内容的文件。
您完全正确,丢弃会使不再使用的块(即以前的内容)无法恢复。
我不知道您的期望是什么,但我实际上确信有一个简单的 btrfs 命令,如果新版本损坏,可以将文件恢复到某个旧版本,并且您很幸运,旧内容仍然完好无损地漂浮在免费版本中空间池。在谷歌上搜索后,我发现没有任何来源来支持这一说法,所以看来 btrfs 从来没有给过你这个。
因此,写时复制本身并不是数据弹性功能,它是一个实现细节,恰好会增加您取消删除先前内容的机会,但如果您使用丢弃则不会。