Команда rsync в linux с примерами

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 [email protected]

Мы должны подключиться по 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 — наш скрипт. В данном примере задание будет выполняться каждый час.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: