Przywróć / przywróć pojedyncze pliki lub foldery w btrfs

Dec 08 2020

Planuję wykorzystać btrfs w systemie NAS.

Teraz zastanawiam się, czy możliwe jest przywrócenie rzeczy do migawek na poziomie pliku / folderu. Pytam o to, ponieważ zazwyczaj chce się wycofać tylko pojedyncze elementy, zachowując stan reszty dysku.

Czy istnieje jakiś rodzimy sposób, aby to zrobić, a jeśli nie, jak najlepiej to osiągnąć? Czytałem Przywróć pojedyncze pliki z migawki btrfs bez wykonywania pełnej kopii, co wydaje się być sposobem, ale nie jest tak wygodne. Jednak może to być najlepszy sposób na zrobienie tego.

Odpowiedzi

1 clel Jan 02 2021 at 01:13

Wykonanie migawki zasadniczo tworzy podwolumin, do którego można uzyskać dostęp w strukturze katalogów woluminu podstawowego. Stamtąd, mając odpowiednie uprawnienia, można go przeglądać i kopiować pliki lub foldery. Wydaje się, że --reflinkopcja kopiowania nie jest do tego potrzebna, chociaż jest to ładniejsze, więc rzeczy nie są kopiowane podczas ich kopiowania.

za pomocą narzędzi btrfs

Opcjonalnie tworzenie podwoluminu dla migawek:

btrfs subvolume create .my_snapshots

Tworzenie migawki:

btrfs subvolume snapshot -r /mnt_point /mnt_point/.my_snapshots/snapshot1

Użycie -rflagi powoduje, że migawka jest tylko do odczytu (https://wiki.archlinux.org/index.php/btrfs#Snapshots).

Bez uprzedniego utworzenia podwoluminu i nie ustawiania go tylko do odczytu, mógłby po prostu wyglądać tak:

btrfs subvolume snapshot /mnt_point /mnt_point/snapshot1

Przywrócenie można wtedy osiągnąć, kopiując plik (i) lub folder (y) z migawki:

cp /mnt_point/.my_snapshots/snapshot1/sub/dir/file /sub/dir/file

(Pochodzi z https://lore.kernel.org/linux-btrfs/[email protected]/t/#m16db5d9f29d26f41a8adb4499ffe3e220a85d9b8)

narzędzia zewnętrzne (jako przykład użyto snapera)

Korzystanie z narzędzi zewnętrznych, takich jak snapper, ma pewne zalety, ponieważ sprawia, że ​​obsługa migawek jest nieco wygodniejsza i mają przydatne funkcje.

Najpierw należy utworzyć plik konfiguracyjny dla (pod) woluminu, dla którego chcesz utworzyć migawki:

snapper -c config-name create-config /mnt_point

Spowoduje to utworzenie pliku konfiguracyjnego o nazwie config-name. Zwróć uwagę, że zwykle umożliwia to również tworzenie automatycznych migawek opartych na czasie, a także reguł czyszczenia tych migawek według określonej logiki. Pamiętaj, że ręcznie utworzone migawki nie zostaną usunięte przez takie reguły.

Migawkę można następnie wykonać ręcznie za pomocą:

snapper -c config-name create --description description-content

gdzie config-namejest nazwą poprzednio utworzonej konfiguracji i description-contentmożna ją wypełnić jakimś opisem migawki.

(Pochodzi z https://wiki.archlinux.org/index.php/Snapper)

Przywracanie działa wtedy podobnie jak powyżej dla sekcji narzędzi btrfs z dostępem do zamontowanej migawki i kopiowaniem rzeczy.

Dodatkowo snapper udostępnia polecenie, które może być również użyte do cofnięcia zmian dla bieżącego wolumenu zgodnie z dokumentacją openSUSE . Należy jednak pamiętać, że może to prowadzić do niespójności danych. Również dokumentacja Red Hat stwierdza, że ​​nie należy używać tego polecenia z głównym systemem plików.

Teoretycznie pliki można przywrócić za pomocą:

 snapper -c config-name -v undochange SNAPSHOT_ID..0 FILENAME

gdzie SNAPSHOT_IDjest identyfikatorem migawki do przywrócenia (i ..0wskazuje, że pliki są przywracane na wolumin główny) i FILENAMEjest ścieżką do pliku do przywrócenia. Można również określić więcej niż jeden plik.

(Pochodzi z https://doc.opensuse.org/documentation/leap/archive/15.0/reference/html/book.opensuse.reference/cha.snapper.html#proc.snapper.restore.cmdl)

EmmanuelRosa Dec 09 2020 at 17:25

Migawki BTRFS działają na poziomie wolumenu podrzędnego. Oznacza to, że można „wycofać” podwoluminy, ale nie poszczególne pliki.

Ponieważ podwoluminy pojawiają się jako katalogi w systemie plików, można powiedzieć, że można przywrócić katalogi.

Aby przywrócić poszczególne pliki, używam kopii reflink, jak pokazano w linku, który podałeś. Jednak mam odpowiednie podwoluminy montowane automatycznie przez, /etc/fstabwięc nie ma żadnych niedogodności.