Recherche de site Web

Transférer de gros fichiers sur le réseau sous Linux et Unix


Aujourd'hui, j'ai dû réinstaller mon serveur Ubuntu que j'utilise souvent pour tester différentes applications. Mon serveur Ubuntu contient plus de 200 Go de données, et je ne veux pas les perdre. Je peux transférer ces données via scp, ou configurer NFS, FTP pour copier les fichiers, mais je suis presque sûr que cela prendrait plusieurs heures pour transférer des fichiers aussi volumineux. En cherchant une méthode alternative, je suis tombé sur la méthode suivante. Nous pouvons transférer rapidement de gros fichiers entre deux systèmes via le réseau en utilisant les commandes netcat, tar et pv sur n'importe quel système d'exploitation GNU/Linux et similaire à Unix.

Contrairement à d'autres méthodes, je le trouve très rapide et efficace. Pour ceux qui ne le savent pas, Netcat est un simple utilitaire Unix qui lit et écrit des données à travers des connexions réseau en utilisant le protocole TCP ou UDP. tar est un outil de ligne de commande pour l'archivage, et pv, qui signifie pipe viewer, est utilisé pour surveiller la progression des données. Maintenant, permettez-moi de vous montrer comment transférer rapidement de gros fichiers entre deux systèmes Linux. Ce n'est pas aussi difficile que vous pourriez le penser. Lisez la suite.

Transférer rapidement de gros fichiers sur le réseau entre deux systèmes sous GNU/Linux

Assurez-vous d'avoir installé les utilitaires « netcat » et « pv » sur vos systèmes. S'ils ne sont pas déjà installés, vous pouvez les installer comme indiqué ci-dessous. Le paquet « tar » est disponible par défaut sur la plupart des systèmes Linux, donc vous n'avez pas besoin de l'installer.

Sur Arch Linux et ses dérivés :

$ sudo pacman -S netcat pv

Sur RHEL, CentOS, Fedora :

$ sudo yum install epel-release
$ sudo yum install nc pv

Ou,

$ sudo dnf install nc pv

Sur Debian, Ubuntu, Linux Mint :

$ sudo apt-get install netcat pv

Voyons maintenant comment copier rapidement le(s) gros fichier(s) entre deux systèmes.

Pour ce faire, exécutez la commande suivante en tant qu'utilisateur root sur le nœud récepteur (système de destination) :

# netcat -l -p 7000 | pv | tar x

Sur le nœud d'envoi (système source), exécutez cette commande en tant qu'utilisateur root :

# tar cf - * | pv | netcat 192.168.1.105 7000

Ici, 192.168.1.105 est mon système de destination. tar cf - * copiera tout dans le répertoire de travail actuel vers le système de destination, et les fichiers seront extraits à l'autre bout.

Remarque : Sur les systèmes RHEL et CentOS, utilisez "nc" au lieu de "netcat" comme indiqué ci-dessous. De plus, vous devez ajouter le port "7000" aux iptables/firewall-cmd sur le système cible.

Après avoir ajouté le port sur le système cible, vous pouvez transférer les fichiers plus volumineux comme indiqué ci-dessous.

Sur le système de destination :

# nc -l -p 7000 | pv | tar x

Sur le système source :

# tar cf - * | pv | nc 192.168.1.105 7000

De plus, vous pouvez spécifier un fichier particulier comme ci-dessous.

# tar cf - /home/sk/test.file | pv | netcat 192.168.1.105 7000

Veuillez noter que les deux systèmes doivent avoir netcat installé. Maintenant, prenez une tasse de café. Vous verrez que les fichiers seront copiés beaucoup plus rapidement que les méthodes traditionnelles comme scp.

De plus, vous ne verrez aucun signe de l'achèvement du transfert de fichier des deux côtés. Ces commandes continueront à s'exécuter jusqu'à ce que vous les arrêtiez manuellement. Vous devez vérifier manuellement la taille des fichiers sur les deux systèmes en utilisant la commande "du -h <filename>". Si la taille du fichier sur le système de destination est la même que celle du système source, vous pouvez alors considérer que le processus de transfert de fichier est terminé et quitter la commande en appuyant sur CTRL+C.

Transférer rapidement de gros fichiers entre deux systèmes sous Unix

Sur les systèmes d'exploitation Unix, netcat est appelé nc. Donc, pour copier de gros fichiers entre les systèmes via le réseau, la commande serait :

Sur le système de destination :

# nc -l 7000 | pv | tar -xpf -

Sur le système source :

# tar -cf - * | pv | nc 192.168.1.105 7000

Encore une fois, ces commandes doivent être exécutées en tant qu'utilisateur root. Et, les systèmes source et destination doivent avoir netcat et pv installés. Transférer de gros fichiers sur le réseau local en utilisant netcat et tar peut en effet vous faire gagner beaucoup de temps.

Avertissement : Veuillez noter qu'il n'y a aucune sécurité dans cette méthode. Comme vous le voyez dans les exemples ci-dessus, il n'y a aucune authentification des deux côtés. Tout ce que vous devez connaître est l'adresse IP du système de destination. Le transfert de fichiers avec netcat n'est recommandé qu'à l'intérieur de réseaux protégés. Si vous êtes paranoïaque en matière de sécurité, je vous suggère fortement d'utiliser la commande scp.

Si votre sécurité est si importante pour vous, vous pouvez utiliser Rsync pour transférer des fichiers en toute sécurité.

$ rsync -ravz /path/to/source/files/ destination-ip:/path/on/destiny

Merci : Ppnman

C'est tout. Connaissez-vous une autre façon de copier rapidement de gros fichiers ? Veuillez la partager dans la section des commentaires ci-dessous.