[LinuxFocus-icon]
<--  | Домой  | Карта  | Индекс  | Поиск

Новости | Архивы | Ссылки | Про LF
эта страница доступна на следующих языках: English  Castellano  ChineseGB  Deutsch  Francais  Nederlands  Russian  Turkce  Polish  

Brian Hone
автор Brian Hone
<bhone(at)eink.com>

Об авторе:

Brian Hone работает системным администратором и разработчиком в корпорации E Ink. В свободное время плавает в холодной воде и занимается альпинизмом.



Перевод на Русский:
Pukhlyakov Kirill <kirill(at)linuxfocus.org>

Содержание:

 

Rsync: лучшая система резервного копирования

RSYNC Backup

Резюме:

Резервное копирование одно из сложных и наиболее пренебрегаемых занятий системного администрирования. Но на самом деле - это очень важная его часть. Это последняя надежда в случае проблем с оборудованием, безопасностью и конечно же защита от конечных пользователей. Существует много систем резервного копирования - они стоят тысячи долларов, используют дорогое оборудование и построены на ненадежном программном обеспечении. В то же время мы можем выбрать лучшее решение - Rsync и недорогой дисковый массив.

_________________ _________________ _________________

 

Проблема

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

Пользователь: "Я потерял файл. Вы должны его вернуть мне.."
Системный администратор: "Хорошо, назовите имя файла"
Пользователь: "Я не знаю, мне кажется, что в названии была буква 'e'."
Системный администратор: "Хорошо, в каком каталоге он находился?"
Пользователь: "Я не знаю, он мог быть в одном из этих трех..."
Системный администратор: "Вы можете назвать хотя бы дату когда вы последний раз с ним работали?"
Пользователь: "Нуу....Мне кажется это было в какой-то четверг в феврале или апреле. Не понимаю в чем проблема? Я думал у вас есть система резервного копирования, которая помогает в подобных ситуациях"

 

Rsync

Rsync - прекрасная реализация небольшого алгоритма. Одно из главных достоинств этого приложения - способность эффективного зеркалирования файловой системы. С помощью rsync легко построить систему сохранения файловой системы, использую гибкий набор сетевых протоколов: nfs, smb или ssh. Другое достоинство - способность архивировать старые копии файлов, которые изменились или были удалены. Это далеко не все возможности использования этого приложения, рекомендую Вам почитать подробнее на rsync.samba.org.

 

Система

Если быть кратким в описании системы достаточно сказать: система состоит из недорогой Linux машины со множеством дешевых дисков и небольшого shell скрипта - rsync. [Fig 1] Процесс копирования следующий: сначала rsync создает каталог 'YY-DD-MM' для сохранения измененных файлов, далее rsync проверяет серверы указанные нами для резервирования на наличие изменений - если файл был изменен старая версия копируется в только что созданный каталог и затем переписывается новой версией файла. [Fig 2]

RSYNC Backup Process

Можно говорить о том, что ежедневные изменения в системе составляют небольшую часть относительно файловой системы - в среднем порядка .5%...1%. Таким образом, имея для резервного копирования диски объемом в два раза превышающие наши файловые серверы, можно хранить бэкапы примерно за 50 - 100 дней. Когда место на дисках закончится, просто поменяйте их. На практике получается так, что на одном наборе дисков можно хранить информацию за 6 месяцев. На самом деле можно перед заменой дисков скопировать их содержимое еще куда-нибудь.

How Incremental Files are Handled  

Преимущества: аварийное восстановление и восстановление файлов теперь проще

Вернемся к воображаемому диалогу. Вместо громоздкой системы, хранящей данные на лентах, у нас есть бэкап за последние 6 месяцев на нашей Linux машине. С помощью таких утилит как locate/find/grep легко найти все копии файла определенного пользователя, с буквой 'e' в имени и датируемые четвергом февраля или апреля и скопировать их в домашний каталог этого пользователя. Проблема поиска корректной версии файла - моя любимая проблема: я называю ее чьей-то другой проблемой.

Далее, представим самый популярный сценарий - complete failure. Например такая проблема случилась с большим nfs/samba сервером. Если Вы делали резервное копирование настроек samba сервера, то поднять Ваш резервный компьютер в качестве замены с правами только на чтение - дело нескольких минут. Представьте подобную ситуацию в случае использования лент.

 

Сравнение систем на основе Rsync/жесткие_диски и лент

  Ленты 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
 

Ресурсы

 

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей
 talkback page 

<--, перейти к начальной странице выпуска

Webpages maintained by the LinuxFocus Editor team
© Brian Hone, FDL
LinuxFocus.org
Translation information:
en --> -- : Brian Hone <bhone(at)eink.com>
en --> ru: Pukhlyakov Kirill <kirill(at)linuxfocus.org>

2004-03-05, generated by lfparser version 2.43