由於 zfs 使用者空間查詢,ZFS 發送/接收失敗,目標已修改?

由於 zfs 使用者空間查詢,ZFS 發送/接收失敗,目標已修改?

我每天使用 zfs send/receive 將 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)。這應該是零。檔案系統未安裝在目標上。

我有一個檢查 zpool 和 zfs 配額的腳本。目前配額的查詢(使用zfs userspace $filesystem -pH -o name,used,quota -s used)似乎是修改檔案系統的原因。這是可以預料的嗎?我不明白為什麼某些數字的查詢會修改檔案系統。

我使用 Ubuntu 20.04 和 Ubuntu 儲存庫中的 OpenZFS 0.8.3。

答案1

除了接收/銷毀和....(好吧,這幾乎是全部)請求之外,未掛載的 zfs 檔案系統不能被任何其他內容修改。任何有關檔案系統統計資訊的 zfs 請求不應修改 fs 內容。因此,結論是,我高度懷疑zfs userspace正在修改某些內容(並且我懷疑您的 zfs 資料集是否已卸載)。但如果我錯了(關於zfs userspace)——這顯然是一個錯誤,而且是一個巨大的錯誤。

相關內容