web-dev-qa-db-ja.com

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

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


私は以下を試しました:

ssh [email protected] "Sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

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

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

89
Qu0rk

SSHを介してリモートコンピューターのHDD Aをローカルコンピューターの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 と私自身のコメントで残されていました。それらをより明確にするために、それらを回答に移動しました。

124
slm

表示されるエラーは、リモートでのSudoの使用が原因です(パスワードの入力を求められますが、パスワードを入力するためのttyがありません)。一方、通常のユーザーは、他の回答で提案されているように、通常は単純にddを使用することはできません(デバイスへの必要な権限がありません)。パスワードなしでSudoとしてddを実行する権限を自分に与えることで、問題を解決できます。これを行うには、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を実行できるようにすることもできますが、この無料の権限を必要最小限に抑えることをお勧めします。

12
elfantin

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

仮想ボックスでrootとして以下を実行しました。

ssh [email protected] "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5は、物理的なRed Hat Enterprise Linux 2.1ボックスです。
  • / dev/sdbは新しい仮想ディスクであり、複製が完了すると、古い物理的ボックスの仮想バージョンの基礎になります。
8
Fred Nerk

これらの回答を組み合わせることで、別のLinuxホストにクローンを作成し、「アクセス拒否」エラーを回避できました。

  • RPI4 SDカード(/dev/mmcblk0-カード全体を複製します)
  • 昇格された特権(Sudo -S
  • コピーしながら進行状況を確認(status=progress
  • コピーの圧縮(gzip
ssh [email protected] "Sudo -S dd if=/dev/mmcblk0 status=progress | gzip -1 -" | dd of=rpiimg.gz
0
Paul Sturm