注意:自从我第一次问到这个问题以来,我对这个问题的理解发生了很大的变化(请参阅下面的编辑2),但是我保留了原来的版本。
我们已经组build了一个非现场备份系统(仍在内部testing),通过ZFS发送/接收进行数据传输。 两端的机器都是FreeBSD 8.2。 总的来说,设置运行良好。
但是,显然有一些我不了解的ZFS快照stream大小。 我很难find有关这方面的信息,所以我希望有更多经验的人能够启发我。
在源机器上,我有一个约47GB的文件系统,我需要传输快照:
# zfs list -t snapshot -r -s creation stg/serverx NAME USED AVAIL REFER MOUNTPOINT (.......) stg/serverx@20110620 2.88M - 47.1G - stg/serverx@20110621 2.89M - 47.1G - stg/serverx@20110622 2.88M - 47.1G - stg/serverx@20110623 5.44M - 46.6G -
我已经从远程服务器上的6/22快照,所以我发送它生成的stream
zfs send -i stg/serverx@20110622 stg/serverx@20110623
另一端没有麻烦地收到这个信息。 但是,所产生的数据stream超过80千兆字节,几乎是整个源文件系统的两倍 。
我是否误解了由zfs list生成的“USED”列的含义? 我本来以为这个快照stream量是5.44M加上一定的开销。 看来我不太明白什么是开销。
可能有用的信息:我们备份(通过rsync)每个服务器到它自己的文件系统。 这个特定的似乎产生最大的stream(相对于文件系统和快照大小)。 我怀疑它可能与它是一个邮件服务器的事实有关,所以它的一些内容是非常dynamic的。 不过,我希望这也显示在快照“使用”的大小。
显然,我们可以通过压缩stream来节省很多(可能会减less到原来的12-20%)。 即使如此,带宽也是我们的限制因素,所以我们想知道是什么让这些stream如此之大,以及我们是否可以做任何事情来减轻这种影响。
编辑:我忘记了我们有源文件系统启用zfs压缩。 因此,所使用的47千兆字节确实转化为接近80千兆字节的“真实”文件系统数据。 我想这是一个部分的解释,但我仍然不明白为什么来自zfs send的增量stream会如此之大。
编辑2:
进一步调查这个备份和其他一些数据后得出的结论是,大量的转移事实上是可以预料的(由于已经发生了一些升级)。 但是,在zfs list的输出中没有看到任何大量数据。
我已经通过文档了解,计算快照所用空间有很多复杂性。 zfs手册页在used属性的描述中说明了以下内容:
当快照。 。 。 它们的空间最初是在快照和文件系统之间共享的,可能还有以前的快照。 当文件系统发生变化时,以前共享的空间对快照而言是唯一的,并计入所使用的快照空间中。
这对我有意义。 不过,我希望看到在服务器升级一天结束时创build的更大的快照。 实际上,它只有几兆字节。 这里没有重复数据删除(zpool版本15)。 但是,由zfs send -i生成的增量stream非常大,并且包含所有升级信息。
有人可以解释这种明显的不一致吗? 那么相关的问题是:我怎样才能得到一个合理的估计增量stream的大小(例如,从zfs list输出)?
什么types的电子邮件系统和什么types的“存储”技术? 如果邮件存储已经以任何方式被压缩,则每个增量可能实际上是完整的,因为其压缩的数据stream可能由于其压缩而dynamic地改变。
也是在任何系统上玩重复游戏? 这听起来似乎有可能是在源系统上的一个遥远的机会。 这可能会造成尺寸差异。