J'utilise Debian stable, ce qui n'est pas le cas btrfs send
, j'ai donc cherché une solution en utilisant btrfs subvolume find-new
.
Si vous avez snapshot1 et snapshot2 et que vous voulez savoir ce qui a changé dans le dernier, snapshot 2, puisque snapshot1 a été créé, vous pouvez utiliser le script ci-dessous qui fournit
btrfs-diff oldsnapshot/ newsnapshot/
qui listera tous les fichiers modifiés dans newsnapshot / depuis oldsnapshot /.
#!/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
Pour expliquer: btrfs subvolume find-new
trouve les fichiers modifiés après une «génération» particulière d'instantanés. Il indique également le numéro de génération actuel.
Avertissements
par exemple, prenez l'instantané quotidien d'un cas de sous-volume:
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
Qu'est-ce qui a changé entre snap1 et snap2?
$ btrfs-diff snap1/ snap2/
bar1
foo2
Nous pouvons donc voir le nouveau fichier, voir le fichier modifié, mais la suppression n'est pas signalée . Cela est dû au fait que la commande signale les fichiers qui existent, pas ceux qui n'existent plus.
Qu'est-ce qui a changé entre snap2 et le sous-volume live?
$ btrfs-diff snap2/ live/
foo3
le fichier renommé n'est pas signalé . Ses données n'ont pas changé.
Et si nous ajoutons des données au fichier renommé
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
OK, c'est logique. Mais créons un nouveau fichier
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
hein! où est lala? . Si vous ajoutez un autre fichier, lala
apparaît. Ce comportement est donc un peu étrange. C'est probablement pourquoi le wiki dit:
L'approche find-new a de sérieuses limites et n'est donc pas vraiment utilisable pour quelque chose comme envoyer / recevoir.
Cependant, l'étrangeté survient lorsque vous comparez un sous-volume en direct à un état précédent, et non lorsque vous comparez des instantanés (en lecture seule). Cela pourrait donc être utile, sauf si vous souhaitez également identifier les fichiers supprimés.
A
contenanta
, écrivezb
dans son instantané et changez-le plus tarda
, le fichier n'a pas vraiment changé du tout.