Comment transférer un fichier volumineux à travers internet grâce à GNU/Linux

J'ai récemment eu à transférer un gros fichier entre deux hôtes GNU/Linux et depuis une connexion internet lente.

Je vais détailler ici les différentes étapes pour y parvenir.

Schéma réseau

Pour cet exemple j'utiliserai une adresse ip privée (192.168.1.200) mais ça fonctionnera évidement aussi avec une adresse ip publique.

L'opération consiste à découper notre gros fichiers en plusieurs petits. De cette façon, si notre transfert est coupé nous serons en mesure de reprendre depuis le moment ou cela s'est arrété.

GNU/Linux transfer big file via ssh and rsync diagram

Installation des outils

  • Pour transférer nos fichiers, nous aurons besoin sur nos deux machines de rsync et openssh :
root@host:~# apt-get install rsync openssh-server

Découper le fichier

  • Comme dit précédemment, nous allons découper notre gros fichier en plusieurs petits grâce à la commande split :
  • Les options de split :
    • -d : utilise un suffixe numérique qui commence à 0
    • -b : taille des fichiers, ici nous découperons par fichiers de 5Mo.
user@SOURCE:~$ split MyBigFile.mkv -d -b 5M
user@SOURCE:~$ ls -lh
-rw-r--r-- 1 std std 5,0M  8 déc.  23:47 x00
-rw-r--r-- 1 std std 5,0M  8 déc.  23:47 x01
[...]
-rw-r--r-- 1 std std 5,0M  8 déc.  23:48 x9481
-rw-r--r-- 1 std std 5,0M  8 déc.  23:48 x9482

Transfert de fichiers

Maintenant nous pouvons transférer nos fichiers de 5Mo vers notre destination. Dans le cas d'une coupure, rsync sera en mesure de reprendre à partir du dernier fichier transféré.

  • Options rsync :
    • -a : mode archive
    • --bwlimit=40k : (Optionnel) nous pouvons paramétrer la bande passante maximum. Ici, 40ko/s.
    • --rsh='ssh -p 22' : Préciser le port ssh de 192.168.1.200. Utile si présence d'un NAT ou si le port par défaut à été changé.
    • --stats : (Optionnel) À la fin, donner des statistiques sur le transfert effectué.
    • --progress : (Optionnel) affiche une barre de progression du transfert courant.
    • user@192.168.1.200:/home/SOURCE/x* : Dossier source, où se trouvent les fichiers découpés. Ici dans le répertoire /home/SOURCE/.
    • /home/DESTINATION/ : Répertoire de destination.
user@DESTINATION:~$ rsync --bwlimit=40k -a -v --rsh='ssh -p 22' --stats --progress user@192.168.1.200:/home/SOURCE/x* /home/DESTINATION/

Réunifier le fichier

  • Une fois que tous nos fichiers de 5Mo ont été transférés nous pouvons réunifier notre fichier originel.
user@DESTINATION:~$ cd /home/DESTINATION/
user@DESTINATION:~$ cat x* > glory.41.720p.hdtv.x264-verum.mkv
user@DESTINATION:~$ ls -lh glory.41.720p.hdtv.x264-verum.mkv
-rw-r--r-- 1 toi toi 2,9G  8 déc.  23:45 glory.41.720p.hdtv.x264-verum.mkv
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :