Ubuntu
sudo apt install rsync grsync
Debian
sudo apt-get install rsync grsync
Arch Linux
sudo pacman -S rsync grsync
Fedora
sudo dnf install rsync grsync
OpenSUSE
sudo dnf install rsync grsync
Другие Linux
Использование Rsync в терминале
Терминальный инструмент Rsync является очень мощным и, следовательно, может использоваться во многих различных приложениях. Тем не менее, большинство пользователей действительно должны знать основы. Вот как это работает. Чтобы передать все содержимое одной папки напрямую в другую, используйте эту команду:
Локальная передача
rsync -r /home/username/local/file/to/transfer/. user@host:/path/to/destination/folder
Удаленный локальный перевод
rsync -r user@host:/path/to/remote/. /home/username/local/file/to/transfer/
Эти команды позволяют пользователю напрямую и рекурсивно передавать все файлы из одной папки в другую как локально, так и удаленно. Ищете больше вариантов? В терминале выполните:
rsync -h
и опробуйте множество доступных ключей и опций rsync.
Примечания к справке по Rsync довольно большие. Часто терминал может отключить его (или, по крайней мере, пользователи вынуждены бесконечно прокручивать их). Чтобы упростить задачу, попробуйте сохранить инструкции помощи непосредственно в текстовом файле для дальнейшего использования. Это можно сделать с помощью этой команды:
rsync -h >> rsync-help.txt
Использование инструмента Grsync GUI
По большей части инструмент Grsync действительно является лучшим способом использования Rsync. Это потому, что, хотя сама команда Rsync является мощной, ее синтаксис довольно запутан для тех, кто просто хочет выполнить простую синхронизацию файлов. Когда дело доходит до команд терминала, это обычно не так, однако правила должны нарушаться.
Запустите Grsync на вашем компьютере и тоже откройте файловый менеджер. Внутри файлового менеджера найдите местоположение локальной папки, которую вы хотите перенести. Если вы получаете перевод вместо отправки, найдите (или создайте) папку назначения.
Найдя информацию о местоположении, перейдите к Grsync и начните с настройки источника. Нажмите «Открыть» и найдите локальную папку, которую вы хотите перенести. Если источник удаленный, напишите: user@host:/path/to/remote/После ввода / просмотра источника перевода перейдите к следующей области выбора. Нажмите кнопку «Открыть», чтобы найти папку назначения (если источник передачи удаленный), или введите: user@host:/path/from/remote/, если вы осуществляете передачу по сети.
У инструмента Grsync есть нормальные значения по умолчанию, и он не требует никаких действий для обычного пользователя. Чтобы начать передачу, нажмите кнопку «Пуск». Когда передача начнется, появится экран загрузки. Если вам интересно, как работает Rsync, нажмите кнопку «rsync output». Это отобразит полный вывод команды, к которому может обратиться пользователь.
Quick Grsync Tip
Не знаете, почему не работает синхронизация файлов? Попробуйте использовать режим симуляции. Это позволяет пользователям настроить Rsync, а затем запустить симуляцию. Фактические файлы не передаются. Вместо этого они моделируются и выводится. Это может помочь новичкам в Rsync настроить свои параметры передачи, обнаружить ошибки и т. д.
Чтобы перейти в режим симуляции в Grsync, нажмите «Файл», затем нажмите «Симуляция». Либо откройте инструмент симулятора Grsync с помощью сочетания клавиш Ctrl + S.
Настройка rsync
Теперь приступаем к настройке. Логика наших бэкапов будет следующая. При первом запуске мы делаем полный бэкап интересующей нас информации в папку current. Потом раз в сутки мы сверяем имеющийся архив с источником и делаем его вновь актуальным, перезаписывая все изменившиеся файлы, но при этом не удаляем их, а складываем в папку increment, где каждый день создается папка с именем в виде даты, в которую складываются все измененные файлы за текущий день. Таким образом, у нас всегда будет полный архив, актуальный на момент последней синхронизации, плюс набор папок за каждый день с изменившимися в этот день файлами. Сколько дней хранить, можно выбрать по необходимости.
Получается у нас такая картинка:
При этом подключение и работа rsync будет проходить по своему отдельному порту tcp 873. Не забудьте настроить iptables и открыть этот порт. Приступаем к реализации. В первую очередь настраиваем rsync на серверах источниках информации, с которых мы будем забирать данные для backup.
Создаем файл конфигурации rsync:
# mcedit /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log transfer logging = true munge symlinks = yes # папка источник для бэкапа path = /data uid = root read only = yes list = yes comment = Data backup Dir auth users = backup secrets file = /etc/rsyncd.scrt
Создаем файл с учетными данными для подключения:
# mcedit /etc/rsyncd.scrt
backup:12345
где backup – имя пользователя, 12345 – пароль.
Делаем права на чтение только root, иначе rsync не запустится:
# chmod 0600 /etc/rsyncd.scrt
После настройки перезапускаем rsync. На Centos:
# systemctl restart rsyncd
На Debian/Ubuntu:
# systemctl restart rsync
Теперь идем на сервер приемник, в котором будут храниться архивные копии с серверов источников. Там создаем скрипт инкрементного бэкапа c использованием rsync:
# mcedit /root/bin/backup-server1.sh
#!/bin/bash date # Папка, куда будем складывать архивы syst_dir=/backup/ # Имя сервера, который архивируем srv_name=server1 # Адрес сервера, который архивируем srv_ip=10.10.1.55 # Пользователь rsync на сервере, который архивируем srv_user=backup # Ресурс на сервере для бэкапа srv_dir=data echo "Start backup ${srv_name}" # Создаем папку для инкрементных бэкапов mkdir -p ${syst_dir}${srv_name}/increment/ # Запускаем непосредственно бэкап с параметрами /usr/bin/rsync -avz --progress --delete --password-file=/etc/rsyncd.scrt ${srv_user}@${srv_ip}::${srv_dir} ${syst_dir}${srv_name}/current/ --backup --backup-dir=${syst_dir}${srv_name}/increment/`date +%Y-%m-%d`/ # Чистим папки с инкрементными архивами старше 30-ти дней /usr/bin/find ${syst_dir}${srv_name}/increment/ -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \; date echo "Finish backup ${srv_name}"
Делаем скрипт исполняемым:
# chmod 0744 /root/bin/backup-server1.sh
Создаем файл с паролем для авторизации на сервере источнике:
# mcedit /etc/rsyncd.scrt
12345
Делаем права на чтение только root, иначе rsync выдаст ошибку:ERROR: password file must not be other-accessible
Исправляем это:
# chmod 0600 /etc/rsyncd.scrt
На этом все, теперь можно запускать скрипт и ожидать его выполнения. Если получите ошибку на клиенте:
rsync: opendir "/." (in data) failed: Permission denied (13)
и вот эту на сервере:
SELinux is preventing rsync from getattr access on the file
Проверьте настройки SELinux. Это он блокирует доступ к файлам. Нужно либо отключить selinux, либо настроить. В данном случае настройка простая:
# setsebool -P rsync_full_access on
Осталось добавить скрипт в cron:
# mcedit /etc/crontab
30 23 * * * root /root/bin/backup-server1.sh
Я обычно создаю несколько скриптов для каждого сервера отдельно. Потом объединяю их запуск в одном общем скрипте и уже его добавляю в cron. А потом по мере необходимости редактирую уже его, добавляю или удаляю сервера.
Синхронизация по сети (SSH)
Для корректной передачи данных по сети с помощью SSH, нужно настроить возможность беспарольного подключения, затем — сам Lsyncd. Рассмотрим оба процесса по очереди.
SSH без пароля (по сертификату)
На компьютере, с которого будем передавать файлы (lsyncd) генерируем ключи:
ssh-keygen -t rsa
… на все запросы просто нажимаем Enter.
Переносим id_rsa.pub на целевой компьютер (куда будем передавать данные с помощью lsyncd):
scp /root/.ssh/id_rsa.pub [email protected]:/home/dmosk/.ssh/authorized_keys
* если мы получим ошибку scp: /home//.ssh/authorized_keys: No such file or directory, необходимо на удаленном компьютере создать каталог .ssh в профиле пользователя, которому мы пытаемся передать ключ
Например, командами, mkdir /home/dmosk/.ssh и chown dmosk:dmosk /home/dmosk/.ssh.
* обратите внимание, что мы передаем созданный ключ в каталог пользователя dmosk. Это значит, что мы будем подключаться к целевому компьютеру от этого пользователя
Важно, чтобы у последнего были подходящие права для редактирования файлов в целевой папке, в которую мы будем синхронизировать данные. Пробуем подключиться к удаленному компьютеру:
Пробуем подключиться к удаленному компьютеру:
Мы должны подключиться по SSH без ввода пароля. В противном случае, на целевом компьютере (к которому у нас не получилось подключиться) открываем конфигурационный файл для ssh:
vi /etc/ssh/sshd_config
И приводим опцию AuthorizedKeysFile к следующему значению:
AuthorizedKeysFile .ssh/authorized_keys
Перезапускаем sshd:
systemctl restart sshd
Снова пробуем подключиться по SSH.
Настройка Lsyncd для синхронизации по сети
Открываем конфигурационный файл:
vi /etc/lsyncd.conf
Добавляем блок настроек sync:
sync {
default.rsyncssh,
source = «/tmp/source»,
host = «[email protected]»,
targetdir = «/tmp/target»,
rsync = {
_extra = { «-a» }
}
}
* где:
- default.rsyncssh — в качестве протокола будем использовать rsync через ssh.
- source — указываем источник данных.
- host — удаленный компьютер, на который будет идти передача данных. До знака @ указывается пользователь, под которым будет идти подключение.
- targetdir — каталог на удаленном хосте, в который будет выполняться синхронизация.
- rsync, _extra — дополнительные ключи запуска rsync. В нашем примере запускаем в режиме архивирования.
На целевом компьютере создаем каталог, куда будем синхронизировать данные:
mkdir /tmp/target
И не забываем назначить ему владельца, от пользователя которого мы планируем подключиться по ssh:
chown dmosk:dmosk /tmp/target
Также на целевом компьютере необходимо установить rsync.
а) на CentOS:
yum install rsync
б) на Ubuntu:
apt-get install rsync
После на компьютере источнике перезапускаем lsync:
systemctl restart lsyncd
Ждем 5-10 секунд и проверяем на целевом компьютере наличие файла:
ls /tmp/target/
Мы должны увидеть файл:
testfile
Передача по сети работает.
Configuration of the rsync Daemon
1. Edit the file /etc/default/rsync to start rsync as daemon using xinetd. The entry listed below, should be changed from false to inetd.
RSYNC_ENABLE=inetd
2. Install xinetd because it’s not installed by default.
$ sudo apt-get -y install xinetd
3. Create the file /etc/xinetd.d/rsync to launch rsync via xinetd. It should contain the following lines of text.
service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID flags = IPv6 }
4. Create the file /etc/rsyncd.conf configuration for rsync in daemon mode. The file should contain the following. In the file, user should be replaced with the name of user on the remote machine being logged into.
max connections = 2 log file = /var/log/rsync.log timeout = 300 comment = Public Share path = /home/share read only = no list = yes uid = nobody gid = nogroup auth users = user secrets file = /etc/rsyncd.secrets
5. Create /etc/rsyncd.secrets for user’s password. User should be the same as above, with password the one used to log into the remote machine as the indicated user.
$ sudo vim /etc/rsyncd.secrets user:password
6. This step sets the file permissions for rsyncd.secrets.
$ sudo chmod 600 /etc/rsyncd.secrets
7. Start/Restart xinetd
$ sudo /etc/init.d/xinetd restart
Переменные окружения
CVSIGNORE Переменная окружения CVSIGNORE дополняет исключающие шаблоны из файла .cvsignore. За деталями см. параметр --cvs-exclude. RSYNC_RSH Переменная окружения RSYNC_RSH позволяет переопределить программу удаленной оболочки, используемую rsync'ом как транспорт. Параметры командной строки для оболочки указываются после имени программы, также как и для параметра -e. RSYNC_PROXY Переменная окружения RSYNC_PROXY позволяет указать rsync-клиенту использовать web-прокси для подключения к rsync-серверу. Вы должны указать прокси в виде пары hostname:port . RSYNC_PASSWORD Установка значения RSYNC_PASSWORD позволяет осуществить rsync-соединение к rsync-серверу без вмешательства пользователя для ввода пароля. Заметьте, что это не тоже самое, что и пароль для транспортной оболочки, например, ssh. USER или LOGNAME Переменные окружения USER или LOGNAME используются для определения пользователя по умолчанию, имя которого предоставляется rsync-серверу для аутентификации. HOME Переменная HOME используется для поиска пользовательского файла .cvsignore.
Примеры скриптов rsync
#!/bin/bash # полный путь к вашему списку каталогов BACKUP_LST=etcbackupbackup.lst cat ${BACKUP_LST} | while read Res; do rsync -e ssh -acq --delete --force $Res backup@B:varbackup$Res done
Ссылки
-
Русские man: rsync
-
rsync 24 Dec 2009
-
Rsync Материал из Википедии
-
Блог посвящённый unix документации:rsync
- Полезные рецепты при работе с rsync.
-
Rsync — современный способ синхронизации файлов
rsync daemon
rsync can be run as daemon on a server listening on port .
Edit the template , configure a share and start the .
Note: As of 3.2.0-1 the package adopted the upstream systemd unit files and . The change for has been commented, the security feature under the section is still active. This makes the , and directories read-only. If you need rsyncd write system directories you can edit the unit and set in the section of the overriding snippet.
Usage from client, e.g. list server content:
$ rsync rsync://server/share
transfer file from client to server:
$ rsync local-file rsync://server/share/
Consider iptables to open port and user authentication.
Note: All transferred data including user authentication are not encrypted.
Sharing from a list of files
/etc/rsyncd.conf
... # Needed when crossing filesystem boundaries. #use chroot = no read only = yes ... path = / # List of files to copy. include from = /backup.list # Exclude the rest. exclude = *
Inside the file list, all the intermediary paths are necessary, except when the wildcard is used:
/backup.list
/etc/ /etc/conf.d/ /etc/conf.d/hwclock /etc/fonts/***
Показать прогресс копирования Rsync
Чтобы показать ход процесса копирования Rsync, используйте параметр rsync built-in – progress.
Вот синтаксис команды:
$ rsync --progress SOURCE DESTINATION
Например, чтобы просмотреть прогресс при копировании каталога с именем sample и его содержимого в каталог Downloads, команда будет выглядеть так:
$ rsync -av --progress sample/ Downloads/
Где -progress используется, чтобы показать индикатор выполнения переводов, а вариант для рекурсивной синхронизации и V для отображения подробного вывода.
Это результат выполнения вышеупомянутой команды rsync, которая показывает прогресс копирования каждого файла в другое место. В конце передачи файла вы увидите итоговую строку, показывающую количество отправленных/полученных байтов, скорость передачи, общий размер и скорость передачи.
В приведенных выше выходных данных вы можете видеть, что средняя скорость передачи составляет 78 078 648,67 байт/сек, общий размер файла составляет 169 746 317 байт, а для завершения передачи потребовалось 1,45 секунды.
Запуск клиента
Проверка на локальном компьютере
Сначала выполним следующую команду на нашем сервере:
rsync -avv —progress rsync_d1@localhost::data1 /tmp/
* данная команда выполнит синхронизацию нашего ресурса data1 с каталогом /tmp.
Проверка на удаленном компьютере
Устанавливаем rsync, если еще не установлен:
yum install rsync
apt-get install rsync
* первая команда для CentOS, вторая — Ubuntu.
Запускаем синхронизацию:
rsync -avv [email protected]::data1 /tmp/
* где 192.168.0.5 — IP-адрес rsync сервера.
Пример готового скрипта для синхронизации папок
Скрипт довольно прост:
#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
password_file=’/etc/rsyncd.scrt’
user=’opros’
ip=’192.168.0.15′
source=’data1′
destination=’/tmp/’
rsync -a —delete-after —password-file=$password_file $user@$ip::$source $destination
* где:
- password_file — пароль, в котором будет храниться пароль.
- user — учетная запись для авторизации.
- ip — IP-адрес сервера rsync.
- source — имя ресурса на сервере.
- destination — каталог, в который синхронизируем файлы.
После создаем файл с паролем:
vi /etc/rsyncd.scrt
password
* в данном файле указываем только пароль без имени учетной записи.
После задаем права:
chmod 600 /etc/rsyncd.scrt
Автоматизировать синхронизацию можно с помощью CRON:
crontab -e
0 */1 * * * /scripts/syncing.sh
* где /scripts/syncing.sh — наш скрипт. В данном примере задание будет выполняться каждый час.