rsync y enlaces duros

Índice

 

  1. Introducción.
  2. Enlaces duros.
  3. rsync y enlaces duros.
  4. Resumen.
  5. Referencias.

 

1. Introducción.

En la wiki encontraréis una entrada detallando el uso de rsync.

Partiendo de base que se ha leído dicha documentación vamos a detallar un caso muy concreto de rsync para hacer backups de servidores.

Imaginemos que tenemos un disco dedicado a almacenar los backups de todos los servidores mediante rsync con su llave ssh, para ésto suelo usar una cuenta de usuario dedicada a backups y en todos los servidores debe de estar creada esa cuenta y con la pareja llave ssh.

El primer backup que se hace de cada servidor es un backup completo y para cada servidor a la hora de hacer backup tendré la siguiente estructura de directorios:

/mnt/backup => punto de montaje donde almacenar el backup
/mnt/backup/nombre_servidor/año-mes-dia/* => Directorio destino del backup

 

2. Enlaces duros.

Una explicación extendida sobre enlaces duros la puedes encontrar en https://es.wikipedia.org/wiki/Enlace_duro . A groso modo imagina que es un apuntador real al fichero, a medida que se crean nuevos enlaces duros va aumentando un contador de modo que al eliminar estos enlaces va disminuyendo hasta que el último es el borrado del fichero. El enlace duro es como si fuera una copia real del fichero pero realmente no se aumenta el consumo en disco.

Los enlaces simbólicos los puedes borrar y no afectan al fichero, sólo contienen una referencia de la ruta al fichero.

A continuación un ejemplo de listado donde podemos ver un backup y aparece el mismo fichero y el contador correspondiente:

-rwxrwxr-- 3 backuprsync backup 409600000 sep 24 2015 /mnt/backup/servidor/2015-09-26/home/database.fdb
-rwxrwxr-- 3 backuprsync backup 409600000 sep 24 2015 /mnt/backup/servidor/2015-09-27/home/database.fdb
-rwxrwxr-- 3 backuprsync backup 409600000 sep 24 2015 /mnt/backup/servidor/2015-09-28/home/database.fdb
-rwxrwxr-- 1 backuprsync backup 409600000 sep 28 2015 /mnt/backup/servidor/2015-09-29/home/database.fdb
-rwxrwxr-- 6 backuprsync backup 409600000 sep 29 2015 /mnt/backup/servidor/2015-09-30/home/database.fdb
-rwxrwxr-- 6 backuprsync backup 409600000 sep 29 2015 /mnt/backup/servidor/2015-10-01/home/database.fdb
-rwxrwxr-- 6 backuprsync backup 409600000 sep 29 2015 /mnt/backup/servidor/2015-10-02/home/database.fdb
-rwxrwxr-- 6 backuprsync backup 409600000 sep 29 2015 /mnt/backup/servidor/2015-10-03/home/database.fdb
-rwxrwxr-- 6 backuprsync backup 409600000 sep 29 2015 /mnt/backup/servidor/2015-10-04/home/database.fdb
-rwxrwxr-- 6 backuprsync backup 409600000 sep 29 2015 /mnt/backup/servidor/2015-10-05/home/database.fdb

No se pueden hacer enlaces duros de directorios, ésto significa que en el backup mientras ahorramos espacio sobre ficheros no se va ahorrar en directorios.

 

3. rsync y enlace duros.

Si consultan la página man del comando rsync encontrarán entre muchas opciones la que hace la magia de permitir estos backups día a día sin consumir disco en cada nueva referencia:

--link-dest=DIR         hardlink to files in DIR when unchanged

Backup con rsync y enlaces duros

Finalmente uno puede hacerse un script para que hacer un backup día día, el primero sería completo y el resto de los backups incrementales respecto a la del día anterior sea completo o incremental.

Backup completo:

rsync -vamh --progress --delete --stats --log-file=${LOGFILE} /home ${BACKUPDIR} 

Backup incremental:

rsync -vamh --progress --delete --stats --log-file=${LOGFILE} --link-dest=${DIRDESTINO}${ULTIMOBACKUP} /home ${BACKUPDIR} 

Hay que explicar que la variable LOGFILE es un fichero con los directorios que van a ser incluídos en el proceso de backup, mientras que la variable BACKUPDIR es el directorio de destino donde almacenar el backup.

 

4. Resumen

Con rsync y el uso del parámetro --link-dest más un script que cada uno puede crearse a gusto del consumidor podemos tener un sistema que llame a cada servidor con la misma cuenta de usuario backup para conectar por ssh y haga backup de los ficheros actuales con respecto al último backup que hayamos realizado. Yo hago uso de cron para llamar al script indicando como parámetros el nombre del servidor y su ip.

El ahorro de espacio es bastante considerable a lo largo de un año y a medida que aumenta el número de servidores.

El proceso es muy parecido a lo que podemos encontrar en "Time Machine" de Apple, pero gracias al scriptting es muy personalizable.

 

5. Referencias

https://linux.die.net/man/1/rsync

ZorroPlateado
Imagen de ZorroPlateado
Categoría: 

te puede interesar

Creando un container con systemd-nspawn

¿qué es un container y para qué usar systemd-nspawn? Un contenedor o container es una máquina virtual, que comparte el núcleo del sistema operativo con el equipo anfitrión, sin que pueda acceder a sus archivos. A diferencia de chroot, systemd-nspawn...