Przywróć / przywróć pojedyncze pliki lub foldery w btrfs
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
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 --reflink
opcja 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 -r
flagi 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-name
jest nazwą poprzednio utworzonej konfiguracji i description-content
moż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_ID
jest identyfikatorem migawki do przywrócenia (i ..0
wskazuje, że pliki są przywracane na wolumin główny) i FILENAME
jest ś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)
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/fstab
więc nie ma żadnych niedogodności.