Um backup incremental simples no Linux com dar

Todos os dias, um script de backup incremental é executado na minha máquina Linux e armazena arquivos importantes:

  • .bashrc
  • .vimrc
  • .ssh
  • .config
  • etc.

dar é uma ótima ferramenta para criar scripts de backup incrementais simples.

Os arquivos de backup são armazenados em um compartilhamento de servidor, montado com montagem automática e cifs.

  • crie um .backup em sua casa e preencha a matriz e o caminho de destino.
  • execute o backup com cron (crontab -e)

código

#!/bin/bash
#====================================================================================
# author: Mathieu Ruellan
# description: do a full or incremental backup of my environment every day with dar.
#
# ensure you have a $HOME/.backup file like this
#
##### $HOME/.backup template ######
# # array of files or directories to backup
# # do not put "/" at the beginning of each path!!!
# declare -a FILES_TO_BACKUP=(
# "home/mathieur/path1"
# "home/mathieur/path2"
# )
#
# # backup directory
# BACKUP_PATH=/mybackupdirectory (with automount)
#
##################################
#
#====================================================================================


[ -f "${HOME}/.backup" ] || { echo "${HOME}/.backup file not found" ; exit 1 ; }

source $
{HOME}/.backup

#do a full backup every 100 days. Otherwise do an incremental backup
MODULO
=100

# compresss format extensions: don't need to be compressed
NO_COMPRESSION_OPTIONS
='-an -Z "*.gz" -Z "*.bz2" -Z "*.zip" -Z "*.png" -Z "*.jpg" -Z "*.jpeg" -Z "*.avi" -Z "*.mpg" -Z "*.mpeg" -Z "*.mp3" -Z "*.ogg" -Z "*.rar" -Z "*.zoo" -Z "*.arj" -Z "*.flac" -Z "*.mkv" -Z "*.3gp" -Z "*.mp4" '

DAR_OPTIONS
=" -R / -Q -v -w -z -s 1G -q"

command
-v dar >/dev/null 2>&1 || { echo >&2 "dar required but it's not installed. Aborting."; exit 1; }
command
-v ionice >/dev/null 2>&1 || { echo >&2 "ionice required but it's not installed. Aborting."; exit 1; }

DATE
=$(date +"%Y-%j")
CATALOG_FILE
=${BACKUP_PATH}catalog
DAY_YEAR
=`date +%j` # day Number e.g 37
MODULO_MONTH
=$(expr ( ${DAY_YEAR} - 1 ) % ${MODULO} )


doFullBackup
=0
[ "$MODULO_MONTH" -eq 0 ] && doFullBackup=1
[ ! -f "${CATALOG_FILE}.1.dar" ] && doFullBackup=1

for F in ${FILES_TO_BACKUP[@]} ; do
OPTIONS
=" $OPTIONS -g ${F} "
done

OPTIONS
=" $OPTIONS $NO_COMPRESSION_OPTIONS $DAR_OPTIONS "


if [ $doFullBackup = 1 ] ; then
TARGET
="${BACKUP_PATH}FULL.${DATE}"
echo
"+ Doing Dar full Backup $TARGET !!!"
ionice
-c 3 dar -c $TARGET $OPTIONS || { echo >&2 "dar failure"; exit 1; }
else
echo
"+ Doing Dar Diff Backup $TARGET!!!"
TARGET
="${BACKUP_PATH}DIFF.${DATE}"
ionice
-c 3 dar -c $TARGET -A $CATALOG_FILE $OPTIONS || { echo >&2 "dar failure"; exit 1; }
fi

[ -f "${CATALOG_FILE}.1.dar" ] && rm -rf ${CATALOG_FILE}.*

dar
-C "${CATALOG_FILE}" -A $TARGET || { echo >&2 "catalog built failure"; exit 1; }