вторник, 31 мая 2016 г.

Используем rsync для синхронизации файлов между удалёнными носителями

Rsync расшифровывается как «remote sync» (удаленная синхронизация) и является инструментом удаленной синхронизации локального и удаленного файлов. Он использует алгоритм, который минимизирует объем копируемых данных при помощи перемещения только тех частей файлов, которые были изменены. Очень удобно им пользоваться в случае если вы редактируете один файл с двух разных компьютеров (написание текстового документа, например). Rsync является очень гибким инструментом синхронизации, рассчитанным на работу в сетевой среде. Сетевой протокол, разработанный для использования данного инструмента, также называется Rsync. В этой заметке я напишу как пользоваться этой замечательной утилитой.

Синтаксис Rsync весьма прост, и похож на обычную работу с файлами в командной строке. Чтобы создать два пробных каталога и несколько пробных файлов, используйте следующую команду:

 cd ~
mkdir dir1
mkdir dir2
touch dir1/file{1..100}


 Это создаст на сервере каталог под названием dir1, содержащий 100 пустых файлов. Также был создан пустой каталог dir2. Чтобы синхронизировать содержимое каталогов dir1 с dir2 на одной системе, введите:

rsync -r dir1/ dir2

 Флаг «-r» значит «рекурсивный», что необходимо для синхронизации каталогов. Это позволит синхронизировать его содержимое. Также вместо него возможно использовать флаг -a . Он означает «архив» и синхронизирует рекурсивно, сохраняя символьные ссылки, специальные файлы и файлы устройств, время изменения, группу, владельца и разрешения. Всегда проверяйте аргументы дважды перед выполнением команды Rsync. Rsync позволяет это сделать при помощи команд -n или —dry-run. Флаг -v (что значит «подробно») также необходим для получения адекватного результата:

rsync -anv dir1/ dir2
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .



Синхронизация с удаленной системой проста, если есть SSH-доступ к удаленному компьютеру и на обеих системах установлена Rsync. Настройка SSH очень подробно описана в этой статье. Установив и проверив доступ SSH между двумя машинами, можно синхронизировать папку dir1 с удаленным компьютером при помощи следующей команды:

rsync -a ~/dir1 username@remote_host:каталог назначения

 Данная процедура называется «push», так как она «толкает» каталог из локальной системы на удаленную. Противоположная ей операция зовется «извлечением» («pull»). Она используется для синхронизации удаленного каталога с локальной системой. Если бы dir1 находился не на локальной, а на удаленной системе, синтаксис выглядел бы так:

rsync -a username@remote_host:/home/username/dir1 путь_на_локальной_машине

При передаче еще не сжатых файлов, таких как текстовые файлы, можно уменьшить сетевой трафик, сжимая файлы при помощи  параметра -z:

rsync -az источник назначение

 Флаг «-P» также очень полезен. Он совмещает флаги «—progress» и «—partial». Первый выводит индикатор выполнения передачи, а второй позволяет возобновить прерванную передачу:

sending incremental file list
./
file1
0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .


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

touch dir1/file{1..10}
rsync -azP источник назначение
sending incremental file list
file1
0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file2
0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=87/101)
file3
0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=76/101)
. . .



По умолчанию, Rsync ничего не удаляет из каталога назначения. Следовательно, необходимо удалить файлы из каталога назначения, если они удаляются из  исходного каталога, чтобы сохранить полную синхронизацию каталогов. Такое поведение можно изменить с помощью флага «—delete». Прежде чем применять данный флаг, используйте команду «—dry-run» и проведите тестирование, чтобы предотвратить потерю данных.


rsync -a --delete источник назначение

При необходимости исключить некоторые файлы или каталоги, расположенные в синхронизируемом каталоге, можно внести их в разделенный запятыми список при помощи команды «—exclude=»:

rsync -a --exclude=файлы для исключения источник назначение

Если шаблон исключений был определен, при помощи команды «—include=» исключение можно снять, установив другой шаблон:

rsync -a --exclude=файлы для исключения --include=файлы для включения источник назначение

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


 

Комментариев нет:

Отправить комментарий