私は毎日、zfs 送信/受信を使用して、zfs ファイル システムを別のサーバーに複製しています。ワークフローは、標準的な送信/受信です。
# 1. create snapshot on source
zfs snapshot ${source_fs}@${today}
# 2. send incremental update from yesterday to today to target
zfs send -i ${one_day_ago} ${source_fs}@${today} | ssh user@${target_host} "zfs receive ${target_fs}"
# 3. destroy old snapshots from two days ago on source and target
zfs destroy ${source_fs}@${two_days_ago}
ssh user@${target_host} "sudo zfs destroy ${target_fs}@${two_days_ago}"
しばらくは問題なく動作していました。しかし、現在、次のエラーが発生しますzfs receive
:
cannot receive incremental stream: destination pool/filesystem has been modified since most recent snapshot
zfs list -t snapshot
ターゲットでは、USED
最新のスナップショットの列に小さな値 (約 100K) が表示されます。これは 0 である必要があります。ファイル システムはターゲットにマウントされていません。
zpool と zfs のクォータをチェックするスクリプトがあります。現在のクォータのクエリ ( を使用zfs userspace $filesystem -pH -o name,used,quota -s used
) によってファイルシステムが変更されるようです。これは想定内の動作ですか? 何らかの数値のクエリによってファイルシステムが変更される理由がわかりません。
私は Ubuntu リポジトリの OpenZFS 0.8.3 を搭載した Ubuntu 20.04 を使用しています。
答え1
マウント解除された zfs ファイルシステムは、receive/destroy および .... (まあ、ほとんどすべて) 要求以外では変更できません。ファイルシステムの統計に関する zfs 要求は、fs の内容を変更すべきではありません。結論として、zfs userspace
何かが変更されているとは到底考えられません (また、zfs データセットがマウント解除されているとも考えられません)。しかし、私が間違っている場合 (についてzfs userspace
)、これは明らかにバグであり、大きなバグです。