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