backup Gentoo
Скрипт архивации рабочей системы по расписанию.
Архивирует корень файловой системы с исключением не нужных папок и файлов.
Контроль количества файлов и запись действий в лог.
10 1 1 * * root ( /root/scripts/backup-gentoo >> /home/backup/backup-gentoo.log 2>&1 )
#!/bin/bash
SCRIPTNAME="backup Gentoo"
## !!! Директории слешами НЕ закрывать !!!
BACKUPDIR="/home/backup/gentoo"
## Максимально число хранимых архивов
MAXNUMBER=3
NOWDATE=`date '+%Y%m%d'`
DOTNAME="\.tar\.gz"
UID_ROOT=0
## Сообщение по завершению выполнения
function end_msg() {
echo "========== `date '+%Y-%m-%d %H:%M'` END $SCRIPTNAME =========="
echo ""
}
## Сообщение о начале выполнения
echo "========== `date '+%Y-%m-%d %H:%M'` START $SCRIPTNAME =========="
## Проверка прав
if [ "$UID" -ne "$UID_ROOT" ]; then
echo "Requires root privileges"
end_msg
exit 1
fi
## Проверка директорий
if [ ! -d "$BACKUPDIR" ]; then
echo -e "Directory does not exist:$BACKUPDIR"
end_msg
exit 1
fi
############### Начало архивации ################
## --exclude= исключает файлы или директории
echo "Процесс архивации ..."
cd / && tar czpf $BACKUPDIR/backup-gentoo.$NOWDATE.tar.gz / --exclude=$BACKUPDIR/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* \
--exclude=/usr/portage/* --exclude=/usr/src/linux-* --exclude=/mnt/cdrom/*
## Squid
#--exclude=/var/cache/squid/*
## OpenVZ
##--exclude=/vz/private/* --exclude=/vz/root/*
##### Контроль количества файлов #####
FILELIST=`ls $BACKUPDIR | sed -e '/[0-9]\{8\}'$DOTNAME'$/!d'`
FILENAMES=`echo "$FILELIST" | sed -e 's/\(^.*\)\([0-9]\{8\}'$DOTNAME'$\).*/\1/g' | sort -u`
for CURRENT in $FILENAMES; do
# Получение списка дат для текущего архива на удаление
TEMP1=`echo "$FILELIST" | sed -e '/\(^'$CURRENT'\)\([0-9]\{8\}\)\('$DOTNAME'$\)/!d' -e 's/\(^'$CURRENT'\)\([0-9]\{8\}\)\('$DOTNAME'$\)/\2/g' | sort -rn`
TEMP1=`echo "$TEMP1" | sed -e '1,'$MAXNUMBER'd'`
#Склеивание
for TEMP2 in $TEMP1; do
DELETELIST=`echo $CURRENT$TEMP2${DOTNAME//\\\/} && echo "$DELETELIST"`
done
DELETELIST=`echo "$DELETELIST" | sed -e '/^$/d'`
done
if [ -n "$DELETELIST" ]; then
echo "========== Файлы будут удалены =========="
echo "$DELETELIST"
fi
for CURRENT in $DELETELIST; do
rm $BACKUPDIR/$CURRENT
done
end_msg
exit 0
# Расшифровка tar
# z - сжатие .gz
# с - создать архив
# v - выводить процесс в консоль
# p - сохранить права
# f - файловый архив
Ротация логов
/home/backup/logs/*log {
size 3M
missingok
}
Обсуждение