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-newtrouve 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, lalaapparaî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.
Acontenanta, écrivezbdans son instantané et changez-le plus tarda, le fichier n'a pas vraiment changé du tout.