zfs 接收 -F 做什么?

San*_*dra 7 freebsd zfs filesystems replication snapshot

当我阅读时man zfszfs receive我看到

     -F      Force a rollback of the file system to the most recent snap-
             shot before performing the receive operation. If receiving an
             incremental replication stream (for example, one generated by
             "zfs send -R -Fi -iI"), destroy snapshots and file systems
             that do not exist on the sending side.
Run Code Online (Sandbox Code Playgroud)

但我不太明白-F实际上会做什么。

如果我zfs receive tank/pool然后收到的快照在目标端文件系统上回滚,这就是我想要的。

我想在哪些情况下使用-F

the*_*bit 12

如果您在收到目标数据集后弄乱了它,那么 -F 开关会派上用场。一旦您对其进行了任何更改(包括做一些像目录列表这样无害的事情,因为这会经常更改),它就不再处于初始传输后的状态。尝试zfs receive从另一方创建的增量数据流中运行纯文本zfs send -i tank/dataset@old tank/dataset@new会导致错误。在这种情况下,您在接收方有两个选择:

  • 您可以使用手动恢复到最后一个快照 zfs rollback
  • 或提供-F开关以zfs receive让它自动为您处理

当然,它可能是一个破坏性的操作,所以在使用它之前你必须了解它是做什么的。但是,如果您所做的只是将快照复制到非实时“备份”目的地,在那里您可能会错过没有其他数据写入的地方,那么它应该是安全的。