Llevaba ya tiempo teniendo problemas con el equipo de sobremesa de casa. Al principio pensé que era un problema de mi Debian (sacrílego de mí) y pensé en renovar el sistema poniendo una recién saluda Ubuntu 8.04. Para poder hacer ese cambio debía primero hacer un backup de todos nuestros datos, películas, música, etc etc y de paso dejar ese backup por si acaso. Así que lo primero fue comprar un disco duro externo de 750GB (109 euros en el Saturn de Massalfassar, Valencia).
El disco, con la idea de separar todo el multimedia de los verdaderos datos personales lo particioné de la siguiente forma: 150GB en ext2 y 600GB en FAT32. De esta forma tenía una partición que seguro no iba a poder estropear al conectar el disco en otro sitio que no fuera un linux.
Hecha la copia inicial y el cambio de sistema operativo me planteé cómo montar un sistema de backups que al menos me asegurara que los datos importantes que tenemos en el equipo no se pierden. Así llegué a mirar un montón de artículos sobre unison y especialmente rsync. Me quedé con éste último porque me pareció el más potente y versátil.
Al final lo que estaba mal no era Debian, sino el equipo y hemos tenido que adquirir uno nuevo pero gracias a los backups y demás no he tenido que sufrir mucho para dejarle a Aida la Ubuntu tal y como la tenía con el equipo anterior, con todas las configuraciones respetadas.
¿Cómo hacemos las copias de seguridad? Pues he escrito un pequeño guión que básicamente copia al disco duro externo todos los cambios y borra del mismo todo lo que se haya borrado en el equipo. Es decir, no hay copias incrementales sino un espejo exacto de lo que hay en el ordenador.
Por otro lado hay que asegurarse que el disco siempre se monta en la misma carpeta. El soporte de linux para montar discos (udev) monta el dispositivo en una carpeta con el nombre del disco en la carpeta /media. Así, si el disco tiene nombre la carpeta siempre será la misma en mi caso /media/backups.
Además, otra de las cosas realmente buenas de rsync es que permite incluir un listado de exclusiones, por lo que realmente no se hace backup de cosas como los archivos temporales del firefox, las papeleras de reciclaje, etc etc. Se pueden escribir comodines y así por ejemplo evitar que se hagan copias de seguridad de cierto tipo de ficheros, carpetas que son comunes, etc.
No hacemos las copias de forma automatizada porque el disco en general lo tenemos apagado. Lo que me queda por hacer es que este backup se lance de forma automática al enchufarlo, lo cual es sencillo utilizando reglas de udev.
En definitiva, he conseguido un sistema que realiza copias de seguridad de nuestras carpetas home (y de paso hago backup de /etc por si acaso) de forma sencilla, prácticamente desasistida y guardando logs de lo que hace cada script.
Script de backup en /home/sync/backup_homes.sh
#!/bin/bash
sincro()
{
$ECHO "----------SINCRO() START---------------"
# make sure we're running as root
if (( `$ID -u` != 0 ));
then { $ECHO "Sorry, must be root. Exiting..."; exit; }
fi
# make sure the mount folder is available
if [ ! -d $MOUNT_FOLDER ];
then $ECHO "Sorry, backup disk not mounted. Exiting..."; exit;
fi
# make sure the origin folder is available
if [ -z $1 ];
then $ECHO "Sorry, not parameter passed. Exiting..."; exit;
fi
if [ ! -d $1 ];
then
$ECHO "Sorry, the parameter is not a valid directory. Exiting..."; exit
else
$ECHO "Starting rsyncing of the $1 into $MOUNT_FOLDER (excluding $EXCLUDES)..."
# do the rsync
$RSYNC
-v -a --delete-after --delete-excluded
--exclude-from=$EXCLUDES --ignore-errors
$1 $MOUNT_FOLDER;
fi
$ECHO "----------SINCRO() END---------------"
}
# Remove any system path
unset PATH
# ------------- system commands used by this script ---
ID=/usr/bin/id;
ECHO=/bin/echo;
MOUNT=/bin/mount;
RM=/bin/rm;
MV=/bin/mv;
CP=/bin/cp;
TOUCH=/bin/touch;
MKDIR=/bin/mkdir
PWD=/bin/pwd
DATE=/bin/date
TAR=/bin/tar
RSYNC=/usr/bin/rsync;
# ------------- file locations ---------------------
MOUNT_FOLDER=/media/backups/backup_pc;
SYNC_HOME=/home/sync
EXCLUDES=$SYNC_HOME/backup_exclude;
LOG_FILE=`$DATE +%g%m%d-%H%M%S`"-synchro.log"
LOG_PATH=/tmp/$LOG_FILE
# ------------- synchro folders
sincro /etc > $LOG_PATH;
sincro /home/jorge >> $LOG_PATH;
sincro /home/aida >> $LOG_PATH;
sincro /home/sync >> $LOG_PATH;
# ------------- compress log file
$TAR czf $SYNC_HOME/$LOG_FILE.tar.gz $LOG_PATH
Fichero de exclusiones: /home/sync/backup_exclude
/**/.local/share/Trash
/**/.thumbnails
/**/.gvfs
/**/.mozilla/firefox/*.default/Cache
/**/.mozilla/firefox/*.default/OfflineCache
/**/media
/**/tmp
*.mp4
*·mp3





![Validate my RSS feed [Valid RSS]](/gb2/files/images/logos/valid-rss.png)

Recent comments
3 days 2 hours ago
3 days 5 hours ago
3 weeks 5 days ago
4 weeks 4 days ago
4 weeks 4 days ago
4 weeks 5 days ago
4 weeks 5 days ago
5 weeks 4 days ago
5 weeks 4 days ago
5 weeks 4 days ago