dd、netcat、sshトンネルを使用してディスクのクローンを設定する方法は?


26

ddLinuxのssh暗号化チャネルを介して、ホストAからBにnetcat を使用して一括でコピーします(を使用してディスクを再イメージ化します)。

両端でどのコマンドを入力する必要がありますか?

回答:


28

ターゲットがsshdを実行しているソースからターゲットへのコピー:

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

ターゲットがsshdを実行していないときに、sshd_hostを介してソースからターゲットにコピーする。

  • ターゲット: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • ソース: ssh -L 62222:target:62222 sshd_host &
  • ソース: dd if=/dev/sda | nc -w 3 localhost 62222

    dd - if =はソース、of =は宛先、bs =はブロックサイズです。ブロックサイズが異なるとパフォーマンスが向上する場合があります。16は通常、かなり合理的な出発点です。count =を使用して、コピーするブロックを示すこともできます。

    nc -- pは、サービスに使用するポートを示します。 -lは、サービスを開始するために使用されます。 -wは、終了する前にピップラインのデータを待機する時間を設定します。

    ssh -- Lは、リモートホストにトンネルをセットアップします。引数の形式は、local_port:target_host:target_portです。ローカルプログラム(nc)はlocal_portに接続します。この接続はトンネルされ、target_hostのtarget_portに接続されます。

定義されたオプションは、これに使用されるものにすぎません。詳細については、manページをご覧ください。

いくつかのメモ:

  1. LAN以外でこれを行う場合は、gzipまたはcompressでデータストリームを圧縮することをお勧めします。Bzip2も動作しますが、CPU時間が少しかかります。最初のものにはその使用例があります。
  2. ソースパーティションがマウントされていない場合、または読み取り専用でマウントされている場合に適しています。そうでない場合は、宛先イメージをfsckする必要があります。
  3. マシンの1つにnetcatがあり、sshがない場合を除き、ここではnetcatは必要ありません。その場合は次のようになります。

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. ddは、ソースとターゲットが同じサイズの場合に最適に機能します。そうでない場合、ターゲットは2のうち大きい方である必要があります。
  2. ext2 / 3またはxfsを使用している場合は、ダンプ(またはxfsdump)および復元がより良いオプションです。ブートセクターを処理しませんが、ターゲットとソースのサイズが異なる場合に機能します。

4

sshなしでnetcatを使用する場合。私はそれが最も速い方法であり、安全な方法ではないと推測します、あなたはこのようにディスク全体をコピーして復元することができます:
IP 192.168.0.1のコンピュータAで

cat /dev/hdb | nc -p 9000
コンピューターB
nc -l 192.168.0.1 9000 > /dev/hdb

man ncによると、-lオプションは次のとおりです。

  -l ncがリモートホストへの接続を開始するのではなく、着信接続をリッスンするように指定するために使用します。このオプションを-p、-s、または-zオプションと組み合わせて使用するとエラーになります。

3

netcatは必要ありません。

srcマシンで実行:

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

私はsdXとsdYのパーティションがどれもマウントされていないと仮定します。knoppixまたは他の同様のライブディストリビューションで両方のボックスを起動できます。

DD -からデータを取得する場合 - 、[設けられていない場合は標準入力からそれを取る]にデータを送信する [設けられていない場合は-データは標準出力に送られます]。bs-ブロックサイズ...は速度を上げます。

ssh-リモートボックスで引用符で囲まれたコマンドを実行します。sshのstdinに送信されたすべてのデータはリモートマシンにトンネリングされ、そこで実行されるコマンドにstdinとして提供されます。


マウントされたディスクでは不可能でしょうか?
エフゲニー

@Evgenyディスクが読み取り専用としてマウントされていれば問題ありません。それ以外の場合-それをしないでください...あなたのコピーは一貫性がなくなります。
pQd 2009

3

ホストAはイメージを作成するホストであり、ホストBはイメージが保存されるホストです。

root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"

ディスクに復元すると、これら2つがスワップされます。


1

netcatの基本的なコピーについては、ここで説明します

これにSSHを関与させる必要がある場合は、その上でポート転送を使用できます。

-R [bind_address:]port:host:hostport

しかし、全体的には、最初にSSH転送を実行するだけで済みます(netcatなし)。


1

ファイルシステムが両方ともアンマウントされている限り、ddはうまく機能します。

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

事前にホストキー認証をセットアップする必要があります。そうしないと、パスワードプロンプトが原因でコピーが失敗します。

マウントされたボリュームでこれを行うと、結果が悪くなります。


ありがとう。引用符は必要ですか?
エフゲニー


1

上記のオプションを組み合わせてみましたが、結果を共有しています。ddブロックサイズ、gzipおよびgzip圧縮アルゴリズムの組み合わせを使用して、最速から最速まで。

ご覧のとおり、gzipは1Mブロックサイズと組み合わせて高速アルゴリズムを使用した場合にのみ改善されました。

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 326.045 s, 39.5 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 370.158 s, 34.8 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 370.274 s, 34.8 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd bs=1M of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 372.906 s, 34.6 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 520.116 s, 24.8 MB/s

LVM経由でローカルディスクを使用するEnterprise GigEスイッチ経由でGigEに接続された2つの高速サーバーが使用されました。


0

あなたはここでナットを割るためにハンマーを使用しているように見えます-またはおそらくより良い例えはハサミで芝生を切ることです:)

社内でそれを行う大きな理由がない限り、このような仕事をするためのツールのいくつかを見てみることを強くお勧めします。

Trinity Rescue Kitは、マルチキャスト経由のイメージングドライブをサポートする無料のliveCDであり、フルボアのイメージングシステムを使用せずに、必要に応じて(または実際に他の人が同じラインで考えている)実行できます。

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