lunes, 30 de agosto de 2010

Cómo hacer un BACKUP de tu sistema usando TAR

En mi sistema se ejecuta Debian Sid. (Este artículo se escribió y testeó por primera vez en un sistema con Ubuntu Feisty.
De todas maneras el contenido de este artículo es útil para la mayoría de distribuciones basadas en linux.

La herramienta tar nos permite realizar backups, e incluso restaurarlos, mientras nuestro sistema se está ejecutando.

Es una buena idea adquirir privilegios de root para poder acceder a todos los ficheros en el sistema, se puede usar para ello el comando sudo:

$sudo tar cvzpf /home/Backup.tgz --same-owner --exclude=/home/Backup.tgz --exclude=/home/error.log --exclude=/proc/* --exclude=/media/* --exclude=/dev/* --exclude=/mnt/* --exclude=/sys/* --exclude=/tmp/* / 2>/home/error.log


Opciones del comando TAR y argumentos

c crea el backup usando tar.
v activa el modo "verbose", mostrando mucha información.
z comprimirá los datos utilizando el formato gzip.
p preserva los permisos de los ficheros.
f manda la salida a un fichero en lugar de a la salida estandar.

Después de la opción f, es necesario escribir el nombre del fichero donde se almacenará el backup.
ej: tar cvzpf /home/Backup.tgz es correcto, pero
tar cvzfp /home/Backup.tgz es incorrecto.

/home/Backup.tgz es el nombre que le damos al fichero de backup.

--same-owner preserva los dueños de los ficheros. Ejecutando tar como root no sería necesaria porque es la opción por defecto para el usuario root.


EXCLUYENDO FICHEROS DEL BACKUP

--exclude esta opción nos da la posibilidad de excluir ficheros y directorios de nuestro backup.

--exclude=/home/Backup.tgz --exclude=/home/error.log Evita que el fichero de backup y el log de errores sean almacenados.


--exclude=/proc/* --exclude=/dev/* --exclude=/sys/*

Éstos son directorios virtuales por lo que no los almacenaremos.

NOTA: La diferencia entre --exclude=/proc/* y --exclude=/proc es que en el primer caso almacenará el directorio proc vacío, y en el segundo ni siquiera almacenará el directorio proc.

--exclude=/tmp/*

/tmp es un directorio temporal, y es borrado cada vez que arrancamos el sistema, así que no lo guardaremos en el backup tampoco.


--exclude=/mnt/* --exclude=/media/*

Si sólo quieres guardar el sistema principal, y no lo demás que hayas montado, entonces deberías excluir esos diretorios.


¿QUÉ DIRECTORIOS EXCLUIR?

Para tener varias ideas acerca de qué directorios necesitas, puedes:

* Ejecuta los comandos mount o df, para saber qué ficheros y particiones están actualmente montadas en tu sistema. p.ej:
$ mount
$ df -h
* Leer el Filesystem Hierarchy Standard (FHS) que cuenta el significado de la mayoría de los directorios de usuario y sistema para los sistemas basados en unix.
* Leer Linux System Directories and their Filesystems.


NOTA: La manera más fácil de realizar un backup del sistema es iniciando desde un live-cd o live-usb, entonces se monta la partición que se quiere guardar en el backup. De esta forma no tenemos que preocuparnos de qué ficheros excluir, etc.


LOG DE ERRORRES

2>/home/error.log redirecciona la salida estandar de error al fichero error.log para que podamos averiguar si han ocurrido errores importantes durante el backup.

Normalmente aparecen algunos warnings sobre algunos sockets que no se almacenan y la no inclusión de / al principio de los ficheros. Estos errores se pueden ignorar tranquilamente.


RESTAURANDO EL SISTEMA DESDE EL BACKUP

Ejecuta:
$sudo tar xvzf /home/Backup.tgz -C /


SI RESTAURAS EL BACKUP EN OTRA PARTICIÓN O MÁQUINA DIFERENTE:
* Acuérdate de cambiar el fichero /etc/fstab en la copia restaurada a los nuevos valores que sean correctos.
* También asegúrate que la copia restaurada tiene los drivers necesarios para el nuevo hardware.
* Al final configura correctamente el gestor de arranque (bootloader).


TESTEAR EL FICHERO DE BACKUP

Para testear si el fichero de backup no tiene errores ejecuta este comando:
$tar tvzf /home/Backup.tgz


REALIZAR EL BACKUP VIA NETWORK

Mandaremos el fichero de backup a través de la red. Vamos a explicar dos maneras de hacerlo:

* usando la herramienta netcat.
Los bytes se mandan sin cifrado.
No necesita un servidor previamente instalado, lo configuramos al vuelo.

* usando la herramienta ssh.
Necesita un servidor de ssh previamente instalado.
Proporciona cifrado en la comunicación.
Comando más simple.
Gestiona la conexión.


Tenemos dos ordenadores:

- Ordenador LOCAL con dirección IP_local. El contenido de este ordenador será guardado en el backup.
- Ordenador REMOTO, con dirección IP_remota. En este ordenador guardaremos el fichero de backup.


USANDO LA HERRAMIENTA NETCAT

Primero en el ordenador remoto lanzar el netcat en modo servidor:
$nc -l -p 6000 >/home/Backup.tgz

Ese comando comienza a escuchar en el puerto 6000 y guarda los datos que recibe en el fichero /home/Backup.tgz

Segundo en el ordenador local:
$sudo tar cvzp --same-owner --exclude=/home/error.log --exclude=/proc/* --exclude=/media/* --exclude=/dev/* --exclude=/mnt/* --exclude=/sys/* --exclude=/tmp/* / 2>/home/error.log | nc -w 3 IP_remota 6000

NOTA: Hemos borrado las opciones f y --exclude=/home/Backup.tgz porque los datos que genera tar son enviados a la salida estandar en lugar de a un fichero.

Comienza el backup, los datos son enviados a través de la red y almacenados en el ordenador remoto.

NOTA: Es necesario lanzar primero netcat en modo servidor si no, dará un error de conexión.


USANDO LA HERRAMIENTA SSH

Dependiendo de dónde esté instalado el servidor de ssh tenemos dos posibilidades:

servidor ssh en el ordenador remoto: (Ejecutamos este comando en el ordenador local)
$sudo tar cvzp --same-owner --exclude=/home/error.log --exclude=/proc/* --exclude=/media/* --exclude=/dev/* --exclude=/mnt/* --exclude=/sys/* --exclude=/tmp/* / 2>/home/error.log | ssh IP_remota "cat - > /home/Backup.tgz"

servidor ssh en el ordenador local: (Ejecutamos este comando en el ordenador remoto)
$ssh IP_local "sudo tar cvzp --same-owner --exclude=/home/error.log --exclude=/proc/* --exclude=/media/* --exclude=/dev/* --exclude=/mnt/* --exclude=/sys/* --exclude=/tmp/* / 2>/home/error.log" > /home/Backup.tgz


Más información en los foros de ubuntu:
BackupYourSystem using Tar
BackupYourSystem

TRADUCIDO DE:
Backup your system using TAR

3 comentarios:

  1. ola que tal, quisiera saber, como puedo hacer despues de crear un backup guardarlo en una memoria usb o en cd, usando debian 5...grax

    ResponderEliminar
  2. Hola Arrobaxxx,

    si has creado el fichero BAckup.tgz puedes simplemente copiarlo en la memoria usb.

    Si lo que quieres es recrear el sistema en una memoria usb, puedes crear las particiones adecuadas en el usb (sistema y swap) y descomprimir el backup allí.
    Este sistema funciona, pero tiene el inconveniente de acortar la vida de la memoria usb debido a las reescrituras.

    Saludos,
    Vicente.

    ResponderEliminar
  3. justo lo que buscaba, gracias.
    un saludo

    ResponderEliminar