viernes, 14 de noviembre de 2008

Backup: Copias de Seguridad en Ubuntu o Debian

Tipos de copia de seguridad

En función de la cantidad de archivos que se salvaguardan a la hora de realizar la copia de seguridad, podemos distinguir tres tipos de copia:
  • Copia de seguridad total o íntegra
  • Copia de seguridad incremental
  • Copia de seguridad diferencial

Copia normal o copia total

Una copia de seguridad normal, es una copia de seguridad total de todos los archivos y directorios seleccionados.

Copia incremental

En un proceso de copia de seguridad incremental, se hace una copia de seguridad sólo de los archivos que han cambiado desde la última copia de seguridad realizada. Ejemplo, si hacemos copia de seguridad total el día 1 de cada mes y copia de seguridad incremental el resto de los días, cada copia incremental solo guardará los archivos que se hayan modificado ese día. Si tenemos que realizar la restauración de archivos ante un desastre, debemos disponer de la copia total y de todas las copias incrementales que hayamos realizado desde la copia total.


Copia diferencial

Una copia de seguridad diferencial es una copia de todos los archivos que han cambiado desde la última copia de seguridad total que hayamos hecho. Ejemplo, si hacemos copia de seguridad total el día 1 de cada mes y copia de seguridad diferencial el resto de los días, cada copia diferencial guardará los archivos que se hayan modificado desde el día 1. La ventaja es que se requiere menos espacio que la copia total y que en el proceso de restauración únicamente necesitaremos la última copia total y la última copia diferencial. Una copia diferencial anula a la copia diferencial anterior. Por el contrario, se consume más tiempo en realizar la copia y también más espacio que en el caso de copia incremental.


Recomendación sobre el tipo de copia a efectuar

Si el volumen de datos de nuestra copia de seguridad no es muy elevado (menos de 100 MB), lo más práctico es realizar siempre copias totales ya que en caso de desastre, tan solo debemos recuperar la última copia.

Si el volumen de datos de nuestra copia de seguridad es muy elevado (varios GB) pero el volumen de datos que se modifican no es elevado (menos de 500 MB), lo más práctico es realizar una primera copia total y posteriormente realizar siempre copias diferenciales. Así, en caso de desastre, tan solo debemos recuperar la copia total y la última diferencial. Periódicamente debemos realizar una copia total y así empezar de nuevo.

Si el volumen de datos de nuestra copia de seguridad es muy elevado (varios GB) y el volumen de datos que se modifican también lo es, las copias diferenciales ocuparán mucho espacio, por lo tanto en este caso lo más práctico será realizar una primera copia total y posteriormente realizar siempre copias incrementales ya que son las que menos espacio ocupan. El problema es que en caso de desastre debemos recuperar la última copia total y todas las incrementales realizadas desde que se hizo la última copia total. En estos casos, conviene hacer copias totales más a menudo para no tener que mantener un número muy elevado de copias incrementales.

En grandes compañías donde la realización de copias de seguridad está perfectamente planificada, se suelen utilizar sistemas mixtos. Por ejemplo en un caso típico se realizarían las siguientes tareas:

  • Todos los días 1 de cada més, a las 23:00 horas: copia de seguridad total
  • Todos los viernes a las 23:00 horas: copia de seguridad diferencial desde la copia de día 1
  • Todos los días (excepto los viernes y el día 1) a las 23:00 horas: copia de seguridad incremental desde la copia del día anterior.
Con ésta planificación nos aseguramos disponer de copia de seguridad diaria. En caso de desastre deberíamos recuperar la copia total, la última diferencial y todas las incrementales desde la última diferencial.

En una política de este tipo se pueden utilizar por ejemplo 5 juegos diferentes de cintas de forma que se almacenen las copias de seguridad diarias de los últimos 3 meses. Luego se van reutilizando pero no más de 20 veces ya que las cintas se deterioran y la fiabilidad disminuye.

Creación de copias de seguridad

Elección de las carpetas a salvaguardar

Lo primero que debemos determinar son las carpetas que queremos salvaguardar en nuestro proceso de copias de seguridad.

En un sistema informático que da servicio a usuarios, la información más importante es precisamente la información de los usuarios, por lo tanto, la carpeta /home es una de las carpetas que debemos salvaguardar.

El objetivo de la realización de copias de seguridad es el reestablecimiento del servicio en el mínimo tiempo posible, por eso es conveniente realizar una copia de seguridad de los archivos de configuración del servidor, los cuales se encuentran en la carpeta /etc.

Otras carpetas de cierta importancia que se pueden salvaguardar son la carpeta /root y la carpeta /var/log. La primera es la carpeta personal del usuario root y la segunda es la carpeta donde se almacenan las incidencias del sistema (archivos de log del sistema). Resumiendo, deberíamos salvaguardar las siguientes carpetas:

  • /home (Carpetas personales de los usuarios)
  • /etc (Archivos de configuración del sistema)
  • /root (Carpeta personal del usuario root)
  • /var/log (Carpeta de logs del sistema)
  • /var/www (Web de la intranet)

Por qué se debe comprimir la copia de seguridad

Cuando realizamos copias de seguridad, los datos deben comprimirse siempre por tres razones:
  • La copia se realiza más rápidamente
  • El tamaño de la copia es menor
  • La compresión garantiza la integridad de los datos
Al quedar los datos reducidos, la cantidad de datos a copiar en el soporte de almacenamiento es mucho menor que lo que ocupan los datos descomprimidos; eso unido al hecho de que los datos estén compactados en un único archivo, hace que el tiempo en trasmitir los datos desde el servidor al soporte, sea menor que si no se comprime.

La integridad de los datos queda garantizada porque el algoritmo de compresión añade un código de redundancia cíclica (CRC) que se consulta a la hora de descomprimir los datos de forma que tenemos seguridad si están correctos o no lo están.

Automatización

El proceso de creación de copias de seguridad debe ser un proceso automático que no requiera la intervención del usuario para realizarse ya que un olvido o dejadez del usuario podría ocasionar que el día que necesitemos la copia de seguridad, no se haya hecho.

Para lanzar la realización automática de copias utilizaremos cron. Cron es un servicio que nos permite lanzar comandos autom�ticamente los días y a las horas que deseemos. Cada usuario tiene su propio cron en el que puede configurar sus tareas programadas mediante el comando 'crontab -e' o con la aplicación gráfica kcron. En nuestro caso, como realizamos copia de seguridad de carpetas que solamente tiene acceso el usuario root, debemos programar la copia mediante el cron de root.

Supongamos que deseamos crear una copia de seguridad total los días 1 de cada mes y una copia de seguridad diferencial el resto de días en la carpeta /tmp (temporal), de las carpetas /home y /etc. El comando que ejecutaremos el día 1 de cada mes será:

// Comando a ejecutar los días 1 de cada mes
tar -jcvf /tmp/CopiaTotal_etc-home_`date +%d%b%y`.tar.bz2 /home /etc

Como puede verse, utilizamos `date %d%b%y` que si hoy es 1 de febrero de 2009 se sustituira por 1feb09. De ésta forma nos sirve el mismo comando para todos los meses.

El comando que ejecutaremos todos los días para realizar la copia diferencial, será:

// Comando a ejecutar los días para hacer copia diferencial respecto al día 1
tar -jcvf /tmp/CopiaDiferencial_etc-home_01`date +%b%y`-`date +%d%b%y`.tar.bz2 /home /etc -N 01`date +%b%y`

Como puede verse, utilizamos 01`date %b%y`-`date %d%b%y` que si hoy es 13 de febrero de 2009 se sustituira por 01feb09-13feb09. También en la opción -N ponemos 01`date +%b%y` para que añada únicamente los archivos más nuevos que el día 1 del mes actual. De ésta forma nos sirve el mismo comando para todos los días.

Si deseamos programar para que automáticamente se ejecute la copia total el día 1 de cada més y la copia diferencial todos los días, debemos añadirlo en el cron del usuario root lo cual se puede realizar ejecutando el comando 'crontab -e' o bien utilizando una aplicación como 'kcron':

Al final nuestro archivo cron para que se ejecuten automáticamente los comandos que realizan las copias de seguridad quedará como el de la figura:

De ésta forma, los días 1 de cada mes a las 02:30 horas se realizará la copia total de las carpetas /etc y /home y todos los días a las 03:30 horas se realizará la copia diferencial respecto de la copia del día 1 del mes.

Las copias de seguridad se realizarán sobre la carpeta /tmp, pero lo recomendable es realizar la copia de seguridad sobre un dispositivo extraible como cintas, cds, dvds o un pendrive. Habrá que sustituir /tmp por la carpeta donde esté montado el dispositivo. Ejemplo, si se trata de un pendrive USB, lo más normal es que el dispositivo esté montado en la carpeta /mnt/sda1 o algo parecido ya que se monta como un dispositivo SCSI, lo que quiere decir que en lugar de poner /tmp en el comando tendríamos que poner /mnt/sda1.

Copias de seguridad en servidores remotos

Lo comentado anteriormente permite realizar copias de seguridad en un disco duro local. Una mejora añadida sería la creación de la copia en una carpeta remota. Al igual que se automatiza la creación de la copia, se podría ejecutar automáticamente un comando que, vía ftp o ssh, vuelque los archivos en un servidor remoto para mayor seguridad. También existen herramientas para realizar directamente copias de seguridad remotas:
  • rsync: permite realizar copias en carpetas remotas
  • unison: permite mantener sincronizadas dos carpetas remotas

Aplicaciones para la realización de copias de seguridad

Existen aplicaciones tanto libres como de pago que facilitan la tarea de realización de copias de seguridad. Entre las aplicaciones libres destacamos:
  • BackupPC: Herramienta para hacer copias de seguridad de PCs de la red
  • Amanda: Herramienta para hacer copias de seguridad de PCs de la red
  • afbackup: Herramienta para hacer copias de seguridad de PCs de la red
  • sbackup: Simple Backup.
  • pybackpack: copias de seguridad locales y remotas vía ssh.

Estas aplicaciones tienen la ventaja de ser muy completas ya que disponen de un sinfín de posibilidades, pero son más complejas de manejar.


Fuentes:


4 comentarios:

Anónimo dijo...

Muchas gracias!! Muy útil!!

Anónimo dijo...

Muy bueno!!++ Muy útil! y excelentes explicaciones!! Thanks so much!!

backup online dijo...

Muy bueno y util amigo, fijate que ya no se ven las imágenes! Saludos!

Anónimo dijo...

Buen post.
Para ejecutar los comandos directamente en Cron, yo he necesitado colocar \ antes de cada %.
Uso Debian Wheezy.
Saludos.