首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >快速同步zfs池

快速同步zfs池
EN

Server Fault用户
提问于 2016-10-31 17:56:51
回答 1查看 2.3K关注 0票数 2

我的服务器将增量备份保存在zfs卷上。由于数据非常相似,我可以显著减少增长--每天大约有500 in的“新数据”,但是池每天只增长5-10 in,其余的存储在重复/压缩中。

我希望将备份复制到加密的usb磁盘,为此,我还将其设置为zfs卷。当我用rsync或zfs发送/接收同步备份时,似乎所有数据都会再次传输(只是存储在usb驱动器上)。由于这一点,备份目前需要超过24小时,这使得每天备份不可能。

有更快备份的方法吗?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2016-11-02 09:05:47

迈克尔·汉普顿的建议是正确的,Solaris手册页面也相当不错,但对于初学者来说,这个概念并不容易理解。我将概述我在编写脚本时所经历的要点。

基本上,您首先要像往常一样做一个快照x和一个完整的send/recv

代码语言:javascript
复制
# 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并递增地发送它。您可以删除源上的旧快照,但需要保留最后一个(最近的),以便计算差异。如果您丢失/销毁源上的上一次快照,您将不得不重新开始一个完整的初始发送!

代码语言:javascript
复制
# 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.

我从自己的经历中得到了一些建议:

  • 删除最后一个快照意味着您需要重新开始,所以要小心,首先要检查脚本中的成功返回值。
  • 您可以对快照进行编号或使用date -编号更容易,但是如果查看日志和/或频繁的快照,日期会更好。
  • 在尝试选项和尝试-nv模拟时,请注意,这对于发送是有效的,但是对于recv则会失败,因为没有什么可接收的。从手册或错误消息来看,这一点并不明显。
  • 快照将占用空间,直到它们被销毁,并“锁定”您删除的空间。如果您经常备份,这不是问题。如果很少使用多个目标磁盘/池和/或备份,则可能会遇到磁盘空间限制。在illumos/OpenZFS中,存在bookmarks特性,这可以作为一种解决此问题的方法。不幸的是,它目前只支持单个快照而不是递归,因此您必须自己添加递归代码。
  • 如果您不想使用/编写您自己的,请在Github上使用其中之一。我认为znapzend是其中最成熟的一种。
票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/812351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档