Copiar en red
Recientemente he tenido que copiar archivos de tamaño considerable entre equipos Linux, todos en la misma red. La cuestión, es que me he planteado si existía alguna alternativa para copiar estos archivos que no fuera utilizando el típico scp
. Así he encontrado diferentes opciones, que no solo me han hecho replantearme las posibilidades de copiar en red, sino también las posibilidades de copiar en el mismo equipo. De hecho esta es una de las grandes maravillas de Linux. Siempre hay diferentes maneras de afrontar una misma tarea en Linux. Nunca terminas de aprender.
Sea como fuere, en este artículo quiero afrontar estos dos aspectos, tanto el de copiar en red, como el de copiar en el mismo equipo. Distintas opciones y soluciones.
Copiar en red
Desde luego que como decía en la introducción, la primera solución que se me pasa por la cabeza, a la hora de copiar archivos en red es utilizar scp
. Aunque no es la única, también es posible recurrir, por supuesto a rsync
, tal y como te ceunto en el artículo sobre sincronización a fondo con rsync.
Sin embargo, tienes otra opción que es muy interesante, y probablemente más rápida que las anteriores, siempre que no se trate de hacer copias incrementales. En el caso de copias incrementales, por supuesto y sin lugar a dudas, rsync
es el absoluto ganador, de eso no me cabe la menor duda.
Copiar en red con netcat
La opción que te quiero comentar para la copia en red es utilizar la herramienta netcat
. Ahora bien, tienes que tener en cuenta que la comunicación no está cifrada, con lo que cualquiera que esté en la misma red, va a poder conocer el contenido de lo que estás copiando. De esta manera, no es esta la mejor solución para copiar en redes públicas, a menos que utilices una VPN, tal y com te cuento en el episodio 110 del podcast sobre sincronización en red y VPN.
Antes de meternos con esto de copiar en red, tienes que instalar algunas dependencias que vas a utilizar. Así abre un terminal y ejecuta la siguiente instrucción,
sudo apt install nc pv
Estas dos herramientas las tienes que instalar tanto en el equipo de origen como en el equipo de destino.
A partir de aquí, tienes que elegir un puerto por el que realizar la comunicación, por ejemplo, el puerto 7000. En este caso, te tienes que asegurar que este puerto estará abierto para hacer la comunicación, es decir, que el firewall no lo tiene bloqueado. Para ello, añade una regla,
sudo ufw allow 7000
Por supuesto, esta regla la tienes que añadir tanto en el equipo de origen, como en el equipo de destino. Cuando termines el proceso de copiado. puedes volver a cerrar los puertos, para lo que tendrás que ejecutar la siguiente instrucción,
sudo ufw delete allow 7000
Y ahora vas a realizar la copia. En el equipo de destino tienes que ejecutar la siguiente instrucción,
nc -l -p 7000 | pv | tar x
mientras que en el equipo de origen, la instrucción a ejecutar será,
tar cf - * | pv | nc 192.168.1.136 7000
Por supuesto, tienes que reemplazar la IP que te he indicado anteriormente, por la que tu necesites, teniendo en cuenta que esa es la IP del equipo de destino. Para conocer la IP de destino puedes utilizar el comando ip
, o también puedes utilizar esta instrucción en el equipo de destino,
hostname -I | awk '{print $1}'
Haciendo pruebas
Lo cierto, es que he querido comprobar la velocidad y diferencias con otras alternativas para copiar en red, y ver si efectivamente esta era la mejor solución en cuanto a velocidad se refiere. Sin embargo, no te puedo asegurar que sea la más rápida, porque los resultados que he obtenido no son nada concluyentes. Los equipos que he estado utilizando para realizar la comparativa tenían recursos muy limitados, así como la velocidad disponible en la red. Así que, tendrás que ser tu mismo el que compruebe si efectivamente esta solución es mas rápida que otras alternativas.
Para hacer las pruebas evidentemente es necesario utilizar archivos de un determinado tamaño que te permitan comparar con ciertas garantías. En este sentido he utilizado dos opciones para crear ese archivo. La primera de las opciones es fallocate
. Así para crear un archivo de 10GB, la instrucción sería algo como,
fallocate -l 10G file.img
El convoveniente de este método es que cuando comprimes el archivo se reduce muchísimo, con lo que para realizar las pruebas no termina de ser la mejor opción. El segundo de los métodos es utilizar la siguiente instrucción,
head -c 10GB /dev/urandom > file.img
Más información,
Imagen de portada de chuttersnap en Unsplash
La entrada Copiar en red aparece primero en El atareao.