Добрый день, помогите с написанием скрипта для диф бэкапа с помощью tar. На данный момент написан скрипт, который делает инкремент, но хочется дописать условие что бы делал диф, для этого надо сохранять файл метаданных созданный при последнем фулл бэкапе и подсовывать его ко всем последующим в течении 7 копий. Т.е. делается фулл потом 6 копий и когда количество файлов в папке достигает 7, они перемещаются в папку архив, старый файл метаданных удаляется и создается новый фул с новым файлом метаданных, вот я никак не могу сообразить, как написать условие, что бы этот файл например копировался с новым именем и потом уже со старым именем подставлялся для последующих бэкапов.
Сейчас это работает как инкрементальный бэкап.
#!/bin/bash
set -exu
######################### Начальные переменные #################################################
DAY=$(date +%Y%m%d_%H%M%S)
SOURCE="/test_folder"
BACKUP_FOLDER="/mnt/Backup_Files/current"
ARCHIVE_BACKUP_FOLDER="/mnt/Backup_Files/archive"
ARCHIVE_BACKUP_FOLDER_LOG="/mnt/Backup_Files/archive_log"
EXCLUDE_FILE="/tmp/.nobackup_dir"
NAME_SNAR="FILE.SNAR"
MAX_KOL_BACKUPS=7
VAR=0
FULL_BACK=0
######################### Проверка и создание директорий ########################################
if [[ ! -d ${BACKUP_FOLDER} ]]
then
mkdir -p ${BACKUP_FOLDER}
VAR=1
FULL_BACK=1
else
echo &>/dev/null
fi
if [[ ! -d ${ARCHIVE_BACKUP_FOLDER} ]]
then
mkdir -p ${ARCHIVE_BACKUP_FOLDER}
else
echo &>/dev/null
fi
if [[ ! -d ${ARCHIVE_BACKUP_FOLDER_LOG} ]]
then
mkdir -p ${ARCHIVE_BACKUP_FOLDER_LOG}
else
echo &>/dev/null
fi
if [[ ! -f ${EXCLUDE_FILE} ]]
then
touch ${EXCLUDE_FILE}
else
echo &>/dev/null
fi
########################### Счетчик количества бэкапов ###########################################
if [[ VAR -eq 0 ]]
then
KOL_BACKUPS=`ls -al ${BACKUP_FOLDER}/ | grep .tar.gz | wc -l` 2>/dev/null
else
KOL_BACKUPS=0
fi
########################### Перенос бэкапа в архив #################################################
if [[ ${KOL_BACKUPS} -eq ${MAX_KOL_BACKUPS} ]]
then
mv ${BACKUP_FOLDER}/*.tar.gz ${ARCHIVE_BACKUP_FOLDER}/
mv ${BACKUP_FOLDER}/*.log ${ARCHIVE_BACKUP_FOLDER_LOG}/
rm ${BACKUP_FOLDER}/*.SNAR
FULL_BACK=1
else
echo &>/dev/null
fi
########################### Создание резервной копии ###############################################
if [[ ${FULL_BACK} -eq 1 ]] || [[ ${KOL_BACKUPS} -eq 0 ]]
then
tar --exclude-from=${EXCLUDE_FILE} -v -c \
-f ${BACKUP_FOLDER}/FULL-${DAY}.tar.gz -I pigz \
--listed-incremental=${BACKUP_FOLDER}/${NAME_SNAR} $SOURCE &> ${BACKUP_FOLDER}/FULL-${DAY}.log
else
tar --exclude-from=${EXCLUDE_FILE} -v -c \
-f ${BACKUP_FOLDER}/DIFF-${DAY}.tar.gz -I pigz \
--listed-incremental=${BACKUP_FOLDER}/${NAME_SNAR} $SOURCE &> ${BACKUP_FOLDER}/DIFF-${DAY}.log
fi
########################## Удаление старых бэкапов #################################################
cd ${ARCHIVE_BACKUP_FOLDER}/ && ls -t | tail -n+15 | xargs -i rm '{}'
cd ${ARCHIVE_BACKUP_FOLDER_LOG}/ && ls -t | tail -n+15 | xargs -i rm '{}'