![zfs 上的不完整递归快照](https://linux22.com/image/653920/zfs%20%E4%B8%8A%E7%9A%84%E4%B8%8D%E5%AE%8C%E6%95%B4%E9%80%92%E5%BD%92%E5%BF%AB%E7%85%A7.png)
我在我们的一个系统上获得了一堆新磁盘,并想将现有池转移到它们上,因此我所做的是:
zfs snapshot -r old-pool@replicaton
zfs send -R old-pool@replication | mbuffer -m 1G | zfs receive -F -d new-pool
但是在操作进行到一半时,我收到了一条警告zfs send
,抱怨快照old-pool/some/fileset@replication
不存在......
当我去调查时,我发现确实zfs snapshot -r
忘记了在 上创建快照old-pool/some/fileset
。所以我运行了
zfs list -r -o name old-pool | \
xargs -n1 perl -e 'system "zfs","list",$ARGV[0]."\@replication"'
发现大约有 10% 的文件集缺少这个快照……
然后我继续单独创建丢失的快照,并且运行良好。
此后我又重复了实验,又发现了同样的问题......
知道这是怎么回事吗?
这发生在 omnios r151010 上
答案1
天哪!好尴尬啊……我找到原因了……
我尝试复制的池(旧池)本身就是一个备份存储,通过以下方式接收定期更新zfs receive -F
因此,虽然我的递归快照最初是完整的,但由于新快照被集成到各个文件集中,它被“清理干净”了。
一旦我停止发送快照到的备份脚本old-pool
,世界就会再次按预期运转。