backup

Бывает иногда полезным… нет, не так. Архивирование данных – процесс обязательный. Смерть настигает каждый винчестер, независимо от его объема, производителя или количества кондиционеров в серверной.

Есть конечно вариант сделать образ диска и потом при обходимости с него восстанавливать систему, но я предложу другой вариант, а именно когда нужно просто сохранить данные системы и при необходимости их быстренько вернуть.

Итак, начнем.

Вариант сохранения данных в архив

Создадим к примеру файл:

touch /etc/backup

Даем права на выполнение:

chmod 0755 /etc/backup

Далее в нем пишем:

#!/bin/bash
filename="`date +%d_%m_%y`.tar.bz2"
#бекап происходит на отдельный раздел backup
cd /mnt/backup/
echo "`date` — Start" >> /mnt/backup/backup.log
#перечисляете все каталоги и файлы в коневом каталоги которые хотите забекапить
tar cvpjf $filename /bin /boot /dev /etc /lib /opt /root /sbin /srv /usr /var /initrd.img /vmlinuz
echo "`date` — Finish" >>/mnt/backup/backup.log
#удаляем бекап двухдневной давности
day="`date +%d`"
dday=`echo $day-3|bc -l`
dfilename="`printf '%02d' $dday`_`date +%m_%y`.tar.bz2"
rm /mnt/backup/$dfilename

Дальше добавляем приведенные ниже строку в файл /etc/crontab

0 12 * * * root sh /etc/backup >> /dev/null

Теперь каждый день ровно в 12 часов в каталоге /mnt/backup/ будет создаваться новый бекап, а бекапы старше 2х дней удаляться.
Можно конечно добавить и разбитие полученного архива на ленты (части), тогда после строки:

tar cvpjf $filename /bin /boot /dev /etc /lib /opt /root /sbin /srv /usr /var /initrd.img /vmlinuz

добавим

split -d -b 700000kB $filename $filename-

Для склеивания полученых лент и их распаковки необходимо выполнить:

cat $filename-* | tar -xz

Вариант бекапа файловой системы *nix-сервера с помощью rsync

Для данной задачи нам необходимо:
A — сервер с которого будем делать бекап.
B — сервер на который будем делать бекап.
Примечание: rsync работает только при установке его на обоих серверах — A и B.

1. Для начала нужно определитья что будем бекапить, т.е. какие каталоги (и их подкаталоги) файловой системы. Внимательно просмотрев файловую систему сервера A, создадим список таких каталогов в файле backup.lst.

backup.lst:
/etc/
/var/local/billing/data/
/usr/local/etc/

(обратите внимание на завершающий / в конце каждой строки)

2. Теперь нужно определиться с местом куда будем делать резервное копирование. Для этого создадим не привилегированного пользователя на сервере B.

root@B:~$ mkdir /var/backup
root@B:~$ adduser --home /var/backup backup

3. Теперь нужно разрешить пользователю root (сервер A) доступ по ssh на сервер B (пользователь backup) без пароля т.е. по ключу.
Для этого нужно сгенерировать публичный ключ на сервере А.

root@A:~$ ssh-keygen -t rsa

и добавить полученный ключ A:/root/.ssh/id_rsa.pub в конец файла B:/var/backup/.ssh/authorized_keys2 на сервер B.

4. На сервере B в домашнем каталоге пользователя backup нужно продублировать те каталоги которые мы собираемся бекапить (т.е. список каталогов из файла backup.lst)

backup@B:~$ mkdir -p etc/
backup@B:~$ mkdir -p var/local/biiling/data/
backup@B:~$ mkdir -p usr/local/etc/

что означает -p можно глянуть man mkdir 🙂

5. Осталось добавить в крон вызов скрипта backup.sh на сервере А, запуск должен выполняться из под root’а.

backup.sh:
#!/bin/bash

# полный путь к вашему списку каталогов
BACKUP_LST=/etc/backup/backup.lst

cat ${BACKUP_LST} | while read Res; do
    rsync -e ssh -acq --delete --force $Res backup@B:/var/backup$Res
done

Вот собственно и все, работаем и синхронизируем.


Оставьте комментарий