Poesía Binaria

Transferir una imagen de disco a través de la red. Bash y más


Foto: nrkbeta Flickr (CC-by)

Todo surgió cuando quería cambiar el disco duro de mi mediacenter. El disco duro lo tenía en mi ordenador de trabajo y el mediacenter (que hace también las veces de router/firewall y demás) no podía desenchufarlo. Es verdad que para un disco duro montado y activo no es la mejor forma, pero ya puestos, quería hacer el experimento, por lo que elegí algunas particiones que no tenían demasiada actividad (que luego fsck se encargue :))

Para lo que sí puede servir es para crear imágenes de discos duros y transmitirlas a un servidor central para su almacenaje, ya sea por problemas de sitio, que no tengas espacio suficiente en algún dispositivo externo, o porque por seguridad se quiere transmitir a un servidor remoto o también, porque se tengan que instalar muchos ordenadores con configuraciones parecidas y, una vez configurado uno (ya sea con Windows, o cualquier UNIX), los configuramos todos desde aquí.

Eso sí, para ejecutar esto necesitamos Bash, dd (que suele con los *nix), pv (podemos pasar de el, pero se agradece), bzip2 (para comprimir) y netcat (para transmitir). ¡Manos a la obra!

¡ Tened cuidado cuando estéis probando esto ! ¡ Podéis escribir directamente en el disco y perder información !

En la máquina destino: Servidor

En la máquina donde queremos copiar la imagen. El destino, hará de servidor (podríamos invertir los papeles). En esa máquina (suponiendo que el disco destino sea (/dev/sdd1) y que el puerto que queremos el 19000), en un terminal, escribiremos esto:

1
$ nc -l 19000 | bzip2 -d | sudo dd bs=16M of=/dev/sdd1

En esta línea:

Si queremos que se almacene en un archivo directamente, sin escribir en ningún dispositivo:

1
$ nc -l 19000 | bzip2 -d > destino.bz2

En la máquina origen: cliente

Esta imagen será la que emitirá la imagen, se conectará con el host servidor, la comprimirá y se la pasará. Nuestro dispositivo de origen será /dev/sda1 y la máquina con la que conectaremos 192.168.0.20:

1
$ ORIGIN=/dev/sda1 sudo dd bs=16M if="$ORIGIN" | pv -s $(lsblk -n -b -o SIZE "$ORIGIN")  | bzip2 -c | nc 192.168.0.20 19000

En este caso:

¡Y listo! Pasado un rato, hemos transmitido la imagen de disco que necesitábamos.

También podría interesarte....