ローカルマシンでSSHを使用してリモートディスクのバックアップを作成し、ローカルディスクに保存するにはどうすればよいですか?
私は以下を試しました:
ssh [email protected] "Sudo dd if=/dev/sdX " | \
dd of=/home/username/Documents/filename.image`
ただし、次のエラーが表示されます。
ttyが存在せず、askpassプログラムが指定されていません
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
ssh
を介してログインし、ls -l
ファイルのサイズを確認します。pv
を使用して、大規模なdd操作の進行状況を監視できます。たとえば、上記のリモートの例では、次のことができます。
$ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
「SIGUSR1」シグナルをdd
に送信すると、統計が出力されます。何かのようなもの:
$ pkill -USR1 dd
上記の監視方法は、最初は @ Ryan & @ bladt と私自身のコメントで残されていました。それらをより明確にするために、それらを回答に移動しました。
表示されるエラーは、リモートでの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
を実行できるようにすることもできますが、この無料の権限を必要最小限に抑えることをお勧めします。
私は、仮想Linux Mintボックスで変更されたバージョンを使用して、古いRedHatサーバー上の物理ハードドライブを複製しました。
仮想ボックスでrootとして以下を実行しました。
ssh [email protected] "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
これらの回答を組み合わせることで、別のLinuxホストにクローンを作成し、「アクセス拒否」エラーを回避できました。
/dev/mmcblk0
-カード全体を複製します)Sudo -S
)status=progress
)gzip
)ssh [email protected] "Sudo -S dd if=/dev/mmcblk0 status=progress | gzip -1 -" | dd of=rpiimg.gz