5 març 2009

Realizando backups en cinta

Esta tarde estaba en el trabajo jugueteando con una unidad de cinta que he instalado en una de las sucursales, como estamos en crisis tenemos que trabajar con lo que tenemos y esto permite recuperar viejos cacharros que tenemos guardados en el armario, uno de ellos es una unidad de cinta, una dell powervault 110T con cintas LTO3, que permiten un almacenamiento de 200Gb, 400Gb comprimidas.

la imágen no tiene nada que ver con la unidad de cinta ni las LTO3, pero es chulísima :D

Primero de todo tenemos que contar que una cinta guarda los datos de forma lineal, para que os hagáis una idea, si editamos hexadecimalmente un disco duro, podremos ver que toda la información está ahí metida, pero es poco probable que el mismo fichero se encuentre todo entero en un conjunto de sectores seguidos, así que la forma de acceder a los datos de una cinta no será como acceder a un CD o stick usb, trataremos la cinta como un archivo de datos, en el caso de este post, como un .tar.

Así que vamos a contar un poco las herramientas que usamos en GNU/Linux para realizar backups en unidades de cinta.

Primero de todo tenemos los comandos mt y st.

st servirá para gestionar el brazo robótico (en el caso que tengamos uno), como no tenemos uno sólo lo menciono y os recomiendo hacer un man st para poder leer sus posibilidades.

mt sirve para gestionar todas las acciones de la unidad de cinta, rebobinar, tensar, borrar o hacer un eject entre otros.

Para que os hagáis una idea de como funciona este comando os dejo un par de ejemplos:

tensar la cinta
# mt -f /dev/st0 retension

borrar el contenido de la cinta
# mt -f /dev/st0 erase

tener en cuenta que esto recorrerá la cinta de principio a fin, cada vez que queramos hacer una copia de seguridad no será necesario hacer un borrado de la cinta, sino que con un sobreescribir o un append podremos seguir escribiendo datos en la cinta sin que esto cause algun tipo de problema. Pensar en lo que se ha comentado mas arriba, un archivo de datos.

Activar la compresión de datos
# mt -f /dev/st0 datcompression

Rebobinar la cinta
# mt -f /dev/st0 rewind

Sacar la cinta de la unidad de cinta (eject)
# mt -f /dev/st0 offline

En todo momento suponemos que nuestra unidad de cinta se encuentra en /dev/st0, si no existe, recomiendo hacer un ls /dev |grep st y comprobar los dispositivos de cinta existentes, si no te sale ninguno lo mas probable es que linux no esté detectando la unidad, que el cable no esté bien conectado o simplemente que la unidad de cinta de encuentra apagada (hehe).

Ahora viene lo divertido, guardar los datos a la cinta, si eres cazurro como yo y además estás habituado a la forma en qué se escriben los datos en los discos duros y sticks usb, al principio no entenderás muy bien el concepto de la cinta. Para que te hagas una idea, una unidad de cinta es como un gran fichero de texto dónde tu le vas metiendo los datos ahí.

Para guardar los datos en la cinta hay varios métodos, dos de ellos son mediante el cpio y el tar.

cpio, es un comando de escritura input/output de archivos, es decir, con este comando vamos a poder meter los ficheros tal cual en el contenedor, y sacarlos de la misma forma.
Este programa funciona mediante pipes.

Cuando estaba haciendo las pruebas usé este comando, pero no lo entendía demasiado bien y con las pruebas de esta tarde tras empezar a modificar opciones y ver que petaba todo el rato me he pasado al tar, un poco mas amigable :) para que os hagáis una idea de como funciona cpio, os dejo el ejemplo que me funcionaba:
# cp /home; cpio -idm --no-absolute-filenames --block-size=512 --format=newc --verbose -I /dev/st0
si os fijaís estoy usando ; en lugar de |, no podría deciros al 100% si ; = | así que ya investigaré :P

vamos a los que estamos:

agregar datos en la cinta mediante tar
pues para agregar los datos a la cinta lo vamos a hacer de una forma muy similar como lo hacemos cuando agregamos unos ficheros a un archivo .tar.

Antes de empezar debemos echar una ojeadita a tar para poder entender las distintas opciones que nos permite el comando.

Voy a hacer un resumen de las que nos pueden ser de ayuda.

c: create, con esto le indicamos que vamos a crear un nuevo fichero .tar
v: verbose, ver los ficheros que se listan
f: usar un archivo o dispositivo para el .tar (se usa tanto en lectura como en escritura)
r: append to the end of file, con esto le decimos que los ficheros que estamos introduciendo queremos que vayan al final del fichero .tar que ya tenemos creado
x: extraer los ficheros del archivo
t: listar el contenido del archivo
W: verificar la integridad de los datos

vistas estas opciones, combinadas podremos crear nuestros archivos .tar sin compresión.

por ejemplo, si queremos hacer un backup del directorio /etc a la cinta vamos a ejecutar lo siguiente:
# tar cvf /dev/st0 /etc

si además a la cinta queremos añadirle el directorio /var/www
# tar rvf /dev/st0 /var/www
para ver el contenido de la cinta
# tar tvf /dev/st0
para extraer todo el contenido de la cinta a un directorio, por ejemplo /root/recovery
# tar xvf /dev/st0 /root/recovery
para extraer sólo un fichero de la cinta
# tar xvf /dev/st0 /etc/samba/smb.conf
para trabajar con un archivo tar comprimido deberemos añadir la opción z, de compressed.

Como veis, la cosa no es demasiado complicada, sólo hace falta tener claros los conceptos y las opciones de los dos comandos.

Actualización 10/03/09 00:01
Tras varias pruebas no es posible guardar el contenido de todos los directorios con el append al finar del .tar (r), así que la solución es crear un .tar en el disco y a continuación guardar el .tar final en la cinta en una nueva sesión.

3 comentaris:

_Poseidon_ ha dit...

Una pregunta: si ejecutas tar cvf /dev/st0 /etc para guardar el contenido de /etc en la cinta, ¿hay que rebobinarla manualmente para descomprimirlo?

Blackhold ha dit...

el post este de momento lo tengo a medias, de momento es sólo un boceto, pero como otros voy a comentar todos los bugs que he encontrado.

me he encontrado que si hago un xvf con la cinta rebobinada o no, me salen resultados distintos. El problema está que cuando meto un segundo directorio me hace cosas raras, parece que hay algo equivalente a las sesiones y no consigo hacer un extract de todos los directorios que he metido en la cinta.

tengo que probar si es un problema de que me dejo alguna opción a la hora de escribir los datos a la cinta o un problema del tar propiamente dicho. Mi prueba será hacer primero un tar en el disco y luego este tar resultante lo meto a la cinta a ver el output que me sale.

Anònim ha dit...

Hola, creo que deberias buscar un poco en google.

Esto te puede servir :

http://www.anandhacorp.co.uk/backup_unix.html

saludos

Publica un comentari a l'entrada