[5] Kopie zapasowe w systemie FreeBSD 13

27 stycznia 2023 Wyłączono przez Adam [zicherka] Nogły

Archiwizacja 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