Acostumbramos a programar backups en nuestros servidores. ¿Pero, también realizamos copias de seguridad de nuestros discos duros? Es una opción muy interesante. Hoy aprenderemos a realizar una copia exacta del estado actual de un disco duro, incluyendo el MBR, particiones, sus tamaños y los datos almacenados, independientemente del SO que esté instalado en el mismo. Podremos restaurar este estado en cualquier momento.

Ideal para cuando terminamos de instalar y personalizar nuestro SO. Si hacemos un backup del disco duro de un ordenador recién comprado, en el futuro podremos restaurarlo para dejarlo tal y como vino de fábrica. No olvidemos que la garantía del fabricante nos pedirá que se lo entreguemos con el SO original instalado.

Para el backup recurriremos a nuestro viejo amigo GNU dd, que se trata de una herramienta que copia y convierte datos a bajo nivel. Como en SSOO tipo UNIX todo dispositivo es gestionado igual que un archivo, podremos copiar bit a bit todos los datos de un dispositivo a otro, e incluso a un archivo, o viceversa.  Se puede utilizar dd con discos duros, memorias USB, CD-ROM, DVD-ROM, ficheros de imagen, como .iso, etc.

Al trabajar con dispositivos de almacenamiento usando dd, los mismos deben estar desmontados, lo que hace que utilizar una distribución live en USB sea la mejor opción, como por ejemplo Debian Live o SystemRescueCd, esta última basada en Gentoo Linux y específica para la recuperación de sistemas.

Una vez hemos iniciado nuestra distribución live, conectaremos un disco duro externo en el que guardar la copia de seguridad. Ahora debemos averiguar qué fichero corresponde a cada disco duro:

# fdisk -l

Supongamos que según fdisk, tenemos la siguiente configuración:

  • /dev/sda: Disco duro de la máquina, el que queremos copiar.
  • /dev/sdb: Memoria USB donde estamos ejecutando la distribución Live.
  • /dev/sdc: Disco duro externo para guardar la copia

Montamos la partición del disco duro externo:

# mount /dev/sdc1 /mnt

Y comenzamos a realizar la copia de seguridad con dd:

# dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c  > /mnt/myharddrive.img.gz

¿Por qué lo comprimimos? Tal y como vimos antes, dd realiza copias bit a bit, lo cual significa que también copia y almacena los valores cero. Si no comprimimos la imagen, esta tendrá el mismo tamaño que la partición entera que estamos copiando. Si comprimios la imagen, su tamaño se reducirá al que ocupan los datos almacenados, tamaño que variará dependiendo del método de compresión que utilicemos. En este caso he elegido gzip porque mantiene una buena relación entre el nivel de compresión y el tiempo necesario. Otras herramientas como bzip o p7zip pueden reducir el tamaño del archivo comprimido, pero generalmente necesitan más tiempo para comprimirlo.

Toda copia de seguridad está pensada para una restauración. Si en futuro decidimos restaurar la imagen en el disco duro, volvemos a cargar un Live USB en nuestro equipo, donde también contaremos y montaremos el disco externo. Finalmente, restauramos la copia de seguridad en el disco duro con el siguiente comando:

# gunzip -c /mnt/myharddrive.img.gz | dd of=/dev/sda

dd es una herramienta completísima que nos permitirá realizar muchísimas más operaciones, como clonado de dispositivos de almacenamiento, borrado seguro de datos, copia de seguridad de particiones, backup y limpieza del MBR, creación de ficheros vacíos para pruebas, etc. Funcionalidades que iremos viendo más adelante. Espero que esta pequeña dosis haya alimentado un poco más vuestra curiosidad.

Píldora: Copia de seguridad del disco duro con dd sobre GNU/Linux
Etiquetado en:                                

2 pensamientos en “Píldora: Copia de seguridad del disco duro con dd sobre GNU/Linux

  • 2015/05/12 a las 22:33
    Enlace permanente

    Buenas erm3nda, gracias por tomarte el tiempo para comentar 🙂

    Es cierto que técnicamente no es necesario que las particiones estén desmontadas, pero realizar una copia de bajo nivel de una partición montada en modo rw (lectura y escritura) se definiría mejor como una copia de inseguridad. El sistema operativo podría estar realizando operaciones de escritura de datos sobre esa partición mientras la estamos salvaguardando, pudiendo comprometer la integridad de los datos copiados y dejándonos un backup con errores, incluso irrecuperable. Es importante tener siempre presente que dd no entiende de ficheros ni de filesystems y que lo que copia son los bits, estén como estén.

    Por otro lado tenemos el servidor que no puede ser apagado. En caso de necesitar un sistema tan crítico como para no poder ser apagado, deberíamos plantearnos una arquitectura de alta disponibilidad, por ejemplo un clúster detrás de un balanceador de carga. Esto nos permitiría realizar el mantenimiento de uno de los servidores mientras el otro se encarga de soportar la carga.

    Volviendo al tema, y si necesitamos realizar un backup de particiones montadas, tenemos varias alternativas:

    1. LVM Snapshot (Recomendado): Copia instantánea del sistema de ficheros. El SO debe funcionar sobre LVM.
    2. FSArchiver: Copia el MBR y el contenido de las particiones en paquetes comprimidos.
    3. tar: Simplemente empaquetar con tar los archivos que deseamos salvaguardar y comprimirlos con gzip, bzip2, etc.
    4. rsync: Sincroniza los ficheros de una ruta en otra ubicación. Interesante en combinación con SSH.

    Las snapshot LVM se realizan correctamente incluso con las particiones montadas en modo read/write. Las otras tres, FSArchiver, tar y rsync sólo funcionan sobre particiones montadas, ya que se valen del sistema de ficheros para realizar las copias. Lo ideal es que estas particiones estén estén montadas en modo ro (sólo lectura), y si no se puede, lo haremos en modo rw, pero asegurarnos que los ficheros que estamos salvaguardando no sean modificados durante el proceso de backup.

    Ahora sí que hemos convertido la píldora en farmacia 😛

  • 2015/05/04 a las 20:31
    Enlace permanente

    “Al trabajar con dispositivos de almacenamiento usando dd, los mismos deben estar desmontados.”
    Esto es incorrecto, aunque esté altamente recomendado. Además depende totalmente del contexto.
    Imagina una copia parcial de un sistema que no pueda ser apagado. El contexto lo es todo.

    Muy bien visto el gzip para eliminar el espacio no usado de la copia final. Hasta hace un tiempo usaba Gparted para estas cosas, pero finalmente dd es una herramienta mucho más directa y permite hacer lo mismo si conoces 3 comandos más.

    De hecho, el sistema de compresión más básico del mundo haría esta función como primera interacción, pues guardar una tabla con el nº de 0 a replicar en vez de cada uno de esos 0 sería el esquema más básico de un sistema de compresión de ficheros digitales. A más fragmentación (windows) presente el disco más especio necesitará una vez comprimido.

    A mí me parece una píldora un poco grande. Menos mal que no es un supositorio.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.