我的服务器在zfs卷上保存增量备份.由于数据非常相似,我可以显着减少增长 – 每天大约有500GB的“新数据”,但池只增加了大约5-10GB /天,其余的存储在重复数据删除/压缩中.
我想将备份复制到加密的USB磁盘,出于这个原因我也将其设置为zfs卷.当我使用rsync或zfs send / recieve同步备份时,似乎所有数据都被再次传输(仅在usb驱动器上存储为重复数据删除).因此,备份目前需要24小时,这使得每日备份变得不可能.
有没有办法更快地备份?
解决方法
迈克尔汉普顿的建议很明显,Solaris手册页非常好,但对于初学者而言,这个概念并不容易理解.我将概述我在编写脚本时经历的几点.
基本上,您通常像往常一样执行快照x和完整发送/ recv:
# Initial send,destroy all filesystems on the destination # pool which are not present on the source pool. zfs snapshot pool0@snap0 zfs send -R pool0@snap0 | zfs recv -Fdu pool1
之后,您执行快照x 1并以递增方式发送它.您可以删除源上的旧快照,但需要保留最后一个(最近一个),以便可以计算差异.如果丢失/销毁源上的最后一个快照,则必须重新开始完整的初始发送!
# incremental send,destroy all filesystems on the destination # pool which are not present on the source pool. Afterwards,old # snapshots can be destroyed. zfs snapshot pool0@snap1 zfs send -R -I pool0@snap0 pool0@snap1 | zfs recv -Fdu pool1 zfs destroy pool0@snap0 # Afterwards,repeat and replace snap1 with snap2 and snap0 with snap1 etc.
根据我自己的经验提出的建议:
>删除最后一个快照意味着您需要重新开始,所以要小心,首先检查脚本中的成功返回值.>您可以对快照进行编号或使用日期 – 编号更容易,但是如果查看日志和/或执行频繁快照,日期会更好.>在尝试使用选项并尝试-nv进行模拟时,请注意这适用于send,但会因recv而失败,因为没有任何东西可以接收.从手动或错误消息来看,这一点并不明显.>快照将占用空间,直到它们被销毁,并且它们“锁定”您删除的空间.如果经常备份,这不是问题.如果您使用多个目标磁盘/池和/或备份很少,则可能会遇到磁盘空间限制.在illumos / OpenZFS中存在书签功能,这可以解决这个问题.不幸的是,它目前只支持单个快照而不是递归,因此您必须自己添加递归代码.>如果您不想使用/编写自己的,请使用Github上的众多之一.我认为znapzend是其中最成熟的一个.