En Autentia
nos gusta cuidar siempre los detalles
fundamentales asociados al mantenimiento de cualquier sistema
informático. Uno de estos aspectos consiste en realizar una
buena gestión de los procesos de backup, asociados a la
información que maneja cualquier sistema informático.
Es fundamental programar y realizar un seguimiento de estos procesos
a fin de evitar la pérdida de información relevante
asociada a un sistema. Hoy os queremos mostrar cómo realizar
backup de información contenida en un sistema Linux utilizando
recursos compartidos en red.
1. Aspectos básicos
sobre backup
El
término backup se refiere a un concepto de especial
importancia en el mundo informático: las copias de seguridad.
Suele realizarse una copia de seguridad de aquella información
que interesa protegerse frente a posibles pérdidas o borrados
accidentales. Puede realizarse una copia de seguridad de la imagen de
un sistema, bases de datos, ficheros de aplicación, documentos
específicos, etc.
En su versión más
sencilla una copia de seguridad, como su propio nombre indica, no es
más que un duplicado de cierta información, sin ningún
tipo de procesamiento sobre la misma (compresión, etc). Dicho
duplicado debe almacenarse en un medio distinto al que se encuentra
la información original, ya que si hubiera algún
problema sobre el medio donde se encuentra almacenada la información
original (rotura, robo, fallo software, etc) el backup
realizado no serviría para nada.
Existen diversos tipos de backup
que típicamente suelen aplicarse sobre la información
relevante. Los principales son:
-
Completo: Consiste en
una copia completa de todos los datos principales. Requiere mayor
espacio de almacenamiento y ventana de backup. -
Incremental:
Consiste en copiar únicamente aquellos datos que hayan sido
modificados respecto a otro backup incremental anterior, o
bien, un backup total si éste no existe. Un backup
incremental no sustituye a los backup incrementales
anteriores. Para restaurar un backup incremental es necesario
restaurar el backup completo y todos los backup
incrementales por orden cronológico que estén
implicados. Si se pierde uno de los backup incrementales, no
es posible restaurar una copia exacta de los datos originales. -
Diferencial:
Consiste en copiar únicamente aquellos datos que hayan sido
modificados respecto a un backup completo anterior. Requiere
menor espacio de almacenamiento y ventana de backup. Para
restaurar un backup diferencial es necesario restaurar
previamente el backup completo en el que se basa. Por tanto,
requiere mayor tiempo de restauración. Un backup
diferencial puede sustituir a otro backup diferencial más
antiguo sobre el mismo backup completo.
Normalmente se utilizan herramientas
que permiten flexibilizar y potenciar el proceso de generación
y mantenimiento de copias de seguridad. Dichas herramientas suelen
permitir diversas opciones relacionadas con las tareas de backup,
tales como:
-
Elección de tipo de backup
a realizar. -
Programación de tareas de
backup. -
Reestablecer información a
partir de copias de seguridad. -
Compresión de la información,
optimización del espacio ocupado por las copias de seguridad.
A continuación se mostrará
como programar de forma sencilla tareas de backup en un
sistema Linux, utilizando recursos compartidos en red como medio de
almacenamiento de las copias de seguridad.
2.
Configuración del sistema
Para ilustrar una forma sencilla de
generar copias de seguridad desde un sistema Linux, se parte de un
sistema Linux (Debian) que está conectado en red a una
máquina con Windows Server 2003.
El medio de almacenamiento para las
copias de seguridad será un disco duro extraible que se
conectará mediante usb a la máquina con Windows
Server 2003. La forma de compartir en red un recurso en sistemas
Windows es muy sencilla: una vez que el sistema reconoce el nuevo
medio conectado, basta con pulsar el botón derecho del ratón
sobre el medio a compartir, y seleccionar la opción Compartir
y seguridad.
En el diálogo emergente
seleccionar la opción Compartir esta carpeta. Establecer
el nombre deseado para el recurso compartido en el campo Recurso
compartido.
Por último, habilitar los
permisos para poder escribir sobre este medio. Pulsar el botón
Permisos e indicar los permisos pertinentes. Una vez
seleccionados los permisos (Control total en este caso, para
poder leer y escribir) pulsar el botón Aceptar para
finalizar el proceso.
El disco duro extraible conectado a
la máquina con Windows Server 2003 ya está
compartido en red, y puede ser accedido por la máquina Linux
para almacenar las copias de seguridad.
De esta forma, la estructura de
conexiones del sistema con el que se trabajará sera la
siguiente:
3.
Montar la unidad extraible desde Linux
En primer lugar, se procederá
a instalar sobre la máquina Linux un cliente de Samba, a fin
de poder visualizar los recursos de la máquina Windows
accesibles. Para ello se teclea el siguiente comando:
apt-get
install smbclient
Una vez instalado el
cliente de Samba, se podrán visualizar los recursos de la
máquina Windows accesibles por la máquina Linux. Para
ello, basta con teclear el siguiente comando:
smbclient
-L [IP_MAQUINA_WINDOWS]
En este caso, mostrará
el disco extraible que se compartió en red anteriormente.
Para montar via red la unidad
extraible de la máquina Windows sobre la máquina Linux,
es necesario instalar la herramienta smbfs, invocando el
siguiente comando en la máquina Linux:
apt-get
install smbfs
Una vez instalada la
herramienta smbfs, ya se puede montar el disco extraible de la
máquina Windows en la máquina Linux utilizando la red.
Antes de invocar el comando correspondiente, debe crearse un
directorio en el directorio /mnt donde se montarán los
archivos del disco extraible. Para ello, teclear el siguiente comando
en la máquina Linux:
mkdir
/mnt/iomega
Una vez creado este
directorio, ya se puede invocar el comando smbmount para
montar el disco extraible conectado a la máquina Windows sobre
el directorio /mnt/iomega de la máquina Linux. Ejecutar
este comando como se indica a continuación:
smbmount
//[IP_MAQUINA_WINDOWS]/extraible /mnt/iomega
A partir de este momento
se puede acceder al disco extraible conectado a la máquina
Windows desde el directorio /mnt/iomega de la máquina
Linux. En este caso, el acceso será necesario para almacenar
las copias de seguridad que se procederán a programar.
4.
Implementar script para realizar la copia de seguridad
El siguiente paso será
realizar un script para que sea invocado por una tarea cron de
forma periódica.
La funcionalidad del script es
muy sencilla: simplemente debe comprimir los archivos a salvar (por
ejemplo, con tar) y copiarlo al medio de almacenamiento
elegido (disco extraible del equipo con Windows montado en el
directorio /mnt/iomega de la máquina Windows). Por
mayor claridad, en el nombre del fichero se especificará la
fecha de realización de la copia de seguridad.
En este caso, el script para Linux
podría contener la siguiente línea:
tar
-cvzf /mnt/iomega/backup/backup-`date +%Y-%m-%d`.tgz /home/alberto
Este comando comprimirá
en un fichero de nombre backup-YYYY-MM-DD.tgz el contenido de
la carpeta /home/alberto de la máquina Linux. El
directorio destino será el directorio de nombre backup de
la unidad extraible conectada a la máquina Windows, que se
encuentra montada en el directorio /mnt/iomega de la máquina
Linux.
Este script se
almacenará en el fichero /home/alberto/backup.sh . Este
script es el que se invocará desde el proceso de cron
que se programará en el apartado siguiente.
5.
Automatizar la tarea utilizando Cron
Para automatizar la ejecución
de este script periódicamente, se utilizará el
cron del sistema Linux. Se programará la ejecución de
dicho script todos los jueves a las 0:00. Para establecer esta
programación a la lista de tareas del cron se ejecuta el
siguiente comando:
crontab
-e
En este caso, la máquina
Linux con Debian arranca el editor vi para añadir la
nueva tarea programada. Se recuerda que la
sintaxis de la línea a añadir en este archivo para
programar una nueva tarea es:
[hora]
[minuto] [dia_del_mes] [mes] [dia_de_la_semana] [comando]
De esta forma, para
programar la tarea de backup todos los jueves a las 0:00, la
línea a añadir en el archivo abierto por vi con
las tareas de cron asociadas al usuario, deberá ser la
siguiente:
0
0 * * 4 sh /home/alberto/backup.sh
El símbolo
asterísco ( * ) significa que abarcará todos los dias,
horas, etc según el campo que se especifique.
En este punto ya se tiene
programada una tarea de backup desde la máquina Linux,
utilizando como medio de almacenamiento el disco extraible conectado
a la maquina Windows (compartido en red). El proceso de backup se
resume en el siguiente gráfico:
Para recuperar la
información, bastará con descomprimir el archivo de
backup deseado utilizando el comando tar en la máquina
Linux. Para ello, tomando el fichero de backup generado en el
ejemplo del gráfico anterior, podría ejecutarse la
siguiente sentencia desde el directorio donde se encuentre:
tar
-xvzf backup-2006-04-14.tgz
6.
Conclusiones
No debería ser demasiado
complicado para cualquier iniciado en Linux, programar una tarea de
backup utilizando herramientas básicas del sistema
(scripts, cron, etc). Tal vez no es la forma más elegante
(existen herramientas especificas), pero el objetivo de este
documento en gran parte era ilustrar como pueden resolverse problemas
interesantes utilizando las herramientas más básicas
ofrecidas por los sistemas Linux.
Es una realidad en informática,
el hecho de que muchas veces es importante saber resolver problemas
utilizando unos pocos conocimientos sencillos asimilados
anteriormente.
7.
Fuentes
-
Wikipedia. Enciclopedia libre.
-
Artículo: “Acceder a un
directorio compartido por red de Linux a Windows”http://bulma.net/body.phtml?nIdNoticia=1950
-
Artículo: “Tareas
automatizadas con Cron”http://linuca.org/body.phtml?nIdNoticia=256
ALBERTO lo felicito por el contenido del articulo, muy interesante. Puesto que estoy documentandome para realizar copias de seguridad entre maquinas Windows y Linux. Solo me queda una duda, resulta que tengo dos maquinas, un con Linux Debian y la Otra con Windows XP, la información que quiero respaldar se encuentra en la maquina linux, y quiero que la copia quede en la maquina Windows de forma automática y diaria. Yo podría hacer el proceso inverso como lo explicas aquí en el articulo? podria tomar el directorio donde se encuentra la información y compartirla y hacer la tarea programa para que se copie en la maquina Windows?
Gracias
El comando para comprimir y que introduzca la fecha del dia automaticamente tiene un error deberia ser esto:
tar -cvzf /mnt/iomega/backup/backup-date-$(date +%Y-%m-%d).tgz /home/alberto
Pero muy buen post me a orientado mucho como programar una tarea