Rsync

Синхронизируем директории с помощью Rsync

Сегодня я познакомлю вас с базовым применением rsync:

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

rsync имеет огромное количество возможностей и команд, и в одной статье невозможно уместить все. Поэтому, как я и говорил, данный пост познакомит вас только с базовыми возможностями.

Что такое rsync?

rsync (сокращение от remote synchronization) это бесплатная утилита для передачи данных между Unix systems.

Если говорить просто, то это команда Unix, которую вы можете запустить локально для синхронизации двух директорий. Реальная мощь rsync проявляется, когда необходимо синхронизировать директории между удаленными системами. rsync использует протокол

ssh для передачи данных между системами, но более ранние версии использовали rsh.

rsync либо предуставлен на большинстве современных Unix-подобных дистритивах, либо может быть легко установлен из репозитариев.
Что делает rsync?

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

Для того чтобы показать вам как работает rsync я сделаю 2 директории с файлами в них. /tmp/dir1 в моем примере это директория-источник, тогда как /tmp/dir2 будет директорией назначения - в результате опыта она будет соответствовать директории /tmp/dir1.

Создадим директории и файлы:

ubuntu$ mkdir /tmp/dir1 /tmp/dir2
ubuntu$ cd /tmp
ubuntu$ echo "original file 1" > dir1/file1
ubuntu$ echo "original file 2" > dir1/file2
ubuntu$ echo "original file 3" > dir1/file3
ubuntu$ cp dir1/file1 dir2

В данный момент наши директории выглядят так:

ubuntu$ find ./dir*
./dir1
./dir1/file2
./dir1/file3
./dir1/file1
./dir2
./dir2/file1

Теперь запустим в первый раз rsync.

Последние 2 параметра в команде обозначают директорию источник и назначение.

В примере ниже мы использует следующие опции:

-avz - a для режима архивации (сохраняет все атрибуты файлов и директорий - владельца , права и прочее), v для отображения списка файлов обработанных rsync и z для компрессии данных для увеличения скорость.

–stats - данная опция после завершения синхронизации выводит суммарную статистику.

ubuntu$ rsync -avz --stats /tmp/dir1/ /tmp/dir2
building file list ... done
file2
file3
Number of files: 4
Number of files transferred: 2
Total file size: 48 bytes
Total transferred file size: 32 bytes
Literal data: 32 bytes
Matched data: 0 bytes
File list size: 87
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 221
Total bytes received: 64
sent 221 bytes received 64 bytes 570.00 bytes/sec
total size is 48 speedup is 0.17

Как вы можете заметить, хотя в директории /tmp/dir1 было 3 файла, только 2 из них было передано в директорию /tmp/dir2.

На сегодня это все, в следующих постах я покажу вам более продвинутое использование rsync. Для особо любознательных предлогаю почитать man rsync или rsync –help.

Включаем отслеживание прогресса передачи файлов в rsync

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

Как вы может быть помните rsync это утилита удаленной синхронизации. Это означает что основная задача данной утилиты это синхронизация файлов и директорий между удаленными Unix системами.

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

Используйте следующие команды для создания заново директорий и файлов, которые мы использовали в предыдущей статье:

ubuntu$ rm -rf /tmp/dir1 /tmp/dir2
ubuntu$ mkdir /tmp/dir1 /tmp/dir2
ubuntu$ cd /tmp
ubuntu$ echo "original file 1" > dir1/file1
ubuntu$ echo "original file 2" > dir1/file2
ubuntu$ echo "original file 3" > dir1/file3
ubuntu$ cp dir1/file1 dir2

Отслеживание прогресса rsync

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

Для того чтобы заставить rsync выдавать отчет о прогрессе просто используйте опцию –progress:

ubuntu$ rsync -avz --stats --progress /tmp/dir1/ /tmp/dir2
building file list ...
4 files to consider
file2
16 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/4)
file3
16 100% 15.62kB/s 0:00:00 (xfer#2, to-check=0/4)

 

Number of files: 4
Number of files transferred: 2
Total file size: 48 bytes
Total transferred file size: 32 bytes
Literal data: 32 bytes
Matched data: 0 bytes
File list size: 59
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 193
Total bytes received: 64

 

sent 193 bytes received 64 bytes 514.00 bytes/sec
total size is 48 speedup is 0.19

Почему вы должны отслеживать прогресс rsyncs

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

 

file2
16 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/4)
file3
16 100% 15.62kB/s 0:00:00 (xfer#2, to-check=0/4)

Постовой

Источник

free-templates.ru