<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=koi8-r"> <META NAME="GENERATOR" CONTENT="lfparser_2.43"> <META NAME="LFCATEGORY" CONTENT="SystemAdministration"> <link rel="icon" href="../../common/images/lf-16.png" type="image/png"> <TITLE>lf326, SystemAdministration: Rsync: лучшая система резервного копирования</TITLE> <style type="text/css"> <!-- td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 } pre { font-family:monospace,Courier } pre.code { font-family:monospace,Courier;background-color:#aedbe8; } p.cl { color:#EE9500 } a.nodec { text-decoration:none } p.trans { font-size:8pt; text-align:right } p.clbox { width:50%; alignment:center; background-color:#FFD700; border-style:none; border-width:medium; border-color:#FFD700; padding:0.5cm; text-align:center } p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:none; border-width:medium; border-color:#aedbe8; padding:0.1cm; text-align:left } p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; border-width:medium; border-color:#AAAAAA; padding:0.5cm ; margin-top:0.1cm; margin-right:1cm; margin-left:1cm; text-align:center } .mark { background-color:#e6e6ff } --> </style> </HEAD> <BODY bgcolor="#ffffff" text="#000000"> <!-- this is generated html code. NEVER use this file for your translation work. Instead get the file with the same article number and .meta.shtml in its name. Translate this meta file and then use lfparser program to generate the final article --> <!-- lfparser can be obtained from http://www.linuxfocus.org/~guido/dev/lfparser.html --> <!-- this is used by a number of tools: =LF=AUTHOR: Brian Hone =LF=CAT___: SystemAdministration =LF=TITLE_: Rsync: лучшая система резервного копирования =LF=NUMBER: 326 =LF=ANAME_: article326.shtml --> <!-- 2pdaIgnoreStart --> <!-- start navegation bar, style=2 --> <!-- top navegation bar --> <TABLE summary="topbar_1" cellspacing="0" cellpadding="0" border="0" align="center" width="90%"> <TR bgcolor="#2e2292"> <TD class="top"><TABLE summary="topbar_1_logo" cellspacing="0" cellpadding="0" border="0" width= "100%"> <TR><TD width="319"><IMG src="../../common/images/logolftop_319x45.gif" alt="[LinuxFocus-icon]" width="319" height="45" align="left" border="0"></TD> <TD class="top"> <TABLE summary="topbar_1_links" width="100%"> <TR align="right"> <TD class="top"> <A class="nodec" href="index.shtml"><FONT color= "#DDDDDD" size="2"><--</FONT></A> | <A class="nodec" href="../index.shtml"><FONT color= "#DDDDDD" size="2">Домой</FONT></A> | <A class="nodec" href="../map.html"><FONT color= "#DDDDDD" size="2">Карта</FONT></A> | <A class="nodec" href="../indice.html"><FONT color= "#DDDDDD" size="2">Индекс</FONT></A> | <A class="nodec" href="../Search/index.shtml"><FONT color= "#DDDDDD" size="2">Поиск</FONT></A> </TD> </TR> <TR align="right"> <TD class="top"> <HR width="100%" noshade size="1"> </TD> </TR> </TABLE> </TD> </TR> </TABLE> </TD> </TR> </TABLE> <!-- end top navegation bar --> <!-- blue bar --> <TABLE summary="topbar_2" cellspacing="0" cellpadding="0" border="0" align="center" width="90%"> <TR bgcolor="#00ffff"> <TD><IMG src="../../common/images/transpix.gif" width="1" height= "2" alt=""></TD> </TR> </TABLE> <!-- end blue bar --> <!-- bottom navegation bar --> <TABLE summary="topbar_3" cellspacing="0" cellpadding="0" border="0" align="center" width="94%"> <TR bgcolor="#000000"> <TD> <TABLE summary="topbar_3_links" cellspacing="0" cellpadding="1" border="0" width= "100%"> <TR align="center"> <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color= "#FFFFFF">Новости</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../Archives/"><FONT color= "#FFFFFF">Архивы</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../Links/index.shtml"><FONT color= "#FFFFFF">Ссылки</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color= "#FFFFFF">Про LF</FONT></A> </TD> </TR> </TABLE> </TD> </TR> </TABLE> <!-- end bottom navegation bar --> <!-- stop navegation bar --> <!-- SSI_INFO --> <!-- tr_staticssi include virtual --> <!-- tr_staticssi exec cmd --> <!-- addedByLfdynahead ver 1.5 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">эта страница доступна на следующих языках: <A href="../../English/March2004/article326.shtml">English</a> <A href="../../Castellano/March2004/article326.shtml">Castellano</a> <A href="../../ChineseGB/March2004/article326.shtml">ChineseGB</a> <A href="../../Deutsch/March2004/article326.shtml">Deutsch</a> <A href="../../Francais/March2004/article326.shtml">Francais</a> <A href="../../Nederlands/March2004/article326.shtml">Nederlands</a> <A href="../../Russian/March2004/article326.shtml">Russian</a> <A href="../../Turkce/March2004/article326.shtml">Turkce</a> <A href="../../Polish/March2004/article326.shtml">Polish</a> </FONT></TD></TR></TABLE><br> <!-- SSI_INFO STOP --> <!-- 2pdaIgnoreStop --> <!-- SHORT BIO ABOUT THE AUTHOR --> <TABLE ALIGN=LEFT BORDER=0 WIDTH="190" summary="about the author"> <TR> <TD> <IMG SRC="../../common/images2/BrianHone.jpg" ALT="Brian Hone" width="152" height="157"> <BR>автор Brian Hone <br> <small><bhone(at)eink.com></small> <BR><BR> <I>Об авторе:</I><BR> <!-- aboutauthor_start --> <P> Brian Hone работает системным администратором и разработчиком в корпорации E Ink. В свободное время плавает в холодной воде и занимается альпинизмом. </P> <!-- aboutauthor_stop --> <!-- TRANSLATED TO ru --> <BR><BR><I>Перевод на Русский:</I><BR> Pukhlyakov Kirill <small><kirill(at)linuxfocus.org></small> <br> <!-- =LF=TRANSTO=ru: Pukhlyakov Kirill --> <!-- TRANSLATED TO STOP --> <BR><i>Содержание</i>: <UL> <LI><A HREF="#326lfindex0">Проблема</A></LI> <LI><A HREF="#326lfindex1">Rsync</A></LI> <LI><A HREF="#326lfindex2">Система</A></LI> <LI><A HREF="#326lfindex3">Преимущества: аварийное восстановление и восстановление файлов теперь проще</A></LI> <LI><A HREF="#326lfindex4">Сравнение систем на основе Rsync/жесткие_диски и лент</A></LI> <LI><A HREF="#326lfindex5">Инструменты</A></LI> <LI><A HREF="#326lfindex6">О скрипте</A></LI> <LI><A HREF="#326lfindex7">Сам скрипт</A></LI> <LI><A HREF="#326lfindex8">Ресурсы</A></LI> <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=326">Страница отзывов</A></LI> </UL> </TD></TR></TABLE> <!-- HEAD OF THE ARTICLE --> <br> <table border="0"><tr><td> <H2>Rsync: лучшая система резервного копирования</H2> <IMG SRC="../../common/images2/article326/newrsynclogo.jpg" ALT="RSYNC Backup" HSPACE=10 width="320" height="200"> <!-- ABSTRACT OF THE ARTICLE --> <P><i>Резюме</i>: <P> <!-- articleabstract_start --> Резервное копирование одно из сложных и наиболее пренебрегаемых занятий системного администрирования. Но на самом деле - это очень важная его часть. Это последняя надежда в случае проблем с оборудованием, безопасностью и конечно же защита от конечных пользователей. Существует много систем резервного копирования - они стоят тысячи долларов, используют дорогое оборудование и построены на ненадежном программном обеспечении. В то же время мы можем выбрать лучшее решение - Rsync и недорогой дисковый массив. <!-- articleabstract_stop --> <br><!-- HR divider --><center><font color="#8282e0"><b>_________________ _________________ _________________</b></font></center><br> </td></tr></table> <!-- BODY OF THE ARTICLE --> <A NAME="326lfindex0"> </A> <H3>Проблема</H3> <P> Хочу перечислить вам некоторые причины того, что резервное копирование это настоящий кошмар для системного администратора: дорогое оборудование, которое часто ломается, дорогое программное обеспечение и конечно масса времени, проведенная за восстановлением разных версий файлов. Также замечу, что лишь малая часть информации компании сохраняется именно до того момента когда она понадобится. Если Вы тот человек, который занимается сохранением/восстановлением данных, наверняка Вам знаком следующий диалог: </P> <P> <B>Пользователь:</B> "Я потерял файл. Вы должны его вернуть мне.."<BR> <B>Системный администратор:</B> "Хорошо, назовите имя файла"<BR> <B>Пользователь:</B> "Я не знаю, мне кажется, что в названии была буква 'e'."<BR> <B>Системный администратор:</B> "Хорошо, в каком каталоге он находился?"<BR> <B>Пользователь:</B> "Я не знаю, он мог быть в одном из этих трех..."<BR> <B>Системный администратор:</B> "Вы можете назвать хотя бы дату когда вы последний раз с ним работали?"<BR> <B>Пользователь:</B> "Нуу....Мне кажется это было в какой-то четверг в феврале или апреле. Не понимаю в чем проблема? Я думал у вас есть система резервного копирования, которая помогает в подобных ситуациях"<BR> </P> <A NAME="326lfindex1"> </A> <H3>Rsync</H3> <P> Rsync - прекрасная реализация небольшого алгоритма. Одно из главных достоинств этого приложения - способность эффективного зеркалирования файловой системы. С помощью rsync легко построить систему сохранения файловой системы, использую гибкий набор сетевых протоколов: nfs, smb или ssh. Другое достоинство - способность архивировать старые копии файлов, которые изменились или были удалены. Это далеко не все возможности использования этого приложения, рекомендую Вам почитать подробнее на <a href="http://rsync.samba.org">rsync.samba.org</a>. </p> <A NAME="326lfindex2"> </A> <H3>Система</H3> <P> Если быть кратким в описании системы достаточно сказать: система состоит из недорогой Linux машины со множеством дешевых дисков и небольшого shell скрипта - rsync. <B>[Fig 1]</B> Процесс копирования следующий: сначала rsync создает каталог 'YY-DD-MM' для сохранения измененных файлов, далее rsync проверяет серверы указанные нами для резервирования на наличие изменений - если файл был изменен старая версия копируется в только что созданный каталог и затем переписывается новой версией файла. <B>[Fig 2]</B> </P> <IMG SRC="../../common/images2/article326/structure.jpg" ALT="RSYNC Backup Process" HSPACE=10 width="422" height="224"> <P> Можно говорить о том, что ежедневные изменения в системе составляют небольшую часть относительно файловой системы - в среднем порядка .5%...1%. Таким образом, имея для резервного копирования диски объемом в два раза превышающие наши файловые серверы, можно хранить бэкапы примерно за 50 - 100 дней. Когда место на дисках закончится, просто поменяйте их. На практике получается так, что на одном наборе дисков можно хранить информацию за 6 месяцев. На самом деле можно перед заменой дисков скопировать их содержимое еще куда-нибудь. </P> <IMG SRC="../../common/images2/article326/flowchart.png" ALT="How Incremental Files are Handled" HSPACE=10 width="522" height="224"> <A NAME="326lfindex3"> </A> <H3>Преимущества: аварийное восстановление и восстановление файлов теперь проще</H3> <p> Вернемся к воображаемому диалогу. Вместо громоздкой системы, хранящей данные на лентах, у нас есть бэкап за последние 6 месяцев на нашей Linux машине. С помощью таких утилит как locate/find/grep легко найти все копии файла определенного пользователя, с буквой 'e' в имени и датируемые четвергом февраля или апреля и скопировать их в домашний каталог этого пользователя. Проблема поиска корректной версии файла - моя любимая проблема: я называю ее чьей-то другой проблемой. </P> <P> Далее, представим самый популярный сценарий - complete failure. Например такая проблема случилась с большим nfs/samba сервером. Если Вы делали резервное копирование настроек samba сервера, то поднять Ваш резервный компьютер в качестве замены с правами только на чтение - дело нескольких минут. Представьте подобную ситуацию в случае использования лент. </P> <A NAME="326lfindex4"> </A> <H3>Сравнение систем на основе Rsync/жесткие_диски и лент</H3> <CENTER> <TABLE border=1 cellpadding=0 cellspacing=1 width=65%> <TR> <TH> </TH> <TH>Ленты</TH> <TH>Rsync</TH> </TR> <TR> <TD>Цена</TD> <TD bgcolor=#cccccc>Очень высокая</TD> <TD bgcolor=#6699cc>Низкая</TD> </TR> <TR> <TD>Полное резервное копирование</TD> <TD bgcolor=#cccccc>Быстро</TD> <TD bgcolor=#6699cc>Быстро</TD> </TR> <TR> <TD>Накапливающееся резезрвное копирование</TD> <TD bgcolor=#cccccc>Быстро</TD> <TD bgcolor=#6699cc>Быстро</TD> </TR> <TR> <TD>Полное восстановление</TD> <TD bgcolor=#cccccc>Очень медленно, возможно несколько лент</TD> <TD bgcolor=#6699cc>Быстро - все данные на одном диске</TD> </TR> <TR> <TD>Восстановление файлов</TD> <TD bgcolor=#cccccc>Медленно, возможно несколько лент, трудно найти нужную версию.</TD> <TD bgcolor=#6699cc>Очень быстро - все данные на одном диске плюс уутилиты UN*X: find, grep и locate</TD> </TR> <TR> <TD>Полный отказ системы</TD> <TD bgcolor=#cccccc>Единственный выход - полное восстановление</TD> <TD bgcolor=#6699cc>Есть возможность быстрого превращения резервного сервера в файлсервер.</TD> </TR> </TABLE> </CENTER> <A NAME="326lfindex5"> </A> <H3>Инструменты</H3> <P> Подобную систему очень легко построить. Все используемые инструменты - open-source, они поставляются в стандартных дистрибутивах. Приведем один пример создания подобной системы, но не забывайте, что он не единственный. </P> <UL> <LI><B>Сервер:</B> Я использую RedHat Linux. Подойдет любой дистрибутив, также как и любой UN*X. ( Я настраивал как то подобную систему на Mac OS X) Одно предостережение: побольше RAM.</LI> <LI><B>Жесткие диски:</B>Используя свой опыт могу предложить вариант создания недорого дискового массива - это PCI firewire карта подключенная к набору IDE дисков, расположенных во внешнем адаптере firewire. Настроить Linux для использования этого набора дисков одним RAID разделом - несложное занятие.</LI> <LI><B>Программное обеспечение:</B> Rsync очень хороший инструмент. Это что-то вроде швейцарского армейского ножа для копирования файловых систем. Если Вы до сих пор не слышала об этом инструменте - посетите rsync.samba.org.</LI> <LI><B>Подключение к файлсерверам:</B> Rsync достаточно гибок. Мы используем nfs и smbfs. Вы можете также использовать собственный сетевой протокол этого приложения, запустив rsync демоном на файлсервере. Можно использовать ssh для безопасного копирования удаленных сайтов. Обратите внимание на ресурсы ниже, там рассказывается об использовании подобных соединений.</LI> </UL> <A NAME="326lfindex6"> </A> <H3>О скрипте</H3> <P>Скрипт доступен на сайте rsync. Используйте следующую команду: </P> <p class="code"> rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file --backup --backup-dir=`date +%Y-%m-%d` -av </p> <P> Рассмотрим основные опции: <UL> <LI><I>--backup</I>: создавать копии файлов перед перезаписыванием их</LI> <LI><I>--backup-dir=`date +%Y-%m-%d`</I>: создать каталог для этих бэкапов, который выглядит следующим образом: 2002-08-15</LI> <LI><I>-av</I>: archive и verbose режимы.</LI> </UL> </P> <P> Этот скрипт можно запускать каждую ночь cron'ом. Чтобы он запускался каждый день в 11pm используйте следующую команду "crontab -e" и потом наберите: </P> <p class="code"> 0 23 * * * /path/to/your/script </P> <A NAME="326lfindex7"> </A> <H3>Сам скрипт</H3> <P> Приведу здесь мой скрипт, чтобы собрать все сказанное выше вместе. Еще раз напомню, что существует много способов реализации этой системы, это просто один из вариантов. </P> <pre class="code"> #!/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 </Pre> <A NAME="326lfindex8"> </A> <H3>Ресурсы</H3> <p> <UL> <LI>Rsync: <A href="http://rsync.samba.org">http://rsync.samba.org</A></LI> <LI>NFS: <A href="http://nfs.sourceforge.net/nfs-howto">http://nfs.sourceforge.net/nfs-howto</A></LI> <LI>SMBFS: <A href="http://samba.org">http://samba.org</A></LI> <LI>Linux RAID: <A href="http://linas.org/linux/raid.html">http://linas.org/linux/raid.html</A></LI> </UL> </P> <!-- vim: set sw=2 ts=2 et tw=74: --> <!-- 2pdaIgnoreStart --> <A NAME="talkback"> </a> <h2>Страница отзывов</h2> У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей <center> <table border="0" CELLSPACING="2" CELLPADDING="1" summary="tb-button-outerpart"> <tr BGCOLOR="#C2C2C2"><td align=center> <table border="3" CELLSPACING="2" CELLPADDING="1" summary="tb-button"> <tr BGCOLOR="#C2C2C2"><td align=center> <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=326"><b> talkback page </b></a> </td></tr></table> </td></tr></table> </center> <HR size="2" noshade> <a style="background-color:#bdc6d5" href="index.shtml"><--, перейти к начальной странице выпуска </a><br><HR size="2" noshade> <!-- ARTICLE FOOT --> <CENTER><TABLE WIDTH="98%" summary="footer"> <TR><TD ALIGN=CENTER BGCOLOR="#bdc6d5" WIDTH="50%"> <A HREF="../../common/lfteam.html">Webpages maintained by the LinuxFocus Editor team</A> <BR><FONT COLOR="#FFFFFF">© Brian Hone, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT> </TD> <TD BGCOLOR="#bdc6d5"> <!-- TRANSLATION INFO --> <font size=2>Translation information:</font> <TABLE summary="translators"> <tr><td><font size="2">en --> -- : Brian Hone <small><bhone(at)eink.com></small></font></td></tr> <tr><td><font size="2">en --> ru: Pukhlyakov Kirill <kirill(at)linuxfocus.org></font></td></tr> </TABLE> </TD> </TR></TABLE></CENTER> <p><font size=1>2004-03-05, generated by lfparser version 2.43</font></p> <!-- 2pdaIgnoreStop --> </BODY> </HTML>