====== Rsync ======
**rsync** - программа, которая выполняет синхронизацию файлов и каталогов, может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.
===== Установка =====
На примере **Debian**:
# aptitude install rsync
===== Копирование =====
На сервере-приемнике правим **/etc/default/rsync**. Меняем в строке "RSYNC_ENABLE=false" //false// на //true//. Правим (создаем) **/etc/rsyncd.conf**. Прописываем туда:
log file=/var/log/rsyncd
pid file=/var/run/rsyncd.pid
socket options = SO_KEEPALIVE
и запускаем **rsync**:
# service rsync start
rsync-сервер к приему данных готов.
На сервере-передатчике запускаем **rsync**:
# rsync -e ssh --progress -lzuogthvr --compress-level=9 --delete-after /mydir/sourcedir username@remoteserver:/backupdir/
где:
* **-e ssh** -- использовать **SSH** для связи (В данном примере рассматриваем подключение поверх удаленной оболочки, а не непосредственно к rsync-серверу. При этом требуется ввод логина и пароля. Для использования этого способа в cron можно настроить [[wiki:technical:soft:ssh_keys|ssh доступ по ключу]], без ввода пароля).
* **‑‑progress** -- показывать прогресс копирования.
* **-l** -- пересоздавать symlinks, т.е. на удаленном сервере будут созданы символические ссылки, указывающие на нужное место. Даже если на удаленном сервере этого места не существует - лучше это делать, так как при возвращении резервной копии на этом компьютере ссылки станут рабочими.
* **-z** -- использовать сжатие (для экономии трафика). Если много сжимать - копирование может занять много времени. Можно отказаться от этой опции в случае недостаточной мощности процессора.
* **-u** -- режим обновления, инкрементальное копирование. **rsync** скопирует только те файлы, которые еще не существуют на удаленном сервере или которые были изменены.
* **-o** -- установить пользователя-владельца скопированного файла таким-же, как и у оригинала.
* **-g** -- установить группу-владельца скопированного файла таким-же, как и у оригинала.
* **-t** -- установить время создания/модификации файла на удаленном сервере такое-же, как и у оригинала. Опция обязательна для инкрементального копирования - иначе время файла на удаленном компьютере установится текущим.
* **-h** -- вывод информации на экран в удобном для человека виде (human-readable).
* **-v** -- verbose-вывод (т.е. расширенная информация в процессе копирования).
* **-r** -- рекурсивное копирование (т.е. все, что находится по указанному пути, включая поддиректории).
* **‑‑compress-level=9** -- уровень сжатия (0-9)
* **‑‑delete-after** -- изменяет поведение утилиты. По умолчанию, утилита сначала удаляет целевой файл, если он существует, и только потом копирует его замену, что полезно при передаче больших файлов на сервер, на котором слабо со свободным местом. При использовании опции **‑‑delete-after** сначала в **/temp** будет скачан новый файл, а затем будет выполнена замена целевого с удалением.
* **/mydir/sourcedir** -- директория, которая будет скопирована.
* **username** -- имя пользователя для подключения на удаленный сервер.
* **remoteserver** -- ip-адрес или hostname удаленного сервера.
* **/backupdir/** -- директория, в которую будет положена копируемая папка (должна существовать).
===== Восстановление =====
Обратно скопировать всю директорию (т.е. восстановить из резервной копии) можно так:
# rsync -e ssh --progress -lzuogthvr --compress-level=9 --delete-after username@remoteserver:/backupdir/ /mydir/sourcedir
Как видно, мы просто поменяли местами последние два параметра.