dd: écrire sur plusieurs disques?

16

J'ai 2 cartes SD exactement formatées, de même taille et de même marque. Je voudrais faire l' ddimage de /dev/disk2et en /dev/disk3même temps.
Pseudocode

sudo dd bs=1m if=/Users/masi/2016-05-10-raspbian-jessie.img of={/dev/disk2,/dev/disk3}

Comment pouvez-vous ddpasser d'une entrée à plusieurs sorties SD?

Léo Léopold Hertz 준영
la source
Quel est l'objectif ici? Performance? Si oui, souvenez-vous que les données que vous lisez seront mises en cache. Ainsi, le 2e dd vous fournira des données de votre bcache au lieu de les lire (bien sûr, vous avez besoin de RAM gratuite).
KWubbufetowicz
2
Mon test simpliste avec GNU coreutils dd ... of=one of=twon'a pas produit deux sorties. Peut nécessiter deux ddcommandes. Je ne vois pas de libellé en posix pour dd pour permettre plusieurs of.
Jeff Schaller
@KWubbufetowicz J'ai 8 Go de RAM. Possible d'obtenir 32 Go. La vitesse est mon objectif car j'ai 5 SD.
Léo Léopold Hertz

Réponses:

20
  1. L' emprunt de don_crissti réponse de l' aide tee, mais sans ddou bash ismes:

    sudo tee /dev/disk2 /dev/disk3 > /dev/disk4 < masi.img
    
  2. Utilisation peedu paquet moreutils de Debian :

    sudo dd if=masi.img | \
      pee "dd of=/dev/disk2"  "dd of=/dev/disk3"  "dd of=/dev/disk4"
    

    Avec bash, kshou zsh, qui peut être abrégé en:

    sudo dd if=masi.img | pee "dd of=/dev/disk"{2..4}
    

    Ou même, (s'il n'y a pas besoin de ddfonctions utiles de):

    sudo pee "dd of=/dev/disk"{2..4} < masi.img
    

    peeest utile; si nécessaire, on peut inclure, (dans chaque argument cité), des ddoptions distinctes supplémentaires, et même d'autres tuyaux et filtres, adaptés individuellement à chaque périphérique de sortie.

Avec l'une ou l'autre méthode, le nombre de disques de sortie peut être étendu indéfiniment.

agc
la source
1
L'utilisation de dd pour cela n'est pas nécessaire. Beaucoup de gens croient que c'est nécessaire parce que son utilisation, spécifique à la copie vers ou depuis des images de disque, est "fossilisée" dans des tutoriels écrits dans les années 90 et copiés par des gens qui ne savaient pas pourquoi. Il était utilisé à l'époque pour contourner un problème dans cp.
Random832
@ Random832 Il est nécessaire car il est plus stable que cp. Essayez de nombreux formats et différentes tailles d'allocation. Je n'ai pas trouvé assez stable cppour le travail. S'il vous plaît, corrigez-moi comme réponse ici si vous pouvez argumenter sur la cpstabilité de suffisamment.
Léo Léopold Hertz
@Masi Il est rarement nécessaire de sélectionner explicitement un format (qu'entendez-vous même par "format") et la taille d'allocation (vous voulez dire la taille du bloc?) Dans le but commun d'écrire une image disque sur un disque ou de lire un disque dans une image disque. La raison pour laquelle dd est devenu couramment utilisé à cette fin était à cause d'un bogue dans cp (GNU cp sous Linux spécifiquement) au début des années 90 qui l'a fait ignorer les blocs de copie qui étaient tous à zéro octet.
Random832
7
Insecte dans cples années 90? dda 20 ans de plus que cela. La principale raison de l'utilisation ddétait que de nombreux périphériques, en particulier les lecteurs de bande, devaient être lus / écrits dans des tailles de bloc fixes, c'est pourquoi dda bs, ibset les obsparamètres, et c'était le seul programme qui pouvait garantir des tailles de bloc correctes.
Guntram Blohm soutient Monica
1
@Gilles, ici le tee est en effet préférable de faire pipi , (mais dcfldd est le meilleur). Pourtant, faire pipi est utile; on peut, si nécessaire, inclure, (dans chaque argument cité), des options «dd» supplémentaires, et même d'autres tuyaux et filtres, adaptés individuellement à chaque périphérique de sortie.
agc
21

Vous pouvez essayer C'est une version améliorée de et il peut sortir sur plusieurs fichiers ou disques en même temps:dcfldd
gnu dd

dcfldd if=masi.img of=/dev/disk2 of=/dev/disk3 of=/dev/disk4
don_crissti
la source
Pouvez-vous expliquer votre première commande. Pourquoi pipe seulement avant le dernier dd? Comment l'emplacement du tuyau change-t-il avec quatre dd?
Léo Léopold Hertz
3
dcflddest le plus rapide, cela devrait peut-être être le premier choix.
agc
J'ai trouvé que c'était beaucoup plus rapide que les autres méthodes de tuyauterie.
ThankYee Il y a
3

Cela est également possible avec teeet process substitution:

dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

chevallier
la source
Pouvez-vous expliquer le substitut de processus? En quoi votre réponse est-elle différente de celle d'AGC?
Léo Léopold Hertz 준영
oui bien sûr: process substitutionest utilisé lorsque vous devez diriger la sortie standard d'une commande vers plusieurs commandes. L'utilisation d'un simple tuyau vous permettra de diriger vers une seule commande. Ma réponse est d'obtenir le même résultat que celui des agc, mais d'une manière différente :) De plus, je n'ai jamais utilisé peeauparavant, car j'ai la teecommande sur mon système.
chevallier