Forum Linux.général DD sur plusieurs sorties

Posté par  .
Étiquettes : aucune
0
29
sept.
2005
Bonjour,

Mon problème est le suivant, je voudrais charger plusieurs disques avec une image préalablement crées avec dd et bzip2, ma commande pour restaurer est

bunzip2 -c ./fichier.bz2|dd of=/dev/hda

et je recommence cette opération sur les 4 disques

Ma question est : existe t'il une solution pour envoyer la sortie de bunzip sur 4 dd simultanément.

merci,
  • # Hmmm

    Posté par  . Évalué à 2.

    Gros truc de bourrin que je suis même pas sur que ça marche ...

    #!/bin/sh
    TEE=""
    for disk in <liste des disques> ; do
     FIFO=/tmp/$disk
     mkfifo $FIFO
     cat $FIFO | dd of=/dev/$disk &
     TEE=${TEE}"| tee /tmp/$disk"
    done
    TEE=${TEE}">/dev/null"
    bunzip2 -c ./fichier.bz2 $TEE


    Pour l'explication, la commande tee copie tout ce qui lui est passé sur son entrée standard faire le fichier précisé en argument et sa sortie standard, en gros donc on duplique.
    Donc la:

    1/ on crée des FIFO et on va faire en sorte que tout ce qui y sera jeté soit écrit sur le disque.

    2/ on balance notre fichier décompressé vers les fifos en questions.

    Après, comme je le disais plus haut, je suis pas sur que cela marche et que, au cas ou cela marche, les perfs soit très bonnes...
  • # tee + fifo

    Posté par  . Évalué à 1.

    Tu peux dédoubler la sortie standard dans un fichier avec la commande "tee".
    Si tu passes par une fifo (mkfifo), tu peux encore dédoubler, etc...



    mkfifo /tmp/dd1
    mkfifo /tmp/dd2
    mkfifo /tmp/dd3

    bunzip | tee /tmp/dd1 | dd
    cat /tmp/dd1 | tee /tmp/dd2 | dd
    cat /tmp/dd2 | tee /tmp/dd3 | dd
    cat /tmp/dd3 | dd


    Bon, c'est la premiere idée qui me vient à l'esprit, j'espere qu'il y a plus simple
    (bidouilles avec les redirections ?)...
    • [^] # Re: tee + fifo

      Posté par  . Évalué à 2.

      Pas mal !
      Ca peut s'optimiser en supprimant les cat:

      mkfifo /tmp/dd1
      mkfifo /tmp/dd2
      mkfifo /tmp/dd3

      bunzip2 | tee /tmp/dd1 | tee /tmp/dd2 | tee /tmp/dd3 | dd of=/dev/hdd &
      dd if=/tmp/dd1 of=/dev/hda &
      dd if=/tmp/dd1 of=/dev/hdb &
      dd if=/tmp/dd1 of=/dev/hdc &
      wait

      Ne pas oublier de lancer les process en arrière-plan sinon tout se bloque dès que les fifos sont pleines !
  • # Re: DD sur plusieurs sorties

    Posté par  . Évalué à 2.

    A mon avis, il suffit que tu lances la restauration sur les 4 disques en parallèle:

    bunzip2 -c ./fichier.bz2|dd of=/dev/hda &
    bunzip2 -c ./fichier.bz2|dd of=/dev/hdb &
    bunzip2 -c ./fichier.bz2|dd of=/dev/hdc &
    bunzip2 -c ./fichier.bz2|dd of=/dev/hdd &
    wait

    A moins que tu aies un CPU particulièrement lent (genre 486), l'écriture sur les 4 disques sera le facteur limitatif et non bunzip2.
  • # Merci

    Posté par  . Évalué à 1.

    merci pour toutes ces remarques, je vais m'empresser d'essayer.

    Pour la version 4 bunzip en paralelle, ce n'est effectivement pas le processeur qui pose probleme mais le fait que le fichier source soit lu par 4 programmes en meme temps, ce qui a le dont de multiplier les temps par 3.

Suivre le flux des commentaires

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