Синхронизируем/копируем файлы с Rsync
Синхронизируем/копируем файлы с Rsync
Rsync - мощный инструмент копирования/синхронизации данных, позволяющий работать как с локальными так и удаленными источниками (использует свой протокол или ssh). Принцип работы rsync является его основным достоиством: он не копирует файлы полностью, если в месте назначения уже существует файл, он разбивает его на блоки и копирует только то, что имеет отличия. На лицо экономия, времени, трафика и ресурса винчестера. Поэтому кроме копирования, rsync является отличным инструментом синхронизации данных.
Давайте приступим, и начнем с установки:
sudo apt-get update
sudo apt-get install -y rsync
Синтакси привычный:
rsync опции источник место_назначения
Синхронизуем 2 каталога на локальной машине
rsync -a /tmp/rsync/source/ /tmp/rsync/destination/
sending incremental file list
./
alternatives.log
dpkg.log.1
faillog
history.log
lsb-release
subdir/
subdir/test.txt
subdir/sub-sub/
subdir/sub-sub/secret.txt
sent 25.85K bytes received 168 bytes 52.04K bytes/sec
total size is 25.25K speedup is 0.97
Синхронизуемся с удаленным хостом по протоколу SSH:
Сихронизация локальной папки с удаленной с возможностью докачки в случае обрыва, сжатием передаваемых данных и удалением из удаленной папки файлов, которых нет в локальной.
rsync -az --partial --append-verify --delete -e ssh /tmp/rsync/source user@azrr.info:/tmp/rsync
Для автоматизации это не подходит, так-как тут будет интерактивный ввод пароля пользователя. Чтобы не вводить пароль есть 3 основных пути:
- Использовать утилиту sshpass (Самый простой и наименее рекомендованный)
- Сгенерировать ключи авторизации
- Использовать rsync демон на удаленном хосте
sudo apt-get install sshpass
rsync -az --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" источник место_назначения
Синхронизуемся с удаленным хостом по протоколу RSYNC
На удаленном хосте нужно поднять rsync демон. Для начала поставим rsync:
sudo apt-get update
sudo apt-get install rsync
Разрешим запуск демона:
sudo nano /etc/default/rsync
Находим строку RSYNC_ENABLE=false и меняем на true.
Создаем файл конфигурации rsync:
sudo nano /etc/rsyncd.conf
uid = nobody
gid = nogroup
use chroot = no
max connections = 20
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
# Все места назначения нужно описать так
[backup]
path = /home/storage/backup
comment = For backups
uid = nobody
gid = nogroup
read only = no
auth users = backup, user
secrets file = /etc/rsyncd.pass
;hosts allow = 192.168.0.0/24
;hosts deny = *
[www]
path = /var/www
comment = For www
uid = www-data
gid = www-data
read only = no
auth users = user
secrets file = /etc/rsyncd.pass
;hosts allow = 192.168.1.0/24
;hosts deny = *
Путь из path должен существовать и обладать правами на запись для пользователя uid(в нашем случае nobody).
Теперь создадим файл с паролями :
sudo nano /etc/rsyncd.pass
Содержимое файла с паролями:
user:password
backup:password1
Права на чтение/запись только для root:
sudo chmod 0600 /etc/rsyncd.pass
Запускаем сервис:
sudo service rsync start
sudo service rsync status
● rsync.service - fast remote file copy program daemon
Loaded: loaded (/lib/systemd/system/rsync.service; disabled)
Active: active (running) since Fri 2017-09-08 21:33:29 MSK; 1h 3min ago
Main PID: 1647 (rsync)
CGroup: /system.slice/rsync.service
└─1647 /usr/bin/rsync --daemon --no-detach
sudo netstat -tulpn | grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 12883/rsync
tcp6 0 0 :::873 :::* LISTEN 12883/rsync
Теперь на хосте-источнике создадим файл с паролем(в файле должен быть только пароль и все). Права на чтение/запись должны быть только у владельца(от чьего имени будет запускаться rsync)
echo password1> /home/user/pass.rsync
chmod 0600 /home/user/pass.rsync
Ну и собственно синхронизация:
rsync -az --delete --password-file=/home/user/pass.rsync /tmp/rsync/source rsync://backup@azrr.info:/some/path
Самые интересные ключи, остальные можно помотреть в мане:
Комментарии (0)