top
logo


Резервное копирование linux сервера PDF Печать E-mail
Автор: Administrator   
19.05.10 12:52

Резервное копирование linux сервера


Задача: резервное копирование linux сервера.

Хотя грамотно настроенный сервер на базе ОС Linux весьма надежен, тем не менее, необходимо
предусмотреть сценарий восстановления в случае возникновения непредвиденных ситуаций.

У меня давняя нелюбовь к клонированию из-за избыточного места занимаемого образами системы.
Посему мой выбор – резервное копирование основных конфигурационных файлов. Периодичность?
Как минимум раз в неделю. Резервные копии хранятся как локально на сервере, так и на удаленных
серверах windows и linux.

Для возможности копирования архива на удаленные сервера необходимо создать соответствующие
учетные записи как на удаленном windows сервере, так и на удаленном linux сервере.

Локально на компьютере, где производится резервное копирование, устанавливаем smbclient для
работы по протоколу SMB/CIFS.

aptitude install smbclient

Для доступа к удаленному linux серверу генерируем ключи для работы с удаленным сервером
linux посредством ssh, пароль ключа при этом оставляем пустым:

ssh-keygen -t rsa -b 4094

Копируем публичный ключ на сервер

ssh-copy-id -i $HOME/.ssh/id_rsa.pub backup_server

Сам скрипт резервного копирования.

#!/bin/sh
 
# Скрипт резервного копирования системы
 
# Автор: Захаров Сергей Васильевич
# e-mail: sv(собака)sadmin.pp.ua
# icq: 222212387
# Сайт: http://www.sadmin.pp.ua
# Дата создания файла: 2010-02-10
 
# имя компьютера
COMP=server
# имя и расположение tar
TAR=/bin/tar
 
SCRIPT_DIR=`pwd`
 
# Что бекапим
DIR_SOURCE="/boot \
/etc \
/root \
/usr/local \
/var/cache/bind \
/var/log"

 
# Лог
LOG="/srv/backup/system_state/archive_$COMP.log"
ERRORLOG="/srv/backup/system_state/archive_error_$COMP.log"
 
# Временный каталог
DIR_TEMP="/srv/backup/system_state"
 
# Где храним бекапы
DIR_TARGET="/srv/backup/system_state/$COMP"
 
# Параметры доступа к mysql
MYSQL_DUMP=/usr/bin/mysqldump
MYSQL_PARAM="--add-drop-table -uUSER -pPASSWORD --databases"
 
# Параметры копирования на win-сервер
SMBSERVER="//backup_server_win/backup$ -U backup_user%password"
SMBCOMMAND="cd system_state\server; lcd $DIR_TEMP; prompt; mput *.gz"
 
# Параметры копирования на linux-сервер
SCPCOMMAND="-i /srv/backup/.ssh/id_rsa $DIR_TEMP/*.gz"
SCPSERVER="backup_user@backup_server_linux:/srv/backup/system_state/$COMP"
 
echo "$(date +%F_%R:%S) #################### Start script ####################" >> $LOG
echo "$(date +%F_%R:%S) Начало архивации" >> $LOG
 
# Информация которая может пригодится при восстановлении
/sbin/fdisk -l > $SCRIPT_DIR/fdisk.bak 2> /dev/null
/usr/sbin/dmidecode > $SCRIPT_DIR/dmidecode.bak 2> /dev/null
/bin/cat /etc/fstab > $SCRIPT_DIR/fstab.bak 2> /dev/null
/usr/bin/dpkg -l > $SCRIPT_DIR/dpkg.bak 2> /dev/null
/bin/dmesg > $SCRIPT_DIR/dmesg.bak 2> /dev/null
/usr/bin/lspci > $SCRIPT_DIR/lspci.bak 2> /dev/null
 
# Если используете LVM может пригодиться следующее
/sbin/pvdisplay > $SCRIPT_DIR/pvdisplay.bak 2> /dev/null
/sbin/vgdisplay > $SCRIPT_DIR/vgdisplay.bak 2> /dev/null
/sbin/lvdisplay > $SCRIPT_DIR/lvdisplay.bak 2> /dev/null
 
#У меня в качестве MTA - exim
echo "$(date +%F_%R:%S) Дамп бд mysql и exim" >> $LOG
#database mysql, exim
$MYSQL_DUMP $MYSQL_PARAM exim > $SCRIPT_DIR/exim.sql
$MYSQL_DUMP $MYSQL_PARAM mysql > $SCRIPT_DIR/mysql.sql
 
 
if $TAR -cpf $DIR_TEMP/full-$(date +%F_%H-%M).tar.gz $DIR_SOURCE $SCRIPT_DIR/{*.bak,*.sql,*.sh} 2>> $ERRORLOG
then echo "$(date +%F_%R:%S) Архивация прошла успешно" >> $LOG
else echo "$(date +%F_%R:%S) При архивации произошла ОШИБКА" >> $LOG
fi
 
echo "$(date +%F_%R:%S) Копирование архива на win-сервер" >> $LOG
if smbclient $SMBSERVER -c "$SMBCOMMAND" 2>> $ERRORLOG
then echo "$(date +%F_%R:%S) Архив успешно скопирован на win-сервер" >> $LOG
else echo "$(date +%F_%R:%S) При копировании на win-сервер произошла ОШИБКА" >> $LOG
fi
 
echo "$(date +%F_%R:%S) Копирование архива на linux-сервер" >> $LOG
if scp $SCPCOMMAND $SCPSERVER
then echo "$(date +%F_%R:%S) Архив успешно скопирован на linux-сервер" >> $LOG
else echo "$(date +%F_%R:%S) При копировании на linux-сервер произошла ОШИБКА" >> $LOG
fi
 
# Перемещение архива из временного каталога в локальное хранилище
if mv $DIR_TEMP/*.gz $DIR_TARGET
then find $DIR_TARGET -type f -ctime +62 -name "*.gz" -exec rm {} \;
#Удаление из локального хранилища файлов двух месячной давности
else echo "$(date +%F_%R:%S) При перемещении архива из временного каталога в локальное хранилище возникла ОШИБКА" >> $LOG
fi
 
rm -f $SCRIPT_DIR/{*.bak,*.sql}
 
echo "$(date +%F_%R:%S) ##################### End script #####################" >> $LOG
echo "" >> $LOG

В файл /etc/crontab добавляем задание

# System_state
0 18 * * 7 root /srv/backup/system_state.sh

выполнять резервное копирование каждое воскресенье в шесть вечера.

Получаемый лог:

2010-02-12_14:29:29 #################### Start script ####################
2010-02-12_14:29:29 Начало архивации
2010-02-12_14:29:45 Архивация прошла успешно
2010-02-12_14:29:45 Копирование архива на win-сервер
2010-02-12_14:30:04 Архив успешно скопирован на win-сервер
2010-02-12_14:30:04 Копирование архива на linux-сервер
2010-02-12_14:30:18 Архив успешно скопирован на linux-сервер
2010-02-12_14:30:18 ##################### End script #####################


оригинал: тут
Последнее обновление 19.05.10 13:00
 
Интересная статья? Поделись ей с другими:

bottom

 

Unreal Commander PfSense по русски Яндекс.Метрика