Резервное копирование в Linux

From SysadminWiki.ru
Jump to: navigation, search

Backup сервера Linux

Будем сохранять резервные копии выбранных каталогов и файлов каждый рабочий день и всего сервера один раз в неделю, с утра по понедельникам. Для этой цели используем два скрипта:


Копия важных файлов

/home/pavel/backup/backup.sh для ежедневной резервной копии:

# Backup main files

BDIR="/home/pavel/backup/data" #!! will be deleted after backup
LOGDIR=$BDIR/all_logs
DNSDIR=$BDIR/dns
CMDREPLY=$BDIR/cmd_reply.txt
PREFIX='/home/pavel/backup/'`hostname -s`-`date +%a`

mkdir $BDIR
mkdir $LOGDIR
mkdir $DNSDIR

# copy files to backup dir
cp -r /etc $BDIR
cp -r /var/lib/bind/etc $DNSDIR
cp -r /var/log $LOGDIR
cp /var/drweb/log/drwebd.log $LOGDIR
cp /usr/local/squid/var/logs/access.log $LOGDIR
cp /usr/local/squid/var/logs/cache.log $LOGDIR
cp /usr/local/squid/etc/squid.conf $BDIR

date > $CMDREPLY
echo "== iptables =============" >> $CMDREPLY
/sbin/iptables -t nat -L >> $CMDREPLY
echo "== route ================" >> $CMDREPLY
/sbin/route >> $CMDREPLY

#zip everything in the backup dir
tar -czvf $PREFIX.tar.gz $BDIR > $PREFIX.log

# clean up
rm -rf $BDIR


Копия всего сервера

/home/pavel/backup/backup_all.sh для резервного копирования всего сервера:

# Backup all files on this server

tar cvzf /home/pavel/backup/koks3_all.tar.gz / --exclude={"/proc","/sys","/tmp","/home","/var/spool/squid","/var/log","/var/cache/apt/archives"}

если регулярные выражения не поддерживаются, то можно каждый каталог, который мы не хотим помещать в резервную копию, отмечать параметром --exclude

cd /
tar cvzf - . --exclude ./home/pavel/backup --exclude ./home/pavel/.apt --exclude ./usr/local/squid/var --exclude ./var/cache/apt/archives --exclude ./proc > /home/pavel/backup/teo_backup_all.tar.gz

Теперь добавим запуск этих скриптов в /etc/crontab:

# backup of the system
0 23 * * 1-5 root /home/pavel/backup/backup.sh
0 23 * * 0 root /home/pavel/backup/backup_all_teo.sh


Backup удалённого сервера Linux

Ситуация: на удалённом сервере (10.0.0.4) маленький жёсткий диск и резервная копия там не поместиться. В этом случае создавать и сохранять резервную копию удалённого сервера будем на нашем сервере. Создаём скрипт /home/pavel/backup/backup_all_remote.sh:

# Backup all files on remote serv2

ssh 10.0.0.4 "cd /; tar cvzf - . --exclude ./home/pm/backup --exclude ./home/pm/app --exclude ./usr/local/squid/var --exclude ./proc" > /home/pavel/backup/serv2_backup_all.tar.gz

Для выполнения этого скрипта нужно, чтоб на удалённом сервере был разрешён вход пользователю root по протоколу ssh, т.е. в /etc/ssh/sshd_config:

PermitRootLogin yes

Если создать сертификат на сервер, то можно будет входить и без пароля, а тогда скрипт можно будет включить в /etc/crontab (см. статью Терминальное подключение к серверу Linux с помощью ключей ssh без паролей). Без этого придётся вводить пароль и, соответственно, автоматического бэкапа не получится.

Перенос созданных копий на Windows машину

Созданные на linux серверах резервные копии, мы будем еженедельно копировать на свой компьютер под управлением Windows и записывать на CD/DVD-RW. Для анализа возможных сбоев процесс копирования записываем в лог. Создаём папку F:\Backup, куда кладём скрипт и файл с его параметрами. Также создадим папки для каждого копируемого сервера, напр teo и serv2 F:\Backup\backup_linux_week.cmd:

@rem code by Pavel Malakhov 2005.04.13
@rem
@rem This will get backup files from linux servers via ftp weekly.
@rem

date /t > bk_week.log
time /t >> bk_week.log
ftp -s:bk_week.txt >> bk_week.log

в файле параметров F:\Backup\bk_week.txt указываем к какому серверу подсоединяемся, кем, с каким паролем, что будем брать и куда класть:

open 10.0.0.2
pavel
password
cd /home/pavel/backup

get teo-Tue.log          f:\backup\teo\teo-Tue.log
get teo-Tue.tar.gz       f:\backup\teo\teo-Tue.tar.gz
get teo-Mon.log          f:\backup\teo\teo-Mon.log
get teo-Mon.tar.gz       f:\backup\teo\teo-Mon.tar.gz
get teo-Fri.log          f:\backup\teo\teo-Fri.log
get teo-Fri.tar.gz       f:\backup\teo\teo-Fri.tar.gz
get teo-Thu.log          f:\backup\teo\teo-Thu.log
get teo-Thu.tar.gz       f:\backup\teo\teo-Thu.tar.gz
get teo-Wed.log          f:\backup\teo\teo-Wed.log
get teo-Wed.tar.gz       f:\backup\teo\teo-Wed.tar.gz
get teo_backup_all.tar.gz    f:\backup\teo\teo_backup_all.tar.gz
get serv2_backup_all.tar.gz  f:\backup\serv2\serv2_backup_all.tar.gz
close

open 10.0.0.4
pm
password
cd /home/pm/backup
get serv2-Fri.log        f:\backup\serv2\serv2-Fri.log
get serv2-Fri.tar.gz     f:\backup\serv2\serv2-Fri.tar.gz
get serv2-Mon.log        f:\backup\serv2\serv2-Mon.log
get serv2-Mon.tar.gz     f:\backup\serv2\serv2-Mon.tar.gz
get serv2-Thu.log        f:\backup\serv2\serv2-Thu.log
get serv2-Thu.tar.gz     f:\backup\serv2\serv2-Thu.tar.gz
get serv2-Tue.log        f:\backup\serv2\serv2-Tue.log
get serv2-Tue.tar.gz     f:\backup\serv2\serv2-Tue.tar.gz
get serv2-Wed.log        f:\backup\serv2\serv2-Wed.log
get serv2-Wed.tar.gz     f:\backup\serv2\serv2-Wed.tar.gz

by

Есть нюанс, который я ещё не смог обойти: при переносе файла меняется дата его создания на текущюю.

Добавляем задание по запуску этого скрипта по понедельникам в 4:00:

Пуск - Настройка - Панель управления - Назначенные задания - Добавить задание