Как написать скрипт для резервного копирования с помощью bacula?
Я очень новичок в этом сценарии оболочки и bacula. Я хочу создать скрипт, который планирует резервное копирование с помощью bacula?
Как это сделать?
Любое лидерство ценится?
Благодарю.
2 ответа
Если вы собираетесь администрировать свою собственную систему Linux, изучите bash
, man
страница действительно довольно подробная и полезная. Делать man bash
,
Если вы действительно новичок в Linux и командной строке, администрирование bacula
не для новичков. Это достаточно комплексная система резервного копирования для нескольких систем с центральной базой данных, что означает, что она также сложна.
В Linux есть гораздо более простые инструменты для выполнения простых резервных копий системы, которые столь же надежны. Если вы просто хотите сделать резервную копию вашего домашнего каталога, tar
или же zip
отличные инструменты. Особенно, tar
может делать как полные, так и инкрементные резервные копии.
Предполагая, что вы действительно хотите использовать bacula
и иметь достаточно информации, чтобы написать пару простых сценариев, тогда даже исходный запрос неоднозначен.
Вы имеете в виду график периодического cron
работа по резервному копированию без присмотра? Или вы хотите запланировать один вызов bacula
в определенное время и дату?
В любом случае рекомендуется создать два простых сценария: один для полного резервного копирования и один для инкрементного резервного копирования. Полное резервное копирование должно выполняться, скажем, один раз в неделю или один раз в месяц, а инкрементное резервное копирование должно выполняться каждый день или один раз в неделю - в зависимости от того, как часто изменяются данные вашей системы.
Большинство скромных сайтов, которые ежедневно используются, будут иметь ежедневное инкрементное резервное копирование с полным резервным копированием по выходным (скажем, в воскресенье). Таким образом, если система выйдет из строя, скажем, в пятницу, вам нужно будет выполнить восстановление с использованием самой последней полной резервной копии (в предыдущее воскресенье), а затем выполнить восстановление с помощью ежедневной инкрементной резервной копии (понедельник, вторник, среда, четверг). Вероятно, вы потеряете изменения данных, произошедшие в день сбоя.
Если скорость изменения данных была почасовой, а восстановление с почасовой скоростью было важным, то приращения следует планировать на каждый час с полным резервным копированием каждую ночь.
Важным соображением является знание того, что именно должно быть подтверждено. Большинство домашних пользователей хотят, чтобы их домашний каталог был восстановим. Корневой раздел ОС и разделы приложения часто легко восстанавливаются без резервного копирования. В качестве альтернативы их резервное копирование выполняется по очень редкому графику (скажем, раз в месяц или около того), поскольку они должны меняться реже, чем домашний директор пользователя.
Еще одно важное соображение - куда ставить резервные копии. Bacula
поддерживает внешние устройства хранения, такие как ленты, которые не являются смонтированными файловыми системами. tar
также поддерживает архивы ленты. У большинства домашних пользователей есть какое-то USB или сетевое хранилище, которое используется для хранения резервных копий.
Давайте предположим, что резервные копии должны храниться на /mnt/backups/
и давайте предположим, что домашний каталог пользователя (и его подкаталоги) должен быть зарезервирован и восстановлен.
% cat <<EOF >/usr/local/bin/full-backup
#!/bin/bash
# full-backup SRCDIRS [--options]
# incr-backup SRCDIRS [--options]
#
# set destdir to the path at which the backups will be stored
# each backup will be stored in a directory of the date of the
# archive, grouped by month. The directories will be:
#
# /mnt/backups/2014/01
# /mnt/backups/2014/02
# ...
# the full and incremental files will be named this way:
#
# /mnt/backups/2014/01/DIR-full-2014-01-24.192832.tgz
# /mnt/backups/2014/01/DIR-incr-2014-01-25.192531.tgz
# ...
# where DIR is the name of the source directory.
#
# There is also a file named ``lastrun`` which is used for
# its last mod-time which is used to select files changed
# since the last backup.
$PROG=${0##*/} # prog name: full-backup or incr-backup
destdir=/mnt/backup
now=`date +"%F-%H%M%S"`
monthdir=`date +%Y-%m`
dest=$destdir/$monthdir/
set -- "$@"
while (( $# > 0 )) ; do
dir="$1" ; shift ;
options='' # collect options
while [[ $# -gt 0 && "x$1" =~ x--* ]]; do # any options?
options="$options $1"
shift
done
basedir=`basename $dir`
fullfile=$dest/$basedir-full-$now.tgz
incrfile=$dest/$basedir-incr-$now.tgz
lastrun=$destdir/lastrun
case "$PROG" in
full*) archive="$fullfile" newer= kind=Full ;;
incr*) archive="$incrfile" newer="--newer $lastrun" kind=Incremental ;;
esac
cmd="tar cfz $archive $newer $options $dir"
echo "$kind backup starting at `date`"
echo ">> $cmd"
eval "$cmd"
echo "$kind backup done at `date`"
touch $lastrun # mark the end of the backup date/time
exit
EOF
(cd /usr/local/bin ; ln -s full-backup incr-backup )
chmod +x /usr/local/bin/full-backup
Как только этот сценарий настроен и доступен, его можно запланировать с помощью cron
, Увидеть man cron
, использование cron -e
создавать и редактировать запись в crontab для вызова full-backup
один раз в неделю (скажем) и еще одна запись в crontab для вызова incr-backup
один раз в день. Ниже приведены три примера записей в crontab (см. man 5 crontab
подробности о синтаксисе) для выполнения инкрементного и полного резервного копирования, а также для удаления старых архивов.
# run incremental backups on all user home dirs at 3:15 every day
15 3 * * * /usr/local/bin/incr-backup /Users
# run full backups every sunday, at 3:15
15 3 * * 7 /usr/local/bin/full-backup /Users
# run full backups on the entire system (but not the home dirs) every month
30 4 * 1 7 /usr/local/bin/full-backup / --exclude=/Users --exclude=/tmp --exclude=/var
# delete old backup files (more than 60 days old) once a month
15 3 * 1 7 find /mnt/backups -type f -mtime +60 -delete
Восстановление из этих резервных копий - упражнение, оставленное на потом.
Удачи.
Я не думаю, что это имеет смысл иметь запланированный скрипт cron для активации Bacula.
Стандартный способ планирования резервного копирования с использованием bacula: 1) Установите демон-файл Bacula на машину, на которую вы хотите сделать резервную копию, а затем 2) Настройте каталог Bacula для планирования резервного копирования.
объявление 1) Если ваша машина для резервного копирования - Debian или Ubuntu, вы можете установить демон файлов Bacula из оболочки следующим образом: shell> apt-get install bacula-fd (bacula-fd означает Bacula File Daemon) Если ваша машина для резервного копирования Windows, вам нужно скачать демон Bacula и установить его. Вы можете скачать здесь: http://sourceforge.net/projects/bacula/files/Win32_64/ (выберите версию, соответствующую версии вашего сервера Bacula)
ad 2) Вам нужно найти файл bacula-dir.conf на вашем сервере Bacula (если вы установили Bacula Director на машине с Ubuntu, то путь будет следующим: /etc/bacula/bacula-dir.conf) Bacula-dir. Секция conf графика очень гибкая и, следовательно, несколько сложная, вот пример:
Schedule {
Name = "MonthlyCycle"
Run = Level=Full on 1 at 2:05 # full backup the 1. of every month at 2:05.
Run = Level=Incremental on 2-31 at 2:05 # incremental backup all other days.
}
Обратите внимание, что для запуска Bacula требуется намного больше настроек, вот полное руководство по установке, настройке, резервному копированию и восстановлению Bacula: http://webmodelling.com/webbits/miscellaneous/bacula.aspx (заявление об отказе от ответственности: я написал Bacula самоучитель)