Mentre le diverse istantanee montate funzionerebbero, sembra che potrebbe essere orribilmente lento in molti casi.
Esiste una funzionalità specifica di btrfs per le diverse istantanee? (Non sono riuscito a trovarne nessuno nei documenti)
Mentre le diverse istantanee montate funzionerebbero, sembra che potrebbe essere orribilmente lento in molti casi.
Esiste una funzionalità specifica di btrfs per le diverse istantanee? (Non sono riuscito a trovarne nessuno nei documenti)
Risposte:
Sembra che tu stia cercando btrfs send / rece , che apparirà in Linux 3.6. Il send
comando crea un file di registro delle differenze tra due istantanee e receive
applica le modifiche da un file. Si noti che invia / ricevi utilizza un formato file personalizzato, quindi il file non sarà esattamente come, diciamo, diff o tar.
Sto eseguendo Debian stable che non ha btrfs send
, quindi ho cercato una soluzione usando btrfs subvolume find-new
.
Se si dispone di snapshot1 e snapshot2 e si desidera sapere cosa è cambiato in quello successivo, snapshot 2, poiché è stato creato snapshot1 è possibile utilizzare lo script seguente che fornisce
btrfs-diff oldsnapshot/ newsnapshot/
che elencherà tutti i file modificati in newsnapshot / da 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
Per spiegare: btrfs subvolume find-new
trova i file modificati dopo una 'generazione' particolare di istantanee. Riporta anche il numero di generazione corrente.
ad esempio, acquisire l'istantanea giornaliera di un caso sottovolume:
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
Cosa è cambiato tra snap1 e snap2?
$ btrfs-diff snap1/ snap2/
bar1
foo2
Quindi possiamo vedere il nuovo file, vedere il file modificato, ma la cancellazione non viene segnalata . Questo perché il comando riporta i file esistenti, non quelli che ora non lo sono.
Cosa è cambiato tra snap2 e il sottovolume live?
$ btrfs-diff snap2/ live/
foo3
il file rinominato non viene riportato . I suoi dati non sono cambiati.
Ora cosa succede se aggiungiamo dati al file rinominato
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
OK, ha senso. Ma facciamo un nuovo file
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
eh! dov'è Lala? . Se si aggiunge un altro file, lala
viene visualizzato. Quindi questo comportamento è un po 'strano. Questo è probabilmente il motivo per cui il wiki dice:
L'approccio find-new ha alcune serie limitazioni e quindi non è realmente utilizzabile per qualcosa come inviare / ricevere.
Tuttavia, la stranezza si presenta quando si confronta un sottovolume live con uno stato precedente, non quando si confrontano le istantanee (sola lettura). Quindi questo potrebbe essere ancora utile se non si desidera identificare anche i file eliminati.
Questo è supportato dallo strumento di convenienza dell'istantanea snapper
.
sudo snapper -c config diff 445..446
Ovviamente questo richiede che tu stia usando snapper
per le tue istantanee.
Gli ID di questa istantanea possono essere trovati usando snapper list -a
. Sfortunatamente al momento della scrittura di snapper non supportava gli snapshot di elenco per una singola configurazione, sebbene questi numeri possano essere trovati dai nomi dei sottovolumi.
A
contenentea
, scrivib
nella sua istantanea e successivamente ripristinalo ina
, il file non è cambiato affatto.