ローカルマシンでSSHを使用してリモートディスクをddし、ローカルディスクに保存する方法


85

ローカルマシンでSSHを使用してリモートディスクのバックアップを作成し、ローカルディスクに保存するにはどうすればよいですか?


私は次を試しました:

ssh hostname@my.ip.address "sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

ただし、次のエラーが表示されます。

ttyが存在せず、askpassプログラムが指定されていません

回答:


114

リモートコンピューターのHDD AをSSH経由でローカルコンピューターのHDDにある単一のファイルにバックアップすることが目的の場合、次のいずれかを実行できます。

リモートコンピューターから実行

$ dd if=/dev/sda | gzip -1 - | ssh user@local dd of=image.gz

ローカルコンピューターから実行

$ ssh user@remote "dd if=/dev/sda | gzip -1 -" | dd of=image.gz

ライブ例

$ ssh skinner "dd if=/dev/sda5 | gzip -1 -" | dd of=image.gz
208782+0 records in
208782+0 records out
106896384 bytes (107 MB) copied, 22.7608 seconds, 4.7 MB/s
116749+1 records in
116749+1 records out
59775805 bytes (60 MB) copied, 23.9154 s, 2.5 MB/s

$ ll | grep image.gz
-rw-rw-r--.   1 saml saml  59775805 May 31 01:03 image.gz

監視方法?

  1. ssh別のターミナルとls -lファイルにログインして、サイズを確認してください。
  2. pvたとえば、上記のリモートの例では、大規模なdd操作の進行状況を監視するために使用できます。

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. 「SIGUSR1」シグナルを送信すると、dd統計が出力されます。何かのようなもの:

    $ pkill -USR1 dd
    

参照資料

上記の監視方法は、もともと@Ryan@bladtと私自身のコメントによって残されていました。それらをより明確にするために答えに移動しました。


次のような同様の問題(リモートコンピューターONEのハードドライブをリモートコンピューターTWOのストレージにバックアップする)でこれを試しました。<br /> [root @ ONE]#dd if = / dev / sda1 | ssh root @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0レコード409600 + 0レコード209715200バイト(210 MB)コピー、0.894929 s、234 MB / s stdinは端末root @ TWOのパスワードではないため、擬似端末は割り当てられません:問題は、/root/Public/ONE/sda1.imgファイルが予想どおりONEではなくに作成さTWOれたことです。どうすれば修正できますか?
Urhixidur

1
誰かpvがローカルマシンからの使用例を教えてもらえますか?ありがとうございました。
TCB13

lbzip2またはgzipを使用したpigzを使用することをお勧めします
Shimon Doodkin

最後に「| dd of = image.gz」が必要なのはなぜですか?( "> image.gz"だけでなく)ddは1 cpuの100%を使用するため
Shimon Doodkin

6
監視について:新しいddバージョンにはstatus=progressオプションもあります。したがって、pkill -USR1 ddもう別の端末から実行する必要はありません。
ティルシェーファー

12

表示されるエラーは、リモートでsudoを使用しているためです(パスワードの入力を求められますが、入力するttyがありません)。一方、通常のユーザーddとしては、他の回答で提案されているように単純に使用することはできません(デバイスに必要な権限がありません)。ddパスワードなしでsudoとして実行する権利を自分に与えることで問題を解決できます。これを行うには、sudoersファイルを編集します(リモートで!):

sudo visudo

次の行を追加します。

userfoo ALL=(ALL) NOPASSWD: /bin/dd if=/dev/sdX

次を発行できます:

ssh userfoo@host "sudo /bin/dd if=/dev/sdX" | dd of=test.dd

動作するはずです。sudoersでより一般的なエントリを作成して、dd任意のパラメータで実行できますが、この無料のアクセス許可を必要最小限に抑える方が賢明です。


それとも、あなただけのコマンド「sudoの... DD」を実行する直前に、該当最後に「sudoのLSを」を実行(およびパスワードを入力)することができます
MikeW

ddの新しいバージョンでは、status = progressを追加すると、コピーの進行状況を監視することもできます。
sensslen

7

仮想Linux Mintボックスで変更されたバージョンを使用して、古いRedHatサーバー上の物理ハードドライブのクローンを作成しました。

仮想ボックスのルートとして次を実行しました。

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5は、Red Hat Enterprise Linux 2.1の物理ボックスです。
  • / dev / sdbは新しい仮想ディスクで、クローン作成が完了すると、古い物理ボックスの仮想バージョンの基礎になります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.