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
Вот собственно и все, работаем и синхронизируем.