Publi

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:

  • nc (netcat) será el encargado de la transmisión de datos, con -l 19000 lo ponemos en modo escucha por el puerto 19000
  • bzip2 será el programa de compresión encargado de descomprimir (para eso el -d)
  • dd escribirá en el dispositivo (le ponemos sudo porque esta operación requerirá privilegios de escritura en dicho dispositivo), con bs=16M especificamos el tamaño del bloque, y of=/dev/sdd1 especifica el dispositivo.

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:

  • ORIGIN=/dev/sda1 : Lo ponemos para no tener que repetir /dev/sda1 en la instrucción y evitar fallos del copia y pega
  • dd : Como antes, es el encargado de interactuar con el disco, como ahora extraemos información de él (of=»$ORIGIN»), en este caso es lo mismo que of=/dev/sda1
  • pv : Nos indicará el progreso, ¿ cuántos bytes lleva copiados ? creará una barra de progreso que podemos mirar para ver cuánto queda. Es muy útil porque la transmisión de un disco duro por red es muy lenta y queremos saber cuánto queda. Con -s especificamos el tamaño que lo calcularemos con lo siguiente:
  • lsblk : Extrae información de un dispositivo de bloques, tiene una salida compleja, por eso, con -n le quitamos encabezados, con -b especificamos la salida en bytes, con -o SIZE decimos que sólo queremos que nos diga el tamaño del dispositivo, y «$ORIGIN» indicará el dispositivo, que aquí es /dev/sda1 (si queremos podemos poner esto directamente). Además, todo está entre $(…) para pasar el valor resultante al argumento -s de pv.
  • bzip2 : será el compresor esta vez, por eso -c.
  • nc : se encarga de la transmisión por red, conectará con el host 192.168.0.20 y el puerto 19000

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

También podría interesarte....

There are 15 comments left Ir a comentario

  1. Pingback: Transferir una imagen de disco a través de la red. Bash y más | PlanetaLibre /

  2. esteban /
    Usando Mozilla Firefox Mozilla Firefox 37.0 en Ubuntu Linux Ubuntu Linux

    Hola, lo voy a probar, pero en la linea que guarda la imagen a un archivo no tendria que ser asi? $ nc -l 19000 | bzip2 -d | sudo dd bs=16 of=imagendisco.img

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 37.0 en Ubuntu Linux Ubuntu Linux

      Hola Esteban,

      Deberían servir las dos formas. En la del post, cogemos la salida de bzip y la escribimos directamente en un archivo (incluso si queremos almacenar en el ordenador de destino el archivo sin comprimir podemos quitar lo del bzip). En tu método estamos pasándole los datos a dd y éste los está copiando también.
      Con tu forma podríamos escribir en directorios con privilegios de root.

      Muchas gracias por tu aportación!

  3. WilliamSEO /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Your writings regarding this matter are right, perceive how I composed this site is extremely great. pasar 123 slot

  4. WilliamSEO /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    A debt of gratitude is in order for the instructive and accommodating post, clearly in your blog everything is great.. CDG commercial chair

  5. WilliamSEO /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    I am always searching online for storys that can accommodate me. There is obviously a multiple to understand about this. I feel you made few salubrious points in Attributes moreover. Detain busy, awesome career! 먹튀검증

  6. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Kudos on curating the largest web slots – each one is a gem. สล็อตเว็บใหญ่

  7. WilliamSEO /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    You have lifted a basic offspring..Blesss for using..I would need to think about better most recent exchanges from this blog..preserve posting.. 메이저사이트

  8. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Finding slots that withstand wear and tear is a constant challenge. เว็บตรง แตกง่าย

  9. WilliamSEO /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    This is exceptionally noteworthy, but then essential towards simply click this special backlink: Travel booking network

  10. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Good subject, comparative writings are I don’t know whether they are on a par with your work out. แหล่งรวมสล็อตทุกค่าย

  11. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    I likewise composed an article on a comparative subject will discover it at compose what you think. 정보블로그

  12. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    For this site, you will see our record, make sure to experience this information. เว็บสล็อตโรม่า

  13. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    There is such a great amount in this article I could never have thought of alone. Your substance gives perusers things to consider in a fascinating way. เกมป๊อกเด้งออนไลน์

  14. jsimitseo /
    Usando Google Chrome Google Chrome 121.0.0.0 en Windows Windows NT

    it’s extremely pleasant and meanful. it’s extremely cool blog. Connecting is exceptionally valuable thing.you have truly helped bunches of individuals who visit blog and give them usefull data. concierge doctor

Leave a Reply