Ежедневные инкрементальные бэкапы
Инструкция как сделать ежедневные инкрементальные бэкапы. Скрипт создает бэкапы по датам с симлинками на уже существующие файлы, чтобы они место не занимали.
1) Создайте файл:
#!/bin/bash
SOURCE_DIRECTORY="/srv"
DEST_DIRECTORY="/backup"
LINK_DIRECTORY="$DEST_DIRECTORY/last"
RSYNC_OPTS="-aSsuhz --numeric-ids --info=progress2"
CURRENT_DATE=`date '+%Y-%m-%d'`
# Remove old backups
for i in $(seq 0 6); do
DAY=$((i+30))
LAST_DATE=`date '+%Y-%m-%d' -d "$DAY days ago"`
rm -rf "$DEST_DIRECTORY/$LAST_DATE"
done
# Check link directory
if [ -d "$LINK_DIRECTORY" ]; then
REAL_LINK_PATH=$(readlink -f "$LINK_DIRECTORY")
if [ "$REAL_LINK_PATH" == "$DEST_DIRECTORY/$CURRENT_DATE" ]; then
exit 1
fi
fi
# Use lasts backup as the incremental base if it exists
if [ -d "$LINK_DIRECTORY" ]; then
RSYNC_OPTS="$RSYNC_OPTS --link-dest $LINK_DIRECTORY"
fi
# Rsync
rsync $RSYNC_OPTS $SOURCE_DIRECTORY/ $DEST_DIRECTORY/$CURRENT_DATE/
# Recreate symlink
if [ $? -eq 0 ] && [ ! -z $LINK_DIRECTORY ]; then
yes | rm -f $LINK_DIRECTORY
ln -s $DEST_DIRECTORY/$CURRENT_DATE $LINK_DIRECTORY
fi
Поменяйте параметры SOURCE_DIRECTORY и DEST_DIRECTORY на свои значения.
2) Пропиши в крон строчку
0 0 * * * /path/to/backup/script.sh > /dev/null
Дополнительные ссылки: