Ежедневные инкрементальные бэкапы

Инструкция как сделать ежедневные инкрементальные бэкапы. Скрипт создает бэкапы по датам с симлинками на уже существующие файлы, чтобы они место не занимали.

1) Создайте файл:

#!/bin/bash

SOURCE_DIRECTORY="user@example.com:/src"
DEST_DIRECTORY="/dest"


RSYNC_OPTS="-aSsuhz --numeric-ids --bwlimit=50000 --info=progress2"


# 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/backup.$LAST_DATE"
done


# Use lasts backup as the incremental base if it exists
if [ -d "$DEST_DIRECTORY/last" ]
then
	RSYNC_OPTS="$RSYNC_OPTS --link-dest $DEST_DIRECTORY/last"
fi


# Rsync
CURRENT_DATE=`date '+%Y-%m-%d_%H%M%S'`
rsync $RSYNC_OPTS  "$SOURCE_DIRECTORY/"  "$DEST_DIRECTORY/backup.$CURRENT_DATE/"


# Recreate symlink
if [ -d "$DEST_DIRECTORY/last" ]
then
	yes | rm -f $DEST_DIRECTORY/last
fi


ln -s $DEST_DIRECTORY/backup.$CURRENT_DATE $DEST_DIRECTORY/last

Поменяйте параметры SOURCE_DIR и DEST_DIR на свои значения.

2) Пропиши в крон строчку

0 0 * * * /path/to/backup/script.sh > /dev/null

Дополнительные ссылки:

  1. Easy Automated Snapshot-Style Backups with Linux and Rsync
  2. Incremental backups with rsync and hard links