Podczas gdy różne montowane migawki działałyby, wydaje się, że w wielu przypadkach może być strasznie powolne.
Czy istnieje specyficzna funkcjonalność btrfs dla różnych migawek? (Nie udało mi się znaleźć żadnych w dokumentacji)
Podczas gdy różne montowane migawki działałyby, wydaje się, że w wielu przypadkach może być strasznie powolne.
Czy istnieje specyficzna funkcjonalność btrfs dla różnych migawek? (Nie udało mi się znaleźć żadnych w dokumentacji)
Odpowiedzi:
Wygląda na to, że szukasz wysyłania / odbierania btrfs , które pojawią się w Linuksie 3.6. send
Polecenie tworzy plik dziennika różnic między dwoma migawek, a receive
komenda dotyczy zmiany z pliku. Zauważ, że wysyłanie / odbieranie używa niestandardowego formatu pliku, więc plik nie będzie wyglądał dokładnie tak, jak powiedzmy diff lub tar.
Używam stabilnej wersji Debiana, której nie ma btrfs send
, więc szukałem rozwiązania używającego btrfs subvolume find-new
.
Jeśli masz snapshot1 i snapshot2 i chcesz wiedzieć, co zmieniło się w późniejszym, snapshot 2, ponieważ od czasu utworzenia snapshot1 możesz użyć skryptu, który zapewnia
btrfs-diff oldsnapshot/ newsnapshot/
która wyświetli listę wszystkich plików zmienionych w newsnapshot / od 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
Aby wyjaśnić: btrfs subvolume find-new
znajduje pliki zmienione po określonej „generacji” migawki. Podaje również bieżący numer generacji.
np. weź codzienną migawkę przypadku podobjętości:
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
Co zmieniło się między snap1 i snap2?
$ btrfs-diff snap1/ snap2/
bar1
foo2
Możemy więc zobaczyć nowy plik, zobaczyć zmodyfikowany plik, ale usunięcie nie jest zgłaszane . Jest tak, ponieważ polecenie informuje o plikach, które istnieją, a nie o tych, które już nie istnieją.
Co zmieniło się między snap2 a podobjętością na żywo?
$ btrfs-diff snap2/ live/
foo3
plik o zmienionej nazwie nie jest zgłaszany . Jego dane nie uległy zmianie.
Co teraz, jeśli dodamy dane do pliku o zmienionej nazwie
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
OK, ma sens. Ale stwórzmy nowy plik
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
eh! gdzie jest lala? . Jeśli dodasz kolejny plik, lala
pojawi się. To zachowanie jest trochę dziwne. Prawdopodobnie dlatego wiki mówi:
Podejście „znajdź nowe” ma poważne ograniczenia i dlatego nie jest tak naprawdę przydatne w przypadku czegoś takiego jak wysyłanie / odbieranie.
Jednak dziwność pojawia się, gdy porównujesz podobjętość na żywo z poprzednim stanem, a nie podczas porównywania migawek (tylko do odczytu). Może to być nadal przydatne, chyba że chcesz również zidentyfikować usunięte pliki.
Jest to obsługiwane przez narzędzie wygody migawki snapper
.
sudo snapper -c config diff 445..446
Oczywiście wymaga to korzystania snapper
z migawek.
Identyfikatory tych migawek można znaleźć za pomocą snapper list -a
. Niestety w chwili pisania snappera nie obsługiwał migawek list dla pojedynczej konfiguracji, chociaż liczby te można znaleźć w nazwach podwielokrotnych.
A
zawierającya
, zapiszb
w jego migawce, a później zmień go z powrotem naa
, plik tak naprawdę wcale się nie zmienił.