|
|
автор Brian Hone <bhone(at)eink.com> Об авторе: Brian Hone работает системным администратором и разработчиком в корпорации E Ink. В свободное время плавает в холодной воде и занимается альпинизмом. Перевод на Русский: Pukhlyakov Kirill <kirill(at)linuxfocus.org> Содержание: |
Rsync: лучшая система резервного копированияРезюме:
Резервное копирование одно из сложных и наиболее пренебрегаемых занятий системного
администрирования. Но на самом деле - это очень важная его часть. Это последняя надежда
в случае проблем с оборудованием, безопасностью и конечно же защита от конечных пользователей.
Существует много систем резервного копирования - они стоят тысячи долларов, используют
дорогое оборудование и построены на ненадежном программном обеспечении. В то же время
мы можем выбрать лучшее решение - Rsync и недорогой дисковый массив.
|
Хочу перечислить вам некоторые причины того, что резервное копирование это настоящий кошмар для системного администратора: дорогое оборудование, которое часто ломается, дорогое программное обеспечение и конечно масса времени, проведенная за восстановлением разных версий файлов. Также замечу, что лишь малая часть информации компании сохраняется именно до того момента когда она понадобится. Если Вы тот человек, который занимается сохранением/восстановлением данных, наверняка Вам знаком следующий диалог:
Пользователь: "Я потерял файл. Вы должны его вернуть мне.."
Системный администратор: "Хорошо, назовите имя файла"
Пользователь: "Я не знаю, мне кажется, что в названии была буква 'e'."
Системный администратор: "Хорошо, в каком каталоге он находился?"
Пользователь: "Я не знаю, он мог быть в одном из этих трех..."
Системный администратор: "Вы можете назвать хотя бы дату когда вы последний раз с
ним работали?"
Пользователь: "Нуу....Мне кажется это было в какой-то четверг в феврале или апреле.
Не понимаю в чем проблема? Я думал у вас есть система резервного копирования, которая
помогает в подобных ситуациях"
Rsync - прекрасная реализация небольшого алгоритма. Одно из главных достоинств этого приложения - способность эффективного зеркалирования файловой системы. С помощью rsync легко построить систему сохранения файловой системы, использую гибкий набор сетевых протоколов: nfs, smb или ssh. Другое достоинство - способность архивировать старые копии файлов, которые изменились или были удалены. Это далеко не все возможности использования этого приложения, рекомендую Вам почитать подробнее на rsync.samba.org.
Если быть кратким в описании системы достаточно сказать: система состоит из недорогой Linux машины со множеством дешевых дисков и небольшого shell скрипта - rsync. [Fig 1] Процесс копирования следующий: сначала rsync создает каталог 'YY-DD-MM' для сохранения измененных файлов, далее rsync проверяет серверы указанные нами для резервирования на наличие изменений - если файл был изменен старая версия копируется в только что созданный каталог и затем переписывается новой версией файла. [Fig 2]
Можно говорить о том, что ежедневные изменения в системе составляют небольшую часть относительно файловой системы - в среднем порядка .5%...1%. Таким образом, имея для резервного копирования диски объемом в два раза превышающие наши файловые серверы, можно хранить бэкапы примерно за 50 - 100 дней. Когда место на дисках закончится, просто поменяйте их. На практике получается так, что на одном наборе дисков можно хранить информацию за 6 месяцев. На самом деле можно перед заменой дисков скопировать их содержимое еще куда-нибудь.
Вернемся к воображаемому диалогу. Вместо громоздкой системы, хранящей данные на лентах, у нас есть бэкап за последние 6 месяцев на нашей Linux машине. С помощью таких утилит как locate/find/grep легко найти все копии файла определенного пользователя, с буквой 'e' в имени и датируемые четвергом февраля или апреля и скопировать их в домашний каталог этого пользователя. Проблема поиска корректной версии файла - моя любимая проблема: я называю ее чьей-то другой проблемой.
Далее, представим самый популярный сценарий - complete failure. Например такая проблема случилась с большим nfs/samba сервером. Если Вы делали резервное копирование настроек samba сервера, то поднять Ваш резервный компьютер в качестве замены с правами только на чтение - дело нескольких минут. Представьте подобную ситуацию в случае использования лент.
Ленты | Rsync | |
---|---|---|
Цена | Очень высокая | Низкая |
Полное резервное копирование | Быстро | Быстро |
Накапливающееся резезрвное копирование | Быстро | Быстро |
Полное восстановление | Очень медленно, возможно несколько лент | Быстро - все данные на одном диске |
Восстановление файлов | Медленно, возможно несколько лент, трудно найти нужную версию. | Очень быстро - все данные на одном диске плюс уутилиты UN*X: find, grep и locate |
Полный отказ системы | Единственный выход - полное восстановление | Есть возможность быстрого превращения резервного сервера в файлсервер. |
Подобную систему очень легко построить. Все используемые инструменты - open-source, они поставляются в стандартных дистрибутивах. Приведем один пример создания подобной системы, но не забывайте, что он не единственный.
Скрипт доступен на сайте rsync. Используйте следующую команду:
rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file --backup --backup-dir=`date +%Y-%m-%d` -av
Рассмотрим основные опции:
Этот скрипт можно запускать каждую ночь cron'ом. Чтобы он запускался каждый день в 11pm используйте следующую команду "crontab -e" и потом наберите:
0 23 * * * /path/to/your/script
Приведу здесь мой скрипт, чтобы собрать все сказанное выше вместе. Еще раз напомню, что существует много способов реализации этой системы, это просто один из вариантов.
#!/bin/sh ######################################################### # Script to do incremental rsync backups # Adapted from script found on the rsync.samba.org # Brian Hone 3/24/2002 # This script is freely distributed under the GPL ######################################################### ################################## # Configure These Options ################################## ################################### # mail address for status updates # - This is used to email you a status report ################################### MAILADDR=your_mail_address_here ################################### # HOSTNAME # - This is also used for reporting ################################### HOSTNAME=your_hostname_here ################################### # directory to backup # - This is the path to the directory you want to archive ################################### BACKUPDIR=directory_you_want_to_backup ################################### # excludes file - contains one wildcard pattern per line of files to exclude # - This is a rsync exclude file. See the rsync man page and/or the # example_exclude_file ################################### EXCLUDES=example_exclude_file ################################### # root directory to for backup stuff ################################### ARCHIVEROOT=directory_to_backup_to ######################################### # From here on out, you probably don't # # want to change anything unless you # # know what you're doing. # ######################################### # directory which holds our current datastore CURRENT=main # directory which we save incremental changes to INCREMENTDIR=`date +%Y-%m-%d` # options to pass to rsync OPTIONS="--force --ignore-errors --delete --delete-excluded \ --exclude-from=$EXCLUDES --backup --backup-dir=$ARCHIVEROOT/$INCREMENTDIR -av" export PATH=$PATH:/bin:/usr/bin:/usr/local/bin # make sure our backup tree exists install -d $ARCHIVEROOT/$CURRENT # our actual rsyncing function do_rsync() { rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$CURRENT } # our post rsync accounting function do_accounting() { echo "Backup Accounting for Day $INCREMENTDIR on $HOSTNAME:">/tmp/rsync_script_tmpfile echo >> /tmp/rsync_script_tmpfile echo "################################################">>/tmp/rsync_script_tmpfile du -s $ARCHIVEROOT/* >> /tmp/rsync_script_tmpfile echo "Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile" Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile echo "rm /tmp/rsync_script_tmpfile" rm /tmp/rsync_script_tmpfile } # some error handling and/or run our backup and accounting if [ -f $EXCLUDES ]; then if [ -d $BACKUPDIR ]; then # now the actual transfer do_rsync && do_accounting else echo "cant find $BACKUPDIR"; exit fi else echo "cant find $EXCLUDES"; exit fi
|
Webpages maintained by the LinuxFocus Editor team
© Brian Hone, FDL LinuxFocus.org |
Translation information:
|
2004-03-05, generated by lfparser version 2.43