Forum Programmation.shell Duplication de clé USB

Posté par  .
Étiquettes :
2
3
oct.
2008
Bonjour, je cherche un moyen de copier des fichiers sur plusieurs clé USB en même temps.

Dans le scénario, je dispose de 5 HUB usb de 7Ports connectés sur une machine sous Débian (car sous windows sa marche mais je suis limité au nombre de lettre de lecteur disponible).
J'aimerais donc dépasser cette limite avec Linux.
J'aimerais donc que sur chacun des hub, je branche une clé. Je lance le script qui monte toutes les clés et renomme les clés USB puis copie un (ou plusieurs) fichiers sur chaque clé, sachant que le but est bien sûr de dupliquer mon image sur mes n clés usb branchées.

Je cherche donc a faire un script qui
1/ Détecte et monte automatiquement les clé. Un automount suffit, non ? Par contre, sachant qu'il faut gérer les points de montage de façon à ce qu'aucun ne se téléscope.

/mnt/Cle1
/mnt/Cle2
etc...
Je ne sais pas trop comment faire car je ne maîrise pas encore linux, je commence a peine à m'y mettre.

2/Copie un fichier ou une liste de fichier (toujours le/les mêmes) sur chaque clé usb branchées et reconnues.

3/ Bien évidemment il me faut un journal de log mais aussi qu'il me démonte chaque clé dont la copie s'est bien terminée.

Si quelqu'un d'entres vous ont des pistes, voir même un script déjà existant elles sont le bienvenues :)

Merci beaucoup a tous
  • # Quelques pistes

    Posté par  . Évalué à 2.

    salut,

    mis à part le problèmes des ressources que peuvent consommer toutes les clés montées en même temps, ça me parait tout à fait faisable.

    Pour le montage, automount devrait être suffisant. Si tu as un cas concret de "téléscopage", on avisera.

    Pour les points 2 et 3, à la pelle :

    log=/var/log/copieusb
    for cle in $(ls /mnt/cle*)
    do
    for fichier in $liste_fichiers
    do
    cp fichier cle 2>&1>>$log
    done
    umount cle
    done
    • [^] # Re: Quelques pistes

      Posté par  . Évalué à 2.

      Salut François

      Pour la consomation, les Hub ont une allimentation exterieur, je supposes donc que les clés USB ne tirerons pas sur le port USB du PC pour s'allimenter, si?

      Je te remerci vraiment pour ton script, je vais tous de suite le copier et je te tien au courrant.
      Juste une question, car comme je t'ai dis je débute vraiment en Linux, je suis quelque peut une brelle.

      Le script là est entier? Il n'y a pas besoin de plus?
      Car sur windows j'ai quand même fait beaucoup plus de ligne.
      Si sur Linux ces disénes de lignes suffises, sa prouve quand même que le shell de Linux est vraiment plus puissant que celui de Windows

      Si j'ai bien compris le script, je dois indiquer l'emplacement des fichiers dans un document nommé "liste_fichiers"? c'est ca?
      Le fichier log se trouvera dans var/log et se nommera copieusb?

      Par contre je sais je suis exigent, et si c'est pas possible ce n'est vraiment pas grave.
      Est t'il possible de renommer la clé USB? car je crois que sur le script il n'y a pas cette fonction.
      Si c'est pas possible ce n'est vraiment pas grave.

      Et ensuite pour te poser toutes les questions après je ne t'en poses plus.
      Crois tu qu'il serait possible qu'a la place de copier des fichiers, on lui balance une image ISO ou un truc dans le style et que sa face vraiment une copie exacte de la clé USB.
      Pourquoi cette question? c'est simplement que j'ai eu à un moment donné à copier 100clé usb a chipset??UT163/UT165 (je crois que l'on dit comme ca)
      Qui permettaient de simuler un lecteur CD rom
      Du coup j'avais utilisé "UFD Utility V3210" fournis avec les clés, pour créer la partition CD
      Puis j'avais utilisé "Duplicator" pour les copiers (7 par 7) le tous sous Windows mais sa planté le PC une fois sur deux.
      Je me disais donc que si je devais en faire 400 sa serait peut être bien que sa se face aussi sur linux dans le même cas que tu m'as expliqué pour la copie des fichiers.

      Mais bon c'est peut être trop poussé.
      Sa n'est pas non plus super important. Mais bon c'était plus par curiositée.
      Mal heureusement si nous avions souvant des clés USB a copier, on aurait investi dans un duplicateur à 800€ mais comme on en fait que très rarement, et en petite quantitée sa serait pas rentable.

      En tous cas merci encore pour toutes tes infos.
      Je teste et te tiens au courrant dans la journée.

      @+
      Cris
      • [^] # Re: Quelques pistes

        Posté par  . Évalué à 3.

        Pour la consomation, les Hub ont une allimentation exterieur
        Le mot clef est "ressources" et non pas "consommation". A mon avis il parlait de bande passante, mais bon c'est à toi de voir :-)
        • [^] # Re: Quelques pistes

          Posté par  . Évalué à 2.

          Je parlais également des ressources (bande passante, mémoire, temps de calcul, etc...). L'USB, comme tout périphérique ou toute application, ça bouffe des ressources.
          4 ou 5 périphériques USB simultanés c'est une chose, 30 périphériques c'en est une autre. Aucune idée de la faisabilité (peut-être que ça ne pose aucun problème).
        • [^] # Re: Quelques pistes

          Posté par  . Évalué à 1.

          Ok désolé je n'avais pas compris, merci beaucoup pour la précision Kerro.
          En effet je n'y avait pas penssé mais en effet c'est vrai.
          Sur windows il me fait une copie clé usb par clé usb, pas toutes en même temps et je mets facilement 30 à 40 minutes pour 250Mo par clé sur 23 clés.
          Merci encore Kerro pour ta précision
      • [^] # Re: Quelques pistes

        Posté par  . Évalué à 3.

        Crois tu qu'il serait possible qu'a la place de copier des fichiers, on lui balance une image ISO ou un truc dans le style et que sa face vraiment une copie exacte de la clé USB.
        Pourquoi cette question? c'est simplement que j'ai eu à un moment donné à copier 100clé usb a chipset??UT163/UT165 (je crois que l'on dit comme ca)
        Qui permettaient de simuler un lecteur CD rom


        Pour copier une image, c'est encore plus facile. Il faut retrouver le device correspondant (/dev/sdc par exemple).

        Pour faire une image: dd if=/dev/sdc of=/mon/image.brute

        Pour copier une image sur une clef: dd if=/mon/image.brute of=/dev/sdc

        Simuler un lecteur CD-Rom, ça n'a pas trop de sens, je ne comprends ni ce que ça fait, ni l'intérêt.
        • [^] # Re: Quelques pistes

          Posté par  . Évalué à 2.

          Salut Sebastien,
          Merci pour tes commandes, je les testeraient dés que j'aurais terminé la copie de mes 300clés usb et je te dirais si ce que je disais marche avec cette commande.

          En gros quand je disais Simulation de lecteur CD, c'est ce que certains appels par le nom commercial les clés USB U3.
          Ca n'est pas tous a fait pareil, puisque l'U3 est une marque déposé ...
          Mais en gros quand tu branche ta clé USB tu as un CD-Rom et une clé USB.
          La partie CD-ROM permet que ta clé USB face un Autorun (la U3 peut en plus être bootable en plus je crois)
          Ainsi quand tu branche ta clé USB sur ton ordinateur, tu as la premiere fois la publicitée de l'entreprise. (due à l'Autorun)
          Car les clés USB ne sont pas Autorun, (je parles bien sur pour des ordinateurs sous WIndows)
          Après vue que nous laissons l'application dans la clé USB pour qu'elle redevienne normale, l'utilisateur peut la formater avec et sa clé USB redevienne une clé USB Standard.

          Je sais pas si je me suis bien expliqué, mais tous celà est pour des utilisateurs sous Windows, puisqu'il représente encore aujourd'hui le plus grand pourcentage de systéme d'exploitation installé en france, chez le particulier.
          Merci beaucoup Sebastien
      • [^] # Re: Quelques pistes

        Posté par  . Évalué à 4.

        Mon script n'est pas complet, il faut le peaufiner, mais il n'y a pas grand chose à rajouter. Par contre il faut l'adapter à ton cas.

        Supposons que tes clés soient montés dans /mnt et qu'elles s'appellent toutes cleX est la X-ème clé montée ;
        ls /mnt/cle* va liste toutes les clés monté.
        Donc for cle in $(ls /mnt/cle*) va parcourir toutes les clés montés. A chaque tour de boucle, la variable $cle vaudra /mnt/cleX (en remplaçant X par la bonne valeur).

        la boucle for fichier in $liste_fichiers suppose en effet que la variable $liste_fichiers contiennent la liste des fichiers à copier.
        A chaque tour de boucle, $fichier prendra l'une des valeurs de la liste de fichiers (par exemple /home/cris/sources/fichier1.zip).

        Au début du script, tu peux faire liste_fichiers=$(ls repertoire/*, où repertoire est le chemin vers le répertoire qui contient les fichiers à copier.

        A la ligne suivante, j'ai oublié les $ pour les variables, ce serait plutôt cp $fichier $cle. La suite de la ligne, c'est pour rediriger les éventuels messages d'erreurs vers un fichier (qui normalement s'affichent dans la console).

        De même, umount $cle démontera la clé /mnt/cleX.
        • [^] # Re: Quelques pistes

          Posté par  . Évalué à 1.

          Merci beaucoup François pour toutes tes explications, je crois que je suis désormais prêt à personnaliser ton script pour l'adapter à mon cas.

          Je sens qu'avec toutes vos aides à tous je vais vraiment optenir à la fin un truc super génial, qui sera encore mieux que ce que j'espèré. Et encore mieux que tous ce que j'ai pue trouvé de déjà existant pour windows.

          Je teste le tous et je te tiens au courrant.
          Merci beaucoup pour ton Aide François.
          Et bien sure merci a tous pour votre aide qui compte vraiment beaucoup pour moi.
        • [^] # Re: Quelques pistes

          Posté par  . Évalué à 1.

          Salut François,
          Je te remerci pour ton script et tous tes détails, au niveau du fonctionnement sa semble vraiment être ce que je cherchais, mais il me provoque une erreur au moment de la copie, car mes clés USB s'affichent ainsi: disk-x: et le problème c'est qu'il n'apprécis pas les :
          As tu une idée de comment faire abstraction des deux points?
          Sinon pour la copie sa fonctionne bien dés que je lui indique le nom de la clé (en enlevant les :)
          Du coup il ne me démonte pas non plus la clé.

          Deuxieme question, as tu une idée comment on fait pour renommer la clé? si c'est pas possible ou si tu sais pas c'est pas génant, ce que tu m'as fais c'est déjà géant.
          Merci encore
          @+
  • # Avec udev

    Posté par  . Évalué à 2.

    Je n'ai jamais chercher à le faire, mais udev permet de lancer un script lors d'une connexion.

    En configurant correctement la chose, il devrait être possible de faire la copie sans avoir besoin de lancer la moindre commande, simplement en branchant la clef, et en la débranchant lorsqu'il n'y a plus d'activité; sur autant de clef que le bus USB peut en supporter.
    • [^] # Re: Avec udev

      Posté par  . Évalué à 2.

      En effet, c'est possible avec udev.
      Des exemples sont donnés ici :

      http://doc.ubuntu-fr.org/udev

      En revanche, ce n'est pas simple quand on ne connait pas.
      • [^] # Re: Avec udev

        Posté par  . Évalué à 1.

        Salut François et Sebastiens.
        Merci pour cette idée.
        Je vais la regarder aussi, je vous tiens au courrant.

        Merci beaucoup
  • # Je veux bien mais....

    Posté par  . Évalué à 2.

    Quel est l'interet de faire de la copie en parallele sur un bus série ????
    • [^] # Re: Je veux bien mais....

      Posté par  . Évalué à 2.

      - à aller plus vite?

      La vitesse d'écriture dans de la Flash est plus faible que le débit USB (en tout cas en 2.0), donc il y a moyen d'accélerer en écrivant plusieurs clés à la fois.
      La limite au nombre de clés est donnée quand le bus USB est à saturation, et que la somme des débits d'écriture max de chaque clé est atteind.
      Dans ces conditions, pour minimiser le temps des opérations, il suffit de placer N clés par hub (N étant le résultat précédent), avec un hub par port USB de la machine...

      - à simplifier le travail de manutention?

      En faisant abstraction du paragraphe précédent, supposont qu'écrire une clé prenne 1h. S'il y a 10 clés à écrire, en les écrivant une par une, il faut 10 heures, avec 11 interventions. Maintenant, si tu met un hub et que tu en écris 10 en même temps, en supposant que la bande passante soit bien divisée, il te faudra encore 10h... mais seulement 2 interventions, ce qui peut avoir plein d'avantages: faire autre chose, le faire pendant la nuit, ...

      Idéalement, il faudrait faire un compromis des deux pour trouver la situation qui trouve la meilleure solution entre temps d'écriture et nombre d'intervention pour un nombre total de clé donné.

      En espérant que ma réponse t'ais intéréssé...
  • # Merci A tous: Voici les résultats

    Posté par  . Évalué à 1.

    Bonjour tout le monde.
    Après une longue période de silence je me re-manifeste afin de vous tenir au courant des avancements des choses et ainsi vous remercier à tous de votre aide.

    En effet j'ai de nouveau 1200 clé USB à copier.
    Cette fois si j'avais 500Mo par clé à faire.

    J'ai donc préparé une machine sous Linux (Ubuntu car j'avais que ça sous la main)
    Étant donné que c'est une machine recyclé j'y ai ajouté une cartes USB en PCI et sur 2 ports USB2 un Hub de 7 ports (pour les testes je n’ai pas voulu pousser le bouchon un peu trop loin).

    En gros au final en utilisant principalement le scripte de François,
    Car la solution UDEV à l’aire vraiment trop génial mais trop compliqué pour moi

    C’est donc pour le moment une simple copie des fichiers, je ne met qu’entre 8 et 15 minutes pour copier 14 clé en simultanées (A parement il y a des marques ou les clés sont plus rapide que d’autres)

    En attendant voici le script de François remis en forme pour collé à mon besoin, on sait jamais sa pourrait aider un débutant comme moi.

    J’ai placé les fichiers dans un dossier : /home/user/fichier/…
    J’ai donné aux clés USB le nom : NomDeLaClé
    Avec la fonction grep j’ai demandé de référencer tous les disques sauf les disquettes et les CDRom vue que je n’ai que ca sur l’appareil. Ainsi je n’ai pas besoin de définir le nom de base de la clé USB qui est variable selon le fabriquant.

    Voici le script :

    # Copie des fichiers sur les clés

    liste_fichiers=/home/user/fichiers/*
    nom_usb= «NomDeLaCle »

    for disk in $(ls -d /media/* |grep -v cdrom |grep -v floppy)
    do
    cp -R $liste_fichiers $disk
    done


    # Renommer les cles USB Attention il faut le paquet mtools
    for lect in $(ls -d /dev/sd*)
    do
    sudo mlabel -i $lect ::$nom_usb
    umount $lect
    done


    Attention, (sous Ubuntu) il faut absolument lancer le shell en Super Utilisateur pour renommer des clés. Et il faut absolument installet mtools

    Si vous trouvez des fonctions qui pourraient être génial a ajouter en plus n’hésitez pas a les ajouter ca peut toujours être utile.
    Je n’ai pas fais de journal car il ne m’indiquait par d’informations utile lorsque la clé USB n’était tous simplement pas bien montée.
    De mon côté si je l’améliore je vous ferez part de mes modifications.

    Merci encore à tous le monde de votre aide et participations.

    à+

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.