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. sendPolecenie tworzy plik dziennika różnic między dwoma migawek, a receivekomenda 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-newznajduje 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, lalapojawi 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 snapperz 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.
Azawierającya, zapiszbw jego migawce, a później zmień go z powrotem naa, plik tak naprawdę wcale się nie zmienił.