Red Hat System Administration I 8.2

Безопасная синхронизация файлов между системами

Задачи

После завершения этого раздела вы сможете эффективно и безопасно синхронизировать содержимое локального файла или каталога с копией на удаленном сервере.

Синхронизация файлов и каталогов с помощью команды rsync

Команда rsync — это еще один способ безопасного копирования файлов из одной системы в другую. Она использует алгоритм, который минимизирует объем копируемых данных, синхронизируя только измененные части файлов. Она отличается от команды scp тем, что, если два файла или каталога на серверах одинаковы, rsync копирует только отличия между файловыми системами, а scp копирует их полностью.

Преимущество команды rsync в том, что она может безопасно и эффективно копировать файлы между локальной и удаленной системами. Хотя начальная синхронизация каталога занимает примерно столько же времени, сколько копирование, для последующей синхронизации потребуется скопировать по сети только различия, что значительно ускоряет обновления.

Важная опция команды rsync — -n ― позволяет выполнить пробный запуск. Пробный запуск — это эмуляция того, что происходит при выполнении команды. Пробный запуск показывает изменения, которые команда rsync внесла бы при обычном запуске. Рекомендуется выполнять пробный запуск до фактического использования команды rsync, чтобы избежать перезаписи или удаления важных файлов.

Две распространенные опции при синхронизации с помощью команды rsync ― -v и -a.

Опция -v (или --verbose) предоставляет более детализированный вывод. Это полезно при устранении проблем и просмотре хода выполнения команды.

Опция -a (или --archive) включает архивный режим. Она позволяет выполнять рекурсивное копирование и включает множество полезных опций, которые сохраняют большинство характеристик файлов. Далее приведены некоторые опции архивного режима.

Таблица 13.4. Опции, которые включает rsync -a (архивный режим)

ОпцияОписание
-r, --recursiveРекурсивная синхронизация всего дерева каталогов
-l, --linksСинхронизация символьных ссылок
-p, --permsСохранение разрешений
-t, --timesСохранение меток времени
-g, --groupСохранение группы-владельца
-o, --ownerСохранение владельца файлов
-D, --devicesСинхронизация файла устройства

Архивный режим не сохраняет жесткие ссылки, поскольку это может значительно увеличить время синхронизации. Чтобы сохранить жесткие ссылки, добавьте опцию -H.

Примечание

Если вы используете расширенные разрешения, вам могут потребоваться две дополнительные опции:

  • -A для сохранения списков ACL;

  • -X для сохранения контекстов SELinux.

Используйте команду rsync для синхронизации содержимого локального файла или каталога с файлом или каталогом на удаленной машине, используя любую из двух машин в качестве источника. Вы также можете синхронизировать содержимое двух локальных файлов или каталогов.

Например, для синхронизации содержимого каталога /var/log с каталогом /tmp сделайте следующее:

[user@host ~]$ su -
Password: password
[root@host ~]# rsync -av /var/log /tmp
receiving incremental file list
log/
log/README
log/boot.log
...output omitted...
log/tuned/tuned.log

sent 11,592,423 bytes  received 779 bytes  23,186,404.00 bytes/sec
total size is 11,586,755  speedup is 1.00
[user@host ~]$ ls /tmp
log  ssh-RLjDdarkKiW1
[user@host ~]$ 

Чтобы синхронизировать содержимое каталога без создания подкаталога в целевом каталоге, необходимо добавить косую черту после исходного каталога. В этом примере каталог log не создается в каталоге /tmp. Только содержимое каталога /var/log/ синхронизируется в каталог /tmp.

[root@host ~]# rsync -av /var/log/ /tmp
sending incremental file list
./
README
boot.log
...output omitted...
tuned/tuned.log

sent 11,592,389 bytes  received 778 bytes  23,186,334.00 bytes/sec
total size is 11,586,755  speedup is 1.00
[root@host ~]# ls /tmp
anaconda                  dnf.rpm.log-20190318  private
audit                     dnf.rpm.log-20190324  qemu-ga
boot.log                  dnf.rpm.log-20190331  README
...output omitted...

Важно

При указании исходного каталога для команды rsync наличие символа косой черты в конце имени каталога имеет значение. Он определяет, будет в целевой объект синхронизирован каталог или только его содержимое.

Функция автодополнения по клавише Tab в Bash автоматически добавляет символ косой черты в конец имен каталогов.

Как и команды scp и sftp, команда rsync указывает удаленное расположение в формате [user@]host:/path. Удаленное расположение может быть исходной или целевой системой, но одна из этих двух машин должна быть локальной.

Чтобы сохранить владельца файла, необходимо быть пользователем root в целевой системе. Если целевая система — удаленная, пройдите аутентификацию как пользователь root. Если целевая система — локальная, выполните команду rsync от имени пользователя root.

В этом примере локальный каталог /var/log синхронизируется в каталог /tmp в системе remotehost:

[root@host ~]# rsync -av /var/log remotehost:/tmp
root@remotehost's password: password
receiving incremental file list
log/
log/README
log/boot.log
...output omitted...
sent 9,783 bytes  received 290,576 bytes  85,816.86 bytes/sec
total size is 11,585,690  speedup is 38.57

Таким же образом удаленный каталог /var/log на remotehost можно синхронизировать в локальный каталог /tmp на host.

[root@host ~]# rsync -av remotehost:/var/log /tmp
root@remotehost's password: password
receiving incremental file list
log/boot.log
log/dnf.librepo.log
log/dnf.log
...output omitted...

sent 9,783 bytes  received 290,576 bytes  85,816.86 bytes/sec
total size is 11,585,690  speedup is 38.57

Ссылки

Man-страница rsync(1)