dd:複数のディスクに書き込みますか?


16

2つのまったく同じフォーマット、同じサイズ、同じブランドのSDカードがあります。私がしたいddの画像/dev/disk2とを/dev/disk3同時に。
擬似コード

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

dd1つの入力から多くの出力SDにどのようにできますか?


ここでの目標は何ですか?パフォーマンス?「はい」の場合、読み取ったデータはキャッシュされます。したがって、2番目のddは、読み取りの代わりにbcacheからデータを取得します(もちろん、空きRAMが必要です)。
クブッフェトウィッツ

2
GNU coreutils ddを使用... of=one of=twoした単純なテストでは、2つの出力は生成されませんでした。2つのddコマンドが必要な場合があります。ddが複数のof' を許可するためのposixの文言が表示されません。
ジェフシャラー

@KWubbufetowicz 8GBのRAMがあります。32GBを取得できます。5つのSDがあるため、速度が目標です。
レオレオポルドヘルツ

回答:


20
  1. 借入don_crisstiの答えを使用しteeますが、なし ddまたはbashの ISMS:

    sudo tee /dev/disk2 /dev/disk3 > /dev/disk4 < masi.img
    
  2. peeDebianのmoreutilsパッケージからの使用:

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

    あるいは、と略すことができます。bashkshzsh

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

    または、さらに(ddの便利な機能が必要ない場合):

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

    pee便利です。必要に応じてdd、各出力デバイスに個別に調整された、追加の個別のオプション、さらには他のパイプやフィルターを(引用符で囲まれた各引数内に)含めることができます。

どちらの方法でも、出力ディスクの数を無制限に拡張できます。


1
これにddを使用する必要はありません。90年代に書かれたチュートリアルでは、ディスクイメージへのコピーまたはディスクイメージからのコピーに固有の使用が「化石化」され、理由が分からない人によってコピーされるため、多くの人が必要だと考えています。当時、cpの不具合を回避するために使用されていました。
Random832

@ Random832これは、がより安定しているために必要ですcp。多くの形式と異なる割り当てサイズを試してください。cp作業に十分な安定性が見つかりませんでした。cp十分に安定していると主張できる場合は、ここで答えとして私を修正してください。
レオレオポルトヘルツ

@Masi ディスクイメージのディスクへの書き込みまたはディスクへの読み取りの一般的な目的のために、フォーマット(「フォーマット」とはどういう意味ですか)および割り当てサイズ(ブロックサイズを意味します)を明示的に選択する必要はほとんどありません。ディスクイメージ。ddがこの目的で一般的に使用されるようになった理由は、90年代前半のcp(特にLinux上のGNU cp)のバグにより、すべて0バイトのブロックのコピーがスキップされたためです。
Random832

7
cp90年代のバグ?ddそれより20歳年上です。使用する主な理由ddは、多くのデバイス、特にテープドライブが固定ブロックサイズで読み取り/書き込みが必要であるためです。これが、およびパラメーターをdd持ちbs、正しいブロックサイズを保証できる唯一のプログラムでした。ibsobs
Guntram Blohmは、Monica

1
@Gilles、ここではteeおしっこよりも確かに望ましいです(しかしdcflddが最適です)。それでも、おしっこは便利です。必要に応じて、各出力デバイスに個別に調整された(各引用符で囲まれた引数内)、追加の 'dd'オプション、およびその他のパイプとフィルターを含めることができます。
agc

20

あなたは それを強化したバージョンを試すことができ、同時に複数のファイルまたはディスクに出力することができます:dcfldd
gnu dd

dcfldd if=masi.img of=/dev/disk2 of=/dev/disk3 of=/dev/disk4

最初のコマンドについて説明してください。最後の前だけでパイプするのはなぜddですか?パイプの位置は4でどのように変わりddますか?
レオレオポルトヘルツ준영

3
dcfldd最速です。多分それが最初の選択でしょう。
agc

3

また、これはteeand で可能process substitutionです。

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


代替プロセスを説明できますか?あなたの答えはagcのものとどう違いますか?
レオレオポルドヘルツ

確かに:process substitution1つのコマンドの標準出力を複数のコマンドにパイプする必要がある場合に使用されます。単純なパイプを使用すると、1つのコマンドにパイプできます。私の答えはagcと同じ結果を達成することですが、異なる方法で:)また、システムにコマンドpeeがあるため、以前は使用しませんでしたtee
シュヴァリエ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.