MyTetra Share
Делитесь знаниями!
RSYNC_примеры использования
Время создания: 25.12.2018 11:14
Автор: alensav
Текстовые метки: sync, синхронизация
Раздел: MyTetra
Запись: xintrea/mytetra_db_alensav/master/base/1545725693zlkiufjjlt/text.html на raw.githubusercontent.com

Примеры использования

Опубликовано сб, 04/28/2012 - 14:57 пользователем alitius

Что-такое rsync, я думаю знают все, но на всякий случай освежим.

Rsync - утилита для Unixlike-систем, использующаяся для синхронизации файлов и папок из одного месторасположения в другое, не важно на одном физическом устройстве находятся или на разных. Имеется ввиду передача по сети.

Важным отличием rsync от многих других программ/протоколов является то, что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). Rsync была создана как замена для rcp и scp

Существует реализация rsync для Winows, а точнее не прямая реализация, а сборка из rsync и cygwin, называемая cwRsync. Ссылку на нее Вы сможете найти в конце статьи.

Основные преимущества rsync:
- Скорость: Первоначально rsync реплицирует все содержимое между источником и местом назначения (приемником). Далее rsync передает только изменившиеся блоки или биты в место назначения, что делает синхронизацию действительно быстрой.
- Безопасность: rsync включает в себя шифрование данных при передаче с использованием протокола SSH
- Маленькая нагрузка:  rsync использует сжатие и распаковку данных блок за блоком на передающей и принимающей стороне соответственно. Таким образом используемая rsync пропускная способность ниже по сравнению с другими протоколами передачи файлов.

Синтаксис:
$ rsync options source destination

Source (источник) и Destination (место назначения) могут быть как локальными, так и удаленными. В случае использования с удаленными объектами указывает логин, имя сервера и путь.

Рассмотрим несколько примеров.

В качестве тестового стенда взяты Ubuntu Server и FreeBSD. По умолчанию rsync присутствует в Ubuntu Server, для freebsd установим из портов:

?

cd /usr/ports/net/rsync/

make install clean

rehash

Итак примеры:

1. Синхронизация двух директорий на одном сервере

Для синхронизации двух директорий на одной машине используем ключи -zvr
z - включаем сжатие
v - детализация
r - режим рекурсии, т.е. синхронизировать вместе с внутренними каталогами, а не только файлы верхнего уровня.
Пример с машины на Freebsd:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

rsync -zvr /usr/ports/net/rsync/ /home/greendail/temp

sending incremental file list

created directory /home/greendail/temp

./

Makefile

distinfo

pkg-descr

pkg-plist

files/

files/rsyncd.conf.sample

files/rsyncd.sh.in

 

sent 3552 bytes  received 133 bytes  7370.00 bytes/sec

total size is 6678  speedup is 1.81   

Вывод с машины с Ubuntu аналогичен.

Сравним наши копии:

?

/usr/ports/net/rsync/>ls -l /usr/ports/net/rsync/ /home/greendail/temp

 

/home/greendail/temp:

total 12

-rw-r--r--  1 root  greendail  3913 Apr 26 16:13 Makefile

-rw-r--r--  1 root  greendail   404 Apr 26 16:13 distinfo

drwxr-xr-x  2 root  greendail   512 Apr 26 16:13 files

-rw-r--r--  1 root  greendail   695 Apr 26 16:13 pkg-descr

-rw-r--r--  1 root  greendail   268 Apr 26 16:13 pkg-plist

 

/usr/ports/net/rsync/:

total 12

-rw-r--r--  1 root  wheel  3913 Jan  1  2010 Makefile

-rw-r--r--  1 root  wheel   404 Jan  1  2010 distinfo

drwxr-xr-x  2 root  wheel   512 Jul 19  2010 files

-rw-r--r--  1 root  wheel   695 Mar 15  2006 pkg-descr

-rw-r--r--  1 root  wheel   268 May 17  2005 pkg-plist

Как мы видим, rsync изменил метки времени и группу владельца во время синхронизации.

2. Сохранение временных меток в процессе синхронизации

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

Изменяем команду из первого примера:

?

#rsync -avz /usr/ports/net/rsync/ /home/greendail/temp

sending incremental file list

created directory /home/greendail/temp

./

Makefile

distinfo

pkg-descr

pkg-plist

files/

files/rsyncd.conf.sample

files/rsyncd.sh.in

 

sent 3554 bytes  received 133 bytes  7374.00 bytes/sec

total size is 6678  speedup is 1.81

И проверяем:

?

ls -l /usr/ports/net/rsync/ /home/greendail/temp

 

/home/greendail/temp:

total 12

-rw-r--r--  1 root  wheel  3913 Jan  1  2010 Makefile

-rw-r--r--  1 root  wheel   404 Jan  1  2010 distinfo

drwxr-xr-x  2 root  wheel   512 Jul 19  2010 files

-rw-r--r--  1 root  wheel   695 Mar 15  2006 pkg-descr

-rw-r--r--  1 root  wheel   268 May 17  2005 pkg-plist

 

/usr/ports/net/rsync/:

total 12

-rw-r--r--  1 root  wheel  3913 Jan  1  2010 Makefile

-rw-r--r--  1 root  wheel   404 Jan  1  2010 distinfo

drwxr-xr-x  2 root  wheel   512 Jul 19  2010 files

-rw-r--r--  1 root  wheel   695 Mar 15  2006 pkg-descr

-rw-r--r--  1 root  wheel   268 May 17  2005 pkg-plist

Как мы видим, получилась зеркальная копия.

3. Синхронизация одного файла

Тут все просто -

?

#rsync -v /usr/ports/net/rsync/Makefile /home/greendail/temp

Makefile

 

sent 3985 bytes  received 31 bytes  8032.00 bytes/sec

total size is 3913  speedup is 0.97

4. Синхронизация файлов с локальной машины на удаленную

Для примера я кидаю файлы с FreeBSD на Ubuntu, но принципиальной разницы нет, поэтому далее указывать с какой системы на какую указывать не буду.

Обратите внимание, чтобы если кидать файлы на убунту у Вас должен быть установлен openssh-server (ставится sudo apt-get install openssh, после чего не забудьте заглянуть /etc/ssh/sshd_config и изменить стандартные политики)

?

rsync -rvz /home/greendail/temp/ greendail@192.168.0.5:/home/sysadmin/temp1/

greendail@192.168.0.5's password:

sending incremental file list

created directory /home/sysadmin/temp1

./

Makefile

 

sent 1671 bytes  received 34 bytes  148.26 bytes/sec

total size is 3913  speedup is 2.30

Здесь нам необходимо указать имя пользователя, ip-aдрес сервера и путь. Общий вид - username@machinename :path. После ввода команды необходимо ввести пароль того пользователя, который указан в команде для входа на сервер. В данном примере мы указали ключ -r вместо -a, т.к. у пользователя greendail нет прав на создание файлов от имени рута (а синхронизируем мы именно такие файлы).

Для того, чтобы не вводить пароль каждый раз, например для работы из скрипта, вы можете использовать ssh-copy-id, здесь мы этого рассматривать не будем.

5. Синхронизация файлов с удаленной машины на локальную

Здесь все тоже самое, только меняются местами source и destination

?

rsync -rvz greendail@192.168.0.5:/home/sysadmin/temp1/ /home/greendail/temp/

6. Синхронизация с удаленной машиной имеющий нестандартный порт ssh

Для этого нам понадобиться ключ -е с указание номера порта, например  -e='ssh -p 4439'

Тогда наша команда будет выглядеть:

?

rsync  -e='ssh -p 4439' -rvz /home/greendail/temp/ greendail@192.168.0.5:/home/sysadmin/temp1/

7. Не перезаписывать измененные данные в месте назначения (destination)

Довольно типичная ситуация, если файл изменен на удаленной стороне, а мы не хотим перезаписать его старой версией из источника.

Для этого мы используем опцию -u. В примере файл "readme" изменен на удаленной стороне:

?

1

2

3

# ls -l /home/greendail/temp/readme

total 39088

-rwxr-xr-x 1 root root        4096 Apr  27 11:35 readme

?

$ rsync -avzu  greendail@192.168.0.5:/home/sysadmin/temp1 /home/greendail/temp

Password:

receiving file list ... done

temp1/

 

sent 122 bytes  received 505 bytes  114.00 bytes/sec

total size is 45305958  speedup is 72258.31

?

$ ls -lrt

total 39088

-rwxr-xr-x 1 root root        4096 Apr  27 11:35 readme

8. Синхронизация только дерева каталогов (без файлов)
 

Используем опцию - d для синхронизации дерева каталогов, без синхронизации файлов находящихся внутри каталогов (файлы с корневой директории все равно синхронизуются)

?

#rsync -v -d root@192.168.0.5:/home/sysadmin/temp/ .

root@192.168.0.5's password:

receiving file list ... done

.directory

17012011056.jpg

Scan009.PDF

dig

install-gecko.sh

names.txt

sape/

 

sent 1544 bytes  received 161959 bytes  15571.71 bytes/sec

total size is 323757  speedup is 1.98

9. Вывод процесса синхронизации на экран или файл

Если Вы используете rsync например для бэкапов, то очень полезно знать прогресс выполнения, то бишь сколько файлов скопировалось или в каком месте процесс сейчас находится и т.д.
Для этого импользуеться опция --progress

?

rsync -avz --progress root@192.168.0.5:/home/sysadmin/temp/ /home/greendail/temp

root@192.168.0.5's password:

receiving incremental file list

./

.directory

          72 100%   70.31kB/s    0:00:00 (xfer#1, to-check=5/7)

17012011056.jpg

      145031 100%    1.08MB/s    0:00:00 (xfer#2, to-check=4/7)

Scan009.PDF

      160512 100%  979.69kB/s    0:00:00 (xfer#3, to-check=3/7)

dig

       16057 100%   93.90kB/s    0:00:00 (xfer#4, to-check=2/7)

install-gecko.sh

        2069 100%   11.82kB/s    0:00:00 (xfer#5, to-check=1/7)

names.txt

          16 100%    0.09kB/s    0:00:00 (xfer#6, to-check=0/7)

 

sent 128 bytes  received 306856 bytes  26694.26 bytes/sec

total size is 323757  speedup is 1.05

Также интересно:

Для вывода информации в файл используется стандартное перенаправление вывода (например > /home/greendail/backup.log)

?

rsync -avz --progress root@192.168.0.5:/home/sysadmin/temp/ /home/greendail/temp > /home/greendail/backup.log

10. Удаление файлов в точке назначения.

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

Создадим новый файл на конечном сервере (точке назначения) с именем new-file.txt и запускаем:

?

rsync -avz --delete root@192.168.0.5:/home/sysadmin/temp/ /home/greendail/temp

root@192.168.0.5's password:

receiving incremental file list

deleting new-file.txt

./

 

sent 14 bytes  received 229 bytes  21.13 bytes/sec

total size is 323757  speedup is 1332.33

11. Не создавать новые файлы на конечном сервере

Если вы хотите обновлять (синхронизировать) только сущестующие файлы, не копируя вновь созданные, то для этого нам понадобится опция --existing  

Для примера, создаем на источнике файл newfile.txt и производим синхронизацию:

?

rsync -avz --existing root@192.168.0.5:/home/sysadmin/temp/ /home/greendail/temp

root@192.168.0.5's password:

receiving incremental file list

./

 

sent 14 bytes  received 249 bytes  27.68 bytes/sec

total size is 323759  speedup is 1231.02

12. Просмотр разницы между источником и приемником (точкой назначения)

Просмотрим содержимое синхронизируемых директорий.

На источнике:  

?

#ls -l

total 332

-rw-------  1 10008  10000      72 Apr 28 11:01 .directory

-rwxr--r--  1 10008  10000  145031 Jan 17  2011 17012011056.jpg

-rw-r--r--  1 10008  10000  160512 Oct 31 12:39 Scan009.PDF

-rw-r--r--  1 10008  10000   16057 Apr 28 12:10 dig

-rwxr-xr-x  1 10008  10000    2069 Nov 10 02:02 install-gecko.sh

-rw-r--r--  1 10008  10000      16 Mar 23 15:29 names.txt

-rw-r--r--  1 10008  10000      43 Apr 28 12:10 newfile.txt

На приемнике:

?

/home/greendail/temp/>ls -l

total 326

-rw-------  1 10008  10000      72 Apr 28 11:01 .directory

-rwxr--r--  1 10008  10000  145031 Jan 17  2011 17012011056.jpg

-rw-r--r--  1 10008  10000  160512 Oct 31 12:39 Scan009.PDF

-rw-r--r--  1 10008  10000   16057 Apr 28 12:07 dig

-rwxr-xr-x  1 10008  10000    2069 Nov 10 02:02 install-gecko.sh

-rw-r--r--  1 10008  10000      16 Mar 23 15:29 names.txt

-rw-r--r--  1 10008  10000      36 Apr 28 12:06 newfile.txt

В приведенном выше примере различия заметны для двух файлов, для newfile.txt -время и размер, для dig - время

Теперь сравним их с использованием rsync. Для этого используется опция -i  

?

rsync -avzi root@192.168.0.5:/home/sysadmin/temp/ /home/greendail/temp

root@192.168.0.5's password:

receiving incremental file list

.d..t...... ./

>f..t...... dig

>f.st...... newfile.txt

 

sent 196 bytes  received 350 bytes  57.47 bytes/sec

total size is 323793  speedup is 593.03

Давайте рассмотрим что означают символы в этом выводе:
> - показывает что файл был передан (синхронизирован).
f - показывает что это файл.
d - директория
s - показывает изменение размера.
t - показывает изменение штампа времени.
o -  изменение владельца
g - изменение группы.

13. Включение/исключение файлов/директорий с использованием шаблонов

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

Рассмотри пример в котором скопируем все файлы начинающиеся с буквы "n"

?

>rsync -avz --include 'n*' --exclude '*' root@192.168.0.5:/home/sysadmin/temp/ /home/greendail/temp

root@192.168.0.5's password:

receiving incremental file list

./

names.txt

newfile.txt

 

sent 67 bytes  received 256 bytes  30.76 bytes/sec

total size is 59  speedup is 0.18

--include - это то, что мы включаем в синхронизацию (в нашем случае все что начинается на n)
--exclude - это то, что мы исключаем (в нашем случае все остальное)

14. Не передавать файлы большого размера

Мы можем задать rsync максимальный размер передаваемого файла. Для этого используется опция --max-size.
 

?

1

2

3

4

5

6

7

8

9

10

11

rsync -avz --max-size='10K' root@192.168.0.5:/home/sysadmin/temp/ /home/greendail/temp

root@192.168.0.5's password:

receiving incremental file list

./

.directory

install-gecko.sh

names.txt

newfile.txt

 

sent 90 bytes  received 1297 bytes  132.10 bytes/sec

total size is 323800  speedup is 233.45

В данном примере мы сказали rsync копировать файлы меньше или равные 10К (max-size=100K). Для больших единиц используются обозначения M - мегабайты, G - гигабайты.

15. Передать файлы целиком

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

Таким образом, если Вам не жалко пропускной способности Ваших каналов связи, то можно копировать файлы целиком. Для этого используется опция -W. Данная опция ускоряет работа rsync, т.к. не проверяется контрольная сумма на источнике и приемнике.  

?

rsync -avzW  root@192.168.0.5:/home/sysadmin/temp/ /home/greendail/temp

root@192.168.0.5's password:

receiving incremental file list

17012011056.jpg

Scan009.PDF

dig

 

sent 68 bytes  received 322073 bytes  33909.58 bytes/sec

total size is 323800  speedup is 1.01

На этом пожалуй остановимся.

Напоследок несколько полезных ссылок:
Использование rsync в скриптах
Ссылка на cwRsync
 

 
MyTetra Share v.0.65
Яндекс индекс цитирования