Backup

Wprowadzenie

Góralska przypowieść mówi że :

Są dwa rodzaje ludzi:
Ci którzy robią regularne backupy
Ci którzy jeszcze nie stracili ważnych danych

Backupy robić trzeba - wypadki chodzą po ludziach - laptopy spadają z parapetów, są kradzione; pudełka zalewa się kawą, albo są palone przez przepięcia…

Jak wiemy że trzeba to teraz pytanie: jak?

Z czym warto się zapoznać wcześniej:

  • Kopiowanie plików po sieci: Tutaj
  • Audentykacja po kluczach: Tutaj

rsync

Progarm 'magicznie' synchronizujący katalogi.

    rsync [opcje] [źródło] [cel]

Ogólnie działa tak że na obu komputerach czyta zawartość katalogów, magicznie ją porównuje i przenosi między jednym katalogiem a drugim tylko zmiany. Czyli jeśli mamy 100GB katalog w którym zmieniliśmy 100MB to rsync przekopiuje 100MB.

Opcje

-a

Ponieważ będziemy używać rsynca do bakcupów trzeba mu dać parametr -a (który znaczy archiwizuj).

Z grubsza powoduje ona skopiowanie wszystkiego i zachowanie uprawnień, czasów modyfikacji i tak dalej.

--del

Domyślnie rsync nie kasuje w docelowym katalogu plików których nie ma w katalogu źródłowym. Ogólnie jest to fajne - jeśli skasujesz na swoim dysku jakiś ważny plik, a potem nawet zrobisz rsyncem backupa to w backupie będzie skasowany plik.

Jednak nie zawsze jest to fajne/oczekiwane zachowanie…

  1. Często działanie programów równie zależy od nieistnienia plików jak i od ich istnienia. Podejrzewam że na przykład Eclipse mógłby się zezłościć jeśliby go kilka razy tak zbackupować.
  2. Zresztą czasem człowiek chcę się plików pozbyć.
  3. A czasem po prostu na pulpicie miał 3GB filmów które przypadkiem trafiły do backupa i tylko miejsce zabierają.

Opcja —del spowoduje kasowanie plików w które zostały usunięte w źródle z katalogu z backupami.

-e

-e mówi rsyncowi przy pomocy jakiego programu ma się połączyć z komputerem docelowym. Ponieważ robienie backupów na tym samym komputerze ma sens mały albo żaden, raczej będziemy te pliki kopiować po sieci.

Jeśli chcemy kopiować po ssh należy podać mu:

    -e "ssh <opcje_ssh>"

Jak to polecenie wygląda u mnie:

    rsync --del -a -e "ssh -i <ścieżka do klucza>" /home backup-user@desktop:/backup/home-jb

Zwykłe archiva

Czasem łatwiej po prostu zrobić archiwum i przesłać po sieci. Taki wygodny skrypcik:

FILENAME="/tmp/backup_repo_$( date +%F ).tar.bz2"
echo $FILENAME
tar -cjf "$FILENAME" /home
scp  -i <ścieżka do klucza> "$FILENAME" backup-user@desktop:/backup/tars

Po kolei:

  1. FILENAME="/tmp/backup_$( date +%F ).tar.bz2"

Nazwa i miejsce pliku do którego pakujemy backupa.

$( date +%F ) powoduje że kawałkiem nazwy będzie dzisiejsza data.

  1. echo $FILENAME Taki debug żeby wiedzieć gdzie i co jest zapisane.
  2. tar -cjf "$FILENAME" /home Zapisuje do archiwum zwartość katalogu /home
  3. scp -i <ścieżka do klucza> "$FILENAME" backup-user@desktop:/backup/tars Patrz koipiwanie po sieci i logowanie po kluczach.
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-NonCommercial-NoDerivs 3.0 License