RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Здесь используется клиент-серверный подход. Суть такова: есть
много серверов (в качестве этого термина используется именно серверная часть
rsync) и один клиент, который время от времени производит синхронизацию.
В данный момент у меня совместно используется rsyncFreeBSD,
Gentoo linux. Ставим rsync на обе системы:
FreeBSD
#cd /usr/ports/net/rsync
&& make install clean
Gentoo
#emerge rsync
После установки, открываем конфигурационные файлы. Настройки,
что у FreeBSD, что у Gentoo - одинаковые, поэтому далее разделятся не буду.
Будет просто конфиг сервера.
#cat >
rsyncd.conf
pid file = /var/run/rsyncd.pid
max connections =
4 #syslog facility = local5 # для логгирования через syslogd
use chroot = yes read
only = yes log file = /var/log/rsyncd.log # для альтернативного
логгирования
# Здесь указываем, что
бэкапить. В принципы, можно не
#описывать здесь, если
использовать rsync+ssh. path = /share/folder uid = root gid =
wheel read only = yes # нужно на всякий случай, что бы случайно ничего не
затереть.
#Кстати, если нужно будет
восстанавливать из бэкапа, то нужно будет сменить на no list = yes comment
= root directory hosts allow = 10.0.0.0/16 # каким хостам/сетям разрешено
подключаться auth users = username # логин юзера, от которого будет делатся
бэкап и восстановление. Его пароль находится в файле, определённом в параметре
secrets file secrets file = /usr/local/etc/rsyncd.scrt # файл с логином
паролем для доступа
#cat >
/usr/local/etc/rsyncd.scrt
username:password
Теперь добавляем строку в /etc/rc.conf для запуска
сервера
rsyncd_enable="YES"
В качестве клиента выступает rsync. В качестве создания
бэкапа - самописные скрипты. По сути, это команда rsync с некоторыми
параметрами, но учитывая, что всё вмещается в 3-4 строки, и запихивать всё это
дело в /etc/crontab не сильно удобно, кинул это всё дело в файл и
получился скрипт. Собственно, вот он:
Операция бэкапа
#!/bin/sh
# берем текущую
дату DATE=`/bin/date +"%Y-%m-%d"`
# указываем машину и
директорию для копирования. в данном случае - это ВСЯ удаленная
машина. SOURCE="root@10.10.10.1:/"
# прописываем пути всем
используемым
командам RSYNC="/usr/bin/rsync" TOUCH="/bin/touch" CP="/bin/cp" FIND="/usr/bin/find" RM="/bin/rm" XARGS="/usr/bin/xargs"
# заходим в нашу
директорию cd /data/backup/server
# копируем все содержание
current в директорию с текущей датой используя ЖЕСТКИЕ ЛИНКИ # для уменьшения
используемого места на диске #$CP -al current $DATE
# синхронизируем
директорию current с сервером, удаляем данные в current, # которые на
удаленном сервере больше не присутствуют. # пропускаем все служебные
директории и другие, которые не нужно копировать echo "Started update at"
`date` >> /var/log/rsync-query.sh.log 2>&1 logger -t rsync
"re-rsyncing the server tree" $RSYNC -azqe ssh --exclude '/proc'
--exclude '/dev' --exclude '/tmp' --exclude 'lost+found' --exclude '/mnt'
--exclude '/sys' --exclude '/compact' --delete --progress $SOURCE
current/ echo "End: "`date` >> /var/log/rsync-query.sh.log
2>&1
# удаляем все резервные
копии старше года #$TOUCH current #$FIND . -maxdepth 1 -type d -ctime +366
-print0 | $XARGS --null --no-run-if-emp ty $RM -fr
Обратим внимание на ключ ssh. Вспомните, что выше я
говорил, что шару можно не описывать. Так вот, если этот ключ есть, то в конфиге
можно не описывать никакие шары. Если его нет - то нужно описывать, какие именно
шары разрешены на бэкап. Ещё отличие, это то, что траффик через ssh будет
шифроваться. Поэтому, если у вас очень узкий канал, и канал этот более-менее
защищён, то можно и не использовать ssh.
Операция восстановления
Данная операция является обратной, к предыдущей. Собственно
вот команда для восстановления:
где, username - имя юзера, которое описано в
/usr/local/etc/rsyncd.scrt на сервере, с которого будем
восстанавливаться, parm1 - если описывали шары в
/usr/local/etc/rsyncd.conf - то это именно она, parm2 - кореневая
папка пути для восстановления.
Так же можно ограничивать скорость, что бы не грузить канал,
так называемый "verbose mode" я включаю, что бы наблюдать, за процессом.
Теперь поговорим, если нужно восстановить полностью систему.
Для этих целей понадобится либо liveCD, либо машина с установленной
FreeBSD. С первым у меня не сложилось, поэтому я выбрал второй. Была у
меня рабочая машинка. Что бы не гробить установленную на ней ОС, решил
подключить воторой неразбитый винт. Занрузился, разбил новый винт на разделы.
Здесь главное разбить так, что бы места на разделах хватало. Неважна даже
последовательность разделов и вообще, можно всё в один раздел сделать. :) .
Кстати, не забудьте про swap-раздел. И ещё одно кстати, на восстановливаемой
машине должен быть установлен и настроен rsyncd (сервер).
Далее создал папку /back_srv и точки монтирования для
других разделов: /back_srv/var, /back_srv/usr, /back_srv/tmp,
/back_srv/share.
в параметре my_server - описывается параметр, который
указывае местоположение кореневой директории, описаном на сервере, где хранится
бэкап. (в моём случае, это было так):
После этого идём гуляем и
ждём. У меня лично восстановления 30 Гб происходило около 20 часов на скорости
500Кб\с.
После завершения не забываем подредактировать
/etc/fstab в соотвествие к новому железу, а так же другие конфиги, где
используется аппаратная привязка.
Например, описание сетевух в
/etc/rc.conf. А так же не забываем установить загрузчик. В данном случае
- на новый винт. Сделать это можно через
sysinstall.
У меня, например, на новом компе не было рейд-массива,
а на старом был. Из-за моей невнимательности и несвоевременной правки
/etc/fstab - затёрся /var раздел, некоторые разделы сменили
разположения на слайсе.
Примечание.
Можно не использовать демоны, а запускать вручную.
Лучше всего для этого подходит следующая команда (она синкает со всеми правами
доступа, разрешениями, симлинки как синлинки, причём, если есть несоотвутствия,
то удаляет файлы, указанные в DESTINATION) для синхронизации папки
/var/spool/vmail. Обратите внимание на отсутствие "/" в
SOURCE и на наличии его в DESTINATION. Должно быть именно так,
иначе будут проблемы (например, будет синкаться не в тут папку, или будет
синкаться не /var/spool/vmail, а /var/spool, причём
файлы будут браться не из /var/spool на удалённой машине, а из папки
/var/spool/vmail!!! В итоге, вы потеряете всё содержимое папки
/var/spool, кроме подпапки vmail.)