Содержание
Преимущества 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 [email protected]:/root/ [email protected]'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 [email protected]:/root/firstdir /root/ [email protected]'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 [email protected]:/root/ opening connection using: ssh -l root 10.249.140.239 rsync --server -vvlogDtprze.iLs . /root/ [email protected]'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 [email protected]:/root/ [email protected]'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 [email protected]:/root/ [email protected]'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 [email protected]:/root/ [email protected]'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 [email protected]:/root/ [email protected]'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 [email protected]:/root/ [email protected]'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 [email protected]:/root/ [email protected]'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 [email protected]:/root/ [email protected]'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 [email protected]:/root/ [email protected]'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 [email protected]:/root/ [email protected]'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
.
Ссылки по теме