[[ backup Ubuntu ]]

Ubuntu

backup Ubuntu

Скрипт архивации рабочей системы по расписанию.
Архивирует корень файловой системы с исключением не нужных папок и файлов.
Контроль количества файлов и запись действий в лог.

crontab

10 1     1 * *  root    ( /root/scripts/backup-ubuntu >> /home/backup/backup-ubuntu.log 2>&1 )

/root/scripts/backup-ubuntu

#!/bin/bash
SCRIPTNAME="backup ubuntu"

# !!! Директории слешами НЕ закрывать  !!!
BACKUPDIR=/mnt/backup
# Максимально число хранимых архивов
MAXNUMBER=2

NOWDATE=`date '+%Y%m%d'`
DOTNAME="\.tar\.bz2"
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 "Для работы требуются права root!"
  end_msg
  exit 1
 fi

# Проверка директорий
if [ ! -d "$BACKUPDIR" ]; then
  echo "Директория BACKUPDIR=$BACKUPDIR не верна"
  end_msg
  exit 1
 fi

############### Начало архивации ################
# --exclude= исключает файлы или директории
echo "Процесс архивации ..."

cd / && tar cjpf $BACKUPDIR/backup-ubuntu.$NOWDATE.tar.bz2 / --exclude=/proc/* --exclude=/dev/* --exclude=/sys/* --exclude=/tmp/* \
--exclude=/var/cache/apt/archives/*.deb --exclude=$BACKUPDIR/*

##################################################

### Контроль количества файлов ###
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

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
213 -14​ = 
 
handmade/bash/backup_ubuntu.txt · Последнее изменение: 2022/08/31 14:53 — 127.0.0.1
Gentoo Linux Gentoo Linux Driven by DokuWiki