Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

sábado, 9 de mayo de 2015

Tar y las copias de seguridad de Linux

Las copias de seguridad son un elemento muy importante y muy menospreciado por las personas que usan el ordenador de forma cotidiana en sus hogares. Esta tarea ya ha demostrado ser crucial en los entornos corporativos, pero aún falta que calé hondo en los hogares, aún cuando poco a poco se ve que la gente va preocupándose cada vez más de ese tipo de labores. Cada sistema *nix, suele tener sus herramientas personalizadas que difieren por completo del resto, pero por fortuna todos éstos tienen un par de herramientas en común que se podrían considerar cómo las navajas suizas de estos entornos, si bien son "simples"siempre sabemos que estos métodos van a funcionar sea cual sea el sistema en el que se use. Actualmente existen dos métodos universales para realizar backups: los comandos tar y cpio; aunque en este caso me voy a centrar en lo que ofrece tar, ya que en mi opinión da más juego y sirve también para adquirir conceptos de compresión y descompresión debido a que tar en sí sirve precisamente para eso: comprimir y descomprimir.



Conociendo tar

Tar es una herramienta muy eficaz que resultar relativamente sencilla de utilizar. Aquellos que usan un entorno gráfico y se descargar un fichero tar.gz o tar.bz2, tienen que hacer doble click sobre este fichero para que les aparezca una ventana que muestra el contenido de dicho fichero; algo parecido a lo que ofrece su equivalente de Windows, Winrar. Pero aquellos que carecen de interfaz gráfica, o simplemente prefieren no usarla por que se sienten más cómodos con la terminal, deben de conocer los comandos adecuados para realizar dicha tarea.

Toda tarea que se realice con esta herramienta sigue la siguiente estructura:

tar -parámetros  $nombre_archivo_comprimido $nombre_archivo/$nombre_directorio


Aunque en este caso, tar funciona de forma muy diferente dependiendo del parámetro introducido, lo cual se puede ver por ejemplo cuando comprimimos. Para comprimir tenemos las siguientes opciones:


-c: Este parámetro es indispensable para comprimir un fichero, la c representa create, y te comprime éste en formato .tar
-v: Este parámetro es opcional, es lo equivalente a un verbose; es decir, que muestra lo que hace el comando.
-f: Este parámetro SIEMPRE es el último en ponerse. Da igual cuantos parámetros se pongan, este debe de ir el último y tras poner éste, se debe especificar el nombre del fichero comprimido.

Basándonos en lo visto, el comando de compresión básico sería:
tar -cvf archivo.tar Fichero(s)

Estos tres parámetros serían los indispensables para realizar un compresión básica, si bien existen varias opciones adicionales para comprimir el fichero en un formato distinto; cosa que se suele hacer habitualmente. Es decir, raramente veréis un fichero comprimido en .tar, sino que irán en tar.gz o en tar.bz2.

-z: Este parámetro acompañaría al parámetro -c, nunca puede ir solo y su función es comprimir el fichero en formato tar.gz; Es decir, primero lo comprimir en .tar y a partir de dicha compresión lo comprime en formato gzip. Éste suele ser uno de los formatos de compresión más habituales.
-j: Al igual que -z, este parámetro no puede ir sólo y comprime el fichero en formato tar.bz2; es decir que en este caso lo comprime primero en .tar y luego en formato bzip2.
-Z: Tiene las mimas limitaciones que los anteriores; es decir, siempre va a acompañar a -c, y es importante no confundir -Z y -z; En este caso -Z comprime el fichero en tar.Z, lo cual equivaldría a comprimir el fichero a tar y luego a formato compress. Este último no es muy usado, pero nunca está de más tenerlo en cuenta.

Viendo esto, se puede concluir que el parámetro -c es el encargado de comprimir y que el resto de parámetros se encargan de añadir diferentes posibilidades. Para listar el contenido habría que usar el parámetro -t, mientras que para descomprimir habría que usar el parámetro -x. Dicho esto, nos podríamos orientar a través de esta lista:

tar
COMPRIMIR: tar -cvf archivo.tar Fichero(s)
LISTAR: tar -tvf archivo.tar Fichero(s)
DESCOMPRIMIR: tar -xvf archivo.tar Fichero(s)
tar.gz
COMPRIMIR: tar -cvzf archivo.tar Fichero(s)
LISTAR: tar -tvzf archivo.tar Fichero(s)
DESCOMPRIMIR: tar -xvzf archivo.tar Fichero(s)
tar.bz2
COMPRIMIR: tar -cvjf archivo.tar Fichero(s)
LISTAR: tar -tvjf archivo.tar Fichero(s)
DESCOMPRIMIR: tar -xvjf archivo.tar Fichero(s)
tar.Z
COMPRIMIR: tar -cvf archivo.tar Fichero(s)
LISTAR: tar -tvZf archivo.tar Fichero(s)
DESCOMPRIMIR: tar -xvZf archivo.tar Fichero(s)


Realizando copias de seguridad con tar

Tras tener el concepto asimilado, tocaría realizar una copia de seguridad. Existen dos tipos de copias de seguridad: La normal y la incremental.  La diferencia fundamental entre ambas copias reside en que, mientras que la normal te realiza una copia de seguridad de todo, la incremental solo te realiza la copia de seguridad de aquello que ha sido modificado desde que se hizo la última copia de seguridad, lo cual hace que el proceso se mucho más rápido. Normalmente para realizar una copia de seguridad incremental lo ideal sería usar una herramienta de terceros ya que tar de por sí carece de criterio alguno, y el querer hacerlo mediante tar puede llegar a ser complicado, con lo que el objetivo en este caso será realizar una copia de seguridad normal.

Para este ejemplo voy a usar la carpeta home; Y voy a realizar una copia de seguridad todos los días a las 9 de la mañana de forma automática, ya que lo ideal suele ser que para estos asuntos no entre el juego el factor humano ya que se le puede olvidar a uno, o uno puede no desear realizar la copia en ese momento, etc... Lo cual puede hacer que se hagan las copias de manera muy irregular, si es que se llegan a hacer. En este script de ejemplo se va a realizar un backup de la carpeta home, un script que cómo podéis ver tiene cada línea comentada para que se pueda entender qué hace cada cosa; Cómo podéis ver el script es muy sencillo:

  1. #!/bin/bash
  2. #CREAMOS EL DIRECTORIO BACKUPS. EN CASO DE QUE EXISTIESE NO HARÍA NADA.
  3. mkdir /usr/src/backups >/dev/null 2>&1
  4. #NOS MOVEMOS AL DIRECTORIO CREADO
  5. cd /usr/src/backups/
  6. #COMPRIMIMOS LA CARPETA HOME EN UN FICHERO TAR.GZ QUE SE ALMACENA EN LA CARPETA CREADA
  7. tar cvzf backup-$(date -u "+%Y-%m-%d").tar.gz /home >/dev/null 2>&1
  8. #NOS ASEGURARNOS QUE SIEMPRE TENDREMOS COMO MAXIMO LOS 7 ULTIMOS BACKUPS
  9. #COMPROBAMOS SI HAY MAS DE 7 BACKUPS
  10. if [ $(ls /usr/src/backups/ |grep "backup-" |wc -l) > 7 ];
  11. then
  12.         #COGEMOS EL BACKUP MAS ANTIGUO Y LO ELIMINAMOS
  13.         ELIMINAR=$(ls /usr/src/backups/ |grep "backup-" |head -n 1)
  14.         rm ${ELIMINAR}
  15. fi

Para automatizar esta tarea, solamente habría que añadir esta línea al fichero /etc/crontab y reiniciarlo. En caso de que al reiniciar el servicio, no funcionase el cambio,  y se esté trabajando sobre Debian; probablemente sea debido a un bug cuya solución ya comenté anteriormente en este link:


Cómo podéis ver, en este caso el script será ejecutado por root, todos los días a las 9 de la mañana, y mediante la re-dirección a /dev/null nos aseguramos de no ser molestados por los mensajes que pueda mostrar el script durante la operación.

Espero que os sea útil.

Saludos.

No hay comentarios :

Publicar un comentario