快照在 ZFS 中占用多少空间?
我创建了一个池,并想创建一个卷。我不知道快照将占用多少空间。是否有任何方法或公式可以计算快照的空间需求?
答案1
快照的实际元数据可以忽略不计。
作为写时复制文件系统,ZFS 快照仅需要用于修改数据的空间;创建快照不会立即复制所有内容。如果您有一个给定大小的快照,然后添加或修改总计 100GB 的文件,则快照将“花费”您 100GB。
由于压缩和重复数据删除,它甚至可能更小一些。
答案2
快照最初占用的空间极小。
当快照数据集中的现有数据被更新或删除时,其大小会增加。
快照的最大大小是原始数据集的大小,除非启用了压缩和/或重复数据删除,在这种情况下,快照的大小可能会小于或大于其父数据集。
答案3
在对此进行实证检验之前,我还相信其他答案所说的,即 ZFS 快照仅有的当块发生变化时会消耗磁盘空间,而没有任何块发生变化的快照则不消耗空间(或者只消耗快照名称的极少量元数据和已更改块的空列表)
令我惊讶的是我最近测试了这个我发现空间使用量比我预期的要大得多:小的,每个快照介于 1.8 - 4 MiB 之间,这比我预期的要大得多。(我的猜测应该小于 1 KiB,所以这个结果比我预期的要大 4000 多倍)。有关详细信息,请参阅我的 Server Fault 问题,但实际上我创建了一个完全空的 200GiB zpool,并能够用 50,698 个快照(没有任何数据)填满它
其他人说的都是对的:ZFS 快照仅存储已更改的块,其占用的空间取决于更改的块数。但最小值不是零字节,而是少数兆字节(其中“少数”翻译为“介于 1 到 10 之间,取决于池大小和其他因素”)
这个数额是否“非常少”是一个见仁见智的问题。