INTRODUCCIÓN A LAS COPIAS DE SEGURIDAD

database-backup-cd-512Definición

Una copia de seguridad, copia de respaldo o backup (su nombre en inglés) en tecnologías de la información e informática es una copia de los datos originales que se realiza con el fin de disponer de un medio para recuperarlos en caso de su pérdida. Las copias de seguridad son útiles ante distintos eventos y usos: recuperar los sistemas informáticos y los datos de una catástrofe informática, natural o ataque; restaurar una pequeña cantidad de archivos que pueden haberse eliminado accidentalmente, corrompido, infectado por un virus informático u otras causas.

 

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 el día que hicimos la última 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 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 (mayor de 50 GB) pero el volumen de datos que se modifican no es elevado (sobre 4 GB), 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 (mayor de 50 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 mes, 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.

 

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” (en sistemas GNU/Linux) es una de las carpetas que debemos salvaguardar.

El objetivo de la realización de copias de seguridad es el restablecimiento 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»       (Paginas Webs)

 

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.

 

Nomenclatura de los archivos de copia de seguridad

La creación manual de la copia de seguridad consiste en ejecutar manualmente el comando que genera la copia. El resultado es un único archivo comprimido que contiene todos los datos que se quieren salvaguardar. Normalmente, el nombre del archivo suele incluir el tipo de copia, las carpetas que contiene y la fecha (en el caso de copias totales) o fechas (en el caso de copias diferenciales e incrementales) de los datos.

Ejemplo, si hoy fuera 1 de febrero de 2012 y deseáramos crear una copia de seguridad total de las carpetas “etc” y “home”, lo normal es que el nombre del archivo fuera:

CopiaTotal_etc-home_01feb12.tar.bz2

Si una semana después, el 8 de febrero de 2012 deseáramos crear una copia de seguridad diferencial desde la copia total del día 1 de las carpetas “etc” y “home”, lo normal es que el nombre del archivo fuera:

CopiaDiferencial_etc-home_01feb12-08feb12.tar.bz2

Si el día siguiente, 9 de febrero de 2012, deseáramos crear una copia de seguridad incremental desde la copia diferencial del día 8 de las carpetas “etc” y “home”, lo normal es que el nombre del archivo fuera:

CopiaIncremental_etc-home_08feb12-12feb12.tar.bz2

Con ésta nomenclatura será más fácil identificar los datos que contienen los archivos de copia de seguridad ya que el nombre del archivo lleva implícito el tipo de copia, las carpetas de datos que contiene y la fecha o fechas de los archivos salvaguardados.

 

Creación manual de la copia de seguridad con “tar”

Para crear copia de seguridad de una carpeta o carpetas, habitualmente se utiliza el comando “tar” que permite crear un único archivo que contenga todos los datos y además, permite comprimirlos en diferentes formatos.

Aquí utilizaremos la compresión bzip2 por ser una de las que más comprime. Los archivos tar comprimidos en bzip2 suelen llevar extensión ‘.tar.bz2’.

# tar -jcvf CopiaTotal.tar.bz2 carpeta1 carpeta2 carpeta3 …

Opciones:

j: Comprimir utilizando bzip2

c: Crear nuevo archivo

v: Mostrar los archivos añadidos

f: Escribir hacia un archivo

# tar -jxvf copia.tar.bz2 ruta-del-archivo

Opciones:

j: Comprimir utilizando bzip2

x: Extraer

v: Mostrar los archivos extraídos

f: Extraer desde un archivo

# tar -jtvf copia.tar.bz2

Opciones:

t: Mostrar el contenido

 

Para crear copia de seguridad de los archivos modificados tras una fecha dada, ejecutaremos:

# tar -jcvf CopiaDiferencial.tar.bz2 -N 1feb2012

La opción “-N” en el comando “tar” significa “Newer” que traducido es (más nuevo que). Si incluimos la opción “-N 1feb12” significa que solamente va a añadir los archivos que se han modificado con posterioridad a dicha fecha, es decir, más nuevos que el 1 de febrero de 2012 a las 0 horas, 0 minutos.

Por ejemplo, si hoy fuera 1 de febrero de 2012 y deseamos realizar una copia de seguridad total en la carpeta “/tmp” (temporal) de las carpetas “/home” y “/etc”, el nombre del archivo será CopiaTotal_etc-home_01feb12.tar.bz2 y el comando que debemos lanzar será:

# tar -jcvf /tmp/CopiaTotal_etc-home_01feb12.tar.bz2 /home /etc

Si utilizamos el comando “date” podemos hacer que se ponga automáticamente la fecha actual en el nombre del archivo y nos servirá para cualquier día ya que tomará la fecha del sistema. El comando “date” muestra la fecha del sistema. Si queremos que muestre la fecha en un formato especial como por ejemplo “13sep12”, debemos escribir “date +%d%b%y”.

Al escribir el comando date entre comillas simples inclinadas (`), la salida del comando date sustituirá al comando en su lugar, es decir, donde pone `date +%d%b%y` quedará sustituido por “14feb12” si hoy fuera esa fecha:

# tar -jcvf /tmp/CopiaTotal_etc-home_`date +%d%b%y`.tar.bz2 /home /etc

Por ejemplo, si hoy fuera 8 de febrero de 2012 y deseáramos realizar una copia de seguridad diferencial de los cambios producidos desde el día 1 de febrero de 2012 en la carpeta “/tmp” (temporal) de las carpetas “/home” y “/etc”, el nombre del archivo será “CopiaDiferencial_etc-home_01feb12-08feb12.tar.bz2” y el comando que debemos lanzar será:

# tar -jcvf /tmp/CopiaDiferencial_etc-home_01feb12-08feb12.tar.bz2 /home /etc -N 01-feb-12

Pero si en lugar de escribir directamente “01feb12-08feb12” escribimos 01`date %b%y`-`date +%d%b%y` nos servirá el mismo comando para todos los días.

 

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 por un olvido o dejadez del mismo podría ocurrir que el día que necesitemos la copia de seguridad, ésta 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 en 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 alguna aplicación gráfica como “gnome-schedule”. 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á:

# 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 2012 se sustituirá por “1feb12”. 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á:

# 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 2012 se sustituirá por “01feb12-13feb12”. 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.

Podemos crear scripts para guardar los comandos, ejemplo: “copia-normal.sh” y “copia-diferencial.sh”.

Lo recomendable es realizar la copia de seguridad sobre un dispositivo extraíble, por ejemplo, un disco duro externo USB. Si se trata de un disco duro 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 el comando tendríamos que poner “/mnt/sda1”.

 

Creación manual de la copia de seguridad con “cpio”

En principio la utilidad “cpio” es similar a “tar” pero los detalles de su funcionamiento difieren en algunos aspectos. “cpio” fue inicialmente creado para el almacenamiento de copias de seguridad en cintas magnéticas. “cpio” se usa actualmente para copiar ficheros en o desde el árbol de directorio o archivo “cpio”, o bien copiar estructuras completas de directorios en unidades extraíbles.

Opciones:

  • Crear un nuevo archivo: -o (output)
  • Extraer desde un archivo: -i (input)
  • Copiar una estructura de directorios: -p (copypass)
  • Reiniciar el tiempo de acceso de los archivos una vez copiados: -a
  • Preservar tiempos de modificación (usado con -i): -m
  • Crear directorios en caso de que hiciesen falta (usado con -o y -i): -d
  • Especificar un archivo que contiene un patrón (usado con -i): -e
  • Listar el contenido de un archivo (usado con -i): -t
  • Solo escribe archivos existentes: -u

Copy-Out:

Crear copia de seguridad de todo el contenido del Escritorio, sin comprimir o comprimido (respectivamente):

# find /home/user/desktop/ | cpio -o > /tmp/miescritorio.cpio

# find /home/user/desktop/ | cpio -o | gzip /tmp/miescritorio.cpio.gz

Copy-In:

Restablecer el contenido de la copia de seguridad anteriormente creada:

# cpio -i < /tmp/miescritorio.cpio

ó solo un archivo:

# cpio -i solo-este-archivo < /tmp/miescritorio.cpio

Copy-Pass:

Copiar el árbol de directorio completo (comenzando desde el directorio en el que nos encontramos) en el directorio “/tmp” de nuestro equipo:

# find . -depth -print | cpio -pvd /mnt/destino

Crear un backup de “/home”, “/usr” y “/opt” en una cinta:

# find /home /opt /usr -xdev | cpio -oF /dev/st0

 

Creación manual de la copia de seguridad con “dd”

La utilidad “dd” puede ser un buen modo de crear copias exactas de particiones completas, hacer una copia exacta de un disco extraíble, copiar un disco para el que GNU/Linux carece de controladores del sistema de archivos, crear varias instalaciones idénticas de GNU/Linux en varios ordenadores o crear un archivo vacío de un tamaño particular que pueda manipularse posteriormente dándole formato con “mkfs”.

La sintaxis básica es:

# dd if=(fichero de entrada) of=(fichero de salida) “Opciones”

Clonar disco duro sda en sdb:

# dd if=/dev/sda of=/dev/sdb bs=1M

Podemos clonar solo los sectores legibles:

# dd if=/dev/sda of=/dev/sdb bs=1M conv=noerror,sync

Copiar un disco completo a la primera partición del disco sdb

# dd if=/dev/sda of=/dev/sdb1 bs=1M

Crear una imágen de un disco duro o CD

# dd if=/dev/sda of=/home/usuario/sda.[bin|iso]

# dd if=/dev/cdrom of=/home/usuario/myCDRROM.iso

Rellenar un disco o partición con 0, es decir elimina su contenido:

# dd if=/dev/zero of=/dev/sda[X]

Para borrar solo el primer sector:

# dd if=/dev/zero of=/dev/sda count=1 bs=512

Para eliminar el cargador de arranque, pero no la tabla de particiones:

# dd if=/dev/zero of=/dev/hda count=1 bs=446

Respaldar el sector de arranque (MBR):

# dd if=/dev/sda of=/home/usuario/Desktop/mbr.backup count=1 bs=512

# dd if=/home/usuario/Desktop/mbr.backup of=/dev/sda

Crear un archivo de swap sin espacios vacíos:

# dd if=/dev/zero of=/extra-swap bs=1024 count=1024

NOTA: El conocimiento de estos comandos es requisito indispensable para aprobar la certificación “Linux Professional Institute 1 modelo 400“

LPIC-1

 

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 “nfs”, “samba”, “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

Sobre la utilidad “unison” ya escribimos un post en el apartado “TIPS & TRICKS” de este blog.

UNISON

 

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”:

Es un software libre de respaldo disco-a-disco, con una interfaz web. El software es multiplataforma, y puede ejecutarse en cualquier GNU/Linux, Oracle Solaris o servidor basado en Unix. No se requiere el uso de clientes, ya que el servidor es en sí mismo es cliente.

 http://backuppc.sourceforge.net

“Amanda”:

Amanda, anteriormente conocido como “Advanced Maryland Automatic Network Disk Archiver” es una herramienta de código abierto para realizar copias de seguridad de datos que residen en varios equipos en una red. Se utiliza un modelo cliente-servidor, donde el servidor contacta con cada cliente para realizar una copia de seguridad a una hora programada. Se puede ejecutar en casi cualquier sistema Unix y es compatible con sistemas MS Windows usando “Samba”.

http://www.amanda.org

“Afbackup”:

Herramienta para hacer copias de seguridad de PC’s de la red, parecida a las anteriores.

http://sourceforge.net/projects/afbackup

 

 

 

Deja un comentario