Ada : transferts sécurisés de fichiers avec le serveur d'archives Ergon

Les commandes mfget et mfput ont été développées à l'IDRIS pour sécuriser les transferts entre les machines de calcul de l'Institut et le serveur d'archives Ergon et optimiser les vitesses de transfert.

mfget - Transfert de fichiers depuis Ergon vers Ada

Syntaxe de la commande mfget :

  • mfget [-v] nom_fichier
  • mfget [-v] nom_fichier_ergon nom_fichier_ada
  • mfget [-v] nom_fichier_ergon1 nom_fichier_ergon2 [nom_fichier_ergon3 …] repertoire_ada

    • nom_fichier, nom_fichier_ergon, nom_fichier_ergon1, nom_fichier_ergon2, nom_fichier_ergon3 : fichiers à transférer depuis Ergon
    • nom_fichier_ada : nom du fichier local sur Ada
    • repertoire_ada : nom du répertoire local sur Ada.

Exemple : copie du fichier fich_ergon situé sur le HOME d'Ergon sous le nom fich_ada dans le répertoire TMPDIR de Ada :

$ mfget fich_ergon $TMPDIR/fich_ada

mfput - Transfert de fichiers depuis Ada vers Ergon

Syntaxe de la commande mfput :

  • mfput [-v] nom_fichier
  • mfput [-v] nom_fichier_ada nom_fichier_ergon
  • mfput [-v] nom_fichier_ada1 nom_fichier_ada2 [nom_fichier_ada3 …] repertoire_ergon

    • nom_fichier, nom_fichier_ada, nom_fichier_ada1, nom_fichier_ada2, nom_fichier_ada3, : nom des fichiers sur Ada,
    • nom_fichier_ergon : nom du fichier distant sur Ergon,
    • repertoire_ergon : nom du répertoire distant sur Ergon.

Exemple : copie du fichier fich_ergon situé sur le HOME d'Ergon sous le nom fich_ada dans le répertoire TMPDIR de Ada :

$ mfget fich_ergon $TMPDIR/fich_ada

Remarque :
le HOME de Ada ayant un nom différent de celui d'Ergon, il ne faut surtout pas coder :

$ mfget $HOME/rep/fich_ergon

ni

$ mfput fich_source $HOME/rep/fich_cible

mais plutôt :

$ mfget rep/fich_ergon

ou

$ mfput fich_source rep/fich_cible
  • En batch :
    voici un exemple d'utilisation de ces commandes dans un script de soumission :

    exemple
    ...       
    # Copie du fichier d1 depuis le $HOME d'Ergon dans le $TMPDIR de la machine de calcul       
    mfget d1 $TMPDIR        
     
    # Copie du fichier donnee2 depuis le $HOME d'Ergon dans le $TMPDIR de la machine de calcul sous le nom d2       
    mfget donnee2 $TMPDIR/d2        
     
    # Copie du fichier donnee3 depuis le $HOME d'Ergon sous le répertoire REP        
    # dans le $TMPDIR de la machine de calcul sous le nom d3       
    mfget REP/donnee3 $TMPDIR/d3        
     
    cd $TMPDIR       
    # Exécution avec lecture des fichiers d1, d2, d3       
    # et écriture des fichiers r1, r2 par l'exécutable       
    ./a.out        
     
    # Copie du fichier r1 de la machine de calcul vers le $HOME d'Ergon
    mfput r1 r1
     
    # Copie du fichier r2 de la machine de calcul vers le $HOME d'Ergon dans le répertoire REP sous le nom resultat2       
    mfput r2 REP/resultat2        
    ...

    En cas de problème réseau entre la machine de calcul et Ergon, le transfert est suspendu puis relancé automatiquement une fois le problème résolu.
    En cas d'échec du transfert à partir du $TMPDIR, un message d'erreur indique l'endroit où les fichiers non transférés ont été recopiés et peuvent être récupérés.
    Pour avoir plus de renseignements sur les options et capacités de transfert de ces commandes, nous vous conseillons de consulter leurs manuels en ligne sur les serveurs de calcul (man mfget, man mfput).

  1. Transfert entre deux comptes utilisateurs différents :
    Par défaut, le nom d'utilisateur (login) distant sur Ergon est le même que le nom d'utilisateur local sur la machine de calcul. L'option -u permet un transfert de fichiers avec un nom d'utilisateur sur Ergon différent.
    Les commandes mfget/mfput étant basées sur les r-commandes, l'option -u nécessite qu'il existe un fichier .rhosts du propriétaire du compte sur Ergon autorise un autre utilisateur à effectuer le transfert.
    Considérons :
    • rlab001, ryyy999 deux logins d'utilisateurs quelconque de l'IDRIS,
    • machine_i une machine de calcul du centre,
    • Ergon le serveur d'archives,
    • fic_A, fic_B des noms de fichiers.
      Dans l'exemple qui suit, rlab001 va transférer des fichiers à partir ou sur le compte de l'utilisateur ryyy999 d'Ergon. Pour ce faire, dans le $HOME, l'utilisateur ryyy999 doit créer un fichier .rhosts (droits UNIX 600) contenant la ligne suivante :
      ryyy999@ergon$ cat ~/.rhosts 
      prod-rhosts.idris.fr rlab001

      où : prod-rhosts.idris.fr est la dénomination générique de l'ensemble des machines de calcul de l'IDRIS. Substituer prod-rhosts.idris.fr limite la portée de la commande depuis ou vers la machine machine_i.idris.fr machine_i.idris.fr et elle seule.

    • Transfert par rlab001 du fichier fic_A vers Ergon sur le compte ryyy999 sous le nom fic_B :
      rlab001@machine_i$ mfput -u ryyy999 fic_A fic_B
    • Transfert par rlab001 du fichier fic_B résident sur Ergon dans le $HOME de l'utilisateur ryyy999 en local sur la machine de calcul machine_i sous le nom fic_A :
      rlab001@machine_i$ mfget -u ryyy999 fic_B fic_A
  2. Cas d'échec : le shell bavard.
    Si votre shell de login sur Ergon est le bash, ou tcsh et que, dans vos fichiers d'environnement (.bashrc, ou .tcshrc), une sortie à l'écran est générée, alors le transfert échoue. La solution consiste à adapter vos fichiers d'environnement pour les rendre muets de la manière suivante :
    • Dans un fichier .tcshrc :
      if ( { tty -s } ) then 
      # Exécuté seulement si on est dans une session interactive 
              echo "message" 
      endif
    • Dans un fichier .bashrc :
      if $(tty -s)
      then 
      # Exécuté seulement si on est dans une session interactive
              echo "message" 
      fi 

      Attention : l'usage de ces commandes est bloquant en cas de non présence du serveur d'archives. Dans la mesure où le temps elapsed est facturé, il est conseillé d'utiliser la classe “archive” lorsqu'elle existe pour ces activités de transfert.
      Notez que : lors d'un transfert d’arborescence ou pour privilégier le transfert d'un gros fichier (quelques Go) à une multitude de petits, la commande tar existe sur toutes nos machines.

Il est préférable de rassembler un grand nombre de fichiers via la commande tar avant de les transférer.