[5] Kopie zapasowe w systemie FreeBSD 13
27 stycznia 2023Archiwizacja plików – dump
Poleceniem, które służy do archiwizacji systemów plików w UNIX’ie jest [dump]. Należy o tym pamiętać w czasie korzystania z tego narzędzia. Zazwyczaj w czasie instalacji FreeBSD cały system plików jest montowany w głównym systemie plików [/]. Dlatego też, wtedy tylko ten system plików można zarchiwizować. W czasie archiwizacji jest wykonywana migawka systemu i to stan systemu z momentu wykonania tej migawki jest archiwizowany.
Jego składnia jest następująca:
dump –opcje system_plików
Dostępne opcje:
-0-9 (zero)-(dziewięć) – 0=pełna kopia zapasowa,
-a – automatyczny rozmiar danych wyjściowych, aż do uzyskania końca nośnika,
-L – informacja, że kopiowany system plików jest w użyciu. Należy go używać zawsze gdy system nie pracuje w trybie pojedynczego użytkownika,
-f – nakazuje zapis do pliku, a nie do domyślnego urządzenia typy napęd taśm,
-u – aktualizuje plik /etc/dumpdates po udanym zrzucie. Format pliku /etc/dumpdates jest czytelny dla ludzi i składa się z jednego rekordu dowolnego formatu w wierszu: nazwa systemu plików, po-ziom przyrostu i data zrzutu. Jeśli nie określono przesunięcia strefy czasowej, czasy są interpreto-wane jako lokalne. Za każdym razem, gdy plik jest zapisywany, wszystkie daty w pliku są konwer-towane na lokalną strefę czasową, bez zmiany czasu UTC. Na każdym poziomie może istnieć tylko jeden wpis na system plików. Plik /etc/dumpdates można edytować, aby zmienić dowolne z pól, jeśli to konieczne.
-n – gdy dump wymaga uwagi zostaje o tym powiadomiony operator.
Aby zarchiwizować system plików [/] w pliku [/tmp/wszystko.dump] wykonaj:
root@vfbsd01:~ # dump -0uan -f /tmp/wszystko.dump / DUMP: WARNING: should use -L when dumping live read-write filesystems! DUMP: Date of this level 0 dump: Sat Nov 19 09:17:54 2022 DUMP: Date of last level 0 dump: the epoch DUMP: Dumping /dev/ada0a (/) to /tmp/wszystko.dump DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 7655222 tape blocks. DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: DUMP: 7655951 tape blocks on 1 volume DUMP: finished in 161 seconds, throughput 47552 KBytes/sec DUMP: level 0 dump on Sat Nov 19 09:17:54 2022 DUMP: Closing /tmp/wszystko.dump DUMP: DUMP IS DONE root@vfbsd01:~ # ll /tmp total 7657928 drwxrwxrwt 2 root wheel 512 Nov 17 06:43 .ICE-unix/ drwxrwxrwt 2 root wheel 512 Nov 17 06:43 .X11-unix/ drwxrwxrwt 2 root wheel 512 Nov 17 06:43 .XIM-unix/ drwxrwxrwt 2 root wheel 512 Nov 17 06:43 .font-unix/ drwx------ 2 fbsduser wheel 512 Nov 18 09:37 mc-fbsduser/ drwx------ 2 root wheel 512 Nov 18 20:08 mc-root/ drwx------ 2 test wheel 512 Nov 17 12:43 mc-test/ drwx------ 2 fbsduser wheel 512 Nov 17 05:35 ssh-2U1y87aI21/ drwx------ 2 fbsduser wheel 512 Nov 19 07:52 ssh-aZtIOANP1W/ drwx------ 2 fbsduser wheel 512 Nov 17 06:08 ssh-d0Wi5NVr9G/ -rw-r--r-- 1 root wheel 7839692800 Nov 19 09:20 wszystko.dump
Dodatkowo istnieje możliwość poinformowania dump o tym, aby nie archiwizował niektórych plików/katalogów. Bo po co dołączać do kopii zapasowej zawartość katalogu na przykład [/tmp]? Służy do tego znacznik [nodump]. Wykonanie takiego oznaczenia jest możliwe za pomocą polecenia [chflags]. Zatem aby z tworzonego archiwum wyłączyć folder [/tmp], wpisujemy:
root@vfbsd01:~ # chflags nodump /tmp
Jest jednak jeden mały kruczek. Gdy wykonujemy zrzuty na poziomie 0, to opcja „nodump” nie jest honorowana. Program dalej archiwizuje wszystko co ma na swojej drodze. Dlatego z pomocą przy-chodzi opcja [-h argument], gdzie argumentem jest poziom zrzutu. To właśnie od niższego niż w argumencie poziomu zrzutu nie jest brana pod uwagę opcja „nodump”. Dlatego, aby w zrzucie poziomu 0, dump honorował opcję „nodump” należy dodać opcję [–h] z argumentem [0].
Wykonajmy teraz kolejną kopię systemu plików [/] i zobaczymy czy rozmiar pliku się zmniejszył.
root@vfbsd01:~ # dump -0uan -h 0 -f /tmp/wszystko-tmp.dump / DUMP: WARNING: should use -L when dumping live read-write filesystems! DUMP: Date of this level 0 dump: Sat Nov 19 09:46:13 2022 DUMP: Date of last level 0 dump: the epoch DUMP: Dumping /dev/ada0a (/) to /tmp/wszystko-tmp.dump DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 7622309 tape blocks. DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: DUMP: 7623036 tape blocks on 1 volume DUMP: finished in 160 seconds, throughput 47643 KBytes/sec DUMP: level 0 dump on Sat Nov 19 09:46:13 2022 DUMP: Closing /tmp/wszystko-tmp.dump DUMP: DUMP IS DONE root@vfbsd01:~ # ll /tmp total 15282888 drwxrwxrwt 2 root wheel 512 Nov 17 06:43 .ICE-unix/ drwxrwxrwt 2 root wheel 512 Nov 17 06:43 .X11-unix/ drwxrwxrwt 2 root wheel 512 Nov 17 06:43 .XIM-unix/ drwxrwxrwt 2 root wheel 512 Nov 17 06:43 .font-unix/ drwx------ 2 fbsduser wheel 512 Nov 18 09:37 mc-fbsduser/ drwx------ 2 root wheel 512 Nov 19 09:41 mc-root/ drwx------ 2 test wheel 512 Nov 17 12:43 mc-test/ drwx------ 2 fbsduser wheel 512 Nov 17 05:35 ssh-2U1y87aI21/ drwx------ 2 fbsduser wheel 512 Nov 19 07:52 ssh-aZtIOANP1W/ drwx------ 2 fbsduser wheel 512 Nov 17 06:08 ssh-d0Wi5NVr9G/ -rw-r--r-- 1 root wheel 7805982720 Nov 19 09:48 wszystko-tmp.dump -rw-r--r-- 1 root wheel 7839692800 Nov 19 09:20 wszystko.dump
Różnica w tym przypadku niewielka, lecz jest. Wszak jak widać powyżej, w katalogu [/tmp] zbyt wiele ciekawych rzeczy niema. Wszystko wyjdzie w „praniu”, gdy zaczniemy wyłączać ze zrzutu katalogi/pliki, które są własnością innych użytkowników naszego systemu – wtedy różnice mogą być naprawdę kolosalne.
Archiwizacja plików – restore
Należy pamiętać o tym o czym pisałem wcześniej – dump nie tworzy kopii plików/katalogów, lecz systemu plików. Odzyskiwanie, czy też odtwarzanie może być wykonane na poziomie pojedynczych plików lub całych systemów plików. Pamiętać należy również, że rozpakowanie – lub poprawniej mówiąc nastąpi do BIERZĄCEGO katalogu. Przykładowo nasz plik [wszystko.dump] rozpakowany do katalogu [/tmp] będzie zawierał system plików właśnie w katalogu [/tmp].
Aby użyć trybu interaktywnego należy użyć opcji [-i], która spowoduje przejście do konsoli programu [restore]. Wyświetlenie pomocy/dostępnych opcji jest możliwe po wpisaniu [?] w konsoli pro-gramu dump. Wyjście z konsoli możliwe jest za pomocą komendy [quit].
Uruchommy zatem opcje odzyskiwania:
root@vfbsd01:~ # restore -i -f /tmp/wszystko-tmp.dump # wpisz [?] aby uzyskać listę dostępnych komend restore > ? Available commands are: ls [arg] - list directory cd arg - change directory pwd - print current directory add [arg] - add `arg' to list of files to be extracted delete [arg] - delete `arg' from list of files to be extracted extract - extract requested files setmodes - set modes of requested directories quit - immediately exit program what - list dump header information verbose - toggle verbose flag (useful with ``ls'') help or `?' - print this list If no `arg' is supplied, the current directory is used # wyświetl zawartość zarchiwizowanego pliku restore > ls .: .cshrc COPYRIGHT dev/ lib/ mnt/ rescue/ sys@ .profile bin/ etc/ libexec/ net/ root/ usr/ .snap/ boot/ home@ media/ proc/ sbin/ var/ # dodaj katalog [/usr] do wyodrębnienia restore > add /usr # wyodrebnij dodany katalog/katalogi i/lub plik/pliki restore > extract You have not read any tapes yet. If you are extracting just a few files, start with the last volume and work towards the first; restore can quickly skip tapes that have no further files to extract. Otherwise, begin with volume 1. # naciśnij [1], aby użyć początkowego punktu przywracania Specify next volume #: 1 # wpisz [y], aby ustawić tryb i właściciela set owner/mode for '.'? [yn] y # wpisz [quit], aby wyjść z konsoli restore > quit root@vfbsd01:~ #
Dodane pliki zostaną wyodrębnione do bieżącego katalogu z zachowaniem oryginalnej hierarchii katalogów.
root@vfbsd01:~ # ll total 1096 drwx------ 3 root wheel 512 Nov 1 08:43 .cache/ drwx------ 4 root wheel 512 Nov 22 06:39 .config/ -rw-r--r-- 2 root wheel 1108 Oct 31 23:01 .cshrc -rw------- 1 root wheel 45528 Nov 26 07:17 .history -rw-r--r-- 1 root wheel 80 May 12 2022 .k5login -rw------- 1 root wheel 20 Nov 22 06:43 .lesshst drwx------ 3 root wheel 512 Nov 1 08:43 .local/ -rw-r--r-- 1 root wheel 328 May 12 2022 .login -rw------- 1 root wheel 3178 Nov 22 07:29 .mysql_history -rw-r--r-- 2 root wheel 507 May 12 2022 .profile -rw-r--r-- 1 root wheel 865 May 12 2022 .shrc drwx------ 2 root wheel 512 Nov 1 10:26 .ssh/ -rw-r--r-- 1 root wheel 0 Nov 1 10:10 fbsdtxt.txt drwxr-xr-x 16 root wheel 512 Nov 22 06:50 usr/
Archiwizacja plików – tar
Program kompresujący i zarządzający plikami archiwów. Składnia polecenia jest następująca:
tar -opcje nazwa_pliku_docelowego pliki_źródłowe
Dostępne opcje:
-c – tworzy nowe archiwum,
-x – rozpakowuje archiwum,
-t – wyświetla zawartość archiwum,
-z – kompresuje archiwum programem [gzip],
-r – dołącza pliki do archiwum, które nie może być skompresowane,
-f – wskazuje miejsce pliku docelowego; jeśli nie wskażesz to domyślnym wyjściem jest napęd taśmowy.
To polecenie tworzy skompresowany plik usr.tgz, zawierający wszystkie pliki i podkatalogi z [/usr].
root@vfbsd01:~ # tar -c -z -f usr.tgz /usr tar: Removing leading '/' from member names root@vfbsd01:~ # ll total 626988 -rw-r--r-- 1 root wheel 641769354 Oct 9 15:57 usr.tgz
Aby rozpakować skompresowane archiwum [usr.tgz] do katalogu bierzącego wpisz:
root@vfbsd01:~ # tar -z -x -f usr.tgz root@vfbsd01:~ # ll total 626992 drwxr-xr-x 15 root wheel 512 Oct 5 12:55 usr -rw-r--r-- 1 root wheel 641769354 Oct 9 15:57 usr.tgz
Aby dodać katalog lub plik [test.txt] do NIESKOMPRESOWANEGO archiwum [archiwum.tar] wykonaj:
root@vfbsd01:~ # tar -c -f archiwum.tar /home tar: Removing leading '/' from member names root@vfbsd01:~ # tar -t -f archiwum.tar home root@vfbsd01:~ # ls .cache .history .lesshst .profile test.txt .config .init.ee .local .shrc usr .cshrc .k5login .login archiwum.tar root@vfbsd01:~ # tar -r -f archiwum.tar test.txt root@vfbsd01:~ # tar -t -f archiwum.tar home test.txt