Backup Linux сервера

Материал из Ай да Linux Wiki
Перейти к навигации Перейти к поиску

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. Без этого придётся вводить пароль и, соответственно, автоматического бэкапа не получится.

Ссылки

sysadminwiki.ru