Синхронизируем/копируем файлы с Rsync

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/
 
Пример вывода с ключами -vh
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 основных пути:

  1. Использовать утилиту sshpass (Самый простой и наименее рекомендованный)
  2. Сгенерировать ключи авторизации
  3. Использовать rsync демон на удаленном хосте
 
Решение с sshpass
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

Самые интересные ключи, остальные можно помотреть в мане:

Ключи rsync
-v  Подробный режим
-h Вывод данных в human-readable формате
-r Копировать данные рекурсивно
-a Копировать данные рекурсивно с сохранением симлинков, прав доступа и другую информацию (режим архивирования, аналогичен ключам -rlptgoD)
-z (--compress) Сжатие данных при копировании
--progress Показывать прогресс
--include и --exclude Указать, какие файлы и/или директории включить в передачу, а какие – исключить.
--delete Удалить в месте назначения фалы, которых нет в источнике
--dry-run Имитация, без реального копирования. Например, так можно посмотреть различия.
--bwlimit=NUM Ограничение скорости чтения с диска (соответственно и передачи)
--partial Оставлять не докопированные файлы(для докачки в случае обрыва)
--append-verify Если файл существует нужно проверить, возможно он не полностью синхронизирован, и синхронизировать остаток.
--password-file=PATH Путь к файлу с паролем(только для протокола RSYNC)

 

Теги: Linux, Backup

Комментарии (0)