Синхронизируем директории с помощью Rsync
Понедельник, 10 ноября 2008 г.
Просмотров: 18181
Подписаться на комментарии по RSS
Сегодня я познакомлю вас с базовым применением 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$ <strong>mkdir /tmp/dir1 /tmp/dir2</strong> ubuntu$ <strong>cd /tmp</strong> ubuntu$ <strong>echo "original file 1" > dir1/file1</strong> ubuntu$ <strong>echo "original file 2" > dir1/file2</strong> ubuntu$ <strong>echo "original file 3" > dir1/file3</strong> ubuntu$ <strong>cp dir1/file1 dir2</strong>
В данный момент наши директории выглядят так:
ubuntu$ <strong>find ./dir*</strong> ./dir1 ./dir1/file2 ./dir1/file3 ./dir1/file1 ./dir2 ./dir2/file1
Теперь запустим в первый раз rsync.
Последние 2 параметра в команде обозначают директорию источник и назначение.
В примере ниже мы использует следующие опции:
-avz - a для режима архивации (сохраняет все атрибуты файлов и директорий - владельца , права и прочее), v для отображения списка файлов обработанных rsync и z для компрессии данных для увеличения скорость.
–stats - данная опция после завершения синхронизации выводит суммарную статистику.
ubuntu$ <strong>rsync -avz --stats /tmp/dir1/ /tmp/dir2</strong> 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
Постовой
Один из крупнейших интернет-магазинов в России по технике для активного отдыха. В продаже квадроцикл, гидроциклы, мотовездеходы, снегоходы.
У нас вы можете заказать лимузин напрокат. В Санкт-Петербурге лучших цен, чем у нас вы не найдете.
Комментариев: 1
Спасибо за статью.
Как раз решил научиться пользоваться rsync. Попробовал Ваши примеры, но я хотел бы указывать список нужных мне директорий и файлов для бэкапа в файле-списке
rsync --files-from=/path/to/list.txt /home/username/backup
где list.txt содержит
/path/to/file1
/path/to/file2
/path/to/dir1
как здесь в примере http://lists.samba.org/archive/rsync/2006-January/014426.html
Но почему-то вылетает ошибка
rsync error: syntax or usage error (code 1) at options.c(1652) [client=3.0.7]
Поиск ничего не дал, может Вы подскажете в чем здесь я ошибся?