Варианты бекапа: Самописка, rsync, dd и Amanda
Окончание. Предыдущая часть. Сисадмин без бекапа - такой сисадмин Сегодня я хотел бы поговорить о различных вариантах бекапа. Очень часто новички ищут готовые варианты бекапов для своих частных случаев вместо понимания и приведения их к стандартизации. Конечно, если необходимо бекапить что-то простое, то незачем тратить время на изучение сложных систем резеврного копирования — зачастую собственно написанный скрипт бекапа работает более просто и прозрачен для понимания. Написание скрипта бекапа требует как минимум базового знакомства с утилитами Unix систем, такими как: Их рассмотрение выходит за рамки этой заметки, и я подразумеваю, что у читающего есть базовые понятия об их работе.
Для того, чтоб понять как создать скрипт бекапа, предлагаю рассмореть самый примитивный скрипт, который работает на принципе «Что бекапим, куда сохраняем, как долго храним». Выполняем команду chmod +x <имя этого скрипта>, другими словами делаем его исполняемым. В соответствие со своими нуждами поправьте список каталогов для бекапа, путь куда их сохранять и количество дней хранения копий. Помещаем скрипт в cron администратора, например на 4 часа утра каждый рабочий день, еще мы добавим и субботу, чтобы захватить данные которые были сделаны в Каталог для бекапа может быть NFS-ресурсом экспортированным на сервер. Так мы простым скриптом решаем важную задачу системного администрирования. Для более сложной инфраструктуры скорее всего Rsync (Remote Synchronization) — с помошью этой программы происходит копирование файлов между серверами, пришла на замену rcp. Простой пример, есть два сервера: centos52 — сервер куда будем делать бекап и unixbox — сервер с которого будем делать бекап. На сервере unixbox создадим пользователя rsync от которого будут запрашиваться файлы для бекапа. Добавим его в нужные группы чтобы он мог получить право на чтение если такого еще нет. Вводим пароль и все. Если хочется процедуру автоматизировать то нужно будет сгенерировать public ключ на сервере centos52 и положить его в файл authorized_keys пользователю rsync на сервере unixbox. Давайте сделаем это: Все. Теперь можно поместить выполнение команды в crontab: Каждые 4 часа будем копировать каталог /etc с сервера unixbox в локальный Внимание: если после /etc нет “/” то будет скопирован сам каталог и его содержимое. Если “/” есть, то будет скопировано только содержимое этого каталога. Также есть сервис – rsyncd который работает на порту 873 TCP. При запущенном сервисе строка доступа может выглядеть так: То есть в начале будет добавлено rsync:// а остальное также как и в примере выше. Аутентификация в rsyncd основана на 128 bit MD4, что очень ненадежно в наше время. К тому же данные передаются в открытом виде, что явно не в пользу этого сервиса, когда есть такие средства как rsync+ssh и scp. Этого материала достаточно чтобы начать пользоваться rsync в создание своих файловых зеркал/резервных копий. Ниже я дам пример скрипта, который может помочь когда нужно копировать набор каталогов с удаленного сервера: Файл /var/backup/backup.list должен содержать список каталог длякопирования. Примерно так: Стандартная ситуация — на сервере начал умирать диск, появились первые беды, система с трудом встает после ребута. Но переустанавливать все заново очень долго, да и зачем? Гораздо проще сделать полный клон диска или испорченного раздела. И в этом поможет dd. Программа dd идеально подойдет там где нужно сделать точную копию раздела/слайса диска. Она сектор за сектором копирует данные из источника (параметр if ) в пункт назначения, если так можно выразиться (параметр of ). Команда выше сделает точную копию раздела /dev/hda в разделе /dev/hdb. Этой командой мы записали раздел /dev/hda3 в бинарный файл hda3.img. Теперь его можно перенести на другой сервер и развернуть в точную копию/dev/hda3. Только учтите один минус dd — программа копирует данные по секторам и ей все равно есть на этом участке диска данные или нет, будет Ну и напоследок сделаем копию нашей MBR (Master Boot Record). MBR – это первый сектор на жестком диске содержащий таблицу разделов и запись, с какого раздела загружаться. Иногда требуется восстановить MBR из резерва. Команде dd мы просто передали параметры bs и count, этим указав какой Мы ведь уже знаем, что MBR находится в первых 512 байтах (1-й сектор). Размер сектора можно узнать так: Amanda – это клиент/серверная система создания резервных копий. Хороший выбор для средних и крупных предприятий. Что тут говорить, сама корпорация Xerox использует Amanda в своей ИТ инфраструктуре. Некоторые термины: Мы рассмотрим версию Amanda на CentOS 5 Описание Задача Создаем каталог для нового проекта и копируем файл amanda.conf из проекта по умолчанию. Редактируем файл /etc/amanda/fasttech/amanda.conf } Создаем структуру каталогов и файлов которые потребуются во время работы. Создаем два пустых файла Нашему проекту назначаем правильного владельца В файл disklist помещаем систему с которой будем делать бекап и директорию Разрешаем пользователю root с сервера unixbox получать с нас бекап. Создаем директорию для временных файлов В цикле создаем директории для наших будущих виртуальных лент Делаем символическую ссылку первой ленты на каталог data Устанавливаем права на backup-директорию Создаем каталог amanda Устанавливаем правильного владельца на директорию Переходим на учетную запись amanda В свой файл настроек добавляем каталог /usr/sbin в переменную PATH. Тогда не нужно будет писать полный путь к программам расположенным в этом каталоге, достаточно только указать их название. Проверяем статус “лент” Переходим в бекап-директорию Помечаем директории и виртуальную ленту Сбрасываем счетчик лент Проверим корректность нашего amanda.conf Если серьезных ошибок не замечено то продолжаем дальше. Запускаем сервис. В файле /etc/xinetd.d/amandaidx меняем disable=yes на disable=no Проверяем, начала ли работать наша служба Сервер готов. Разрешаем серверу centos52 получать с нас бекап. Запускаем сервис Клиент готов. Бекапы делаем от пользователя amanda Делаем бекап каталога /etc с сервера unixbox (ну или что там у вас в /etc/amanda/fasttech/disklist) Проверим, получилось ли у нас... Как видим бекап был успешно сделан. Поскольку мы делали первый раз бекап каталога /etc то был сделан полный дамп (Dumps: 0) Сделав бекап еще раз, мы увидим что на этот раз получена инкрементальная Выясняем на каких лентах есть нужный нам каталог. Если версий этого файла много то можно использовать такую команду К примеру нам нужен файл shells из каталога /etc c ленты fasttech-3 Вставляем нужную ленту Получаем нужный архив с этой ленты в наш текущий каталог Полученный файл — это tar-архив. Теперь возьмем из него файл shells. Файл shells отправляем на сервер unixbox и замещаем им поврежденный. Точно также работаем с целыми наборами каталогов. Если команде amrestore не передавать в качестве аргумента нужный нам каталог то мы получим все резервируемые каталоги с сервера. Дальше дело техники. Чтобы делать бекап в 4 утра каждый будний день, пользователю amanda в crontab (crontab -e) помещаем такую строку: Эта команда попросит Amanda сделать полный бекап каталога /etc с сервера unixbox в следующий раз: Команда перемотает виртуальную ленту на начало Конфигурационный файл /etc/amanda/fasttech/amanda.conf Принцип работы Amanda понять не сложно. Есть сервер с запущенной службой через xinetd и есть клиенты с запущенным сервисом ожидающим подключения от сервера. В файле .amandahosts на клиенте мы разрешаем каким серверам можно получать с нас бекап. В файле disklist на сервере мы перечисляем список серверов и каталогов которые мы хотим резервировать с них. Как я писал выше, изначально Amanda была создана для работы с ленточными накопителями и это дает о себе знать. Нам нужно создать набор каталогов и пометить их как лента. Как будто мы работаем с набором лент ленточного накопителя. При каждом запуске резервного копирования ленты последовательно будут меняться в “виртуальном лотке”.
#!/bin/bash
#backup.sh
timestamp=`date “+%Y-%m-%d-%H-%M”`
backupFS=”/etc /var/lib/mysql /usr/local/etc”
backupTO=/var/backup5
KeepTime=7
if [ -d $backupTO ]; then
find $backupTO -maxdepth 1 -name \*.tar.gz -mtime +${KeepTime} -exec rm -f {} \;
for i in $backupFS
do
j=`expr ${i//\//-}`
tar -zcvf $backupTO/`hostname`.${timestamp}.${j}.tar.gz $i
echo “$i is done”
done
else
echo “backup directory is missing...exiting”
exit 1
fi
В рабочем скрипте цифр быть не должно. Я добавил их для удобства объяснения строк кода.
течение рабочего дня пятницы: 0 4 * * 1-6 /root/backup.sh
понадобится что-то более функциональное и гибкое.
В своих backup-скриптах больше внимания уделяйте обходу потенциальных ошибок и неадекватного поведения в случае отсутствия места на диске или в случае отсутствия нужных каталогов. Не тратьте время на оптимизацию, смысла в этом не много, ведь узким местом всегда будет процесс копирования/архивирования ваших данных.Rsync или как скопировать бекап на удаленный сервер
Добавим пользователя rsync и установим ему пароль:# useradd rsync
# passwd rsync
Скопируем каталог /etc с сервера unixbox в наш локальный каталог /var/backup:$ rsync -e ssh -avz --delete-after --force rsync@unixbox:/etc /var/backup/
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub rsync@unixbox
# crontab -e
* */4 * * * rsync -e ssh -avz --delete-after --force rsync@unixbox:/etc /var/backup
каталог /var/backupПояснения
rsyncd или об атавизме
rsync://[USER@]HOST[:PORT]/SRC [DEST]
Поэтому подробно рассматривать его не вижу смысла. #!/bin/bash
#backup.sh
LIST=/var/backup/backup.list
cat ${LIST} | while read res; do
rsync -e ssh -avz --delete-after --force rsync@unixbox:$res /var/backup
done
/etc
/var/www/cms
/usr/local/etc
/var/billing
Про dd или как сделать полный бекап диска
Чтобы понять как просто пользоваться программой давайте сделаем это на практике.# dd if=/dev/hda of=/dev/hdb conv=noerror,sync
То есть мы «отзеркалировали» /dev/hda. После conv= мы можем указать ряд параметров:
# dd if=/dev/hda3 of=/var/backup/hda3.img
воссоздана точная копия и размер будет точно такой же! То есть если раздел /dev/hda3 имеет объем в 5 Гб а занят на нем только 1 то файл hda3.img будет весить 5 Гб.
Восстановить раздел из образа также просто как и создать:# dd if=/var/backup/hda3.img of=/dev/hda3
# dd if=/dev/hda1 of=/var/backup/mbr.dump bs=512 count=1
объем данных мы хотим скопировать.
Теперь восстановим MBR из резервной копии# dd if=/var/backup/mbr.dump of=/dev/hda1 bs=512 count=1
# fdisk -l /dev/hda1
Amanda — Advanced Maryland Automatic Network Disk Archiver
Изначально Amanda была создана для работы с ленточными накопителями но сейчас активно используется при бекапе на HDD. Такая концепция получила название “виртуальные ленты” (vtapes). Amanda не испытывает проблем при работе в гетерогенных сетях (в сетях, которые используют
разные платформы и операционные системы).
Настройка Amanda Server
Будем делать бекап каталога /etc сервера unixbox. Один раз в неделю будем делать полный бекап, остальные – инкрементальный.
Начинаем установкуyum -y install amanda-server.i386
mkdir /etc/amanda/fasttech
cp /etc/amanda/DailySet1/amanda.conf /etc/amanda/fasttech/
org «Dedic.ru»
mailto «root»
dumpuser «amanda»
dumporder «sssS»
taperalgo first
displayunit «m»
dumpcycle 5
runspercycle 5
tapecycle 10
tpchanger «chg-disk» # /usr/lib/amanda/chg-disk
tapedev «file:/var/backup»
tapetype DISK
labelstr «fasttech-.*»
infofile «/etc/amanda/fasttech/curinfo»
logdir «/etc/amanda/fasttech»
indexdir «/etc/amanda/fasttech/index»
define tapetype DISK {
length 500000 MB
}
define dumptype comp-tar {
program «GNUTAR»
compress fast
index yes
# mkdir /etc/amanda/fasttech/{curinfo,index}
# touch /etc/amanda/fasttech/{tapelist,disklist}
# chown -R amanda:disk /etc/amanda/fasttech/
# echo 'unixbox /etc comp-tar' > /etc/amanda/fasttech/disklist
# echo 'unixbox root' > `grep amanda /etc/passwd | cut -d: -f6`/.amandahosts
# mkdir -p /var/backup/holding
# for i in 1 2 3 4 5; do mkdir /var/backup/slot$i; done
# ln -s /var/backup/slot1 /var/backup/data
# chown -R amanda:disk /var/backup/
# mkdir -p /usr/adm/amanda
# chown -R amanda:disk /usr/adm/amanda
# su - amanda
$ echo «export PATH=$PATH:/usr/sbin» >> .bash_profile
$ ammt -t file:/var/backup/ status
file:/var/backup/ status: ONLINE
$ cd /var/backup
$ for i in 1 2 3 4 5; do amlabel fasttech fasttech-$i slot $i; done
$ amtape fasttech reset
$ amcheck -s fasttech
Amanda Tape Server Host Check
-----------------------------
slot 3: read label `fasttech-3’, date `X’
NOTE: skipping tape-writable test
Tape fasttech-3 label ok
WARNING: tapecycle (5) <= runspercycle (5).
Server check took 0.070 seconds
(brought to you by Amanda 2.5.0p2)
# /etc/init.d/xinetd restart
# netstat -lp | grep :amanda
0 0 *:amandaidx *:* LISTEN 3403/xinetd tcp
Amanda client
# yum -y install amanda-client
# echo «centos52 amanda» > `grep amanda /etc/passwd | cut -d: -f6`/.amandahosts
В файле /etc/xinetd.d/amanda меняем disable=yes на disable=no
# /etc/init.d/xinetd restart
# netstat -lp | grep :amanda
udp 0 0 *:amanda *:* 4850/xinetd
Backuping
# su - amanda
$ amdump fasttech
$ amadmin fasttech info unixbox /etc
Current info for unixbox /etc:
Stats: dump rates (kps), Full: 968.0, -1.0, -1.0
Incremental: -1.0, -1.0, -1.0
compressed size, Full: 26.0%,-100.0%,-100.0%
Incremental: -100.0%,-100.0%,-100.0%
Dumps: lev datestmp tape file origK compK secs
0 20090214 fasttech-3 1 11190 2906 3
копия (Dumps: 1)$ amadmin fasttech info unixbox /etc
Current info for unixbox /etc:
Stats: dump rates (kps), Full: 968.0, -1.0, -1.0
Incremental: 2891.0, -1.0, -1.0
compressed size, Full: 26.0%,-100.0%,-100.0%
Incremental: 26.1%,-100.0%,-100.0%
Dumps: lev datestmp tape file origK compK secs
0 20090214 fasttech-3 1 11190 2906 3
1 20090214 fasttech-4 1 11080 2891 1
Restoring
su - amanda
$ amadmin fasttech info unixbox /etc
Current info for unixbox /etc:
Stats: dump rates (kps), Full: 968.0, -1.0, -1.0
Incremental: 2891.0, -1.0, -1.0
compressed size, Full: 26.0%,-100.0%,-100.0%
Incremental: 26.1%,-100.0%,-100.0%
Dumps: lev datestmp tape file origK compK secs
0 20090214 fasttech-3 1 11190 2906 3
1 20090214 fasttech-4 1 11080 2891 1
$ amadmin fasttech find unixbox /etc
Scanning /var/backup/holding...
Scanning /var/backup/holding...
date host disk lv tape or file file part status
2009-02-14 unixbox /etc 0 fasttech-3 1 -- OK
2009-02-14 unixbox /etc 1 fasttech-4 1 -- OK
$ amtape fasttech slot 3
$ amrestore file:/var/backup/ unixbox '/etc'
$ tar xvf unixbox._etc.20090214.0 ./shells
0 4 * * 1-6 /usr/sbin/amdump fasttech
Полезное
amadmin fasttech force unixbox /etc
ammt -t file:/var/backup rewind
org Название компании;
mailto Кому отправлять почтовые отчеты;
dumpuser Логин используемый для бекапов;
dumporder Приоритет дампера: s – маленький размер, S – большой размер.
taperalgo Алгоритм для выбора какой дамп записывать на ленту;
displayunit В каких еденицах отображать цифры, используем мегабайты;
dumpcycle Число дней в backup-цикле;
runspercycle Тоже самое что и dumpcycle;
tpchanger Название устройства по смене лент;
tapecycle Число лент которое Amanda использует в порядке ротации, должно быть больше чем в dumpcycle, обычно это количество лент dumpcycle*2;
tapedev Тип ленточного устройства;
tapetype Тип ленточного устройства ассоциированного с tapedev;
labelstr Метка которая будет наноситься на ленты;
infofile, logdir, indexdir Опции задают расположение log-файлов, индексных файлов (содержащих образ бекап-директорий);
define tapetype Задает бекап-устройство, в моем примере это диск на 500 Гб;
define dumptype Здесь задаются backup-опции.
Подводим итоги
Вы можете отслеживать комментарии к этой записи с помощью RSS 2.0. Комментарии и эхо-тестирование не разрешены.


> которая называется sha-bang.
однако hash-bang.
> делается level 0
> * backup каждой из DLE
поплыло форматирование.
# dd if=/dev/hda1 of=/var/backup/mbr.dump bs=512 count=1
Всё таки писать dd if=/dev/hda
«– это первый сектор на жестком диске» а не hda1
Пользуюсь простеньким скриптом для инкрементального бэкапа, взят отсюда
Там же лежит вариант для ZIP архиватора.
В общем рекомендую.
>Amanda не испытывает проблем при работе в гетерогенных сетях (в сетях, которые используют
разные платформы и операционные системы).
Испытывает. Аманда использует tar, в используемых системах могут быть несовместимые версии tar-a. Что бы решить подобные проблемы, другая система резервного копирования, Bacula, использует собственный набор утилит архивирования-разархивирования-восстановления.
Зачем amanda, если у bacula намного больше возможностей и она удобней на порядок?
tamliga,
hash-bang — это просто ещё один синоним понятия sha-bang, что тоже самое что shebang.
>> которая называется sha-bang.
>однако hash-bang.
В командах
# dd if=/dev/hda1 of=/var/backup/mbr.dump bs=512 count=1
# dd if=/var/backup/mbr.dump of=/dev/hda1 bs=512 count=1
вместо «/dev/hda1» следует использовать «/dev/hda»
Унифицированные скрипты для бэкапа и версий, очень удобно:
> backupFS=”/etc /var/lib/mysql /usr/local/etc”
для /var/lib/mysql этот способ не подходит, если вклинятся апдейты базы, то затаренная копия может оказаться повреждённой.
Следует использовать mysqldump или mysqlhotcopy, они блокируют таблицы.
Так же очень хороша bacula. Тоже решение на подобие amanda.
[...] This post was mentioned on Twitter by Fun With Linux. Fun With Linux said: Варианты бекапа: Самописка, rsync, dd и Amanda · Повелитель серверов / [...]
Это
* */4 * * * rsync -e ssh -avz --delete-after --force rsync@unixbox:/etc /var/backup
Заменить на
0 */4 * * * rsync -e ssh -avz --delete-after --force rsync@unixbox:/etc /var/backup