Ich verwende zfs send/receive, um täglich ein ZFS-Dateisystem auf einen anderen Server zu replizieren. Der Workflow ist der Standard-Sende-Empfang:
# 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}"
Das hat eine Zeit lang gut funktioniert. Jetzt erhalte ich jedoch diesen Fehler zfs receive
:
cannot receive incremental stream: destination pool/filesystem has been modified since most recent snapshot
zfs list -t snapshot
USED
auf dem Ziel wird in der Spalte des aktuellsten Snapshots ein kleiner Wert angezeigt (etwa 100 KB). Dieser sollte Null sein. Das Dateisystem ist auf dem Ziel nicht gemountet.
Ich habe ein Skript, das Zpools und ZFS-Kontingente überprüft. Die Abfrage der aktuellen Kontingente (mit zfs userspace $filesystem -pH -o name,used,quota -s used
) scheint das zu sein, was das Dateisystem ändert. Ist das zu erwarten? Ich verstehe nicht, warum eine Abfrage einiger Zahlen das Dateisystem ändert.
Ich verwende Ubuntu 20.04 mit OpenZFS 0.8.3 aus den Ubuntu-Repositories.
Antwort1
Nicht gemountete ZFS-Dateisysteme können nur durch Empfangen/Zerstören und ... (also, das sind so ziemlich alle) Anfragen geändert werden. ZFS-Anfragen zu Dateisystemstatistiken sollten den Inhalt des Dateisystems nicht ändern. Abschließend möchte ich also sagen, dass ich stark bezweifle, dass dadurch zfs userspace
etwas geändert wird (und ich bezweifle, dass Ihre ZFS-Datensätze nicht gemountet sind). Aber wenn ich mich irre (in Bezug auf zfs userspace
), handelt es sich eindeutig um einen Fehler, und zwar einen großen.