После завершения этого раздела вы сможете эффективно и безопасно синхронизировать содержимое локального файла или каталога с копией на удаленном сервере.
Команда rsync — это еще один способ безопасного копирования файлов из одной системы в другую. Она использует алгоритм, который минимизирует объем копируемых данных, синхронизируя только измененные части файлов. Она отличается от команды scp тем, что, если два файла или каталога на серверах одинаковы, rsync копирует только отличия между файловыми системами, а scp копирует их полностью.
Преимущество команды rsync в том, что она может безопасно и эффективно копировать файлы между локальной и удаленной системами. Хотя начальная синхронизация каталога занимает примерно столько же времени, сколько копирование, для последующей синхронизации потребуется скопировать по сети только различия, что значительно ускоряет обновления.
Важная опция команды rsync — -n ― позволяет выполнить пробный запуск. Пробный запуск — это эмуляция того, что происходит при выполнении команды. Пробный запуск показывает изменения, которые команда rsync внесла бы при обычном запуске. Рекомендуется выполнять пробный запуск до фактического использования команды rsync, чтобы избежать перезаписи или удаления важных файлов.
-n
Две распространенные опции при синхронизации с помощью команды rsync ― -v и -a.
-v
-a
Опция -v (или --verbose) предоставляет более детализированный вывод. Это полезно при устранении проблем и просмотре хода выполнения команды.
--verbose
Опция -a (или --archive) включает архивный режим. Она позволяет выполнять рекурсивное копирование и включает множество полезных опций, которые сохраняют большинство характеристик файлов. Далее приведены некоторые опции архивного режима.
--archive
Таблица 13.4. Опции, которые включает rsync -a (архивный режим)
-r
--recursive
-l
--links
-p
--perms
-t
--times
-g
--group
-o
--owner
-D
--devices
Архивный режим не сохраняет жесткие ссылки, поскольку это может значительно увеличить время синхронизации. Чтобы сохранить жесткие ссылки, добавьте опцию -H.
-H
Если вы используете расширенные разрешения, вам могут потребоваться две дополнительные опции:
-A для сохранения списков ACL;
-A
-X для сохранения контекстов SELinux.
-X
Используйте команду rsync для синхронизации содержимого локального файла или каталога с файлом или каталогом на удаленной машине, используя любую из двух машин в качестве источника. Вы также можете синхронизировать содержимое двух локальных файлов или каталогов.
Например, для синхронизации содержимого каталога /var/log с каталогом /tmp сделайте следующее:
/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 ~]$
[user@host ~]$
su -
password
[root@host ~]#
rsync -av /var/log /tmp
ls /tmp
Чтобы синхронизировать содержимое каталога без создания подкаталога в целевом каталоге, необходимо добавить косую черту после исходного каталога. В этом примере каталог log не создается в каталоге /tmp. Только содержимое каталога /var/log/ синхронизируется в каталог /tmp.
log
/var/log/
[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 -av /var/log/ /tmp
При указании исходного каталога для команды rsync наличие символа косой черты в конце имени каталога имеет значение. Он определяет, будет в целевой объект синхронизирован каталог или только его содержимое.
Функция автодополнения по клавише Tab в Bash автоматически добавляет символ косой черты в конец имен каталогов.
Как и команды scp и sftp, команда rsync указывает удаленное расположение в формате [user@]host:/path. Удаленное расположение может быть исходной или целевой системой, но одна из этих двух машин должна быть локальной.
[user@]host:/path
Чтобы сохранить владельца файла, необходимо быть пользователем root в целевой системе. Если целевая система — удаленная, пройдите аутентификацию как пользователь root. Если целевая система — локальная, выполните команду rsync от имени пользователя root.
root
В этом примере локальный каталог /var/log синхронизируется в каталог /tmp в системе remotehost:
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
rsync -av /var/log remotehost:/tmp
Таким же образом удаленный каталог /var/log на remotehost можно синхронизировать в локальный каталог /tmp на host.
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
rsync -av remotehost:/var/log /tmp
Man-страница rsync(1)
rsync