回答:
これを行うには、teeコマンドとともにbashの「プロセス置換」を使用できます。
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
または、明確にするために(少し効率を犠牲にして)、最後のdd
呼び出しを他の呼び出しと同じ方法にし、teeの標準出力を/ dev / nullに送信できます。
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null
インストールされている場合は、代わりに便利な進行状況インジケーターを取得する代わりにパイプビューアーを使用できますcat
。
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
これにより、ソースイメージが1回だけ読み取られるため、ソースドライブでヘッドスラッシングが発生するため、他の方法でイメージを複数回コピーしようとすると指数関数的な速度低下が発生する可能性があります。tee
上記のように使用すると、プロセスは最も遅い宛先ドライブの速度で実行する必要があります。
宛先ドライブがUSB経由で接続されている場合、すべてがバス帯域幅を共有している可能性があることに注意してください。そのため、多くの並列書き込みは、USBバスがソースまたは宛先ドライブではなくボトルネックになるため、順次書き込むよりも高速ではない可能性があります。
上記は、Linuxなどを使用していることを前提としています(デバイス名は異なる可能性がありますが、OSXでも動作するはずです)。Windowsなどを使用している場合は、別のソリューションが必要です。
ネットワークを介したイメージングには、USBを介した多くのドライブのイメージングと同様の問題があります-使用するソフトウェアが何らかのブロードキャストまたはマルチキャスト送信をサポートしていない限り、トランスポートチャネルがドライブではなくボトルネックになります。
このdd
方法では、おそらく次のように各マシンでプロセスをデイジーチェーンでnetcat
+ tee
+ dd
処理できます。
cat
/ pv
/ dd
sデータnc
を宛先マシン1に送信します。nc
、ソースマシンからのデータをリッスンし、パイプを介してデータをtee
送信しdd
(さらにディスクに)、別のnc
プロセスが宛先マシン2に送信します。nc
、宛先マシン1からのデータをリッスンし、パイプを介してデータtee
をdd
(ディスクに)nc
送信し、別のプロセスが宛先マシン3に送信します。nc
からデータを取得し、を介してディスクに送信する最後のマシンまで続きdd
ます。このように、スイッチとネットワークカードがすべて全二重リンクをネゴシエートしていると仮定して、潜在的に全ネットワーク帯域幅を使用しています。ソースマシンがデータのコピーを10個送信する代わりに(10台の宛先マシンを想定)、それぞれが送信帯域幅の1/10に制限されます。1のみが送信されます。各宛先マシンは、データのコピーを1つ取得して送信します。再び。あなたはのバッファサイズの設定を微調整する必要があるかもしれませんpv
、nc
そしてdd
最高の実用性能に近づくために。
ただし、マルチキャストをサポートするだけのソフトウェアを見つけることができれば、それははるかに簡単です(そしておそらく少し高速です)。しかし、上記は、私が試してみるのに十分かもしれない一種のハッキーなソリューションです...
別の考え。ドライブイメージが十分に圧縮される場合(その大きなチャンクがゼロでいっぱいの場合)、一度に多くの宛先に送信する場合でも、ソースマシンの送信帯域幅は問題になる必要はありません。最初にイメージを圧縮し、それをtee
+ を使用してどこにでも送信nc
し、宛先で解凍します(network nc
->-> decompressor dd
->-> disk)。
:Googleは(Linuxシステム上で)提案の最初の答えdd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde)
することができます(のクローンにどこに/ dev / sdbのクローンにしたいハードドライブは/ dev / sdcのは、/ dev / sdbのである、と/ dev / SDEあるドライブこれらを必要なだけ追加し、コピー&ペーストしてください)。LiveCDがそれを行う必要があり、ドライブ文字に注意することを忘れないでください!
of=-
よろしいですか?は、-
標準出力に出力するのではなく、出力ファイルを作成します。これは、of
オプションを省略するだけで解決できます。
私が知っているのは、ハードドライブデュプリケーターと呼ばれるものがあるということだけです。これらは、HDを複数のドライブに同時にクローン(複製)するための特別なデバイスです。たぶん、この記事はあなたを助けます。
まだ誰も言及していないので、ClonezillaとそのServer Edition について言及します。(残念ながら、直接的なリンクは表示されませんが、サイトの左ナビゲーションメニューに「Server Edition」があります...)
私はClonezilla Liveエディションで幸運に恵まれましたが、Server Editionをまだ試していません。しかし、かなり滑らかに見えます。
Mac OS Xを使用している場合、これは組み込まれています。マシンから、マルチキャストasrセッションの開始からイメージを提供します。クライアントからブートディスクを起動し、ターミナルを開いて、asrマルチキャストストリームに接続します。自由。
これに関連する2つの便利なリンクをWeb上で見つけました。猫なしでddを使用してdiskdupeを実行しました。
dd if=/dev/sdb | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh
http://joshhead.wordpress.com/2011/08/04/multiple-output-files-with-dd-utility
これは、進行状況メーターを表示する別のリンクでさらに拡張されます。
dd if=/dev/sdb | pv -s $(blockdev --getsize64 /dev/sdb) | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh
http://www.commandlinefu.com/commands/view/6177/dd-with-progress-bar-and-statistics
私はデビッドの答えを拡大したかった
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
drive.image
実際のように、他のデバイスとすることができます/dev/sde
第二に、dd
コマンドは適切なbs
設定でより速く動作します。私が使用bs=64k
して、1時間から10分に、40ギガのパーティションをコピーするための6倍の速度増加を見ました。
したがって、最終的なコマンドは次のようになります。
pv drive.image | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd
ソースがファイルではなくドライブの場合、次のようになります。
pv /dev/sde | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd