Ir al contenido
Otras versiones

Cargando…

Copia de seguridad y restauración en Linux con la herramienta rdiff-backup

Rdiff-backup realiza la copia de seguridad de un directorio en otro, posiblemente a través de una red. El directorio de destino termina siendo una copia del directorio de origen. Sin embargo, se almacenan diferencias inversas adicionales en un subdirectorio especial del directorio de destino, de modo que aún puede recuperar ficheros perdidos hace algún tiempo.

La idea es combinar las mejores características de un espejo y de una copia de seguridad incremental. rdiff-backup también conserva subdirectorios, enlaces duros, ficheros de dispositivo, permisos, propietarios uid/gid, fechas de modificación, atributos extendidos, ACL y resource forks.

Además, rdiff-backup puede funcionar de forma eficiente en cuanto a ancho de banda a través de una tubería, como rsync. Por tanto, puede utilizar de forma segura rdiff-backup y ssh para realizar la copia de seguridad de un disco duro en una ubicación remota, y solo se transmitirán las diferencias.

Esta utilidad está incluida en el repositorio de software, por lo que, para instalarla, basta con ejecutar como root:

Ventana de terminal
$ apt-get install rdiff-backup

En este caso, la aplicación no está incluida en el repositorio de software predeterminado, por lo que debe utilizar el repositorio EPEL:

Ventana de terminal
$ rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
$ yum update
$ yum install rdiff-backup

Estos scripts asumen los siguientes valores predeterminados:

  • El valor de $TOMCAT_HOME es “/home/openkm/tomcat-8.5.69”
  • La base de datos de OpenKM se llama “okmdb.”
  • La contraseña de la base de datos de OpenKM es “*secret*”.
  • La ubicación del script de servicio de inicio/parada de OpenKM es “/etc/init.d/tomcat”

El punto de montaje del disco USB puede definirse en /etc/fstab como:

/dev/sdb1 /mnt/backup ext4 defaults 0 0

Estas son las secciones globales del script:

  • Configuración de las variables globales en la sección ## BEGIN CONFIG ##.
  • Comprobación del usuario root en la sección # Check root.
  • Eliminación de las copias de seguridad locales antiguas de la base de datos en la sección # Delete older local database backup.
  • Montaje del disco (sección opcional) en la sección # Mount disk.
  • Parada de la aplicación (sección opcional) en la sección # Stop tomcat.
  • Limpieza de los registros (sección opcional) en la sección # Clean logs.
  • Copia de seguridad de la base de datos en el sistema de ficheros en la sección # Backup database.
  • Copia de seguridad del repositorio y del volcado de la base de datos en el destino de la copia de seguridad en la sección # Backup and purge old backups.
  • Arranque de la aplicación (sección opcional) en la sección # Start tomcat.
  • Visualización de estadísticas (sección opcional) en la sección # Status.
  • Desmontaje del disco (sección opcional) en la sección # Umount disk.

Explicación de los parámetros de configuración:

Parámetro Descripción
HOST El nombre de host del servidor.
DATABASE_PASS La contraseña de la base de datos.
El usuario de la base de datos que realiza la copia de seguridad es siempre el usuario root.
OPENKM_DB El nombre de la base de datos de la aplicación.
Normalmente se llamará “okmdb.”
OPENKM_HOME La carpeta de inicio de OpenKM.
TOMCAT_HOME La carpeta de inicio de Tomcat.
Normalmente dentro de la carpeta OPENKM_HOME.
DATABASE_EXP La carpeta del volcado de la base de datos.
Normalmente, en el mismo servidor.
BACKUP_DIR Destino de la copia de seguridad. En el caso de un servidor remoto, el formato es user@server::/path/to/backup

Cree un script de copia de seguridad /root/backup.sh

Ventana de terminal
$ sudo su
$ vim /root/backup.sh
#!/bin/bash
#
## BEGIN CONFIG ##
HOST=$(uname -n)
DATABASE_PASS="*secret*"
OPENKM_DB="okmdb"
OPENKM_HOME="/home/openkm"
TOMCAT_HOME="$OPENKM_HOME/tomcat-8.5.69"
DATABASE_EXP="$OPENKM_HOME/db"
BACKUP_DIR="/mnt/backup"
## END CONFIG ##
# Check root user
if [ $(id -u) != 0 ]; then echo "You should run this script as root"; exit; fi
# Delete older local database backup
echo -e "### BEGIN: $(date +"%x %X") ###\n"
rm -rf $DATABASE_EXP
mkdir -p $DATABASE_EXP
# Mount disk
if mount | grep "$BACKUP_DIR type" > /dev/null; then
echo "$BACKUP_DIR already mounted";
else
mount "$BACKUP_DIR";
if mount | grep "$BACKUP_DIR type" > /dev/null; then
echo "$BACKUP_DIR mounted";
else
echo "$BACKUP_DIR error mounting";
exit -1;
fi
fi
# Stop Tomcat
/etc/init.d/tomcat stop
# Clean logs
#echo "Clean Tomcat temporal files."
#rm -rf $TOMCAT_HOME/logs/*
#rm -rf $TOMCAT_HOME/temp/*
#rm -rf $TOMCAT_HOME/work/Catalina/localhost
# Backup database
if [ -n "$DATABASE_PASS" ]; then
echo "* Backuping MySQL data from $OPENKM_DB..."
mysqldump -h localhost -u root -p$DATABASE_PASS $OPENKM_DB > $DATABASE_EXP/mysql_$OPENKM_DB.sql
echo "-------------------------------------";
fi
# Backup and purge old backups
rdiff-backup --remove-older-than 30B $BACKUP_DIR/$HOST
rdiff-backup -v 3 --print-statistics --include $OPENKM_HOME --exclude '**' / $BACKUP_DIR/$HOST
# Start Tomcat
/etc/init.d/tomcat start
echo -e "\n### END: $(date +"%x %X") ###"
# Status
echo "=================================";
rdiff-backup --list-increment-sizes $BACKUP_DIR/$HOST
echo "*********************************";
df -h | grep "$BACKUP_DIR"
echo "=================================";
# Umount disk
sync
umount "$BACKUP_DIR"

Modifique la sección # Backup and purge old backups para aumentar el valor del parámetro:

--remove-older-than 90B

Modifique la sección # Backup and purge old backups.

# Backup and purge old backups
rdiff-backup --remove-older-than 30B backup@server::$BACKUP_DIR/$HOST
rdiff-backup -v 3 --print-statistics --include $FILES --exclude '**' / backup@server::$BACKUP_DIR/$HOST

Realizar una copia de seguridad remota en SMB o CIFS

Sección titulada «Realizar una copia de seguridad remota en SMB o CIFS»

Modifique la sección # Mount disk.

# Mount disk
if mount | grep "$BACKUP_DIR type" > /dev/null; then
echo "$BACKUP_DIR already mounted";
else
echo "Mounting $BACKUP_DIR ...";
mount -t cifs //REMOTE_SERVER/REMOTE_DIR $BACKUP_DIR -o username=REMOTE_USER,password=REMOTE_PASSWORD,iocharset=utf8,file_mode=0777,dir_mode=0777
if mount | grep "$BACKUP_DIR type" > /dev/null; then
echo "$BACKUP_DIR mounted";
else
echo "Error mounting $BACKUP_DIR.";
exit -1;
fi
fi

Realizar una copia de seguridad de PostgreSQL

Sección titulada «Realizar una copia de seguridad de PostgreSQL»

Modifique la sección # Backup database.

# Backup de PostgreSQL
echo "* Backuping PostgreSQL data from $OPENKM_DB..."
su postgres -c "pg_dump $OPENKM_DB" > $DATABASE_EXP/pg_$OPENKM_DB.sql
# Databases optimizations
su postgres -c "vacuumdb -a -z" > /dev/null
su postgres -c "reindexdb -a -q" 2> /dev/null

Para instalar la tarea cron, ejecute lo siguiente:

Ventana de terminal
$ sudo mkdir /root/logs
$ sudo crontab -e

Y añada estas líneas según su configuración:

MAILTO=nomail@openkm.com
@daily /root/backup.sh | tee /root/logs/backup.$(date +\%Y.\%m.\%d_\%H.\%M.\%S).log

Puede listar las copias de seguridad disponibles:

Ventana de terminal
$ rdiff-backup --list-increment-sizes /path/to/backup
Sun Sep 11 05:00:19 2012         4.25 GB           4.25 GB   (current mirror)
Sun Sep  4 00:00:18 2012         13.3 MB           4.26 GB
Sun Aug 28 00:00:13 2012          674 MB           4.92 GB
Sun Aug 21 00:00:14 2012         5.50 MB           4.93 GB
Sun Aug 14 00:00:16 2012         1.75 MB           4.93 GB
Sun Aug  7 00:00:12 2012          288 KB           4.93 GB
Sun Jul 31 00:00:13 2012         43.0 KB           4.93 GB
Fri Jul 29 10:36:39 2012         5.56 KB           4.93 GB

Después decida restaurar una de las copias de seguridad, por ejemplo, la realizada el Sun Aug 28 00:00:13 2012:

Ventana de terminal
$ rdiff-backup --restore-as-of 2012-08-28 /path/to/backup /path/to/destination

O restaure la última copia de seguridad.

Ventana de terminal
$ rdiff-backup --restore-as-of now /path/to/backup /path/to/destination