Crmgo Blog

Резервне копије фајлова помоћу rdiff-backup

Резервне копије фајлова помоћу rdiff-backup

Једна од мојих омиљених тема је креирање система за резервне копије. Десило се тако да искрено верујем да је живот системског администратора много лакши уз правилно конфигурисане резервне копије. rdiff-backup је систем који омогућава чување промена и добијање стања било које сачуване датотеке на…

Резервне копије фајлова помоћу rdiff-backup

Одна од мојих омиљених тема је креирање система резервне копије. Тако је изашло да искрено верујем да је живот системског администратора много лакши уз правилно конфигурисану резервну копију. rdiff-backup је систем који омогућава чување промена и добијање стања било које сачуване датотеке у било ком тренутку када је направљена резервна копија. Из самог назива rdiff-backup види се да је овај систем заснован на принципима rdiff. А сам rdiff-backup чува историју промена, тако да се можете вратити на било који тренутак. И главна предност је то што rdiff-backup омогућава резервисање на удаљени сервер.
Укратко, rdiff-backup је прилично једноставан систем, нема никаквих компликација, а истовремено је функционалан.
Креираћемо систем удаљене резервне копије, тачније server1 ћемо резервисати на server2.

Почнимо са инсталацијом rdiff-backup

yum install rdiff-backup (потребан је epel репозиторијум), или можете преузети rpm са pkgs.org

зависности:

Installed:
rdiff-backup.x86_64 0:1.2.8-5.el6

Dependency Installed:
librsync.x86_64 0:0.9.7-15.el6          pylibacl.x86_64 0:0.5.0-1.el6
pyxattr.x86_64 0:0.5.0-1.el6

 

Инсталација иде без сувишних питања. Још једна ствар – rdiff-backup, ако ћете резервисати на удаљени сервер, онда га морате инсталирати и на том удаљеном серверу.
Следећи корак у креирању система резервне копије је да креирамо посебног корисника од којег ће се одвијати цео систем резервне копије. Овом кориснику уопште није потребна аутентификација лозинком. Због тога на питање adduser Use password-based authentication? [yes]: одговарамо no
Укратко, дијалог за додавање корисника изгледа овако:

adduser backup

Корисника треба додати на оба сервера. Идентично.
Следећи корак. Пошто rdiff-backup ради преко ssh, генерисаћемо кључеве за аутентификацију.
О томе како генерисати ssh кључеве за аутентификацију без лозинке писао сам у чланку SSH, безпарольни приступ, али за наочигледност проћи ћемо овај корак у потпуности.
На серверу server1, на коме ћемо правити резервну копију, генерисаћемо кључеве.
Прво се прелазимо на корисника backup:

su backup

И извршавамо ssh-keygen:

ssh-keygen

Сада изађите из su притиском на CTRL-D.
И јавни кључ копирајте на сервер server2:

scp /home/backup/.ssh/id_rsa.pub hilik@server2.hilik.org.ua:

И сада на серверу server2 копирајте или додајте, ако ово није први кључ, јавни кључ у /home/backup/.ssh/authorized_keys:

cat ~/id_rsa.pub >> /home/backup/.ssh/authorized_keys

Сада је остао последњи корак, подешавање саме резервне копије. Прво на удаљеном серверу (server2) припремите директоријум за резервне копије:

mkdir /storage/backup

За резервну копију користим скрипту /root/bin/rdiff-backup.sh, која ради све резервне копије на сервер за резервне копије. Изгледа овако:

#!/bin/sh
#Определяем имя сервера который бекапим, нужно для создания иерархии в бекап директории на удаленном сервере
HOST_NAME=`/bin/hostname -s`
#Адрес сервера на который будем бекапить
REMOTE_HOST='server2'
#Пользователь от имени которого будем бекапить
USER='backup'
#Директория на удаленном сервере в которой создаются бекапы
PREFIX='/storage/backup'
#Директории которые необходимо бекапить
WHAT='/etc /usr/local/etc /root /var/cron /sys/i386/conf /usr/local/www'
#Главный цикл бекапа
for i in $WHAT
do
        `/usr/local/bin/rdiff-backup --remote-schema 'ssh -i /home/$USER/.ssh/id_rsa -C %s rdiff-backup --server' --create-full-path --exclude-device-files --exclude-fifos --exclude-sockets --exclude-symbolic-links -b $i $USER@$REMOTE_HOST::/$PREFIX/$HOST_NAME$i`
        echo "/usr/local/bin/rdiff-backup --remote-schema 'ssh -i /home/$USER/.ssh/id_rsa -C %s rdiff-backup --server' --create-full-path --exclude-device-files --exclude-fifos --exclude-sockets --exclude-symbolic-links -b $i $USER@$REMOTE_HOST::/$PREFIX/$HOST_NAME$i"
done

Сада остаје да ову скрипту поставите у cron. Користите је као root:

0 1 * * * /root/bin/rdiff-backup.sh

Na ovom mestu je faza backup-a završena. Backup-i će se čuvati na udaljenom serveru u direktorijumu koji ste naveli za njihovo čuvanje; u tom direktorijumu biće kreiran poddirektorijum sa imenom servera, gde će biti smešten backup. Tu se nalaze fajlovi sa trenutnim stanjem, stanjem u poslednjem trenutku backup-a i dnevnikom promena.
Da biste dodali nove servere, potrebno je samo kreirati korisnika, generisati ključeve i postaviti skriptu.

Sada o pitanju oporavka. Ako želite da dobijete fajlove u poslednjem stanju, možete ih jednostavno kopirati iz backup-a. Ako je potrebno vratiti na određeni trenutak, potrebno je koristiti rdiff-backup, ali u režimu oporavka.
Na primer, vratimo /etc servera server1 u direktorijum /home/hilik/restore/etc.old prema stanju od pre 5 dana.

rdiff-backup --remote-schema 'ssh -i /home/backup/.ssh/id_rsa -C %s rdiff-backup --server' -r 5D backup@server2::/usr/local/share/backup/server1/etc /home/hilik/restore/etc.old

Ovo se naravno može formatirati u skriptu ili definisati kao alias za deo ove komande, ali srećom, retko mi je potrebno da vraćam fajlove na stanje od pre nekoliko dana.
Na ovom mestu možemo staviti tačku na podešavanje rdiff-backup. Moj sistem radi već dugo i nisam imao nikakve neugodnosti u njegovoj upotrebi.

Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.