Cách dd đĩa từ xa bằng SSH trên máy cục bộ và lưu vào đĩa cục bộ


85

Làm cách nào tôi có thể tạo bản sao lưu của đĩa từ xa bằng SSH trên máy cục bộ của mình và lưu nó vào đĩa cục bộ?


Tôi đã thử như sau:

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

Tuy nhiên, tôi nhận được lỗi sau:

không có tty hiện tại và không có chương trình hỏi

Câu trả lời:


114

Nếu mục đích của bạn là sao lưu ổ cứng A của máy tính từ xa thông qua SSH vào một tệp duy nhất trên ổ cứng máy tính cục bộ của bạn, bạn có thể thực hiện một trong những cách sau.

Ví dụ

chạy từ máy tính từ xa

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

chạy từ máy tính cục bộ

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

Ví dụ sống

$ 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

Phương pháp giám sát?

  1. Đăng nhập qua sshmột thiết bị đầu cuối khác và ls -ltập tin để xem kích thước của nó là gì.
  2. Bạn có thể sử dụng pvđể theo dõi tiến trình của một hoạt động dd lớn, ví dụ, đối với ví dụ từ xa ở trên, bạn có thể làm:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. Gửi tín hiệu "SIGUSR1" tới ddvà nó sẽ in các số liệu thống kê. Cái gì đó như:

    $ pkill -USR1 dd
    

Người giới thiệu

Các phương pháp nêu trên để theo dõi ban đầu được trái qua ý kiến của @Ryan & @bladt và bản thân mình. Tôi đã chuyển chúng vào câu trả lời để làm cho chúng rõ ràng hơn.


Tôi đã thử điều này cho một vấn đề tương tự (sao lưu ONEổ cứng của máy tính từ xa TWOvào bộ lưu trữ của máy tính từ xa ), như thế này: <br /> [root @ ONE] # dd if = / dev / sda1 | ssh root @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0 bản ghi trong 409600 + 0 bản ghi ra 209715200 byte (210 MB) được sao chép, 0,894929 s, thiết bị đầu cuối Pseudo 234 MB / s sẽ không được cấp vì stdin không phải là mật khẩu gốc @ mật khẩu của TWO : Vấn đề là /root/Public/ONE/sda1.imgtập tin đã được tạo ONE, không phải TWOnhư mong đợi. Làm thế nào để tôi sửa lỗi này?
Urhixidur

1
Ai đó có thể cho chúng tôi một ví dụ về việc sử dụng pvtừ máy cục bộ không? Cảm ơn bạn.
TCB13

tốt hơn là sử dụng lbzip2 hoặc pigz của gzip
Shimon Doodkin

tại sao tôi cần "| dd of = image.gz" ở cuối? (không chỉ "> image.gz") bởi vì dd chiếm 100% của một cpu
Shimon Doodkin

6
Về giám sát: Các phiên bản dd mới hơn cũng có status=progresstùy chọn. Do đó, bạn không cần phải chạy pkill -USR1 ddtừ thiết bị đầu cuối khác nữa.
Cho đến

12

Lỗi bạn nhận được là do sử dụng sudo từ xa (bạn sẽ được hỏi mật khẩu nhưng bạn không có tty để nhập nó). Mặt khác, như một người dùng bình thường, bạn thường không thể sử dụng đơn giản ddnhư được đề xuất trong câu trả lời khác (bạn không có quyền yêu cầu đối với thiết bị). Bạn có thể giải quyết vấn đề bằng cách cho mình quyền thực thi dddưới dạng sudo mà không cần mật khẩu. Bạn có thể làm điều này bằng cách chỉnh sửa tệp sudoers (trên điều khiển từ xa!):

sudo visudo

thêm dòng sau:

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

Bây giờ bạn có thể phát hành:

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

và nó nên hoạt động. Bạn có thể tạo một mục chung chung hơn trong sudoers, cho phép bạn chạy ddvới bất kỳ tham số nào, nhưng sẽ khôn ngoan hơn khi giữ quyền miễn phí này ở mức tối thiểu bạn cần.


Hoặc, bạn chỉ có thể chạy 'sudo ls' ở đầu có thể áp dụng (và nhập mật khẩu), ngay trước khi chạy lệnh 'sudo dd ...'
MikeW

Với các phiên bản mới hơn của dd thêm status = tiến độ thậm chí cho phép theo dõi tiến trình sao chép.
Sensslen

7

Tôi vừa sử dụng một phiên bản sửa đổi trên hộp Linux Mint ảo để sao chép ổ cứng vật lý trên máy chủ RedHat cũ.

Tôi đã chạy như sau với root trên hộp ảo:

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 là hộp Red Hat Enterprise Linux 2.1 vật lý.
  • / dev / sdb là một đĩa ảo mới, khi nhân bản xong sẽ là cơ sở của phiên bản ảo của hộp vật lý sắp chết cũ.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.