単一のディスクドライブを同時に複数のドライブに複製する


12

単一のディスクドライブを同時に複数のディスクドライブに複製する方法を探しています。

1TBのディスクにシステムイメージを準備しましたが、1つのディスクを別のディスクにクローンするのに2時間近くかかり、30台のディスクをクローンするために指数関数的に上がります。

1つのディスクを複数のターゲットに複製できる場合、手順全体が大幅に簡素化されます。

また、この種の操作を妨げるものはありますか?つまり、私が知っているすべてのディスククローニングソフトウェアが単一のターゲットドライブのみをサポートする特別な理由はありますか?

ありがとう!

回答:


17

これを行うには、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処理できます。

  1. ソースマシンcat/ pv/ ddsデータncを宛先マシン1に送信します。
  2. 宛先マシン1にはnc、ソースマシンからのデータをリッスンし、パイプを介してデータをtee送信しdd(さらにディスクに)、別のncプロセスが宛先マシン2に送信します。
  3. 宛先マシン2にはnc、宛先マシン1からのデータをリッスンし、パイプを介してデータteedd(ディスクに)nc送信し、別のプロセスが宛先マシン3に送信します。
  4. といったように、直前のマシンncからデータを取得し、を介してディスクに送信する最後のマシンまで続きddます。

このように、スイッチとネットワークカードがすべて全二重リンクをネゴシエートしていると仮定して、潜在的に全ネットワーク帯域幅を使用しています。ソースマシンがデータのコピーを10個送信する代わりに(10台の宛先マシンを想定)、それぞれが送信帯域幅の1/10に制限されます。1のみが送信されます。各宛先マシンは、データのコピーを1つ取得して送信します。再び。あなたはのバッファサイズの設定を微調整する必要があるかもしれませんpvncそしてdd最高の実用性能に近づくために。

ただし、マルチキャストをサポートするだけのソフトウェアを見つけることができれば、それははるかに簡単です(そしておそらく少し高速です)。しかし、上記は、私が試してみるのに十分かもしれない一種のハッキーなソリューションです...

もう一度編集

別の考え。ドライブイメージが十分に圧縮される場合(その大きなチャンクがゼロでいっぱいの場合)、一度に多くの宛先に送信する場合でも、ソースマシンの送信帯域幅は問題になる必要はありません。最初にイメージを圧縮し、それをtee+ を使用してどこにでも送信ncし、宛先で解凍します(network nc->-> decompressor dd->-> disk)。


プロセスの詳細な説明をありがとう。本当に役に立ちました。現在、ネットワーククローン作成オプションを(マルチキャストを使用して)調査していますが、失敗した場合は、このDDベクトルをさらに調査します。
mr.b

ドライブが異なるコンピューターに接続されているとは言わなかった...それは物事を完全に異なるものにします!
マーカス

これは、ローカルコンピューターとコンピューターのネットワークの一対多のディスク複製の両方に同時に最も近くなります。詳細な説明をありがとう!
mr.b

Linuxベースのネットワーククローニングオプションについては、Clonezillaを検討することをお勧めします。マルチキャストおよびDDを含むいくつかのローカルクローンオプションを介してクローンを作成できます。
user35060

5

: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がそれを行う必要があり、ドライブ文字に注意することを忘れないでください!


1
本当です。この質問をする前にいくつかの研究をしましたが、他の人の経験を聞くことに興味がありました。DDは非常に小さなユーティリティですが、1)実際のデータコンテンツを認識していません(空のスペースもセクターごとにコピーします)、2)複数のドライブにクローンを作成するときにパフォーマンスの問題が報告されていますこの方法では。他にアイデアはありますか?
mr.b

「[...] / dev / sdbはクローンするハードドライブ、/ dev / sdc、/ dev / sdb、および/ dev / sdeはクローン先のドライブです[...]」---> 「[...]ドライブ文字に注意することを忘れないでください!」:DI同意!!!
dag729

1
@ mr.b:1)私の考えでは、ビットごとのコピーは、潜在的に危険なショートカットを取るよりも優れています。2)私が考えることができる最良の方法は、ddのソースを混乱させて同時に複数の場所にコピーすることですが、遅い方法をコピーする方が速いでしょう。
マーカス

本当にof=-よろしいですか?は、-標準出力に出力するのではなく、出力ファイルを作成します。これは、ofオプションを省略するだけで解決できます。
ここから

この方法で「ティー」を使用しても機能しません。見てください:joshhead.wordpress.com/2011/08/04/...
user35060

2

私が知っているのは、ハードドライブデュプリケーターと呼ばれるものがあるということだけです。これらは、HDを複数のドライブに同時にクローン(複製)するための特別なデバイスです。たぶん、この記事はあなたを助けます。


ええ、私はこれらのデバイスの存在を知っています。しかし、それらはすべて安価ですが、特に私の予算ゼロの場合には:(それらに言及してくれてありがとう。
mr.b

1
完全にゼロコストではありませんが、予備のマシン(まともな電源を備えた)を使用して、指揮を執り、いくつかの安価なSATAコントローラーを購入できる場合(自宅のマシンには、2つのポートがあり、コストがかかります) 「単一のソースからの読み取り、多数への書き込み」を効率的にサポートするものが見つかった場合、独自の単純な複製マシンを作成し、dd + teeメソッドまたはその他のソフトウェアを使用できます。
デビッドスピレット

(これはあなたが私の最初の答えでやろうとしていたと私が仮定したことです。)
デイビッドスピレット

1

まだ誰も言及していないので、ClonezillaとそのServer Edition について言及します。(残念ながら、直接的なリンクは表示されませんが、サイトの左ナビゲーションメニューに「Server Edition」があります...)

私はClonezilla Liveエディションで幸運に恵まれましたが、Server Editionをまだ試していません。しかし、かなり滑らかに見えます。


提供されたフィードバックに基づいて、Clonezillaを2番目に、あなたにとって良い解決策と思われるものとして紹介します。
user35060

1

Mac OS Xを使用している場合、これは組み込まれています。マシンから、マルチキャストasrセッションの開始からイメージを提供します。クライアントからブートディスクを起動し、ターミナルを開いて、asrマルチキャストストリームに接続します。自由。

詳細:http : //www.bombich.com/mactips/multicast.html


1

これに関連する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


0

私はデビッドの答えを拡大したかった

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


0

並列ハードディスク複製は、コンピューターフォレンジックの一般的なタスクです。 dc3ddmanページ)は、単一のソースを複数の宛先に並列コピーできる専用ツールであり、UNIXのようddに機能し、複数のof=オプションが許可されています。

また、ソースボリュームとコピーのハッシュを有効にして、整合性を検証することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.