Так вот, я теперь отношусь ко второму типу и, в связи с этим, озаботился проблемой автоматизированного бэкапа. Хотелось простое и надежное решение. Пробовал amanda - впечатлило, но решение не очень тривиальное и прежде чем восстанавливать из бэкапа пришлось бы читать доки.
Выбор пал на стандартный набор из dump и restore.
Написал небольшой скрипт для автоматизации процесса бэкапа.
Суть сводится к следующему:
В /mnt/backup подмонтировано NAS-устройство с массивом и поддержкой NFS. Вобщем сути это не меняет, можно и на отдельный физический диск бэкапить. Скрипт при запуске читает файл /usr/local/etc/backup_fs.conf и выдергивает из него названия разделов (типа da2s1a и т.д.). После чего в цикле выполняет команду dump с параметрами описанными в переменных dump_flags, backup_dir.
Backup level задается исходя из текущего дня недели, т.е. вот так:
Код: Выделить всё
case $day_of_week in
0) dump_level="1" ;;
1) dump_level="2" ;;
2) dump_level="1" ;;
3) dump_level="2" ;;
4) dump_level="3" ;;
5) dump_level="4" ;;
6) dump_level="0" ;;
esac
Полный бэкап делаем в субботу, чтобы у скрипта была возможность продолжать работу и в воскресенье (когда данных много - полный бэкап у меня делается 28 часов).
В остальные дни - инкрементный бэкап.
dump при запуске проверяет файл /etc/dumpdates (man dump на предмет ключа -u) и берет из него дату последнего бэкапа и уровень этого бэкапа. Исходя из этих данные он решает какие файлы были изменены с последнего бэкапа. Вобщем в man dump более понятным языком описан принцип работы возрастающего бэкапа.
Хотелось бы получить комментарии или идеи по доработке этого скрипта. Или может быть кто-нибудь поделится своими скриптами для dump'а? Вобщем критика и комменты приветствуются.
Файл backup_fs.sh (у меня расположен в /usr/local/bin)
Код: Выделить всё
#!/bin/sh
#
# Files, directories and other options
#
# Path to the configuration file
config_file="/usr/local/etc/backup_fs.conf"
# Path where we will store the backup files (without last slash).
backup_dir="/mnt/backup"
# Log file path.
log_file="/var/log/backup_fs.log"
# Start the dump script with the following flags (see man dump for more options).
dump_flags="-L -u -C 32 -f -"
day_of_week="`date +%w`"
date_time="`date +%d.%m.%Y' '%H:%M`"
# Default backup level. If something wrong with calculating current backup level.
dump_level="0"
#
# Start working
#
# Check if backup directory exist
if [ ! -d $backup_dir ] ; then
echo $date_time Fatal error! No such directory: $backup_dir>>$log_file
exit 1
fi
# Read the configuration file
. ${config_file}
# 0 - Sunday, 1 - Monday, ..., 6 - Saturday
# Other numbers: incremental backup levels
# Now we can make full backup (level 0) every Saturday (6)
case $day_of_week in
0) dump_level="1" ;;
1) dump_level="2" ;;
2) dump_level="1" ;;
3) dump_level="2" ;;
4) dump_level="3" ;;
5) dump_level="4" ;;
6) dump_level="0" ;;
esac
for device in ${devices}
do
dump -${dump_level} ${dump_flags} /dev/${device} > ${backup_dir}/dump_${device}_${day_of_week}_${dump_level}.img
echo $date_time Successfully dumped /dev/${device} to ${backup_dir}>>${log_file}
done
# EOF
Код: Выделить всё
#
# The default path of this file is /usr/local/etc/backup_fs.conf
# Filesystems to backup (without /dev/).
#
devices="da2s2a da2s2e da2s4d"
Еще хотел сделать так, чтобы названия разделов брались из fstab или хотя бы с вывода команды mount. Но не умею. Есть идеи как?