场景:我有两个外部硬盘驱动器,我想要一个作为另一个的备份。传统上,我会定期连接第二个驱动器和 rsync 跨越任何变化。ZFS 是否提供了更好的方法来做到这一点?
我想我想创建一个“zfs 镜像”设置,但是为了方便起见,我不想一直随身携带备份驱动器,而是定期同步任何更改。ZFS 是否提供了一种方法来做到这一点,或者这不是一个合适的用途?如果是这样,这样做的规范 ZFS 方式是什么?(例如,我不想因为每次我想更新备份驱动器时都必须检查每个扇区的更改来破坏驱动器)
use*_*ser 10
ZFS 在镜像驱动器脱机一段时间后增量更新镜像驱动器的能力有限。TL;DR:你可以按照你建议的方式做你正在寻找的事情,但这不是镜子应该做的。
在实践中,您的建议几乎肯定每次都需要完全重新同步,因为临时更改会导致经过过多的超级块修订,因此增量重新同步将没有共同的基点。如果在该过程中出现故障,就您的数据而言,您似乎可能会陷入困境。还请记住,由于其磁盘上的 Merkle 树数据格式,ZFS 重新同步可以(并且已经)按照“数据重要性递减的顺序”完成,而不是像非基于文件系统的 RAID 系统那样按顺序进行。当然,这里的“数据重要性”是指 ZFS 所关心的,而不是您认为重要或值得保留的。由此产生的搜索活动很容易给单个驱动器带来很大的压力。
使两个 ZFS 文件系统同步的规范方法是zfs send | zfs receive在它们之间使用 a 。这就要求这两个文件系统是可用的(但你可以存储输出的ZFS发送和使用,作为输入到ZFS以后收到,你应该进行这样的倾向,但你应该知道,这个带有一个巨大的警告:zfs receive使无尝试从部分损坏的数据流中恢复,如果检测到错误则中止)。
zpool import两个储罐和管道。您可以传递-N给 zpool import 以使其不挂载任何文件系统。zfs snapshot tank@current1984 -rzfs list tank pipe -t snapshot来获取一个原始列表来工作。假设他们共同拥有的最新快照是current1948.zfs send -R -I tank@current1948 tank@current1984 | zfs receive pipe,将current1948和current1984快照之间的增量从tank 转移到pipe。zfs有关发送和接收子命令的更多详细信息,请阅读手册页。current1984两个池(而不是文件系统)共有的快照(例如,),以便下次用作基础。此时,两个池将具有相同的内容,直至您使用的快照。如果做得好,这也应该只需要转移差异;我无法想象一个增量zfs send | zfs receive需要做任何事情像一个完整的镜像 resilver的场景。如果您愿意,它还允许您稍后向备份池添加冗余。如果源驱动器在复制过程中出现故障,您应该仍然可以随时使用旧备份;只有您试图转移的差异才会丢失。
| 归档时间: |
|
| 查看次数: |
895 次 |
| 最近记录: |