GrabDuck

Linux: примеры использования rsync | RTFM: Linux, DevOps и системное администрирование

:

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

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

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

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

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

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

Установка rsync

RedHat/CentOS:

# yum -y install rsync

Debian/Ubuntu:

# aptitude -y install rsync

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

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

# rsync -avh /root/firstdir /root/seconddir
sending incremental file list
firstdir/
firstdir/file1

sent 96 bytes  received 35 bytes  52.40 bytes/sec
total size is 0  speedup is 0.00
# ls -l /root/seconddir
total 4
drwxr-xr-x 2 root root 4096 Sep 19 14:41 fristdir

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

Копирование локальных файлов на удалённый хост:

# rsync -avzh /root/firstdir root@10.249.140.239:/root/
root@10.249.140.239's password:
sending incremental file list
firstdir/
firstdir/file1

sent 96 bytes received 35 bytes 29.11 bytes/sec
total size is 0 speedup is 0.00

На обоих хостах должен быть установлен rsync.

Копирование с удалённого хоста на локальный.

На удалённом хосте создадим файл:

# touch firstdir/file2

Копируем:

# rsync -avzh root@10.249.140.239:/root/firstdir /root/
root@10.249.140.239's password:
receiving incremental file list
firstdir/
firstdir/file2

sent 34 bytes received 112 bytes 41.71 bytes/sec
total size is 0 speedup is 0.00

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

Что бы указать rsync, какой протокол использовать – используйте опцию -e:

# rsync -avzhv -e ssh /root/firstdir root@10.249.140.239:/root/
opening connection using: ssh -l root 10.249.140.239 rsync --server -vvlogDtprze.iLs . /root/
root@10.249.140.239's password:
sending incremental file list
delta-transmission enabled
firstdir/
firstdir/file1
firstdir/file2
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 147 bytes  received 54 bytes  44.67 bytes/sec
total size is 0  speedup is 0.00

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

С помощью опции --progress можно вывести больше инфомармации о том, как происходит передача (скорость, количество переданных и оставшихся байт, время):

# rsync -avzh -e ssh --progress /root/firstdir root@10.249.140.239:/root/
root@10.249.140.239's password:
sending incremental file list
firstdir/
firstdir/file1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)
firstdir/file2
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=0/3)

sent 147 bytes  received 54 bytes  44.67 bytes/sec
total size is 0  speedup is 0.00

Опции –include и –exclude

С помощь -–include и -–exclude можно указать, какие файлы и/или директории включить в передачу, а какие – исключить.

Например – передадим только file1:

# rsync -avzhe ssh --include 'file1' --exclude 'file2' /root/firstdir root@10.249.140.239:/root/
root@10.249.140.239's password:
sending incremental file list
firstdir/
firstdir/file1

sent 100 bytes  received 35 bytes  38.57 bytes/sec
total size is 0  speedup is 0.00

Опция –delete

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

Например, в каталоге назначения создадим файл:

# touch /root/firstdir/file3

Тогда как в каталоге-источнике у нас будут:

# ls -l /root/firstdir/
total 0
-rw-r--r--. 1 root root 0 Sep 22 12:47 file1
-rw-r--r--. 1 root root 0 Sep 22 12:48 file2

Теперь выполняем синхронизацию с опцией --delete:

# rsync -avzhe ssh --delete /root/firstdir root@10.249.140.239:/root/
root@10.249.140.239's password:
sending incremental file list
firstdir/
deleting firstdir/file3
firstdir/file2

sent 115 bytes  received 35 bytes  42.86 bytes/sec
total size is 0  speedup is 0.00

deleting firstdir/file3 – файл был удалён:

# ls -l /root/firstdir/
total 0
-rw-r--r-- 1 root root 0 Sep 22 12:47 file1
-rw-r--r-- 1 root root 0 Sep 22 12:48 file2

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

rsync может принимать опцию --max-size, с помощью которой можно указать максимальный размер файла, который будет передан.

Например, создадим файл размером 100МБ:

# dd of=bigfilefile bs=1 count=0 seek=100M
0+0 records in
0+0 records out
0 bytes (0 B) copied, 9.9066e-05 s, 0.0 kB/s
# ls -hl
total 0
-rw-r--r--. 1 root root 100M Sep 22 13:18 bigfilefile
-rw-r--r--. 1 root root    0 Sep 22 12:47 file1
-rw-r--r--. 1 root root    0 Sep 22 12:48 file2

И выполним передачу, ограничив размер файла 50МБ:

# rsync -avzhe ssh --max-size='50M' /root/firstdir root@10.249.140.239:/root/
root@10.249.140.239's password:
sending incremental file list
firstdir/
firstdir/file1
firstdir/file2

sent 173 bytes  received 54 bytes  64.86 bytes/sec
total size is 104.86M  speedup is 461927.75

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

С помощью опции --remove-source-files можно удалить данные после выполнения копирования или синхронизации.

К примеру – у нас есть директория:

# ls -l /root/firstdir/
total 0
-rw-r--r--. 1 root root 0 Sep 22 12:47 file1
-rw-r--r--. 1 root root 0 Sep 22 12:48 file2

Выполняем копирование:

# rsync -avzhe ssh --remove-source-files /root/firstdir root@10.249.140.239:/root/
root@10.249.140.239's password:
sending incremental file list
firstdir/
firstdir/file1
firstdir/file2

sent 147 bytes  received 54 bytes  44.67 bytes/sec
total size is 0  speedup is 0.00

И проверяем исходный каталог:

# ls -l /root/firstdir/
total 0

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

С помощью опции --dry-run можно выполнить только проверку того, как будет выполнена задача, но без реальной передачи данных.

Это может полезным, например, для проверки различий между локальной и удалённой копией данных.

К примеру:

# rsync -avzhe ssh --dry-run /root/firstdir root@10.249.140.239:/root/
root@10.249.140.239's password:
sending incremental file list
firstdir/
firstdir/file1
firstdir/file2

sent 81 bytes  received 22 bytes  29.43 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

И проверяем удалённый каталог:

# ls -l /root/firstdir/
total 0

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

Что бы ограничить скороксть передачи – можно использовать опцию --bwlimit, которая задаёт лимит скорости чтения с диска (и, соотвественно, передачи) в килобайтах/секунду.

Например, создадим файл:

# dd of=bigfilefile bs=1 count=0 seek=10M
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.8089e-05 s, 0.0 kB/s

И запустим передачу:

# rsync --bwlimit=100 --progress bigfilefile root@10.249.140.239:/root/
root@10.249.140.239's password:
bigfilefile
    10485760 100%   99.33kB/s    0:01:42 (xfer#1, to-check=0/1)

sent 10487112 bytes  received 31 bytes  98470.83 bytes/sec
total size is 10485760  speedup is 1.00

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

По-умолчанию, rsync копирует только изменившиеся блоки данных.

Что бы выполнить полное копирование – используйте опцию -W:

# rsync --progress bigfilefile root@10.249.140.239:/root/
root@10.249.140.239's password:
bigfilefile
    10485760 100%  138.85MB/s    0:00:00 (xfer#1, to-check=0/1)

sent 13052 bytes  received 19501 bytes  7234.00 bytes/sec
total size is 10485760  speedup is 322.11
14:10:02 [root@zeus ~/firstdir] # rsync -W --progress bigfilefile root@10.249.140.239:/root/
root@10.249.140.239's password:
bigfilefile
    10485760 100%   28.48MB/s    0:00:00 (xfer#1, to-check=0/1)

sent 10487112 bytes  received 31 bytes  2330476.22 bytes/sec
total size is 10485760  speedup is 1.00

Обратите внимание на разницу в поле sent между вызовами с и без опции -W.

Ссылки по теме

https://www.digitalocean.com

http://vds-admin.ru