Creando copias de resguardo en servidores

Backup

Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.3 o cualquier versión posterior publicada por la Fundación de Software Libre (FSF); sin Secciones Invariantes, con los Textos de Tapa listados debajo, y sin Textos de Contra-tapa.


Creando copias de resguado en servidores
(C) 2009 - 2013 Martin Andres Gomez Gimenez

Taxonomy upgrade extras: 

Introducción

La creación de copias de resguardo en servidores es un proceso que se utiliza para guardar toda la información, o parte de la misma, en dispositivos de almacenamiento como discos rígidos, Zip, cintas, CD, DVDd, BlueRay u otros dispositivos de almacenamiento, con el objeto de poder ser restaurada en el caso de perdida parcial o total.

Razones para crear copias de resguardo

  • Para restaurar el estado operacional de un servidor luego de un desastre.
  • Para recuperar archivos modificados o eliminados accidentalmente.
  • Como última línea de defensa contra la pérdida de datos.

Esquema de rótulo de las copias de resguardo

Rotulado de archivos de resguardo

Definición formal en notación de diccionario de datos para las copias de resguardo y sus correspondientes archivos de sumas:

 Resguardo = backup + HOST + TIPO + FECHA + FORMATO + (DIGEST)

backup = * prefijo para indicar que es un resguardo seguido de guión *

HOST = *nombre del servidor dada por la salida del comando "hostname" seguido de guión*

TIPO = [etc | home | mysql | raiz | usr | var] + "-"

FECHA = * fecha en que fue realizada la copia de resguardo en el formato: AAAAMMDD + "-" *

AAAAMMDD = año + mes + día

FORMATO = * formato utilizado para empaquetar y comprimir archivos: [tar.gz | tar.bz | tar.bz2 | 7z ] *

DIGEST = * extensión a utilizar en para el archivo de sumas precedida por un punto. *

Cada copia de resguardo quedará conformada de la siguiente manera:

 backup-$HOST-$TIPO-$FECHA.tar.bz2
 backup-$HOST-$TIPO-$FECHA.tar.bz2.DIGEST

Rotulado de cintas de resguardo

Las cintas se rotularán de la siguiente manera

Resguardo = HOST + DS + (SEMANA)

HOST = *nombre del servidor dada por la salida del comando "hostname" seguido de guión *

DS = * número entero en el rango [0..6] que representa al día de la semana, donde 0 (domingo), 1 (lunes), 2 (martes), 3 (miercoles), 4 (jueves), 5 (viernes) y 6 (sábado) *

SEMANA = * número entero en el rango [1..53] que representa el número de la semana del año. *

Formato de archivado a utilizar en las copias de resguardo

GNU Tar

GNU Tar

Tar un formato de archivos ampliamente usado en entornos GNU/Linux para almacenar archivos y directorios en un solo archivo.

En los entornos GNU/Linux tar es también un comando que puede ser ejecutado desde la línea de comandos de una consola o desde un terminal virtual para almacenar y extraer archivos en un archivo conocido como un archivo tar.

Un archivo tar puede crearse de la siguiente manera:

 tar --create --verbose --preserve-permissions --file $ARCHIVOS

Los últimos argumentos de tar son los nombres de los archivos o directorios que deberán ser archivados. El empleo de un nombre de directorio siempre implica que los subdirectorios por debajo de él se incluirán en el archivo.

A continuación se describen las principales opciones de tar:

 --atime-preserve
              no cambia los tiempos de acceso de archivos volcados en un archivo tar.

 -c, --create
              crea un nuevo archivo.

 -f, --file $ARCHIVO
              emplea el archivo $ARCHIVO. Si $ARCHIVO es `-', significa la entrada o salida estándar.

 --exclude $ARCHIVO
              excluye el archivo $ARCHIVO.

 --same-owner
              crea los archivos extraídos con el mismo propietario.

 -p, --same-permissions, --preserve-permissions
              extrae toda la información de protecciones o permisos.

 -v, --verbose
              lista prolijamente los archivos procesados.

 -X, --exclude-from $ARCHIVO
              excluye archivos listados en $ARCHIVO.

 -z, --gzip, --ungzip
              filtra el archivo a través de gzip.

Gzip

GNU Tar

Gzip es un programa que reduce el tamaño de los archivos dados mediante el algoritmo de compresión de Lempel-Ziv (LZ77). Cuando es posible, cada archivo se reemplaza por otro con la extensión .gz, manteniéndose los mismos permisos, propietarios y tiempos de modificación.

Si no se da ningún archivo, o si un nombre del archivo es "-", se lee de la entrada estándar, que se comprime y se manda el resultado a la salida estándar. El programa gzip sólo intentará comprimir archivos regulares. En particular, no hará nada con enlaces simbólicos.

Un archivo tar comprimido con Gzip puede crearse de la siguiente manera:

 tar --create --verbose --preserve-permissions --gzip --file $ARCHIVOS

Bzip2

GNU Tar

Bzip2 es un programa que comprime archivos utilizando el algoritmo de compresión de texto por ordenación de bloques de Burrows-Wheeler. Generalmente, la compresión obtenida es considerablemente mejor que la de compresores más convencionales basados en LZ77/LZ78, y se aproxima al rendimiento de la familia PPM de compresores estadísticos.

Las opciones de la línea de comandos son deliberadamente muy similares a las de GNU Gzip, pero no son idénticas.

Un archivo tar comprimido con Bzip2 puede crearse de la siguiente manera:

 tar --create --verbose --preserve-permissions --bzip2 --file $ARCHIVOS

Rutas de almacenamiento

Usuario para gestionar las copias de respaldo

Para gestionar las copias de respaldo es necesario crear un usuario con permisos especiales. Este usuario, al cual denominaremos "admin" se utilizará también para transferir los archivos de respaldo a un servidor remoto. El mismo puede crearse de la siguiente manera:

useradd --shell /bin/rbash --user-group --create-home admin


Es necesario asegurarse que la partición que contiene al directorio /home/admin tenga la capacidad suficiente para alojar las copias de resguardo.

Rutas para el almacenamiento local

Los archivos de resguardo se guardan en cada servidor en:

/home/admin/backup/$HOST

La constante $HOST representa el nombre del servidor obtenido mediante el comando:

HOST=`hostname`

Rutas para el almacenamiento remoto

En un esquema que utilice servidores remotos para el resguardo las copias pueden de guardarse en la ubicación:

/home/admin/backup/$HOST

La constante $HOST representa el nombre del servidor en el cual se ha realizado la copia de resguardo. Este nombre se obtenido mediante el comando:

HOST=`hostname`

Scripts para copias de resguardo

Principales caracteríticas

Los scripts se han desarrollado con las siguientes características:

  • Empaquetado mediante Tar.
  • Compresión utilizando Bzip2.
  • Planificación diaria o semanal vía.
  • Posibilidad de respaldo de todo el sistema o parte de él.
  • Generación de sumas por MD5, SHA1 y SHA256.
  • Envío de mensajes vía syslog.
  • Respaldo en sistemas de archivo locales o servidores remotos.
  • Respaldo en cintas.

Accediendo al CVS vía web

Las últimas versiones de los scripts que se presentan a continuación pueden consultarse en línea y descargarse desde:

http://cvs.i-nis.com.ar/cgi-bin/cvsweb_es.cgi/gnu+linux/servidores/backup/etc

Instalación utilizando el portage

Los ebuilds para instalar por medio del portage se encuentran en la siguiente URL:

http://cvs.i-nis.com.ar/cgi-bin/cvsweb_es.cgi/gnu+linux/servidores/backup/usr/portage/app-backup/

Los mismos deben copiarse al directorio /usr/local/portage/app-backup (si este directorio no existe es necesario crearlo), respetando la gerarquía de directorios presentada en la URL anterior.

Instalación vía CVS

Los archivos pueden descargarse vía CVS e instalarse por medio de los siguientes comandos:

cvs -d :pserver:anonymous:anonymous@cvs.i-nis.com.ar:/home/cvs checkout -d daily \
gnu+linux/servidores/backup/etc/cron.daily

cp daily/backup_etc.cron daily/mysqldump.cron /etc/cron.daily

cvs -d :pserver:anonymous:anonymous@cvs.i-nis.com.ar:/home/cvs checkout -d weekly \
gnu+linux/servidores/backup/etc/cron.weekly

cp weekly/backup weekly/backup_home.cron  weekly/backup_raiz.cron  weekly/backup_usr.cron  \
weekly/backup_var.cron /etc/cron.weekly

cvs -d :pserver:anonymous:anonymous@cvs.i-nis.com.ar:/home/cvs checkout -d backup-cron \
gnu+linux/servidores/backup/etc/backup-cron

mkdir /etc/backup-cron

cp backup-cron/* /etc/backup-cron

cvs -d :pserver:anonymous:anonymous@cvs.i-nis.com.ar:/home/cvs checkout -d libexec \
gnu+linux/servidores/backup/usr/libexec/backup-cron

mkdir /usr/libexec/backup-cron

cp libexec/* /usr/libexec/backup-cron

Descripción detallada

A continuación se presenta una descripción detallada de cada script:

backup_etc.cron

Descripción

Se utiliza para hacer una copia de respaldo de toda la configuración del sistema alojada en el directorio /etc. La copia es ejecutada por el planificador de tareas vixie-cron y se realiza una vez cada día. El script esta ubicado en:

/etc/cron.daily/backup_etc.cron

Ruta de almacenamiento

Las copias de resguardo son alojadas en el directorio:

/home/admin/backup/$HOST/etc

Almacenamiento en un servidor remoto

Para almacenar las copias de resguardo en un servidor remoto es necesario configurar la dirección IP de este en el parámetro "REMOTE_IP" del archivo de configuración /etc/backup-cron/backup-cron.conf. Por defecto este parámetro no tiene ninguna dirección IP.

El parámetro "REMOTE_USER" indica con que usuario debe conectarse al servidor remoto. El valor predeterminado es "admin".

# Copiar archivos de respaldo a servidor remoto vía SCP
REMOTE_IP=""
REMOTE_USER="admin"

backup_home.cron

Descripción

Se utiliza para hacer una copia de respaldo de los directorios /home del sitema. La copia es ejecutada por el planificador de tareas vixie-cron y se realiza una vez cada 7 días. El script esta ubicado en:

/etc/cron.weekly/backup_home.cron

Ruta de almacenamiento

Las copias de resguardo son alojadas en el directorio:

/home/admin/backup/$HOST/home

Almacenamiento en un servidor remoto

Para almacenar las copias de resguardo en un servidor remoto es necesario configurar la dirección IP de este en el parámetro "REMOTE_IP" del archivo de configuración /etc/backup-cron/backup-cron.conf. Por defecto este parámetro no tiene ninguna dirección IP.

El parámetro "REMOTE_USER" indica con que usuario debe conectarse al servidor remoto. El valor predeterminado es "admin".

# Copiar archivos de respaldo a servidor remoto vía SCP
REMOTE_IP=""
REMOTE_USER="admin"

backup_raiz.cron

Descripción

Se utiliza para hacer una copia de respaldo de todos los archivos del sistema, exceptuando el contenido de los directorios /home, /usr y /var y aquellos listados en el archivo /etc/backup-cron/exclude.txt. La copia es ejecutada por el planificador de tareas vixie-cron y se realiza una vez cada 7 días. El script esta ubicado en:

/etc/cron.weekly/backup_raiz.cron

Ruta de almacenamiento

Las copias de resguardo son alojadas en el directorio:

/home/admin/backup/$HOST/system

Almacenamiento en un servidor remoto

Para almacenar las copias de resguardo en un servidor remoto es necesario configurar la dirección IP de este en el parámetro "REMOTE_IP" del archivo de configuración /etc/backup-cron/backup-cron.conf. Por defecto este parámetro no tiene ninguna dirección IP.

El parámetro "REMOTE_USER" indica con que usuario debe conectarse al servidor remoto. El valor predeterminado es "admin".

# Copiar archivos de respaldo a servidor remoto vía SCP
REMOTE_IP=""
REMOTE_USER="admin"

backup_usr.cron

Descripción

Se utiliza para hacer una copia de respaldo de todos los archivos ubicados en el directorio /usr, exceptuando aquellos listados en el archivo /etc/backup-cron/exclude.txt. La copia es ejecutada por el planificador de tareas vixie-cron y se realiza una vez cada 7 días. El script esta ubicado en:

/etc/cron.weekly/backup_usr.cron

Ruta de almacenamiento

Las copias de resguardo son alojadas en el directorio:

/home/admin/backup/$HOST/system

Almacenamiento en un servidor remoto

Para almacenar las copias de resguardo en un servidor remoto es necesario configurar la dirección IP de este en el parámetro "REMOTE_IP" del archivo de configuración /etc/backup-cron/backup-cron.conf. Por defecto este parámetro no tiene ninguna dirección IP.

El parámetro "REMOTE_USER" indica con que usuario debe conectarse al servidor remoto. El valor predeterminado es "admin".

# Copiar archivos de respaldo a servidor remoto vía SCP
REMOTE_IP=""
REMOTE_USER="admin"

backup_var.cron

Descripción

Se utiliza para hacer una copia de respaldo de todos los archivos ubicados en el directorio /var, exceptuando aquellos listados en el archivo /etc/backup-cron/exclude.txt. La copia es ejecutada por el planificador de tareas vixie-cron y se realiza una vez cada 7 días. El script esta ubicado en:

/etc/cron.weekly/backup_var.cron

Ruta de almacenamiento

Las copias de resguardo son alojadas en el directorio:

/home/admin/backup/$HOST/system

Almacenamiento en un servidor remoto

Para almacenar las copias de resguardo en un servidor remoto es necesario configurar la dirección IP de este en el parámetro "REMOTE_IP" del archivo de configuración /etc/backup-cron/backup-cron.conf. Por defecto este parámetro no tiene ninguna dirección IP.

El parámetro "REMOTE_USER" indica con que usuario debe conectarse al servidor remoto. El valor predeterminado es "admin".

# Copiar archivos de respaldo a servidor remoto vía SCP
REMOTE_IP=""
REMOTE_USER="admin"

backup_tape.cron

Descripción

Se utiliza para hacer una copia de respaldo en cinta de todos los archivos del sistema, exceptuando aquellos listados en el archivo /etc/backup-cron/exclude.txt. La copia es ejecutada por el planificador de tareas vixie-cron y se realiza una vez al día. El script esta ubicado en:

/etc/cron.daily/backup_tape.cron

Ruta de almacenamiento

Las copias de resguardo son alojadas en una cita DAT, cuyo dispositivo es:

/dev/st0

mysqldump.cron

Descripción

Se utiliza para hacer una copia de respaldo de todas las bases de datos MySQL del sistema. La copia es ejecutada por el planificador de tareas vixie-cron y se realiza a diario. El script esta ubicado en:

/etc/cron.daily/mysqldump.cron

Ruta de almacenamiento

Las copias de resguardo son alojadas en el directorio:

/home/admin/backup/$HOST/mysql

Usuario y contraseña del administrador de bases de datos

Para realizar el resguardo de las bases de datos MySQL del sistema es necesario proporcionar un usuario y una contraseña, los cuales se definen en el archivo de configuración /etc/backup-cron/backup-cron.conf mediante los parámetros "USER" y "PASSWD".

El parámetro "USER" define el usuario con el que se conectará al motor de bases de datos MySQL, por defecto está definido para "root"

El parámetro "PASSWD" define el la contraseña con la cual usuario se conectará al motor de bases de datos MySQL, por defecto tiene la palabra "yourpassword" que debería reemplazarse por una contraseña válida."

USER="root"
PASSWD="yourpassword"

Almacenamiento en un servidor remoto

Para almacenar las copias de resguardo en un servidor remoto es necesario configurar la dirección IP de este en el parámetro "REMOTE_IP" del archivo de configuración /etc/backup-cron/backup-cron.conf. Por defecto este parámetro no tiene ninguna dirección IP.

El parámetro "REMOTE_USER" indica con que usuario debe conectarse al servidor remoto. El valor predeterminado es "admin".

# Copiar archivos de respaldo a servidor remoto vía SCP
REMOTE_IP=""
REMOTE_USER="admin"

Restaurando información desde una copia de resguardo

En el caso de que haya perdida de información o la misma se corrompa, la información puede ser restaurada desde una copia de resguardo, ya sea archivo o cinta.

A continuación se describe el proceso de recuperar información:

Verificando la integridad de los datos respaldados

La verificación de los datos resguardados por sumas (cheksum) es una forma de control de redundancia muy simple, que se utiliza para proteger la integridad de datos, verificando que no hayan sido corrompidos por modificaciones (accidentales o intencionales) o por errores durante el almacenamiento.

Verificación de sumas mediante MD5

Para verificar un archivo de resguardo por MD5 ejecute el siguiente comando:

md5sum --check backup-$HOST-$TIPO-$FECHA.tar.bz2.DIGEST

Verificación de sumas mediante SHA1

Para verificar un archivo de resguardo por SHA1 ejecute el siguiente comando:

sha1sum --check backup-$HOST-$TIPO-$FECHA.tar.bz2.DIGEST

Verificación de sumas mediante SHA256

Para verificar un archivo de resguardo por SHA256 ejecute el siguiente comando:

sha256sum --check backup-$HOST-$TIPO-$FECHA.tar.bz2.DIGEST

Extracción de archivos

Descomprimiendo los archivos resguardados

Para descomprimir una copia de seguridad luego de verificar las sumas por MD5, SHA1 y/o SHA256 ejecute el siguiente comando:

tar --bzip2 --extract --verbose --preserve-permissions --file backup-$HOST-$TIPO-$FECHA.tar.bz2

Extrayendo datos desde cinta

Para recuperar la totalidad de los datos respaldados en una cinta y escribirlos en la raíz del sistema debe emplearse el siguiente comando:

tar --bzip2 --extract --verbose --preserve-permissions --file /dev/st0 --directory /

Búsqueda de archivos

El siguiente comando permite almacenar en un archivo llamado "archivos.txt" un listado de los archivos respaldados en la unidad de cinta:

tar -tjf /dev/st0 > archivos.txt

Una vez finalizada esta tarea es necesario rebobinar la cinta para dejarla en condiciones de trabajo:

mt -f /dev/st0 rewind