rsync_backup.sh

Nombre: rsync_backup.sh
Autor: Fidel Ramos (haplo)
Lenguaje: sh/bash
Licencia: GPL
Propósito: realizar copias de seguridad de un directorio a una partición encriptada usando los algoritmos de copia inteligente de rsync. Yo lo uso para montar una partición en un disco duro externo USB, y tener una copia completa de mi directorio home (140 gigas).
Dependencias: rsync, cryptsetup

Código:

#!/bin/bash

unset PATH

MAPPER_NAME=encrypted_partition
MOUNT_POINT=/mnt/backup
BACKUP_DIR=$HOME

ECHO=/bin/echo
GREP=/bin/grep
MOUNT=/bin/mount
UMOUNT=/bin/umount
CRYPTSETUP=/sbin/cryptsetup
RSYNC=/usr/bin/rsync

$ECHO "Initiating backup to $MOUNT_POINT"

if $MOUNT | $GREP $MAPPER_NAME >/dev/null
then
    $ECHO "$MOUNT_POINT already mounted."
    else
        if $CRYPTSETUP luksOpen /dev/sdb5 $MAPPER_NAME
    then
            $ECHO "cryptsetup luksOpen OK"
        else
        $ECHO "cryptsetup luksOpen of $MAPPER_NAME FAILED!!!"
        exit 1
    fi

        if $MOUNT /dev/mapper/$MAPPER_NAME $MOUNT_POINT
    then
            $ECHO "mount OK"
        else
        $ECHO "mount to $MOUNT_POINT FAILED!!!"
        exit 2
    fi
    fi

    $ECHO "Initiating rsync backup"
    if $RSYNC -av --delete $BACKUP_DIR $MOUNT_POINT
    then
        $ECHO "rsync completed successfully"
else
    $ECHO "rsync FAILED!!!"
        $ECHO "Backup partition still mounted at $MOUNT_POINT."
    exit 3
    fi

    if $UMOUNT $MOUNT_POINT
    then
        $ECHO "umount OK"
else
    $ECHO "umount of $MOUNT_POINT FAILED!!!"
        exit 2
fi

if $CRYPTSETUP luksClose /dev/mapper/$MAPPER_NAME
then
    $ECHO "cryptsetup luksClose OK"
    else
        $ECHO "cryptsetup luksClose of $MAPPER_NAME FAILED!!!"
    exit 1
    fi

    $ECHO "Backup complete."
    exit 0

Ejemplos de uso:

nexus:/home/haplo# sync_backup.sh
Initiating backup to /mnt/iomega_backup/
cryptsetup luksOpen OK
mount OK
(gran gran listado de ficheros actualizados y borrados)
rsync completed successfully
umount OK
cryptsetup luksClose OK
Backup complete.

Comentarios:
Si no se quiere usar particiones cifradas se puede comentar los bloques relativos a cryptsetup.

Para crear la partición encriptada en el disco duro externo usé estos dos magníficos tutoriales:
http://www.hermann-uwe.de/blog/howto-disk-encryption-with-dm-crypt-luks-...
http://www.g-loaded.eu/2005/11/10/encrypt-devices-using-dm-crypt-and-luk...

El backup puede hacerse con la partición montada y mientras se trabaja con el sistema normalmente. Si ocurre algún error durante la copia con rsync bastaría con volver a ejecutar el script y dejar que siga.