Rsync: Najlepszy system tworzenia kopii zapasowych.

ArticleCategory: [Choose a category, translators: do not translate

SystemAdministration

AuthorImage:[Here we need a little image from you]

Brian Hone

TranslationInfo:[Author + translation history. mailto: or

original in en Brian Hone 

en to pl Mariusz Kozłowski

AboutTheAuthor:[A small biography about the author]

Brian Hone jest administratorem i programistą w korporacji E Ink. W wolnych chwilach żegluje na bardzo zimnych wodach i wisi na skałkach .

Abstract:[Here you write a little summary]

Tworzenie kopii zapasowych to jedno z najtrudniejszych zadań w administracji systemem. Jest ono również jednym z najważniejszych. Stanowi ono ostatnią deskę ratunku w przypadku uszkodzenia sprzętu, naruszenia bezpieczeństwa oraz największego z zagrożeń: użytkownikcy systemu. Podczas gdy istnieje wiele systemów tworzenia kopii zapasowych kosztujących wiele tysięcy dolarów, które archiwizują dane na drogie napędy taśmowe używając wadliwego płatnego oprogramowania jest lepsze rozwiązanie: Rsync i tania macierz dyskowa.

ArticleIllustration:[One image that will end up at the top of the article]

RSYNC Backup

ArticleBody:[The main part of the article]

Problem

Mogę przytoczyć długą listę powodów, dla których archiwizazja danych to koszmar administratora. Jeśli jesteś administratorem, prawdopodobnie nie muszę tego robić. Niektóre z powodów to: drogi sprzęt, który wysiada częściej niż pracuje, drogie oprogramowanie, którego zarządzanie to koszmar i długie godziny spędzone na odzyskiwaniu odpowiednich wersji plików. Żeby jeszcze pogorszyć sprawę zwykle korporacja przykłada bardzo mało wagi do kopii zapasowych, aż do tego nieuniknionego dnia, gdy są one naprawdę potrzebne. Jeśli zarchiwizowałeś/odzyskałeś dane odbyłeś taką rozmowę:

User: "Zgubiłem plik. Chcę abyś odzyskał go natychmiast."
SysAdmin: "Ok, jak się nazywał?"
User: "Nie wiem, chyba miał 'e' w nazwie."
SysAdmin: "Ok, więc w jakim był katalogu?"
User: "Nie wiem, mógł być w jednym z tych trzech..."
SysAdmin: "*westchnięcie* Kiedy ostatnio go używałeś?"
User: "Hmmm... To chyba był czwartek w lutym czy kwietniu. W czym problem? Myślałem, że macie kopie zapasowe w takich sytuacjach."

Rsync jako alternatywa

Rsync to bardzo dobra implementacja małego pięknego algorytmu. Jego podstawowa zaleta to możliwość efektywnego mirrorowania sysetmu plików. Używając rsync prostym jest stworzenie systemu, który będzie przechowywał świeżą kopię obserwowanego systemu plików używając różnych protokołów sieciowych jak nfs, smb czy ssh. Drugą ważną właściwością rsync jest możliwość archiwizacji starych kopii plików, które zostały zmodyfikowane lub usunięte. Istnieje zdecydowanie zbyt wiele właściwości aby je rozważać w tym artykule. Gorąco polecam lekturę rsync.samba.org.

System

Po krótce system ten składa się z taniej maszyny opartej na Linux'ie z masą tanich dysków i małym skryptem powłoki zwanym rsync. [Fig 1] Gdy archiwizujemy dane mówimy rsync aby stworzył katalog o nazwie 'YY-DD-MM' jako miejsce do przechowywania zmian. Następnie rsync sprawdza czy na serwerach które archiwizujemy zaszły jakieś zmiany. Jeśli jakiś plik uległ zmianie stara wersja jest kopiowana do wczesniej opisanego katalogu, a poźniej nadpisuje plik w głównym katalogu z archwizowanymi danymi. [Fig 2]

RSYNC Backup Process

Ogólnie dzienne zmiany stanowią mały procent całego systemu plików. Wg moich testów wartość ta zwykle wacha się w przedziale 0.5% do 1%. Dlatego też z zestawem dysków o rozmiarze dwukrotnie większym od naszych archiwizowanych systemów możesz przechować około 50-100 dni zmian. Gdy dysk staje się pełny po prostu podepnij nowy zestaw dysków, a stare odepnij. W praktyce jest możliwe przechowanie ponad sześciu miesięcy zmian na dysku. Właściwie jeśli znajdziesz gdzieś miejsce możesz skopiować archiwizowane dane na inny serwer zanim zmienisz dyski. W ten sposób możesz przechować całkiem dużą liczbę katalogow zmian na dysku.

How Incremental Files are Handled

Zalety: odzyskiwanie danych i przywracanie plików

Wróćmy do powyższej, wyimaginowanej rozmowy. Wyobraź sobie teraz, że zamiast nieporęcznego systemu opartego o taśmy masz system oparty o Linux'a z czekającymi na Ciebie danymi z ostatnich sześciu miesięcy. Używając Twojej ulubionej kombinacji locate/find/grep możesz znaleźć wszystkie pliki należące do danego użytkownika zawierające 'e' z datą czwartek luty bądź kwiecień i zrzucić je do katalogu tego wlaśnie użytkownika. Problem w znalezieniu, która z wersji jest waściwa to jeden z moich ulubionych rodzajów problemu: to nie mój problem.

Nstępnie wyobraź sobie nasz ulubiony scenariusz - całkowita utrata danych. Powiedzmy, że masz wielki serwer nfs/samba, który tracisz. Jeśli zarchiwizowałeś pliki konfiguracyjne samby możesz przywrócić serwer jako chwilowo tylko do odczytu w parę minut. Chciałbym zobaczyć jak to robisz z taśmami.

Porównanie Rsync/Dysk twardy i archiwizacja na taśmie.

  Archiwizacja na taśmie Rsync
Koszt Bardzo duży Mały
Pełna archiwizacja Szybko Szybko
Archiwizacja zmian Szybko Szybko
Pełne odzyskiwanie systemu Bardzo wolno, prawdopodownie wiele taśm Szybko - wszystko jest na dysku
Przywracanie plików Powoli, może wiele taśm, często problem ze znalezieniem właściwej wersji. Bardzo szybko - wszystko jest na dysku, a na dodatek masz pod ręką narzędzia systemu UN*X jak: find, grep i locate
Całkowita utrata danych Jednyna możliwość to pełne odzyskiwanie systemu Może zostać przywrócony jako serwer plików w parę minut

Narzędzia

Istnieje wiele kombinacji konfiguracji systemu archiwizacji. Wszystkie narzędzia są open-source, zawarte standardowo w dystrybucjach i bardzo elastyczne. Opiszemy tutaj jedną z wielu możliwości konfiguracji.

Skrypty

Podstawowa wersja tego skryptu pochodzi ze strony rsync. Jest to naprawdę jedno polecenie:

rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file --backup --backup-dir=`date +%Y-%m-%d` -av

Kluczowe opcje to:

Poniższy skrypt może być odpalany co noc użwając linux'owego cron. Aby skrypt był uruchamiany o 23 co noc użyj polecenia "crontab -e", a potem wpisz to:

0 23 * * * /ścieżka/do/twojego/skryptu

Mój skrypt

Oto mój skrypt powłoki wiążący to wszystko w całość. Znowu istnieje wiele sposobów na zrealizowanie tego. Jest to tylko jedna z implementacji.

#!/bin/sh

#########################################################
# Script to do incremental rsync backups		            
# Adapted from script found on the rsync.samba.org  	  
# Brian Hone 3/24/2002					                        
# This script is freely distributed under the GPL	      
#########################################################

##################################
# Configure These Options        
##################################

###################################
# mail address for status updates
#  - This is used to email you a status report
###################################
MAILADDR=your_mail_address_here

###################################
# HOSTNAME
#  - This is also used for reporting
###################################
HOSTNAME=your_hostname_here

###################################
# directory to backup
# - This is the path to the directory you want to archive
###################################
BACKUPDIR=directory_you_want_to_backup

###################################
# excludes file - contains one wildcard pattern per line of files to exclude
#  - This is a rsync exclude file.  See the rsync man page and/or the 
#    example_exclude_file
###################################
EXCLUDES=example_exclude_file

###################################
# root directory to for backup stuff
###################################
ARCHIVEROOT=directory_to_backup_to

#########################################
# From here on out, you probably don't  #
#   want to change anything unless you  #
#   know what you're doing.             #
######################################### 

# directory which holds our current datastore
CURRENT=main

# directory which we save incremental changes to
INCREMENTDIR=`date +%Y-%m-%d`

# options to pass to rsync
OPTIONS="--force --ignore-errors --delete --delete-excluded \
 --exclude-from=$EXCLUDES --backup --backup-dir=$ARCHIVEROOT/$INCREMENTDIR -av"

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# make sure our backup tree exists
install -d $ARCHIVEROOT/$CURRENT

# our actual rsyncing function
do_rsync()
{
   rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$CURRENT
}

# our post rsync accounting function
do_accounting()
{
   echo "Backup Accounting for Day $INCREMENTDIR on $HOSTNAME:">/tmp/rsync_script_tmpfile
   echo >> /tmp/rsync_script_tmpfile
   echo "################################################">>/tmp/rsync_script_tmpfile
   du -s $ARCHIVEROOT/* >> /tmp/rsync_script_tmpfile
   echo "Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile"
   Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile
   echo "rm /tmp/rsync_script_tmpfile" 
   rm /tmp/rsync_script_tmpfile
}

# some error handling and/or run our backup and accounting
if [ -f $EXCLUDES ]; then
	if [ -d $BACKUPDIR ]; then
		# now the actual transfer
		do_rsync && do_accounting
	else
		echo "cant find $BACKUPDIR"; exit
	fi
	else
		echo "cant find $EXCLUDES"; exit
fi

Zasoby