вторник, 5 сентября 2017 г.

Синхронизация rsync

Преимущества rsync

  • rsync умеет копировать и синхронизировать файлы с локальной машины на удалённую – и наоборот;
  • поддерживает копирование ссылок, файлов устройств, данные о владельцах, группах и права доступа;
  • rsync работает быстрее, чем scp, потому что использует специальный протокол удалённого обновления, который позволяет передавать данные только об изменившихся файлах: первый раз копируется полное содержимое файла или директории, но при следующем копировании – rsync копирует только изменившиеся блоки данных;
  • rsync использует меньше пропускной способности канала передачи данных, т.к. использует компрессию и декомпрессию данных;

Базовый синтаксис:

1# rsync опции источник место_назначения

Наиболее полезные опции rsync:


-v – подробный режим;
-r – копировать данные рекурсивно (но без сохранения инфомрации о времени изменения файлов и правах доступа);
-a – режим архивирования, позволяет копировать данные рекурсивно с сохранением симлинков, правах доступа на файлы/каталоги и другую информацию);
-z – сжатие данные;
-h – вывод данных в human-readable формате.

Установка rsync

RedHat/CentOS:
1# yum -y install rsync
Debian/Ubuntu:
1# aptitude -y install rsync

Копирование и синхронизация данных локально

С помощью следующей команды будут скопированы или синхронизированы все файлы из одной директории в другую на одном хосте.
1# rsync -avh /root/firstdir /root/seconddir
2sending incremental file list
3firstdir/
4firstdir/file1
5
6sent 96 bytes  received 35 bytes  52.40 bytes/sec
7total size is 0  speedup is 0.00
1# ls -l /root/seconddir
2total 4
3drwxr-xr-x 2 root root 4096 Sep 19 14:41 fristdir

Копирование и синхронизация данных на или с удалённого сервера

Копирование локальных файлов на удалённый хост:
1# rsync -avzh /root/firstdir root@10.249.140.239:/root/
2root@10.249.140.239's password:
3sending incremental file list
4firstdir/
5firstdir/file1
6
7sent 96 bytes received 35 bytes 29.11 bytes/sec
8total size is 0 speedup is 0.00
На обоих хостах должен быть установлен rsync.
Копирование с удалённого хоста на локальный.
На удалённом хосте создадим файл:
1# touch firstdir/file2
Копируем:
1# rsync -avzh root@10.249.140.239:/root/firstdir /root/
2root@10.249.140.239's password:
3receiving incremental file list
4firstdir/
5firstdir/file2
6
7sent 34 bytes received 112 bytes 41.71 bytes/sec
8total size is 0 speedup is 0.00

Использование rsync по SSH

Что бы указать rsync, какой протокол использовать – используйте опцию -e:
01# rsync -avzhv -e ssh /root/firstdir root@10.249.140.239:/root/
02opening connection using: ssh -l root 10.249.140.239 rsync --server -vvlogDtprze.iLs . /root/
03root@10.249.140.239's password:
04sending incremental file list
05delta-transmission enabled
06firstdir/
07firstdir/file1
08firstdir/file2
09total: matches=0  hash_hits=0  false_alarms=0 data=0
10
11sent 147 bytes  received 54 bytes  44.67 bytes/sec
12total size is 0  speedup is 0.00

Отображение строки прогресса передачи данных

С помощью опции --progress можно вывести больше инфомармации о том, как происходит передача (скорость, количество переданных и оставшихся байт, время):
01# rsync -avzh -e ssh --progress /root/firstdir root@10.249.140.239:/root/
02root@10.249.140.239's password:
03sending incremental file list
04firstdir/
05firstdir/file1
06           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)
07firstdir/file2
08           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=0/3)
09
10sent 147 bytes  received 54 bytes  44.67 bytes/sec
11total size is 0  speedup is 0.00

Опции –include и –exclude

С помощь -–include и -–exclude можно указать, какие файлы и/или директории включить в передачу, а какие – исключить.
Например – передадим только file1:
1# rsync -avzhe ssh --include 'file1' --exclude 'file2' /root/firstdir root@10.249.140.239:/root/
2root@10.249.140.239's password:
3sending incremental file list
4firstdir/
5firstdir/file1
6
7sent 100 bytes  received 35 bytes  38.57 bytes/sec
8total size is 0  speedup is 0.00

Опция –delete

--delete используется в том случае, если в каталоге назначения есть файлы и/или диреткории, которых нет в источнике, и их надо удалить.
Например, в каталоге назначения создадим файл:
1# touch /root/firstdir/file3
Тогда как в каталоге-источнике у нас будут:
1# ls -l /root/firstdir/
2total 0
3-rw-r--r--. 1 root root 0 Sep 22 12:47 file1
4-rw-r--r--. 1 root root 0 Sep 22 12:48 file2
Теперь выполняем синхронизацию с опцией --delete:
1# rsync -avzhe ssh --delete /root/firstdir root@10.249.140.239:/root/
2root@10.249.140.239's password:
3sending incremental file list
4firstdir/
5deleting firstdir/file3
6firstdir/file2
7
8sent 115 bytes  received 35 bytes  42.86 bytes/sec
9total size is 0  speedup is 0.00
deleting firstdir/file3 – файл был удалён:
1# ls -l /root/firstdir/
2total 0
3-rw-r--r-- 1 root root 0 Sep 22 12:47 file1
4-rw-r--r-- 1 root root 0 Sep 22 12:48 file2

Максимальный размер файлов для передачи

rsync может принимать опцию --max-size, с помощью которой можно указать максимальный размер файла, который будет передан.
Например, создадим файл размером 100МБ:
1# dd of=bigfilefile bs=1 count=0 seek=100M
20+0 records in
30+0 records out
40 bytes (0 B) copied, 9.9066e-05 s, 0.0 kB/s
1# ls -hl
2total 0
3-rw-r--r--. 1 root root 100M Sep 22 13:18 bigfilefile
4-rw-r--r--. 1 root root    0 Sep 22 12:47 file1
5-rw-r--r--. 1 root root    0 Sep 22 12:48 file2
И выполним передачу, ограничив размер файла 50МБ:
1# rsync -avzhe ssh --max-size='50M' /root/firstdir root@10.249.140.239:/root/
2root@10.249.140.239's password:
3sending incremental file list
4firstdir/
5firstdir/file1
6firstdir/file2
7
8sent 173 bytes  received 54 bytes  64.86 bytes/sec
9total size is 104.86M  speedup is 461927.75

Удаление исходных данных после передачи

С помощью опции --remove-source-files можно удалить данные после выполнения копирования или синхронизации.
К примеру – у нас есть директория:
1# ls -l /root/firstdir/
2total 0
3-rw-r--r--. 1 root root 0 Sep 22 12:47 file1
4-rw-r--r--. 1 root root 0 Sep 22 12:48 file2
Выполняем копирование:
1# rsync -avzhe ssh --remove-source-files /root/firstdir root@10.249.140.239:/root/
2root@10.249.140.239's password:
3sending incremental file list
4firstdir/
5firstdir/file1
6firstdir/file2
7
8sent 147 bytes  received 54 bytes  44.67 bytes/sec
9total size is 0  speedup is 0.00
И проверяем исходный каталог:
1# ls -l /root/firstdir/
2total 0

Опция Dry Run – “холостой запуск”

С помощью опции --dry-run можно выполнить только проверку того, как будет выполнена задача, но без реальной передачи данных.
Это может полезным, например, для проверки различий между локальной и удалённой копией данных.
К примеру:
1# rsync -avzhe ssh --dry-run /root/firstdir root@10.249.140.239:/root/
2root@10.249.140.239's password:
3sending incremental file list
4firstdir/
5firstdir/file1
6firstdir/file2
7
8sent 81 bytes  received 22 bytes  29.43 bytes/sec
9total size is 0  speedup is 0.00 (DRY RUN)
И проверяем удалённый каталог:
1# ls -l /root/firstdir/
2total 0

Ограничение скорости I/O

Что бы ограничить скороксть передачи – можно использовать опцию --bwlimit, которая задаёт лимит скорости чтения с диска (и, соотвественно, передачи) в килобайтах/секунду.
Например, создадим файл:
1# dd of=bigfilefile bs=1 count=0 seek=10M
20+0 records in
30+0 records out
40 bytes (0 B) copied, 5.8089e-05 s, 0.0 kB/s
И запустим передачу:
1# rsync --bwlimit=100 --progress bigfilefile root@10.249.140.239:/root/
2root@10.249.140.239's password:
3bigfilefile
4    10485760 100%   99.33kB/s    0:01:42 (xfer#1, to-check=0/1)
5
6sent 10487112 bytes  received 31 bytes  98470.83 bytes/sec
7total size is 10485760  speedup is 1.00

Полное копирование данных

По-умолчанию, rsync копирует только изменившиеся блоки данных.
Что бы выполнить полное копирование – используйте опцию -W:
01# rsync --progress bigfilefile root@10.249.140.239:/root/
02root@10.249.140.239's password:
03bigfilefile
04    10485760 100%  138.85MB/s    0:00:00 (xfer#1, to-check=0/1)
05
06sent 13052 bytes  received 19501 bytes  7234.00 bytes/sec
07total size is 10485760  speedup is 322.11
0814:10:02 [root@zeus ~/firstdir] # rsync -W --progress bigfilefile root@10.249.140.239:/root/
09root@10.249.140.239's password:
10bigfilefile
11    10485760 100%   28.48MB/s    0:00:00 (xfer#1, to-check=0/1)
12
13sent 10487112 bytes  received 31 bytes  2330476.22 bytes/sec
14total size is 10485760  speedup is 1.00
Обратите внимание на разницу в поле sent между вызовами с и без опции -W.

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

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