Während verschiedene gemountete Schnappschüsse funktionieren, scheint es in vielen Fällen furchtbar langsam zu sein.
Gibt es btrfs-spezifische Funktionen zum Unterscheiden von Snapshots? (In den Dokumenten konnte ich keine finden.)
Während verschiedene gemountete Schnappschüsse funktionieren, scheint es in vielen Fällen furchtbar langsam zu sein.
Gibt es btrfs-spezifische Funktionen zum Unterscheiden von Snapshots? (In den Dokumenten konnte ich keine finden.)
Antworten:
Es hört sich so an, als ob Sie nach btrfs send / receive suchen , das in Linux 3.6 angezeigt wird. Der send
Befehl erstellt eine Protokolldatei mit den Unterschieden zwischen zwei Snapshots, und der receive
Befehl wendet die Änderungen aus einer Datei an. Beachten Sie, dass beim Senden / Empfangen ein benutzerdefiniertes Dateiformat verwendet wird, sodass die Datei beispielsweise nicht genau wie Diff oder Tar aussieht.
Ich verwende Debian Stable, das es nicht gibt btrfs send
, also habe ich nach einer Lösung gesucht, die verwendet btrfs subvolume find-new
.
Wenn Sie über Snapshot1 und Snapshot2 verfügen und wissen möchten, was sich in Snapshot 2 geändert hat, können Sie das folgende Skript verwenden, da Snapshot1 erstellt wurde
btrfs-diff oldsnapshot/ newsnapshot/
Hier werden alle Dateien aufgelistet, die in newsnapshot / since oldsnapshot / geändert wurden.
#!/bin/bash
usage() { echo $@ >2; echo "Usage: $0 <older-snapshot> <newer-snapshot>" >2; exit 1; }
[ $# -eq 2 ] || usage "Incorrect invocation";
SNAPSHOT_OLD=$1;
SNAPSHOT_NEW=$2;
[ -d $SNAPSHOT_OLD ] || usage "$SNAPSHOT_OLD does not exist";
[ -d $SNAPSHOT_NEW ] || usage "$SNAPSHOT_NEW does not exist";
OLD_TRANSID=`btrfs subvolume find-new "$SNAPSHOT_OLD" 9999999`
OLD_TRANSID=${OLD_TRANSID#transid marker was }
[ -n "$OLD_TRANSID" -a "$OLD_TRANSID" -gt 0 ] || usage "Failed to find generation for $SNAPSHOT_NEW"
btrfs subvolume find-new "$SNAPSHOT_NEW" $OLD_TRANSID | sed '$d' | cut -f17- -d' ' | sort | uniq
Erklärung: btrfs subvolume find-new
Findet Dateien, die nach einer bestimmten 'Generierung' eines Schnappschusses geändert wurden . Es gibt auch die aktuelle Generationsnummer an.
zB machen Sie den täglichen Schnappschuss eines Subvolume-Falls:
mkdir test && cd test
btrfs subvolume create live
date >live/foo1
date >live/bar1
btrfs subvolume snapshot live/ snap1
date >live/foo2 # new file
date >>live/bar1 # modify file
rm live/foo1 # delete file
btrfs subvolume snapshot live/ snap2
date >live/foo3 # new file
mv live/bar{1,2} # rename file
rm live/foo2 # delete file
Was hat sich zwischen snap1 und snap2 geändert?
$ btrfs-diff snap1/ snap2/
bar1
foo2
Wir können also die neue Datei und die geänderte Datei sehen, aber das Löschen wird nicht gemeldet . Dies liegt daran, dass der Befehl auf vorhandene Dateien hinweist, nicht auf Dateien, die jetzt nicht vorhanden sind.
Was hat sich zwischen snap2 und dem Live-Subvolume geändert?
$ btrfs-diff snap2/ live/
foo3
Die umbenannte Datei wird nicht gemeldet . Ihre Daten haben sich nicht geändert.
Was nun, wenn wir der umbenannten Datei Daten hinzufügen?
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
OK, macht Sinn. Aber lasst uns eine neue Datei erstellen
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
eh! Wo ist Lala? . Wenn Sie eine weitere Datei hinzufügen, wird lala
angezeigt. Dieses Verhalten ist also etwas seltsam. Welches ist wahrscheinlich, warum das Wiki sagt:
Der Find-New-Ansatz weist einige schwerwiegende Einschränkungen auf und ist daher für etwas wie Senden / Empfangen nicht wirklich verwendbar.
Die Seltsamkeit tritt jedoch auf, wenn Sie ein Live-Subvolume mit einem vorherigen Status vergleichen, nicht, wenn Sie (schreibgeschützte) Snapshots vergleichen. Dies kann also weiterhin nützlich sein, es sei denn, Sie möchten auch gelöschte Dateien identifizieren.
Dies wird vom Snapshot-Tool unterstützt snapper
.
sudo snapper -c config diff 445..446
Natürlich müssen Sie dies snapper
für Ihre Schnappschüsse verwenden.
Diese Snapshot-IDs finden Sie mit snapper list -a
. Leider unterstützte snapper zum Zeitpunkt des Schreibens keine Listen-Snapshots für eine einzelne Konfiguration, obwohl diese Nummern aus den Namen der Subvolumes hervorgehen.
A
enthälta
, schreiben Sieb
in den Snapshot und ändern Sie ihn später wieder ina
, die Datei hat sich überhaupt nicht wirklich geändert.