Cara menemukan disk jarak jauh menggunakan SSH pada mesin lokal dan menyimpan ke disk lokal


85

Bagaimana saya bisa membuat cadangan disk jarak jauh menggunakan SSH pada mesin lokal saya dan menyimpannya ke disk lokal?


Saya sudah mencoba yang berikut ini:

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

Namun, saya menerima kesalahan berikut:

tidak ada tty hadir dan tidak ada program askpass yang ditentukan

Jawaban:


114

Jika maksud Anda adalah mencadangkan HDD A komputer jarak jauh melalui SSH ke satu file yang ada di HDD komputer lokal Anda, Anda dapat melakukan salah satu dari yang berikut ini.

Contohnya

lari dari komputer jarak jauh

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

lari dari komputer lokal

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

Contoh langsung

$ 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

Metode untuk pemantauan?

  1. Login via sshterminal lain dan ls -lfile untuk melihat ukurannya.
  2. Anda dapat menggunakan pvuntuk memantau kemajuan operasi dd besar, misalnya, untuk contoh jarak jauh di atas, Anda dapat melakukan:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. Kirim sinyal "SIGUSR1" ke dddan itu akan mencetak statistik. Sesuatu seperti:

    $ pkill -USR1 dd
    

Referensi

Metode yang disebutkan di atas untuk pemantauan semula ditinggalkan melalui komentar oleh @Ryan & @bladt dan saya sendiri. Saya telah memindahkan mereka ke jawaban untuk membuatnya lebih jelas.


Saya mencoba ini untuk masalah yang sama (mencadangkan ONEhard drive komputer jarak jauh ke TWOpenyimpanan komputer jarak jauh ), seperti ini: <br /> [root @ ONE] # dd if = / dev / sda1 | ssh root @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0 mencatat di 409600 + 0 mencatat 209715200 byte (210 MB) disalin, 0,894929 s, 234 MB / s Pseudo-terminal tidak akan dialokasikan karena stdin bukan terminal root @ TWO's password : Masalahnya adalah /root/Public/ONE/sda1.imgfile itu dibuat pada ONE, bukan pada TWOseperti yang diharapkan. Bagaimana cara saya memperbaikinya?
Urhixidur

1
Adakah yang bisa memberi kami contoh penggunaan pvdari mesin lokal? Terima kasih.
TCB13

lebih baik menggunakan lbzip2 atau pigz insted dari gzip
Shimon Doodkin

mengapa saya perlu "| dd = image.gz" di akhir? (bukan hanya "> image.gz") karena dd membutuhkan 100% dari satu cpu
Shimon Doodkin

6
Mengenai pemantauan: Versi dd yang lebih baru juga memiliki status=progressopsi. Dengan demikian, Anda tidak perlu lari pkill -USR1 dddari terminal lain lagi.
Hingga Schäfer

12

Kesalahan yang Anda terima adalah karena penggunaan sudo dari jarak jauh (Anda akan dimintai kata sandi tetapi Anda tidak memiliki tty untuk memasukkannya). Di sisi lain, sebagai pengguna normal Anda biasanya tidak dapat menggunakan ddseperti yang disarankan dalam jawaban lain (Anda tidak memiliki izin yang diperlukan untuk perangkat). Anda dapat memecahkan masalah dengan memberi diri Anda hak untuk mengeksekusi ddsebagai sudo tanpa kata sandi. Anda dapat melakukan ini dengan mengedit file sudoers (pada remote!):

sudo visudo

tambahkan baris berikut:

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

Sekarang Anda dapat menerbitkan:

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

dan itu harus bekerja. Anda bisa membuat entri yang lebih umum dalam sudoers, memungkinkan Anda untuk menjalankan dddengan parameter apa pun, tetapi lebih bijaksana untuk menjaga izin gratis ini ke minimum yang Anda butuhkan.


Atau, Anda bisa menjalankan 'sudo ls' di akhir yang berlaku (dan mengetikkan kata sandi), sesaat sebelum menjalankan perintah 'sudo dd ...'
MikeW

Dengan versi yang lebih baru dari menambahkan status = kemajuan bahkan memungkinkan pemantauan kemajuan salinan.
sensslen

7

Saya baru saja menggunakan versi modifikasi pada kotak Linux Mint virtual untuk mengkloning hard drive fisik pada server RedHat yang menua.

Saya menjalankan yang berikut ini sebagai root pada kotak virtual:

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 adalah kotak fisik Red Hat Enterprise Linux 2.1.
  • / dev / sdb adalah disk virtual baru, yang ketika selesai dikloning akan menjadi dasar dari versi virtual dari kotak fisik sekarat yang lama.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.