Bản sao DD đầy đủ từ hdd đến hdd


34

CÂU HỎI GỐC:

Nếu tôi có 2 ổ cứng giống hệt nhau với các đặc điểm sau:

  • SATA 6.0 Gb / s
  • 5400 vòng / phút
  • 3TB

Mất bao lâu để một bản sao dd đầy đủ phải hoàn thành?

Cho đến nay nó đã chạy được 5 giờ và vẫn tiếp tục ...

Tôi đang sử dụng Linux Ubuntu 12.04 64bit và lệnh tôi đang sử dụng là:

dd if=/dev/sdb of=/dev/sdc

CẬP NHẬT: 1

Bây giờ tôi có thể thấy tiến trình và đã hơn 6 giờ để sao chép 430GB. Ổ cứng là 3TB ...

Không có cách nào nhanh hơn để làm điều này?


CẬP NHẬT: 2

Điều này có vẻ tốt hơn nhiều so với trước đây (Cảm ơn Groxxda về các đề xuất):

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

ETA là khoảng 9 giờ cho 3TB, trong khi trước khi nó đạt 430GB sau 6 giờ, vì vậy tôi đoán rằng sẽ mất khoảng 36 giờ khi sử dụng lệnh trước đó.


Cố gắng lấy số liệu thống kê của quy trình: Gửi tín hiệu USR1 đến quy trình 'dd' đang chạy khiến nó in số liệu thống kê I / O thành lỗi tiêu chuẩn và sau đó tiếp tục sao chép. $ dd if = / dev / zero of = / dev / null & pid = $! $ kill -USR1 $ pid Kiểm tra trang người đàn ông của bạn để biết tín hiệu thực tế vì nó khác với việc triển khai dd khác nhau.
Groxxda

@Groxxda, tôi không biết làm thế nào để làm điều đó.
oshirowanen

1
GNU dd sử dụng SIGUSR1và dd BSD sử dụngSIGINFO
groxxda

Ngoài ra, bạn có ý nghĩa gì với "kết nối với cùng một cáp sata"? Bạn đang sử dụng một số loại số nhân cổng? (Nếu bạn đạt được tốc độ truyền 150MB / giây, bạn sẽ mất 5-6 giờ, nhưng tôi nghĩ rằng một nửa số đó là thực tế hơn.)
groxxda

1
Bạn có thể tăng tốc quá trình bằng cách chỉ định một khối ( bs=đối số dd) khác (lớn hơn ). Cũng xem xét kết nối mỗi ổ cứng với cổng sata của riêng nó.
Groxxda

Câu trả lời:


58

ddngày nay rất hữu ích khi mọi người sử dụng băng từ (khi kích thước khối quan trọng) và khi các công cụ đơn giản hơn như catcó thể không an toàn nhị phân.

Ngày nay, dd if=/dev/sdb of=/dev/sdclà một chỉ phức tạp, dễ bị lỗi, chậm cách viết cat /dev/sdb >/dev/sdc. Mặc dù ddvẫn hữu ích cho một số nhiệm vụ tương đối hiếm , nhưng nó ít hữu ích hơn nhiều so với số lượng hướng dẫn đề cập đến nó sẽ cho phép bạn tin tưởng. Không có phép thuật trong dd, ma thuật là tất cả trong /dev/sdb.

Lệnh mới của bạn sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128Klại không cần thiết phải chậm và phức tạp. Dữ liệu được đọc 128kB tại một thời điểm (tốt hơn so với ddmặc định của 512B, nhưng không tốt bằng các giá trị thậm chí lớn hơn). Sau đó nó đi qua hai ống trước khi được viết.

Sử dụng lệnh đơn giản và nhanh hơn cat. (Trong một số điểm chuẩn tôi đã thực hiện vài năm trước trong Linux, catnhanh hơn so cpvới bản sao giữa các đĩa khác nhau và cpnhanh hơn ddbất kỳ kích thước khối nào; ddvới kích thước khối lớn nhanh hơn một chút khi sao chép vào cùng một đĩa.)

cat /dev/sdb >/dev/sdc

Nếu bạn muốn chạy lệnh này sudo, bạn cần thực hiện chuyển hướng dưới dạng root:

sudo sh -c 'cat /dev/sdb >/dev/sdc'

Nếu bạn muốn có một báo cáo tiến độ, vì bạn đang sử dụng Linux, bạn có thể dễ dàng lấy một báo cáo bằng cách lưu ý đến catquy trình PID (giả sử 1234) và xem vị trí của bộ mô tả tệp đầu vào (hoặc đầu ra) của nó.

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

Nếu bạn muốn có một báo cáo tiến độ và biến thể unix của bạn không cung cấp một cách dễ dàng để có được vị trí mô tả tệp, bạn có thể cài đặt và sử dụng pvthay vì cat.


Điều kỳ lạ với các khối lớn là nút cổ chai là đĩa, vậy điều gì làm cho catnhanh hơn dd? Nó có thể được catsử dụng bộ đệm?
Emmanuel

1
@Gilles, cảm ơn vì câu trả lời. Tôi có năm ổ đĩa 3TB khác để sao chép và sẽ thử tùy chọn con mèo tiếp theo. Theo như tôi có thể nói, lệnh dd mới sẽ mất thêm 3 giờ nữa để hoàn thành, tổng cộng khoảng 11 giờ. Nếu cách tiếp cận của mèo nhanh hơn 11 giờ đối với ổ cứng 3TB thứ hai, tôi sẽ sử dụng phương pháp đó cho các ổ đĩa còn lại.
oshirowanen

2
@Gilles, để nhận báo cáo tiến độ, tôi có sử dụng sudo sh -c 'pv /dev/sdb >/dev/sdc'thay vì sudo sh -c 'cat /dev/sdb >/dev/sdc'không?
oshirowanen

1
@oshirowanen Có, sử dụng pvở nơi bạn sử dụng cat.
Gilles 'SO- ngừng trở nên xấu xa'

1
@unhammer Không! Bạn sẽ sao chép từng thiết bị một, ví dụ cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1. Kết hợp hai phần không có ý nghĩa. Nếu bạn muốn thay đổi cấu trúc của khối lượng btrfs, để thay đổi nó từ việc có hai subvolume thành một, bạn cần sử dụng các công cụ btrfs để thay đổi cấu trúc hoặc như bạn đã làm để tạo một hệ thống tệp mới với cấu trúc mong muốn và sao chép các tệp .
Gilles 'SO- ngừng trở nên xấu xa'

7

ddsử dụng một khối rất nhỏ theo mặc định (512 byte). Điều đó dẫn đến rất nhiều chi phí (một read()write()tòa nhà cho mỗi 512 byte).

Nó đi nhanh hơn rất nhiều khi bạn sử dụng kích thước khối lớn hơn. Tốc độ tối ưu bắt đầu từ bs=64khoặc hơn. Hầu hết mọi người sử dụng một cái vẫn lớn hơn bs=1Mđể nó trở thành con người có thể đọc được (khi ddnói nó được sao chép 1234 blocks, bạn biết nó 1234 MiBmà không cần làm bất kỳ phép toán nào). Việc sử dụng các khối lớn hơn thậm chí không có khả năng dẫn đến cải thiện tốc độ, chỉ tiêu thụ bộ nhớ cao hơn.

Vì vậy, lệnh nên là:

dd bs=1M if=/dev/sdb of=/dev/sdc

Nếu bạn đã ddchạy chậm , bạn có thể ngắt nó và tiếp tục với một ddtrường hợp nhanh hơn . Đối với điều này, điều quan trọng là phải biết bản sao đã tiến triển bao xa. ddthường in tiến trình khi bạn hủy nó hoặc bạn có thể gửi USR1tín hiệu trong khi nó đang chạy để làm cho nó in tiến trình của nó.

kill -USR1 $(pidof dd)

Ví dụ: nếu nó được sao chép nhiều hơn 1234MiB, bạn có thể tiếp tục tại vị trí 1234MiBbằng cách sử dụng:

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

Nếu nó được sao chép ít hơn 1234MiB, bản sao của bạn sẽ không đầy đủ. Nếu nó sao chép nhiều hơn 1234MiB, nó sẽ sao chép lại một số phần đã được sao chép, thông thường không gây hại gì. Vì vậy, nếu nghi ngờ, bạn nên chọn một giá trị nhỏ hơn một chút so với những gì bạn tin rằng đã được sao chép.


5

Lấy số liệu thống kê về quá trình dd đang diễn ra

Bạn có thể sử dụng killlệnh với tín hiệu thích hợp để thực hiện ddthống kê đầu ra thành lỗi tiêu chuẩn.
Từ trang man GNU GNU:

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

Hãy chắc chắn rằng bạn kiểm tra trang người dùng của mình để biết tín hiệu chính xác trước vì nó có thể khác nhau trên các cài đặt dd khác nhau: (dd BSD sử dụng SIGINFO).

Đẩy nhanh quá trình

  1. Kết nối mỗi ổ cứng với cổng SATA của riêng nó để có thể đọc dữ liệu từ một thiết bị và ghi vào thiết bị khác cùng một lúc.
  2. Sử dụng một kích thước khối thích hợp bằng cách sử dụng bs=đối số. Hãy xem chủ đề này trên superuser và thử một số giá trị cho chính bạn.
  3. Sử dụng các cách ddgọi riêng để đọc và viết và sử dụng một đường ống để kết nối chúng ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M).
    Nếu bạn làm điều này và chỉ định kích thước khối, hãy đảm bảo bạn sử dụng cùng kích thước khối cho mỗi lần gọi.
  4. Bạn có thể thử tối ưu hóa khác như directđối số.
  5. Hãy chắc chắn rằng đĩa cứng của bạn không được gắn hoặc nó có thể dẫn đến một bản sao bị hỏng.

0

Bạn đã thử 'gparted' chưa? Bạn có thể sao chép-dán một phân vùng từ ổ đĩa này sang ổ đĩa khác và thay đổi kích thước cho phù hợp khi cần thiết. Bạn nhận được tốc độ chuyển và thời gian còn lại. Nó sử dụng 'e2image' bên dưới cho các phân vùng linux.


0

Có một phần mềm thương mại gọi là HDClone . Nó được cấp phép như cả phần mềm miễn phí và thương mại. Cả hai phiên bản đều có thể tạo ra một ổ đĩa khởi động hoặc DVD, cũng như sao chép đĩa. Kết nối HD nguồn và đích và làm theo các hướng dẫn dựa trên GUI.

Phiên bản miễn phí sẽ chuyển với tốc độ khoảng 80MB / giây, trong khi các phiên bản trả phí có thể đi nhanh hơn nhiều. Đối với hệ thống tệp NTFS và FAT, các phiên bản trả phí có thể được cấu hình để chỉ sao chép các bit bị chiếm dụng của HD, giúp tăng đáng kể tốc độ của mỗi bản sao.


(1) Bạn có liên kết với sản phẩm này không? (2) Chúng ta có thể lấy nó ở đâu?
Scott

1
Hoặc bạn chỉ có thể sử dụng "cat / dev / sdx> / dev / sdy" miễn phí ...
HörmannHH
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.