Quiero compartir con vosotros la forma en que habitualmente realizo mis copias de seguridad en mis sistemas GNU/Linux.
Como muy bien sabréis, para hacer copias de seguridad en GNU/Linux tenemos una infinidad de formas, por tanto no pretendo mostraros la forma definitiva de hacerlas, si no solamente la que utilizo yo.
En mi opinión podemos distinguir dos tipos de backups o copias de seguridad. El primero de ellos es aquel backup que respalda nuestros datos para tener otra copia de los mismos en caso de desastre. Y cuando hablo de datos me refiero a todos aquellos documentos y archivos en general que son de gran valor para nosotros.
El segundo tipo de backup es aquel que respalda las particiones y los discos en los que se aloja, en principio, nuestro sistema operativo.
Bien, ¿cuál es mejor? La respuesta es que los dos y ninguno. Me explico: el backup de los datos nos servirá para restablecer nuestros datos en caso de que los borremos por accidente o nuestro dispositivo de almacenamiento sufra una muerte súbita. En estos casos, podremos recuperar aquellos datos que se hayan perdido en el olvido.
Por otro lado, el backup de las particiones o los discos nos servirá para recuperar nuestro sistema operativo a un estado anterior. ¿En qué situaciones? Se me ocurren algunas, como por ejemplo que nuestro disco muera súbitamente (otra vez), o que queramos cambiar el disco por otro de más tamaño, o sin ir más lejos porque queramos instalar otro sistema operativo y queremos conservar el anterior.
Entonces, ¿en qué se diferencian ambos métodos? Pues resulta que con el backup de los datos solo conservamos nuestros datos, y con el backup de nuestro sistema operativo, en principio, sólo conservamos el sistema en sí. Por tanto, es evidente que en ambos métodos se respaldan cosas diferentes.
¿Qué método debemos emplear pues? La respuesta es que depende de las necesidades de cada uno. En mi caso, tengo mi servidor programado para que realice cada día a las 5:00 de la mañana un backup de todos mis datos, y los vuelque a un disco duro externo de 2 TB. Por otro lado, aproximadamente cada tres o cuatro semanas realizo un backup de las particiones y los discos duros de mis equipos, para de esta forma disponer de una copia exacta de mis sistemas operativos en un momento determinado. El motivo de hacerlo, a parte de mi paranoia al respecto de los desastres informáticos, es que trasteo habitualmente con el sistema y un día se me ha de romper del todo, pero la solidez y fiabilidad de un sistema Debian GNU/Linux es tal que afortunadamente nunca hasta ahora me ha ocurrido.
A todo esto podríamos preguntarnos... ¿No es posible realizar una copia de mis datos con el método que usamos para copiar mis particiones, y de esta forma evitar usar dos métodos diferentes? La respuesta es que sí, podemos hacerlo, pero surgen algunos inconvenientes. Si respaldamos nuestros datos respaldando la partición o el disco que los contiene, no tendremos acceso directo a los datos en ningún caso. Así pues, si quisiéramos acceder a ellos por cualquier motivo, tendríamos que respaldar la partición completa para recuperar cualquier dato. Podríamos sin embargo usar un método de respaldo sin compresión, y posteriormente montar el archivo de respaldo como un dispositivo loop, pero seguiría siendo un método tedioso y sin acceso directo a nuestros datos.
Así pues, si sois tan paranoicos como yo en lo que a las copias de seguridad se refiere, mi recomendación es que uséis ambos métodos con la frecuencia que estiméis oportuna. Si sois personas más normales y corrientes, podéis respaldar vuestros datos de la forma que gustéis y quedaros relativamente tranquilos (solo relativamente)
Bien, para hacer una copia de seguridad de nuestros datos en nuestro sistema GNU/Linux tenemos muchas aplicaciones gráficas para ello. Dos buenos ejemplos son Back in Time y Deja Dup. No obstante yo nunca me he llevado bien con este tipo de aplicaciones puesto que nunca he conseguido controlar completamente la copia de seguridad. Así pues, directamente he pasado de estas aplicaciones y me he ido a lo más profundo de las mismas, rsync.
Rsync, otra maravilla del Software Libre, es una utilidad en línea de comandos que permite, entre otras muchas cosas, sincronizar dos fuentes de datos minimizando la cantidad de datos transferidos. Es una auténtica navaja suiza en GNU/Linux y se utiliza tanto para backups locales como para remotos. De hecho, casi todas las aplicaciones de copias de seguridad utilizan esta herramienta internamente para hacer su trabajo. En mi caso, además de utilizarlo para copias de seguridad también lo uso para sincronizar los archivos de mi equipo de sobremesa con mi portátil.
Para instalarlo en nuestro sistema Debian GNU/Linux procederemos así:
Código: Seleccionar todo
$ sudo aptitude install rsync
Código: Seleccionar todo
$ man rsync
Código: Seleccionar todo
$ rsync opciones origen destino
Como tampoco quiero marear al personal con la ingente cantidad de parámetros que acepta rsync, me voy a quedar con los que a mi parecer son más útiles. Por tanto, para hacer una copia exacta de nuestra carpeta personal, procederíamos de esta forma:
Código: Seleccionar todo
$ rsync -av --delete /home/usuario/* /media/DISCO/Backup
El parámetro --delete nos genera una copia espejo de nuestro home. Si no añadiésemos este parámetro los ficheros que eliminásemos en nuestra carpeta personal no se eliminarían de la copia de seguridad. Así pues, si añadimos dicho parámetro conseguiremos una sincronización completa, manteniéndose ambas carpetas con exactamente los mismos datos.
Con la ejecución de este comando conseguiríamos una copia exacta de nuestra carpeta personal. Y no sólo eso, si no que también conseguiríamos que las sucesivas veces que se ejecutara ese comando, solamente se sincronizaran aquellos archivos que se hubieren modificado o se hubieren generado desde la última copia de seguridad, minimizando enormemente la cantidad de archivos a transferir.
Lo interesante de todo esto es poder automatizar la copia de seguridad de tal forma que se produzca sin la necesidad de nuestra intervención directa, y para ello usaremos cron. Para editar la lista de cron:
Código: Seleccionar todo
$ crontab -e
Código: Seleccionar todo
0 5 * * * rsync -av --delete /home/usuario/* /media/DISCO/Backup
Al automatizar la tarea podemos ahorrarnos el parámetro -v puesto que el resultado de la orden no va a parar a ningún sitio. Pero en vez de esto también podemos redirigir la salida a un fichero de tal forma que se genere un registro de todo aquello que se ha respaldado, todo ello empleando la redirección de salida, esto es, el símbolo mayor que al final de la orden seguido de la ruta donde está el fichero de registro:
Código: Seleccionar todo
0 5 * * * rsync -av --delete /home/usuario/* /media/DISCO/Backup > /home/usuario/registro
Bien, con esto tendríamos lista la copia de seguridad de nuestros datos. Es el momento de que veamos cómo hacer copias de seguridad de nuestro sistema operativo.
Al igual que para las copias de seguridad de nuestros datos, para clonar nuestro sistema operativo disponemos de multitud de herramientas. La más famosa en el mundo Windows es Norton Ghost, que si bien la aplicación no está mal, carece de cualquier posibilidad de control sobre las copias. Algo similar aunque en menor medida le pasa al software Clonezilla, un fantástico software de clonación pero a mi juicio muy capado en lo que a control de las copias se refiere.
Sin embargo hay una distribución GNU/Linux que nos proporciona todo aquello que necesitamos. SystemRescueCD, una distribución LiveCD basada en Gentoo, nos permite arrancar un sistema GNU/Linux completo con el que podemos generar directamente nuestras copias de seguridad y alojarlas en cualquier dispositivo que se nos ocurra, ya sea local o remoto. SystemRescueCD arranca por defecto sin entorno gráfico para evitar problemas con el servidor X, pero incorpora bajo petición del usuario el entorno Xfce con multitud de aplicaciones útiles, como por ejemplo un editor de particiones, un navegador Web, un navegador de archivos y una cantidad abrumadora de aplicaciones destinadas a la restauración de datos y sistemas operativos. En definitiva, con esta magnífica distribución cargada en memoria podemos hacer todo lo que se nos ocurra con nuestro sistema operativo.
¿Por qué usar SystemRescueCD y no cualquier otra distribución LiveCD? La respuesta es que cualquier distribución LiveCD que contenga las mismas herramientas nos serviría. Yo utilizo SystemRescueCD porque para este cometido, y otros muchos, me parece la opción perfecta. Quizás en un principio no sea tan amigable como puede serlo un LiveCD de Ubuntu, pero cuando se le coge el tranquillo ya no se cambia por otra.
Podemos descargarla desde aquí. Una vez descargada, debemos grabar la imagen ISO a un CD y arrancar nuestro ordenador con SystemRescueCD. Lo primero que nos encontraremos al arrancar será la pantalla del menú principal:

Aquí debemos elegir la opción que se adecúe a nosotros. En mi caso suelo elegir la opción Framebuffer console in high resolution puesto que aprovecha mejor el espacio en las pantallas grandes. Sin embargo puede que la mejor opción para la mayoría de la gente sea la primera, que es la que arranca por defecto.
La segunda opción es muy interesante puesto que almacena en memoria todo el sistema SystemRescueCD. Tarda más en arrancar pero luego el uso del sistema es mucho más fluido ya que no tiene que leer desde CD.
Una vez escogida la opción adecuada, empezará a cargar el sistema, no sin antes preguntarnos qué distribución de teclado queremos:

Tenemos unos cuantos segundos para cambiar la distribución de teclado por defecto. Para escoger el teclado español escribimos el número 13 y pulsamos Intro. A continuación seguirá cargando el sistema hasta presentarnos por fin la pantalla principal de SystemRescueCD:

Como puede verse no arranca un entorno gráfico por defecto para evitar problemas, pero se nos indica cómo podemos levantarlo fácilmente tecleando startx y, si esta falla, tecleando wizard:

Bien, a partir de este momento ya tenemos disponible un sistema operativo completo preparado para usarlo. Veamos cómo.
Primero vamos a configurar la red para así poder utilizar todos los recursos de red de que dispongamos. Si disponemos de DHCP en nuestra red no hará falta ningún cambio, pero si por cualquier razón debemos configurar la red a mano podremos hacerlo fácilmente a través del entorno gráfico empleando Network Manager, o en su defecto la terminal de la siguiente forma.
Para configurar la dirección IP:
Código: Seleccionar todo
$ ifconfig eth0 inet 192.168.0.2 netmask 255.255.255.0
Para la puerta de enlace:
Código: Seleccionar todo
$ route add default gw 192.168.0.1
Código: Seleccionar todo
$ nano /etc/resolv.conf
Código: Seleccionar todo
nameserver 192.168.0.2
Código: Seleccionar todo
$ ping www.debianisfreedom.com
Si usamos un recurso de red tendremos la posibilidad de utilizar todo el espacio disponible que tengamos en nuestro servidor, además de poder dirigir directamente la copia de seguridad a su lugar definitivo. Sin embargo el volcado de la copia por la red será bastante lento, usando mucho más tiempo que utilizando un almacenamiento directo.
Por el contrario, usando un dispositivo de almacenamiento externo nos permitirá terminar la copia en mucho menos tiempo, pero tendremos un problema de espacio si el dispositivo no es lo suficientemente grande, y también tendremos que mover la copia a su destino definitivo si ese no lo es.
Para realizar la copia de seguridad por red podremos usar muchos tipos de recursos. Nosotros veremos cómo utilizar tres tipos, un recurso Samba, un recurso NFS y un recurso SSH o SFTP.
Para montar un recurso Samba procederemos primero a crear el punto de montaje:
Código: Seleccionar todo
$ mkdir /mnt/recurso-samba
Código: Seleccionar todo
$ mount //ekipotonety.casita.com/Backups /mnt/recurso-samba -o username=tony,iocharset=utf8,lfs
Tras poner la contraseña del usuario cuando se nos pida, finalmente tendremos montado en la ruta /mnt/recurso-samba el contenido del recurso Backup de nuestro servidor Samba.
Para montar un recurso NFS procederemos de una forma similar:
Código: Seleccionar todo
$ mkdir /mnt/recurso-nfs
$ mount ekipotonety.casita.com:/media/Backups /mnt/recurso-nfs -o nolock
Código: Seleccionar todo
$ mkdir /media/Backups/tmp
$ chmod 777 /media/Backups/tmp
Por último, para montar un recurso SSH haremos lo siguiente:
Código: Seleccionar todo
$ mkdir /mnt/recurso-ssh
$ sshfs -p 1234 tony@ekipotonety.casita.com:/media/Backups /mnt/recurso-ssh
Así pues, con cualquiera de estos métodos, tendremos un recurso compartido montado en un directorio sobre el que podremos volcar nuestras copias de seguridad.
Sin embargo nos falta ver cómo podemos montar un dispositivo de almacenamiento externo, como por ejemplo un disco de almacenamiento USB.
Una vez conectado el disco de almacenamiento, crearemos el directorio donde se montará posteriormente:
Código: Seleccionar todo
$ mkdir /mnt/Backups
Código: Seleccionar todo
$ fdisk -l
Código: Seleccionar todo
$ blkid
Código: Seleccionar todo
$ mount /dev/sdb1 /mnt/Backups
Bien, con esto ya tenemos preparado el entorno para poder generar nuestra copia de seguridad. Ahora veremos de qué formas disponemos para hacer la copia de seguridad de nuestro disco o sistema operativo.
Vamos a ver primero cómo crear un backup de nuestro sistema GNU/Linux empleando la herramienta de clonado partclone. Nos situamos para ello en la carpeta donde vamos a almacenar la copia, ya sea un disco externo o un recurso de red, eso sí, previamente montado:
Código: Seleccionar todo
$ cd /mnt/Backups
Código: Seleccionar todo
$ blkid
Código: Seleccionar todo
$ partclone.extfs -c -s /dev/sda1 -o backup-partclone-sda1.img
Una vez finalizada la clonación, tendremos en un fichero una copia idéntica de nuestra partición, para poder restaurarla cuando haga falta.
En caso de que necesitemos restaurar la partición, no tenemos más que arrancar de nuevo SystemRescueCD, montar como ya hemos visto el dispositivo o el recurso donde tengamos la copia y ejecutar partclone con las opciones adecuadas:
Código: Seleccionar todo
$ partclone.restore -s backup-partclone-sda1.img -o /dev/sda1
Código: Seleccionar todo
$ ntfsclone -s -o backup-ntfslcone-sda3.img /dev/sda3
Código: Seleccionar todo
$ ntfsclone -r -O /dev/sda3 backup-ntfsclone-sda3.img
Bien, tanto con partclone como con ntfsclone tendremos una copia de nuestras particiones ext y ntfs respectivamente, para usarlas en el momento que necesitemos restaurar nuestros sistemas a un estado anterior.
Sin embargo, podemos tener serios problemas si en el proceso de trasteo de nuestro equipo tocamos la distribución de las particiones del disco. En este caso podemos encontrarnos con la desagradable sorpresa de que la copia de seguridad de nuestra partición es inútil, ya que la partición de destino podría haber cambiado de tamaño.
Para solucionar esto podemos copiar el disco en su totalidad incluyendo todas las particiones, en lugar de copiar las particiones individualmente. La ventaja de este método es que teniendo una copia de todo el disco podemos estar absolutamente tranquilos con cualquier cambio que hagamos al disco o a sus particiones, pues cuando restauremos la copia nuestro disco volverá a tener la distribución anterior.
Por el contrario este método es extremadamente ineficiente en lo que a tiempo y recursos se refiere, pues clona bit a bit el disco completo incluyendo aquel espacio que está desocupado. El resultado es que tendremos un fichero cuyo tamaño será el mismo que nuestro disco duro, en caso de que no usemos compresión.
Bien, para hacer una copia completa de nuestro disco nos situaremos en la carpeta donde tenemos montado el disco o el recurso de copias de seguridad, y ejecutaremos la herramienta dd de la siguiente forma:
Código: Seleccionar todo
$ dd if=/dev/sda of=sda-dd.img
Y para restaurar la copia de seguridad haremos lo siguiente:
Código: Seleccionar todo
$ dd if=sda-dd.img of=/dev/sda
Código: Seleccionar todo
$ dd if=/dev/sda | gzip > sda-dd.img.gz
Código: Seleccionar todo
$ gunzip -c sda-dd.img.gz | dd of=/dev/sda
Para crear una copia de seguridad del MBR procederemos así:
Código: Seleccionar todo
$ dd if=/dev/sda of=sda-mbr.img count=1 bs=512
Código: Seleccionar todo
$ dd if=sda-mbr.img of=/dev/sda count=1 bs=512
A todo esto, es muy probable que las copias de seguridad generadas ocupen muchísimo espacio. En mi caso, como ya he dicho, tengo un disco externo de gran capacidad en el que voy almacenándolas sobre la marcha, pero sería muy buena idea almacenarlas también de vez en cuando en otro soporte de almacenamiento, como por ejemplo discos DVD o Blu-ray. Si vemos que nuestros archivos ocupan más de lo que cabe en un disco, podemos dividir estos archivos usando la herramienta lxsplit:
Código: Seleccionar todo
$ sudo aptitude install lxsplit
Código: Seleccionar todo
$ lxsplit -s backup-partclone-sda1.img 4300M
Código: Seleccionar todo
$ lxsplit -j backup-partclone-sda1.img.001
Pues con esto hemos terminado este macro tuto sobre copias de seguridad. Insisto en que este no es el método definitivo, sólo uno más de entre los muchos que hay por el que yo me he decantado y que me funciona francamente bien.
Así que como siempre, espero que os sirva este tuto.
Un cordial saludo a todos.
_________________________________________
Autor: Tony Díaz @paradeiso - Fuente original: Debian is FREEDOM