Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
BACKUP_DIR=/backup/
backup() {
NAME=$1
SERVER=$2
PORT=$3
echo ""
echo "==========$NAME=========="
#создадим папку и проинициализируем git в первый раз
if [ ! -d $BACKUP_DIR$NAME ]; then
mkdir $BACKUP_DIR$NAME
cd $BACKUP_DIR$NAME;
git init
else
cd $BACKUP_DIR$NAME
fi
echo "prepare: `date`"
#заставим сервер сделать бэкап (БД, ldap и прочее. Что нельзя забирать напрямую с ФС).
ssh $SERVER -p $PORT /pathToScript/prepareBackup.sh
echo "rsync: `date`"
#забираем данные
rsync -avzh --compress-level=9 --delete --include-from=$BASEPATH$NAME -e "ssh -p $PORT" $SERVER:/ .
echo "git: `date`"
#добавляем в git
git add . > /dev/null
#коммитим
git commit -a -mupdate > /dev/null
echo "complete: `date`"
}
backup "name1" "some.host.name1" 22
backup "name2" "some.host.name2" 22
+ /etc**
+ /var/
+ /var/backup**
+ /var/www
+ /var/www/host**
- /var/www/host/excluded**
- *
cd /var/backup/
su postgres -c "pg_dump dbName -f dbName.sql"
slapcat > ldap.ldif
bash: Бэкап без лишнего ПО
… с использованием минимума стороннего ПО...
TN — TASKNAME
SRCD — SouRCe Directory
TGTD — TarGeT Directory
#!/bin/sh
# local dom0 host
HOST=zzzzzzz
# volume group
VG=vg00
# file containing volume names
LV=$1
# PID file
PID=/tmp/rdiff-backup-lv.pid
# remote path to backup server (requires SSH-RSA auth)
BACKUP_PATH=remote@xxxx.xxxx.com::/opt/remote-backups
# period to keep old backups
KEEP_BACKUPS_FOR=2W
echo "Backing up $LV from $VG"
SNAP=snap_$LV
if [ -f $PID ]; then
if [ `ps ax | grep \`cat $PID\`| grep $0 | wc -l` -eq 0 ]; then
echo "Previous run didn't end well; removing process $PID"
rm $PID
else
echo "Backup still runs, can't start another instance"
exit 1
fi
fi
echo $$ >$PID
(
if [ -e /dev/$VG/$SNAP ]; then
umount /mnt/snap
lvremove -f /dev/$VG/$SNAP
fi
if ! lvcreate --size 1G --snapshot --name $SNAP /dev/$VG/$LV; then
exit 1
fi
if ! mount -o ro /dev/$VG/$SNAP /mnt/snap; then
lvremove -f /dev/$VG/$SNAP
exit 1
fi
) 1>&2 </dev/null || exit 1
if [ -f /mnt/snap/exclude-from-backup ]; then
rm -f /tmp/exclude-from-backup
for l in `cat /mnt/snap/exclude-from-backup`; do echo /mnt/snap$l >> /tmp/exclude-from-backup; done
OPTIONS="--exclude-filelist /tmp/exclude-from-backup"
else
OPTIONS="--exclude-device-files --exclude-sockets"
fi
if [ ! -d /mnt/snap/etc ]; then
echo "Image doesn't seem to be mounted properly"
umount /mnt/snap
exit 1
fi
rdiff-backup $OPTIONS /mnt/snap $BACKUP_PATH/$HOST-$LV
rdiff-backup --force --remove-older-than $KEEP_BACKUPS_FOR $BACKUP_PATH/$HOST-$LV
(
umount /mnt/snap
lvdisplay /dev/$VG/$SNAP
lvremove -f /dev/$VG/$SNAP
rm $PID
) 1>&2 </dev/null
#!/bin/bash
if [ $UID -ne 0 ] ; then
echo "Error: you must be root" >&2
exit 1
fi
ARCHIVE="/tmp/etc.$(hostname).$(date '+%d%m%Y').gz"
grep -e "^#F/" ${0} | sed 's/#F//' | while read FNAME ; do
if [ -d ${FNAME} ] ; then
find ${FNAME} -xtype f
elif [ -f ${FNAME} ] ; then
echo ${FNAME}
else
echo "Warning: file ${FNAME} no found" >&2
fi
done | cpio -o -H tar --quiet | gzip -9c >${ARCHIVE}
s3cmd --no-progress put ${ARCHIVE} s3://bucket/backup/
rm -f ${ARCHIVE}
#F/usr/bin/etc.backup
#F/etc/ssh/sshd_config
#F/etc/network/if-pre-up.d/iptables
#F/etc/iptables.rules
bash: Бэкап без лишнего ПО