Rsync - современная стратегия архивирования информации
В настоящее время использование жестких дисков для хранения архивов с информацией по популярности сильно опережает использование других носителей. На сегодняшний день максимальный объем для IDE-винчестеров равен примерно 200 Гигабайтам. Однако другие виды накопителей сдаваться не собираются. Например, некоторые стримеры могут хранить до 1.4 терабайт, поэтому на них также следует обратить внимание.
Что касается меня, то я предпочитаю использовать ленточные накопители только в крайних случаях, когда их применение приносит выгоду по сравнению с применением других устройств. В большинстве случаев оптимальным решением является применение винчестеров, так как в последнее время они значительно увеличили объем и подешевели. Они имеют также еще ряд преимуществ, например, высокое быстродействие, универсальность и т.д.
Пользователи, нуждающиеся в переносном хранилище данных имеют несколько альтернатив, в числе которых – съемные крепления (mobile rack) и USB-винчестеры. Единственным минусом является то, что винчестеры не обладают большой живучестью, свойственной кассетам. Никто точно не может сказать, что будет завтра, поэтому может случиться, что в один прекрасный день вам понадобятся данные тридцатилетней давности. Однако сегодня мы не будем рассматривать подобные проблемы, а коснемся вопроса кратковременного хранения информации и, в частности, инструменте, позволяющем архивировать информацию на один или несколько жестких дисков.
что такое rsync
Rsync разработан для замены rcp – древней программы для удаленного копирования под Unix. Благодаря широким возможностям синхронизации и передачи файлов, rsync часто применяется для создания зеркал web-сайтов. Благодаря использованию хитроумного алгоритма, rsync передает только изменения в файлах, причем для выявления изменений ему не надо сравнивать два файла. Заинтересовавшиеся могут прочесть описание принципов его работы в сопроводительной документации. Кроме того, rsync производит сжатие на лету, позволяя тем самым передавать файлы с максимальной эффективностью.
Кроме вышеописанных вкусностей, rsync обладает также и несколькими полезными возможностями обеспечения безопасности. Он поддерживает ssh – рекомендованный протокол для безопасной передачи данных; перед обработкой информации производит ее запись во временный файл, чтобы ничего не случилось с оригиналом, наконец, он поддерживает специальный режим безопасной отладки команд.
Rsync прост в использовании, но не является программой а-ля click-and-play. Это —мощный инструмент, который может быть очень полезным, но не стоит забывать об осторожности, так как его с помощью легко что-нибудь испортить.
команды rsync
Следующая команда производит копирование в пределах одной машины. Копируемый файл или директория указываются первым параметром, а директория назначения – вторым:
$ rsync -a sourcedir destinationdir
Копирование директории с одной машины на другую (rsync должен присутствовать на обеих машинах):
$ rsync -a sourcedir remotehost:destinationdir
Копирование директории с удаленной машины на локальную:
$ rsync -a remotehost:/sourcedir destinationdir
Ключи:
r — рекурсивное копирование директорий. Если этот ключ не установлен, то директории вообще не будут копироваться;
l — пересоздание symlinks;
p — защита разрешений;
t — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации;
g — установить группу конечного файла такой же, как и у исходного;
o — установить владельца конечного файла таким же, как и у исходного;
D — пересоздание character and block devices на удаленной системе (можно делать только с правами root).
Для передачи через ssh-туннель:
$ rsync -a -e ssh sourcedir username@remotemachine.com:/destinationdir/
-e ssh означает «заменить протокол rsh на ssl». Если вы хотите некоторый другой безопасный туннель, то в этом месте его необходимо объявить.
Также обратите внимание на последний слеш, так как он имеет значение для rsync. Если на конце исходной директории стоит «/», то это означает копирование содержимого директории; отсутствие слеша означает копирование директории и ее содержимого.
отладочный режим
$ rsync -avn -e ssh sourcedir username@remotemachine.com:/destinationdir/
Ключ –n устанавливается для отладки. При этом rsynс запущен, но ничего не копирует и не меняет. Используйте с –v – для просмотра сообщений. Вывод сообщений можно регулировать от менее (-v) до более (-vv) и максимально (-vvv) детализованного. Перед тем, как делать что-то с работающей системой не поленитесь прогнать rsync в режиме отладки, чтобы убедиться в том, что все пройдет по запланированному сценарию.
Некоторые другие полезные команды приведены ниже:
--delete (используйте осторожно!) Всегда проверьте работу в режиме отладки при использовании этой команды. Не говорите потом, что вас не предупреждали! Delete удаляет все файлы в пункте назначения, если их не существует в источнике.
--delete-excluded – удаляет все файлы, перечисленные в excluded. Как вы видите, эта команда позволяет содержать архивы в чистоте и порядке.
-z (или --compress) – использовать сжатие rsync;
-S (или --sparce) – рациональная обработка разбросанных файлов;
-H (или --hard links) – защита жестких ссылок, –a не защищает жесткие ссылки
-b (или --backup) – добавляет «~» к существующим файлам в пункте назначения. С помощью --suffix можно установить вместо «~» все что угодно;
--backup-dir=DIR – сочетается с --backup для указания rsync места хранения файлов.
исключение файлов
Rsync может как исключать, так и включать файлы:
--exclude pattern -- исключить файлы, соответствующие шаблону;
--exclude-from file – исключить файлы, перечисленные в file.
Например, --exclude *.tmp исключит все файлы с расширением .tmp; --exclude *.bak – файлы с расширением .bak. Каждый –exclude может принимать только один аргумент. Для того, чтобы использовать несколько аргументов нужно просто повторить несколько раз --exclude в командной строке, а еще лучше – положить их в файл:
--exclude-from exclude.file.
Как и любая уважающая себя Linux-программа, rsync теперь поддерживает регулярные выражения для точного выбора файлов. Для этого на него нужно установить патч, расположенный по адресу:
http://www.mail-archive.com/rsync@lists.samba.org/msg05483.html
запуск rsync в режиме сервера
Rsync может быть запущен в качестве демона. Для этого в командной строке необходимо набрать --daemon. При этом rsync будет прослушивать порт 873. Установка выделенного сервера позволяет любому количеству машин и пользователей подключаться к нему для выполнения операций зеркалирования, архивации, восстановления файлов и т.д. В /etc/rsyncd.conf содержатся переменные окружения и запуска, включая списки доступа пользователей и хостов.
сценарии резервного копирования
Наиболее удобный и безопасный способ работы с rsync – его запуск с помощью сценария. Разберитесь и отладьте все необходимые вам команды, а затем запишите их в сценарии. После чего со спокойной совестью помещайте их в расписание планировщика cron. Теперь вам не нужно заботится об их запуске в нужное время – все выполнится автоматически. Для того, чтобы воспользоваться уже созданными сценариями вы можете посетить http://rsync.samba.org/examples.html, где в великом количестве найдете примеры различных сценариев для rsync.
Как обычно, чем лучше вы будете разбираться в сценариях и регулярных выражениях – тем лучше вы сможете решать различные задачи.
Что касается меня, то я предпочитаю использовать ленточные накопители только в крайних случаях, когда их применение приносит выгоду по сравнению с применением других устройств. В большинстве случаев оптимальным решением является применение винчестеров, так как в последнее время они значительно увеличили объем и подешевели. Они имеют также еще ряд преимуществ, например, высокое быстродействие, универсальность и т.д.
Пользователи, нуждающиеся в переносном хранилище данных имеют несколько альтернатив, в числе которых – съемные крепления (mobile rack) и USB-винчестеры. Единственным минусом является то, что винчестеры не обладают большой живучестью, свойственной кассетам. Никто точно не может сказать, что будет завтра, поэтому может случиться, что в один прекрасный день вам понадобятся данные тридцатилетней давности. Однако сегодня мы не будем рассматривать подобные проблемы, а коснемся вопроса кратковременного хранения информации и, в частности, инструменте, позволяющем архивировать информацию на один или несколько жестких дисков.
что такое rsync
Rsync разработан для замены rcp – древней программы для удаленного копирования под Unix. Благодаря широким возможностям синхронизации и передачи файлов, rsync часто применяется для создания зеркал web-сайтов. Благодаря использованию хитроумного алгоритма, rsync передает только изменения в файлах, причем для выявления изменений ему не надо сравнивать два файла. Заинтересовавшиеся могут прочесть описание принципов его работы в сопроводительной документации. Кроме того, rsync производит сжатие на лету, позволяя тем самым передавать файлы с максимальной эффективностью.
Кроме вышеописанных вкусностей, rsync обладает также и несколькими полезными возможностями обеспечения безопасности. Он поддерживает ssh – рекомендованный протокол для безопасной передачи данных; перед обработкой информации производит ее запись во временный файл, чтобы ничего не случилось с оригиналом, наконец, он поддерживает специальный режим безопасной отладки команд.
Rsync прост в использовании, но не является программой а-ля click-and-play. Это —мощный инструмент, который может быть очень полезным, но не стоит забывать об осторожности, так как его с помощью легко что-нибудь испортить.
команды rsync
Следующая команда производит копирование в пределах одной машины. Копируемый файл или директория указываются первым параметром, а директория назначения – вторым:
$ rsync -a sourcedir destinationdir
Копирование директории с одной машины на другую (rsync должен присутствовать на обеих машинах):
$ rsync -a sourcedir remotehost:destinationdir
Копирование директории с удаленной машины на локальную:
$ rsync -a remotehost:/sourcedir destinationdir
Ключи:
r — рекурсивное копирование директорий. Если этот ключ не установлен, то директории вообще не будут копироваться;
l — пересоздание symlinks;
p — защита разрешений;
t — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации;
g — установить группу конечного файла такой же, как и у исходного;
o — установить владельца конечного файла таким же, как и у исходного;
D — пересоздание character and block devices на удаленной системе (можно делать только с правами root).
Для передачи через ssh-туннель:
$ rsync -a -e ssh sourcedir username@remotemachine.com:/destinationdir/
-e ssh означает «заменить протокол rsh на ssl». Если вы хотите некоторый другой безопасный туннель, то в этом месте его необходимо объявить.
Также обратите внимание на последний слеш, так как он имеет значение для rsync. Если на конце исходной директории стоит «/», то это означает копирование содержимого директории; отсутствие слеша означает копирование директории и ее содержимого.
отладочный режим
$ rsync -avn -e ssh sourcedir username@remotemachine.com:/destinationdir/
Ключ –n устанавливается для отладки. При этом rsynс запущен, но ничего не копирует и не меняет. Используйте с –v – для просмотра сообщений. Вывод сообщений можно регулировать от менее (-v) до более (-vv) и максимально (-vvv) детализованного. Перед тем, как делать что-то с работающей системой не поленитесь прогнать rsync в режиме отладки, чтобы убедиться в том, что все пройдет по запланированному сценарию.
Некоторые другие полезные команды приведены ниже:
--delete (используйте осторожно!) Всегда проверьте работу в режиме отладки при использовании этой команды. Не говорите потом, что вас не предупреждали! Delete удаляет все файлы в пункте назначения, если их не существует в источнике.
--delete-excluded – удаляет все файлы, перечисленные в excluded. Как вы видите, эта команда позволяет содержать архивы в чистоте и порядке.
-z (или --compress) – использовать сжатие rsync;
-S (или --sparce) – рациональная обработка разбросанных файлов;
-H (или --hard links) – защита жестких ссылок, –a не защищает жесткие ссылки
-b (или --backup) – добавляет «~» к существующим файлам в пункте назначения. С помощью --suffix можно установить вместо «~» все что угодно;
--backup-dir=DIR – сочетается с --backup для указания rsync места хранения файлов.
исключение файлов
Rsync может как исключать, так и включать файлы:
--exclude pattern -- исключить файлы, соответствующие шаблону;
--exclude-from file – исключить файлы, перечисленные в file.
Например, --exclude *.tmp исключит все файлы с расширением .tmp; --exclude *.bak – файлы с расширением .bak. Каждый –exclude может принимать только один аргумент. Для того, чтобы использовать несколько аргументов нужно просто повторить несколько раз --exclude в командной строке, а еще лучше – положить их в файл:
--exclude-from exclude.file.
Как и любая уважающая себя Linux-программа, rsync теперь поддерживает регулярные выражения для точного выбора файлов. Для этого на него нужно установить патч, расположенный по адресу:
http://www.mail-archive.com/rsync@lists.samba.org/msg05483.html
запуск rsync в режиме сервера
Rsync может быть запущен в качестве демона. Для этого в командной строке необходимо набрать --daemon. При этом rsync будет прослушивать порт 873. Установка выделенного сервера позволяет любому количеству машин и пользователей подключаться к нему для выполнения операций зеркалирования, архивации, восстановления файлов и т.д. В /etc/rsyncd.conf содержатся переменные окружения и запуска, включая списки доступа пользователей и хостов.
сценарии резервного копирования
Наиболее удобный и безопасный способ работы с rsync – его запуск с помощью сценария. Разберитесь и отладьте все необходимые вам команды, а затем запишите их в сценарии. После чего со спокойной совестью помещайте их в расписание планировщика cron. Теперь вам не нужно заботится об их запуске в нужное время – все выполнится автоматически. Для того, чтобы воспользоваться уже созданными сценариями вы можете посетить http://rsync.samba.org/examples.html, где в великом количестве найдете примеры различных сценариев для rsync.
Как обычно, чем лучше вы будете разбираться в сценариях и регулярных выражениях – тем лучше вы сможете решать различные задачи.
Карла Шредер, перевод Дмитрия Герусса.
Сетевые решения. Статья была опубликована в номере 02 за 2003 год в рубрике software