Il arrive très souvent que l’on ait besoin de transférer des fichiers rapidement, d’un serveur à un autre par exemple.

Transférer des fichiers d'un serveur à un autre avec rsync photo

Bien sûr, on peut utiliser le FTP mais il y a beaucoup plus rapide et efficace : je vous présente rsync.[no_toc]

Synchronisation distante

rsync (remote synchronization ou “synchronisation distante” en français) est un logiciel libre de synchronisation de fichiers (disponible sous toutes les plateformes) : la synchronisation est unidirectionnelle, c’est-à-dire qu’elle copie les fichiers de la source en direction de la destination.

rsync est donc utilisé pour réaliser des sauvegardes incrémentales ou pour diffuser le contenu d’un répertoire de référence.

Je vous donne ici les deux commandes que j’utilise quotidiennement lors de ma gestion des serveurs.

Copier tous les fichiers d’un répertoire du serveur A dans le répertoire équivalent du serveur B

Premièrement, connectez-vous via SSH à votre serveur A. Voici la commande :

/* Copie tous les fichiers de /home/website/ vers serveur B. */
rsync --ignore-existing --progress /home/movies/*.* matt@serveurB.net:/home/movies/

Explications:

  • --ignore-existing signifie que si le fichier existe déjà, on ne le remplace pas.
  • --progress montre la vitesse du transfert et les noms des fichiers transférés.
  • matt@serveurB.net est le nom du login SSH (matt) associé à l’adresse du serveur B (IP ou nom de domaine).
  • /home/website/ : répertoire vers lequel copier les fichiers.
A lire :  Redémarrer la machine virtuelle de Local by Flywheel

En lançant cette commande, je récupère sur le serveur B tous les fichiers qui se trouvent dans le répertoire /home/movies/ du serveur A. Je ne remplace pas les fichiers existants : étant donné que je ne synchronise qu’avec rsync, ce serait inutile.

Copier tous les fichiers et sous-répertoires d’un répertoire (synchronisation récursive) sur le serveur B

/* Copie tous les fichiers et sous-dossiers de /home/series/ sur serveur B. */
rsync --ignore-existing --progress -r /home/series/*.* matt@serveurB.net:/home/series/

Explications: -r signifie de manière récursive, c’est-à-dire que tous les fichiers et sous-dossiers du répertoire /home/series/ seront copiés sur le serveur B.

C’est idéal pour sauvegarder les fichiers du site ou les ressources statiques. On lance la commande dans le terminal et hop, on peut aller se faire un café, tout tourne en fond de tâche.

Synchronisation récursive avec connexion SSH sur un autre port que le port 22

Reprenons l’exemple précédent mais connectons-nous maintenant sur le serveur B en SSH sur un autre port que le port par défaut (22) :

rsync --ignore-existing --progress -vr --rsh='ssh -p59222' /home/vids/*.* admin@example.com:/volume1/vids

Ici, --rsh='ssh -p59222' indique que la connexion SSH doit se faire sur le port indiqué (ici 59222). Cela me permet de sauvegarder tout un répertoire et de l’envoyer sur mon NAS Synology. Très pratique !

Petit exemple fictif

Allez, juste pour le fun, voici un transfert initié avec rsync entre deux serveurs distants d’à peu près 8 000 kilomètres :

Bref, rsync, ça dépote et c’est une commande extrêmement pratique à l’usage.

Si vous avez trouvé une faute d’orthographe, veuillez nous en informer en sélectionnant le texte en question et en appuyant sur Ctrl + Entrée.

Articles en rapport:

14 Comments

  1. Avatar

    Bonjour,
    J’ai testé la commande:
    rsync –ignore-existing –progress /home/test/*.* DenisNAS@192.168.1.51:/DENIS
    sur un PC avec Linux Mint et le dossier test dans le dossier personnel home

    sur mon NAS Synology j’ai un dossier DENIS avec un utilisateur DenisNAS pour le service rsync..

    Voici le retour de la commande rsync ci-dessus après avoir saisi le mot de passe de DenisNAS:

    Could not chdir to home directory /var/services/homes/DenisNAS: No such file or directory
    sending incremental file list
    rsync: change_dir “/home/denis/test” failed: No such file or directory (2)
    ERROR: module is read only
    rsync error: syntax or usage error (code 1) at main.c(1131) [Receiver=3.0.9]
    rsync: connection unexpectedly closed (112 bytes received so far) [sender]
    rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.2]

    Avez vous une idée du problème rencontré ?
    Bien Cordialement
    Merci

    • Matt

      Bonjour Rémy,

      Le problème vient du chemin que vous indiquez sur le NAS. Dans la commande, vous avez à la fin: `/DENIS` mais cela ne correspond pas au véritable chemin de votre dossier utilisateur sur un Synology.

      Le bon chemin devrait commencer par `/volume1`. S’il s’agit du répertoire de l’utilisateur, ce serait `/volume1/homes/DENIS`.

      Dîtes-moi si cela passe mieux,
      Matt

      • Avatar

        Merci pour votre réponse hyper rapide !!!!
        la nouvelle commande:
        rsync –ignore-existing –progress /home/test/*.* DenisNAS@192.168.1.51:/volume1/homes/DENIS

        et le même retour:
        Could not chdir to home directory /var/services/homes/DenisNAS: No such file or directory
        rsync: change_dir “/home/test” failed: No such file or directory (2)
        ERROR: module is read only
        rsync error: syntax or usage error (code 1) at main.c(1131) [Receiver=3.0.9]
        rsync: connection unexpectedly closed (112 bytes received so far) [sender]
        rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.2]

        merci

      • Matt
        Matt

        Bonjour Remy,

        Vérifiez dans Panneau de Configuration > Utilisateur > Avancé > Accueil utilisateur que la case Activer le service d’accueil de l’utilisateur soit bien cochée.

  2. Avatar
    xalonecorp Reply

    Bonjour,

    si je lance je me connecte sur le serveur A puis je lance Rsync vers le serveur B, qui execute le tache mon Pc, le serveurs A, le serveur B? les données passe t’il par ma machine? puis je éteindre mon pc sans interrompre la tache ?
    est il possible d’avoir alors une journal ou de suivre? ( cas de gros transfert)

    merci

    • Matt

      Bonjour xalonecorp,

      Si tu fermes le terminal de ton PC (qui se connecte au serveur A pour transférer vers serveur B), alors la tâche sera interrompue. Les données ne transitent pas par ton PC, elles sont transférées directement de A vers B – ton PC est juste le donneur d’ordre.

      Pour pouvoir éteindre ton PC tout en gardant la tâche active, tu as plusieurs solutions:

      A. lancer la tâche avec nohup. Syntaxe :

      nohup COMMANDE &

      B. lancer la tâche avec disown :

      COMMANDE & disown

      ou

      COMMANDE &!

      C. installer screen et suivre le guide :

      screen -d -m bash -c "COMMANDE"

      De serveur à serveur, le transfert n’est limité que par la bande passante des serveurs. Tu peux suivre la vitesse du transfert avec l’argument --progress de rsync.

  3. Avatar
    jacquot 74 Reply

    Bonsoir,
    Super tuto mais comment éviter de taper le password après le lancement de le commande rsync. Merci.

  4. Matt

    Mise à jour de l’article : ajout de la synchronisation récursive sur un autre port SSH que celui par défaut.

  5. Avatar

    Bonjour,

    merci pour cette commande bien utile, mais comment faire si le serveur B a un port autre que le port par defaut (22)?
    merci :)

    • Matt

      Bonjour,

      Pour utiliser un autre port (par exemple 8023), il suffit d’ajouter :

      --rsh='ssh -p8023'

      à la commande.

      • Avatar

        il faut l ajouter a la fin de la commande?
        pour ton exemple ça donnerait:

        rsync –ignore-existing –progress /home/movies/*.* matt@serveurB.net:/home/movies/–rsh=’ssh -p8023′

        merci de ton aide !

    • Matt

      J’ai pris une seedbox pour un mois histoire de tester et d’étudier comment ça fonctionnait, c’est pour ça que je n’ai pas flouté l’IP ;-)

Écrire un commentaire

Spelling error report

The following text will be sent to our editors: