Как мы делаем резервное копирование данных на Unix машинах? Чаще всего системные администраторы для этого используют первое, что попадает под руку - просто копирование нужных файлов на удаленный сервер.
Один из вариантов это делать - это использовать утилиты SCP - для передачи файлов по SSH. Но есть более интересный вариант, в особенности, если Вы собираетесь организовать разностное копирование файлов (т.е. копировать только новые или измененные файлы, а не все подряд) - это утилита RSYNC.
УстановкаВ отличие от SCP - она не идет из коробки, потому будем ее ставить.
Linux Debian/ubuntu:
$ sudo aptitude install rsync
Linux CentOS/RedHat:
$ sudo yum install rsync
FreeBSD:
$ cd /usr/ports/net/rsync
$ sudo make install clean
здесь Вас попросят включить нужные опции. Ориентируйтесь на свои нужды, но опцию SSH оставьте включенной - оно нам понадобится.
Что еще нужноКроме клиента для Rsync нужен еще его сервер. Он ставится вместе с клиентом, потому аналогичные операции, описанные выше, требуется провести и на компьютере, куда будет производится копирование.
После этого
FreeBSD:
открываем на редактирование на удаленном сервере файл /etc/rc.conf и добавляем в него строчку:
rsyncd_enable="YES"
после чего на удаленном компьютере запускаем сервер Rsync:
$ sudo /usr/local/etc/rc.d/rsyncd start
Debian/ubuntu:
Здесь мороки больше. Сначала открываем файл /etc/default/rsync и меняем в строчке "RSYNC_ENABLE=false" на "RSYNC_ENABLE=true":
RSYNC_ENABLE=true
Потом идем в /etc и создаем конфиг Rsync (rsyncd.conf) примерно такого вида:
log file=/var/log/rsyncd
pid file=/var/run/rsyncd.pid
socket options = SO_KEEPALIVE
и, наконец, запускаем Rsync:
$ sudo /etc/init.d/rsync start
CentOS/RedHat:
Тоже нужно поковыряться. Открываем на редактирование файл /etc/xinetd.d/rsync и меняем строчку "disable = yes" на "disable = no".
После чего перезапускаем демона xinetd:
$ sudo /etc/init.d/xinetd restart
Использование
$ sudo rsync -e ssh --progress -lzuogthvr --compress-level=9 --delete-after /mydir/sourcedir username@remoteserver:/backupdir/
Поясним передаваемые параметры:
- -e ssh : Использовать SSH для связи
- --progress : Показывать прогресс копирования
- -l : Пересоздавать synlinks - т.е. на удаленном сервере будут созданы симлинки, ссылающиеся на нужное место. Даже если на удаленном сервере этого места не существует - лучше делать так, т.к. при возвращении резервной копии на этом компьютере симлинки станут рабочими!
- -z : Использовать сжатие (для экономии трафика). Если дофига сжимать - копирование может занять дофига времени и можно отказаться от этой опции - в случае недостаточной мощности процессора
- -u : Режим обновления - т.е. разностное копирование. Утилита скопирует только те файлы, которые еще не существуют на удаленном сервере или которые были изменены.
- -o : Установить пользователя-владельца скопированного файла таким-же, как и у оригинала
- -g : Установить группу-владельца скопированного файла таким-же, как и у оригинала
- -t : Установить время создания/модификации файла на удаленном сервере такое-же, как и у оригинала. Опция обязательна для разностного копирования - иначе время файла на удаленном компьютере установится текущим
- -h : Вывод информации на экран в удобном для человека виде (human-readable)
- -v : Verbose-вывод (т.е. расширенная информация в процессе копирования)
- -r : Рекурсивное копирование (т.е. все, что находится по указанному пути, включая поддиректории).
- --compress-level=9 : Уровень сжатия
- --delete-after : Изменяет поведение утилиты. По-умолчанию утилита сначала удаляет целевой файл, если он существует, и только потом копирует его замену, что полезно при передаче больших файлов на сервер, на котором слабо со свободным местом. Если же указать --delete-after - то сначала в temp-директорию будет скачан новый файл, а уже потом будет произведено удаление старого.
- /mydir/sourcedir : директория, которая будет скопирована
- username : имя пользователя на удаленном сервере
- remoteserver : IP адрес или hostname удаленного сервера
- /backupdir/ : Директория, в которую будет положена копируемая папка
При использовании данной утилиты из скрипта автоматического резервного копирования опции --progress, -h и -v указывать смысла нет.
Обратно скопировать всю директорию можно так (при восстановлении из резервной копии):
$ sudo rsync -e ssh --progress -lzuogthvr --compress-level=9 --delete-after username@remoteserver:/backupdir/ /mydir/sourcedir
т.е. мы просто поменяли последние 2 параметра.
PS. При использовании утилиты для копирования в автоматическом режиме - нужно организовать безпарольный доступ по SSH. Как это сделать - описано ранее
Комментарии
Оставить комментарий
Операционная система LINUX
Термины: Операционная система LINUX