Backup-Skript
Dies ist mein Backup-Skript. Es gibt viele andere, aber dieses ist meins.
Ziel ist es, von einem Verzeichnis eine (in diesem Fall 15-tägige) Historie anzulegen. Damit dabei nicht Unmengen an Plattenplatz verbraucht werden, werden für Dateien, die sich nicht geändert haben, Hardlinks verwendet.
#!/bin/bash # This script should be started after midnight. NR_OF_BACKUPS=15 SOURCE="/path/to/data-folder/" TARGET="/path/to/backup-folder/" EXCLUDE="lost+found" ############################################################################### # Delete outdated backups ############################################################################### # Create complete list of backups BACKUPS=($(find ${TARGET} -mindepth 1 -maxdepth 1 -type d | sort -r)) # Create list of backups to delete BACKUPS_TO_DELETE=${BACKUPS[@]:${NR_OF_BACKUPS}-1} # Delete outdated backups for BACKUP in ${BACKUPS_TO_DELETE[@]}; do echo "Deleting ${BACKUP}" rm -rf ${BACKUP} done ############################################################################### # Create latest backup ############################################################################### YESTERDAY="$(date -d yesterday +%Y-%m-%d)" echo "Creating backup for ${YESTERDAY}" rsync -a --delete --exclude "${EXCLUDE}" "${SOURCE}" "${TARGET}${YESTERDAY}/" --link-dest="${TARGET}last/" ln -nsf "${TARGET}${YESTERDAY}" "${TARGET}last" exit 0
Die Hauptlast der Arbeit übernimmt dabei rsync
mit folgenden Optionen:
Option | Beschreibung |
---|---|
-a | Archive-Modus; entspricht -rlptgoD (rekursiv in Verzeichnisse, kopiere Symlinks als Symlinks, erhalte Berechtigungen, Änderungszeiten, Gruppe, Besitzer, Gerätedateien und Spezialdateien) |
–delete | Lösche fremde Dateien in den Zielverzeichnissen |
–exclude PATTERN | Schließe Dateien, die PATTERN entsprechen, aus |
–link-dest=DIR | Setze Hardlink zu Dateien in DIR, wenn diese unverändert sind |
Das Skript läuft einmal täglich, konfiguriert über crontab -e
(bei mir um 4:00 Uhr nachts):
# m h dom mon dow command 0 4 * * * /path/to/backup_nas.sh