Za wszelkie szkody powstałe w wyniku stosowania się do porad z tego FAQ autorzy nie odpowiadają.
Kod: Zaznacz cały
1. Wstęp
2. Kopia zapasowa danych przy użyciu dd
2.1. Kopia zapasowa wędruje do pliku
2.2. Kopia zapasowa na drugim dysku
3. Kopia zapasowa danych przy użyciu partimage
3.1. Kopia zapasowa partycji /
3.2. Przywracanie partycji /
4. Kopia zapasowa przy użyciu metody "tar+gzip"
4.1 Co i jak
4.2 Przykładowy skrypt
Często zachodzi potrzeba wykonania kopii zapasowej pewnych danych. Czasami danych jest na tyle dużo, że zdecydujemy się na backup całej partycji czy też dysku. W systemie Linux istnieje wygodne narzędzie które może nam pomóc w tej czynności, nazywa się dd. Dzięki niemu możemy skopiować cokolwiek, gdziekolwiek i w jakiejkolwiek wybranej ilości. Istnieją także inne narzędzia specjalnie przeznaczone do wykonywania tego typu operacji jak na przykład partimage. Jemu także przyjrzymy się bliżej. Najprostszą metodą wykonania kopii bezpieczeństwa jest po prostu spakowanie i skopiowanie w bezpieczne miejsce plików, które chcemy zabezpieczyć. Temu zagadnieniu poświęcony jest punkt 4.
A więc do dzieła!
2. Kopia zapasowa danych przy użyciu dd
Podstawowe użycie dd jest następujące:
Kod: Zaznacz cały
dd if=<plik_źródłowy> of=<plik_docelowy>
Plikiem źródłowym i docelowym może być np. wybrana partycja czy dysk lub plik. W dalszej części będę się także posługiwał nazwą obraz zamiast plik kopii zapasowej.
2.1. Kopia zapasowa wędruje do pliku
W tym wypadku zgrywamy partycje do pliku który następnie możemy skompresować. Dobrym pomysłem jest wypełnienie pustego miejsca zerami, lub innym powtarzającym się ciągiem. Powodem takiego postępowania jest to, że zgrywając całą partycję dd nie rozróżnia plików tylko kopiuje wszystko jak leci (nawet wolne miejsce w którym mogą być przypadkowe dane). Dzięki tym zerom nie są kompresowane pozostałości po usuniętych plikach czy jakieś inne śmieci. Można to osiągnąć za pomocą samego dd:
Kod: Zaznacz cały
dd if=/dev/zero of=/plik/w/katalogu/na/partycji/do/backupu
Kod: Zaznacz cały
dd if=/dev/zero of=/plik/w/katalogu/na/partycji/do/backupu bs=1K count=`df|grep hda1|awk '{print $4}'`
Na samym początku należy przygotować odpowiednią ilość wolnego miejsca na partycji na której mamy zamiar przechowywać kopie zapasowe. Aby poprawnie wykonać kopię partycji, należy ją najpierw odmontować. Dzięki temu będziemy mieli pewność, że archiwizowane dane nie zmienią się w trakcie procesu archiwizacji.
Kod: Zaznacz cały
# umount /dev/hdc1
Kod: Zaznacz cały
# dd if=/dev/hdc1 of=/mnt/backupy/part_hdc1
Co ciekawe, tak utworzony obraz możemy podmontować jak zwykłą partycję:
Kod: Zaznacz cały
# mount -o loop /mnt/backupy/part_hdc1 /mnt/hd/
Kod: Zaznacz cały
$ gzip part_hdc1
$ bzip2 part_hdc1
Aby przywrócić skompresowane dane na partycję wykonujemy czynności w odwrotnej kolejności. Najpierw rozpakowujemy dany obraz:
Kod: Zaznacz cały
$ gzip -d part_hdc1.gz
$ bzip2 -d part_hdc1.bz2
Kod: Zaznacz cały
# dd if=/mnt/backupy/part_hdc1 of=/dev/hda1
W przypadku chęci odtworzenia danej partycji na nowy dysk, dobrym pomysłem jest zapisanie dokładnego rozmiaru partycji przed wykonaniem backupu. Można to zrobić za pomocą fdisk
Kod: Zaznacz cały
# fdisk -s /dev/hdc1
2.1.2 Cały dysk
Czasami zachodzi potrzeba wykonania kopii zapasowej całego dysku. Procedura wykonania kopii zapasowej całego dysku jest prawie taka sama jak w przypadku partycji. Z oczywistych względów musimy posiadać odpowiednią ilość wolnej przestrzeni na obraz.
Inne różnice przy tworzeniu obrazu całego dysku:
a) Zamiast urządzenia odpowiadającego partycji podajemy urządzenie wskazujące na dany dysk:
Kod: Zaznacz cały
# dd if=/dev/hdc of=/mnt/backupy/part_hdc
Kod: Zaznacz cały
# mount -o loop
2.2. Kopia zapasowa na drugim dysku
2.2.1 Cały dysk
Czasami przy wykonywaniu kopii zapasowej priorytetem jest czas ewentualnego przywrócenia danych. Do tego celu nadaje się najlepiej kopia bezpośrednio na dysku. Dzięki temu w wypadku awarii po prostu przepinamy dysk.
Ale przejdźmy do rzeczy. Dysk docelowy i źródłowy nie muszą być jednakowe, jednak najlepiej żeby spełniały założenia dotyczące geometrii (patrz punkt poprzedni). W przypadku nie posiadania takich samych dysków należy pamiętać aby docelowy był większy od źródłowego. Dysk docelowy nie musi być wcześniej dzielony na p artycje i formatowany.
Gdy mamy już wszystko przygotowane przystępujemy do wykonania backupu:
Kod: Zaznacz cały
# dd if=/dev/hda of=/dev/hdb
Przywracanie z tak wykonanego backupu nie jest konieczne ( w końcu możemy podpiąć backup jako primary) ale wykonalne i jak ktoś bardzo chce to przywróci sobie dysk poleceniem jak przy tworzeniu kopii, wystarczy tylko zamienić miejscami źródło i cel:
Kod: Zaznacz cały
# dd if=/dev/hda of=/dev/hdb
2.2.2 Pojedyncza partycja
Przy wykonywaniu kopii zapasowej partycji należy pamiętać, że obie partycje muszą mieć CO NAJMNIEJ taki sam rozmiar. Partycja docelowa może oczywiście być większa, ale wiąże się to ze stratą części miejsca na dysku.
Schemat postępowania jest taki sam jak w przypadku kopiowania całego dysku, różne są jedynie pliki urządzeń podawane jako cel i źródło:
Kod: Zaznacz cały
dd if=/dev/hdc1 of=/dev/hdd1
Kod: Zaznacz cały
dd if=/dev/hdd1 of=/dev/hdc1
(Autor: Lone_wolf)
Do wykonywania obrazów używam programu partimage z knoppixa w wersji 3.6.
Polska strona knoppixa to: www.knoppix.pl
Dla przykładu wykonam obraz partycji / będącej na /dev/hda1 do partycji /home będącej na /dev/hda2
3.1 Tworzenie kopii zapasowej partycji /
Po zbotoowaniu komputera z płyty knoppixa i ukazaniu się boot wpisujemy:
Kod: Zaznacz cały
knoppix lang=pl
Kod: Zaznacz cały
knoppix@ttyp0[knoppix]$ su
Kod: Zaznacz cały
root@ttyp0[knoppix]# mount /mnt/hda2
Kod: Zaznacz cały
@ttyp1[knoppix]$ pwd
/ramdisk/home/knoppix
Kod: Zaznacz cały
root@ttyp0[knoppix]# cd /mnt/hda2
Kod: Zaznacz cały
root@ttyp0[hda2]# partimage
Kod: Zaznacz cały
hda1 reiserfs-3.6 10,74 GiB
hda2 reiserfs-3.6 20,04 GiB
Kod: Zaznacz cały
Image file to create/use
Kod: Zaznacz cały
Action to be done: <Next (F5)>
(*) Save partition into a new image file
( ) Restore partition from an image file <About>
( ) Restore an MBR from the imagefil
Kod: Zaznacz cały
Poziom kompresji
( ) Żaden (bardzo szybki + bardzo duźy plik
(*) Gzip (.gz: medium speed + small image file)
( ) Bzip2 (.bz2: very slow + very small image file)
Kod: Zaznacz cały
Opcje Jeżli zakończono sukcesem:
[X] Sprawdź partycję przed zapisem (*) Czekaj
[X] Wprowadź opis ( ) Wyłącz
[ ] Zamaż bez powiadomienia ( ) Przeładuj
( ) Opuść
Tryb dzielenia obrazu ( ) Last
( ) Automatyczne dzielenie (gdy brak miejsca)
(*) Do plików których rozmiar jest:.......2037____ MiB
[ ] Czekaj po każdej zmianie woluminu
Kod: Zaznacz cały
Block size....................4096 bytes
Used blocks count.............808591
Free blocks count.............2006785
Space usage:..................28 %
Used space....................3,08 GiB
Free space....................7,66 GiB
Bitmap size...................344,00 KiB
Label.........................
Kod: Zaznacz cały
root@ttyp0[hda2]# ls /mnt/hda2
ftp lone_wolf slack.000
Kod: Zaznacz cały
root@ttyp0[hda2]# cd /
root@ttyp0[/]# umount /mnt/hda2
Kod: Zaznacz cały
root@ttyp0[/]# ls /mnt/hda2
root@ttyp0[/]#
3.2 Przywracanie partycji /
Klikamy prawym przyciskiem myszy ikonę hda1, z menu properites/device odznaczamy read only, robimy to po to by partycja mogła przyjąć zapis. Logujemy sie w terminalu jako root i montujemy partycje /dev/hda2. Tu już nie musimy odznaczać dla tej partycji atrybutu read only, ponieważ z niej tylko czytamy. Nie musimy także do niej przechodzić.
Kod: Zaznacz cały
knoppix@ttyp0[knoppix]$ su
Kod: Zaznacz cały
root@ttyp0[knoppix]# mount /mnt/hda2
Kod: Zaznacz cały
root@ttyp0[knoppix]# partimage
Kod: Zaznacz cały
Image file to create/use
/mnt/hda2/slack.000
Kod: Zaznacz cały
( ) Save partition into a new image file
(*) Restore partition from an image file
( ) Restore an MBR from the imagefile
Kod: Zaznacz cały
Opcje
[ ] Symulacja odtworzenia (bez żadnego zapisu)
[X] Wyczyszczenie wolnych bloków zerami
Jeśli zakończono sukcesem:
( ) Czekaj
(*) Wyłącz
( ) Przeładuj
( ) Opuść
Partycje które przywracamy lub z których wykonujemy obraz nie mogą być podmontowane.
4. Kopia zapasowa przy użyciu metody "tar+gzip"
Kopia taka jest chyba najprostszym rozwiązaniem. Nie wymaga od nas jakichś specjalnych zabiegów z dyskami, musimy mieć po prostu partycję z wystarczającą ilością wolnego miejsca. Nie wymaga też specjalnych narzędzi - tar oraz gzip dostępne są standardowo w każdej dystrybucji. Zaletą takiego rozwiązania jest fakt backupowania tylko tych plików które chcemy mieć zabezpieczone i sami wybieramy które to będą pliki. Wadą jest żmudny proces w przypadku ręcznego wykonania takiej kopii bezpieczeństwa. Jednak za pomocą odpowiednich skryptów możemy zautomatyzować ten proces i wtedy pozbywamy się wspomnianej wady.
4.1 Co i jak
Najpierw musimy się zdecydować co backupujemy. Od razu wypada wspomnieć, że backup wszystkich plików jest zbędny. Najlepiej jest zabezpieczyć tylko te najważniejsze pliki z katalogu domowego. Jednak potrzeby są różne. Niektórzy zechcą utworzyć kopię całego systemu. Na pewno powinniśmy pominąć katalogi: /tmp /proc
Nie warto trzymać na backupie katalogów z tymczasowymi plikami internetowymi, miniaturkami itp. Katalogi w tym wypadku zależą od używanego oprogramowania. Jeżeli nic nie trzymamy w /opt to też pomijamy. Dla utrzymania porządku dobrze będzie spakować każdy główny katalog (czy też każdy katalog usera) w osobnym pliku i umieścić je w jednym katalogu. Nazwą może być np. data, nazwa dystrybucji czy cokolwiek innego; ważne abyśmy się nie pogubili w tym wszystkim.
Tyle tytułem wstępu, poniżej przedstawię skrypt do automatycznego backupu, który to dostarczył nam BeteNoire. Ogólnie rzecz biorąc najpierw musimy ustawić sobie wszelkie ścieżki w skrypcie, opcje mogą pozostać bez zmian (ew. zmiany wg osobistych preferencji). Skrypt jest bogato komentowany więc nie powinno być z tym problemów. W celu przywrócenia danych tworzymy odpowiednią partycję i rozpakowujemy po kolei pliki.
4.2 Przykładowy skrypt
Kod: Zaznacz cały
#!/bin/bash
# skrypt do backupu za pomocą tar i gzip
# koncept zaczerpnięty z gentoo-wiki - http://gentoo-wiki.com/HOWTO_Custom_Stage4
# DEFINIUJEMY KILKA ZMIENNYCH
# opcje dla tar (polecam man tar)
taropcje="--create --preserve --totals --gzip --ignore-failed-read --verbose --file"
# data potrzebna do nazwy
data=`date +%d.%m.%Y`
# katalog na backup - upewnijmy się, że partycja /mnt/backup jest zamontowana!
katbackup=/mnt/backup/$data/$(hostname)
# upewnijmy się, że katalog na backup istnieje
mkdir -p /mnt/backup/$data/$(hostname)
# co wyłączyć z backupu głównego systemu plików - /
# dopisujemy tu filesystemy, których nie chcemy zawrzeć w backupie głównego /
wylacz="
--exclude=/boot/*
--exclude=/home/*
--exclude=/proc/*
--exclude=/mnt/*
--exclude=/opt/*
--exclude=/sys/*
--exclude=/tmp/*
--exclude=/usr/*
--exclude=/usr/src/*
--exclude=/var/*"
# wyłączam z backupu różne śmieci w /home, zmienną $USER zastępujemy nazwą swojego użytkownika
wylacz_home="
--exclude=/home/$USER/tmp/*
--exclude=/home/$USER/.mozilla/firefox/*.default/Cache/*
--exclude=/home/$USER/.thumbnails/*"
# wyłączamy z backupu "wrażliwe" pliki np. ~/.bash_history, /root/.bash_history itp...
wylacz_pliki="--exclude-from /sciezka/do/pliku.z.lista"
# dla tych co mają oddzielny, niemontowany automatycznie /boot
#mount /boot
cd /boot
tar $taropcje $katbackup/boot-$data.tar.gz *
cd && umount /boot
# Zaczynamy backup głównego systemu plików
cd /
tar $taropcje $katbackup/root-$data.tar.gz / $wylacz $wylacz_pliki
# Pakujemy inne filesystemy (w kolejności alfabetycznej ;) )
cd /opt
tar $taropcje $katbackup/opt-$data.tar.gz *
cd /usr
tar $taropcje $katbackup/usr-$data.tar.gz *
cd /var
tar $taropcje $katbackup/var-$data.tar.gz *
# backupujemy katalogi domowe poszczególnych userów - elegancko będzie spakować je do osobnych archiwów, zatem każdy modyfikuje tu skrypt do swoich potrzeb
for user in /home/*; do
tar $taropcje $katbackup/home.`basename $user`-$data.tar.gz $user $wylacz_home $wylacz_pliki
done
echo Zapisałem pliki:
ls -l $katbackup
# tworzymy sumy kontrolne archiwów (kiedyś zdarzyło mi się rozpakowywać
# uszkodzony .tar.gz z zepsutej płyty dvd...)
for i in $katbackup/*; do md5sum >> $katbackup/sumy.md5 $i; done
#odkomentujmy poniższe linijki jeśli chcemy być jedynym użytkownikiem, który ma
#dostęp do backupu - np. ze względu na zawarte w nim "wrażliwe dane":
#echo Zmieniam właściciela na $USER:$USER
#chown -R user:user $katbackup
#echo Zmieniam prawa do zawartości katalogu backupu na 600
#chmod -R 600 $katbackup/*
Autorzy: uzytkownicy forum