Одна од мојих омиљених тема је креирање система резервне копије. Тако је изашло да искрено верујем да је живот системског администратора много лакши уз правилно конфигурисану резервну копију. 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.
