Wykonywanie regularnych kopii zapasowych jest jednym z codziennych zadań administratora. Zwykle wiąże się z tym opracowanie odpowiedniej strategii wykonywania kopii. Z jednej strony ważne jest, aby kopia wykonywała się szybko, a drugiej strony należy również zadbać o to, żeby w razie potrzeby odtworzenie kopii również odbyło się szybko i sprawnie.
Kopie możemy zwykle podzielić na następujące rodzaje:
Pn | Pełna kopia | |||||
Wt | ||||||
Śr | ||||||
Cz | ||||||
Pi |
Pn | Pełna kopia | ||||
Wt | |||||
Śr | |||||
Cz | |||||
Pi |
W systemie linux kopie można wykonać na kilka sposobów. Przede wszystkim mamy odpowiedni moduł YaST, który jest łatwy w obsłudze i intuicyjny. Co więcej, jest przygotowany tak, że można wykonać w nim pełną kopię systemu wykluczając pliki, których nie warto kopiować (np. tymczasowe). Podstawowym narządziem tekstowym do robienia kopii to tar i jemu przyjrzymy się w pierwszej kolejności. Umówimy też inne polecenia tekstowe: cpio, rsync, dd. Przy okazji umówimy też krótko narzędzia kompresji: gzip i bzip2.
tar
Jest to najczęściej używane narzędzie do archiwizacji danych. Jego podstawowym zadaniem jest upakowanie wielu plików w jeden plik. Pierwotnie to narzędzie nie miało za cel robienia kompresji, chociaż obecnie oczywiście są obecnie opcje, które to umożliwiają.
Trzy podstawowe składnie użycia polecenia są następujące. Warto tutaj odnotować, że opcje -zv są wspólne i określają fakt pracy na pliku skompresowanym (-z) oraz generowanie dodatkowych komunikatów (-v).
tar -c [-zv] [-X pliki_wykluczone] -f archiwum.tar plikiPrzegląd opcji:
/home/gucio/test.txt /home/maja/*.txt
tar -tf archiwum.tar
tar -x [-v] [-C katalog_lub_plik] -f archiwum.tarPrzegląd opcji:
Powyższa wiedza pozwala na wykonywanie pełnej kopii archiwum. W jaki sposób można realizować pozostałe rodzaje kopii: różnicowy i przyrostowy? Kopie przyrostowe realizujemy przez mechanizm plików typu snapshot, natomiast kopie różnicowe robimy korzystając z połączenia poleceń find i tar (kopie przyrostowe też możemy tak robić).
Kopie przyrostowe
Poprzez opcję -g możemy wskazać plik snapshot. Polecenia wyglądają następująco:
# tar -zc -g /backup/home_snapshot -f /backup/backup_full.tar.gz /home # tar -zc -g /backup/home_snapshot -f /backup/backup_mon.tar.gz /home # tar -zc -g /backup/home_snapshot -f /backup/backup_tue.tar.gz /home ...
Uwaga: przez odpowiednią manipulację plikami snapshot można także zrealizować kopie różnicowe.
Kopie różnicowe
Kopie różnicowe można realizować poprzez połączenie poleceń find i tar:
# tar -zcf /bakup/backup_full.tar.gz /home # find /home -type f -newer /backup/backup_full.tar.gz -print0 | tar -zcf /backup/backup_mon.tar.gz -T - # find /home -type f -newer /backup/backup_full.tar.gz -print0 | tar -zcf /backup/backup_tue.tar.gz -T - ...
W powyższych poleceniach warta zwrócenia uwagi jest sekwencja -T - — określa, że lista plików archiwum powinna być czytana ze standardowego wejścia. Istotne jest także użycie opcji -print0, dzięki której bez problemu archiwizowane są pliki o nazwach z białymy znakami.
dd
Bardzo użyteczne polecenie, które pozwala na kopiowania plików pomiędzy dowolnymi urządzeniami w sposób niskopoziomowy. Dzięki niemu możemy zrobić obraz dysku, możemy też taki obraz potem za pomocą dd odtworzyć. Składnia:
dd if=zrodlo of=cel [bs=rozmiar] [count=liczba]
Znaczenia opcji if i of jest intuicyjne: określają skąd dokąd kopiujemy dane. Domyślnie te dane są kopiowane blokami po 512B i rozmiar tego bloku można zmienić opcją bs. Dodatkowo możemy określić liczbę kopiowanych bloków przez opcję count. Przykładowe użycia:
# dd if=/etc/hosts of=/backup/hosts # dd if=/dev/sda1 of=/backup/boot.partition # dd if=/dev/sda of=/backup/tmp/mbr bs=512 count=1
rsync
To polecenie służy do synchronizacji danych pomiędzy systemami plików. Synchronizacja może być wykonywana w ramach lokalnych systemów plików, ale także również z wykorzystaniem zdalnych systemów plików. Domyślnie używamy opcji -a (archive mode), która jest skrótem na zbiór opcji (rlptgoD) i sprawia, że polecenia używa się dużo łatwiej. Podsumowując opcje mamy:
Przykłady synchronizacji lokalnej:
# rsync -a /home /backup/home # rsync -a /home/ /backup/home # rsync -a /home/. /backup/home # rsycn -a --exclude-from=/home/exclude /home/. /backup/home
Warto zwrócić tutaj uwage na jedną subtelność. W piewrszym przykładzie zarchiwizowany zostanie katalog /home, czyli katalogi domowe będą w /backup/home/home. Natomiast w drugim i trzecim przykładzie archiwizowana jest zawartość katalogu /home, w związku z czym katalogi domowe są bezpośrednio na ścieżce /backup/home.
Przykłady synchronizacji zdalnej:
# rsync -ae ssh root@host:/home/. /backup/home # rsync -ae ssh /backup/home/gucio root@host:/home
W powyższym rodzaje zdalnej synchronizacji opieramy się na ssh, co wymaga oczywiście instalacji serwera ssh na obu komputerach. Można synchronizować zdalnie również bez ssh, ale tego tutaj nie omawiamy.
cpio
Jest to nieco mniej popularne narzędzie, ale też możemy się spotkać z danych zarchiwizowanymi z jego pomocą. Dlatego warto poznać podstawowe użycia, czyli tworzenie, rozpakowanie i przeglądanie archiwum.
# cpio -o < plik_z_lista.txt > archiwum.cpio
# cpio -i < archiwum.cpio
# cpio -t < archiwum.cpio
Do kompresji możemy użyć poleceń gzip, gunzip, bzip2 oraz bunzip2. Poleceń tych używa się bardzo łatwo.
# gzip archiwum.tar # gunzip archiwum.tar.gz # bzip2 archiwum.tar # bunzip2 archiwum.tar.bz2