语境

语境

语境

我有一些 Synology NAS 存储由 WBADMIN 使用 SMB 从 Windows 创建的备份,这意味着 VHDX 映像文件最终会禁用压缩,否则 WBADMIN 会拒绝处理这些文件。这些文件需要在 NAS 上保留一段时间,但不太可能有人需要再次安装它们,因此我现在想在之后应用压缩以节省一些空间。如果需要再次安装,可以轻松解压,所以现在让我们忽略这一点。DSM 提供所有必要工具处理 shell 上现有数据的压缩:

chattr -R +c [...]
btrfs filesystem defragment -r -c [...]

需要注意的是,现有的 VHDX 文件已经受到自动创建的快照的保护,并且在我压缩文件后,NAS 会继续自动创建快照。那么这些快照会发生什么呢?

现有快照所持有的块是否也经过压缩?

根据解释 我不这么认为。此外,这在某种程度上违背了快照保证某个时间点数据不变的整个目的。创建快照时,过去的内容根本没有被压缩,因此理论上需要以某种方式提供这些数据。

另一方面,压缩本来就设计得比较透明,这一点可能会一直延续到现有块,甚至快照中。最终可能会节省大量空间。压缩甚至透明到无法识别

新的快照是否保留了新压缩块的更改?

我在压缩之前有一个快照,压缩 VHDX 文件并在之后创建一个新快照。Windows 或 WBADMIN 或其他人没有对 VHDX 进行任何其他更改,因此从逻辑角度来看,文件仍然没有改变。但是,BTRFS 管理的文件的各个块/范围已经发生了很大变化,具体取决于应用的压缩程度。

这会导致在两个快照之间重新分配实际存储空间,不是吗?因此,在压缩之后,直到删除包含未压缩数据的早期快照,总存储空间可能比以前要少。

或者我哪里错了?谢谢!

答案1

有答案在邮件列表中,谢谢。结果:

现有快照所持有的块是否也经过压缩?

不会,碎片整理总是会创建新的独立数据,不会更改任何现有块。如果没有早期的快照,块可能只会在压缩后被删除,但如果快照保留了块,它们将被保留,并且其压缩数据将被额外存储。

这些命令或多或少是等效的:

btrfs fi 碎片整理-czstd foo

touch foo.tmp; setfattr -n btrfs.compression -v zstd foo.tmp; cp -a foo foo.tmp; mv -f foo.tmp foo

新的快照是否保留了新压缩块的更改?

是的,压缩后,总体可用空间很可能会比以前少,直到删除保存未压缩数据的旧快照。不过,在我的用例中,这不是什么大问题,因为在某些时候,旧快照无论如何都不会再有任何值得关注的变化,而只会保护相同的数据免受意外更改。因此,在某些时候,删除旧快照以用压缩数据替换未压缩数据是可以的。

相关内容