lunes, septiembre 04, 2006

Backup al apagar el ordenador

Mi amigo Ocularis recientemente se ha hecho ubuntero y un día hablando me preguntó si era posible hacerse una copia de seguridad de su directorio home cada vez que apagase el ordenador. La respuésta es que , de forma bastante sencilla. Como no es la primera persona que me pregunta eso (de hecho es la segunda :-) lo voy a explicar porque puede ser de interés para quienes caigan por aquí googleando.


Directo al grano

Lo primero que hay que hacer es programarse un pequeño script que sea el que haga la copia de seguridad en sí mismo. Se puede crear con tu editor de texto favorito (vi, emacs, nano, pico...). Por ejemplo, algo como esto:

#!/bin/sh
DIR_ORIGEN=/home/pepito
DIR_DESTINO=/mnt/disco_externo/copia_seguridad

echo "******************************"

echo "Haciendo copia de seguridad..."
echo "******************************"

cp -Ru $DIR_ORIGEN $DIR_DESTINO


Que lo que hace es copiar (comando cp) el directorio DIR_ORIGEN (/home/pepito) y todos sus subdirectorios (opción -R) en el directorio DIR_DESTINO (/mnt/disco_externo/copia_seguridad). La otra opción de cp, la -u es de update, y lo que hace es que si ya existen en el destino los ficheros, solo los copia (sobrescribiéndolos) si el fichero de origen es más reciente. De esta forma, la primera vez que hagamos la copia le costará un rato, pero en las veces sucesivas solo se copiarán los ficheros que hayamos modificado y será más rápida. La primer línea (#!/bin/sh) sirve para indicar qué interprete de comandos ha de usarse para ejecutar el script. Si no entiendes que significa esto, no pasa nada, quédate con que es la forma habitual correcta de comenzar un script.

Ya tenemos el script, que supongamos que hemos llamado backup.sh. No olvidéis darle permisos de ejecución para que no haya problemas: chmod +x backup.sh


Ahora vamos a hacer que se ejecute cuando apaguemos el ordenador. Para ello nos situaremos en el directorio /etc/rc0.d Una vez ahí escribiremos lo siguiente:

sudo ln -s /home/pepito/backup.sh K10mi_backup

Si listamos el contenido del directorio veremos que aparece una línea:

lrwxrwxrwx 1 root root 18 mar 21 2005 K10mi_backup -> /home/pepito/backup.sh

Lo que hemos hecho es un link, que es una forma de nombrar un fichero cualquiera (/home/pepito/backup.sh) con otro nombre diferente (K10mi_backup). Y además, por haberlo puesto en ese directorio, se ejecutará cuando apaguemos el ordenador.

Pues ya está, sencillo ¿verdad?


Mejoras (para nota):
- Comprimir lo que se va a copiar (Pista: tar cvfz... ).
- Guardar varias copias de fechas distintas.
- Informar al usuario en el siguiente arranque del resultado de la copia (por ejemplo con un mail).
- Lo anterior solo funciona al apagar el ordenador, pero no al reiniciarlo. ¿Cómo hacer que también se ejecute en ese caso? (pista: leer el siguiente apartado y saber que el nivel 0 es el de apagado y el 6 el de reinicio)


La explicación

Se me han ido las ganas de escribir, ja ja, pero en este link tenéis una explicación muy completa de cómo funciona el arranque y parada de un sistema Linux. Lo anterior se aplica a casi todas las distribuciones de Linux con pequeñas variaciones, y a otros sistemas Unix como Solaris o HP-UX. En cambio, en otras familias (AIX, FreeBSD y derivados) la cosa funciona de otra manera.

Editado: En la explicación del link anterior hay un pequeño error, que un anónimo usuario de ubuntu ha descubierto y comentado.

5 comentarios:

Anónimo dijo...

¡Muchas gracias!. La verdad es que a los linux-novatos nos vienen genial estas explicaciones. Ahora mismo lo pongo en práctica.

OS_C dijo...

Vale! ya me contarás que tal...

Le Vixen Fatale dijo...

Rubén!!!bienvenido al ubuntu world, yo ahora soy más feliz...y si alguna vez he de trabajar en alguna máquina con window$ le meto una ubuntu virtual!!!

un saludo

Ana

Anónimo dijo...

Vaya, no me funciona. ¿Puede ser que en ubuntu el directorio para colocar los links a los scripts no sea /etc/rd0.d ?

Hola, red eyed, gracias por la bienvenida. Aprovecho para hacer una pregunta: ¿usas máquinas virtuales con linux?

OS_C dijo...

¿No va? Vaya, ahora te mando un mail y si averiguamos lo que pasa edito el post :)