Làm thế nào tôi có thể tăng tốc một dd đĩa đầy đủ?


62

Tôi đang thực hiện một ddtrên hai ổ đĩa giống hệt nhau bằng lệnh này:

 dd if=/dev/sda of=/dev/sdb bs=4096

Cả hai ổ đĩa cứng đều có cùng số model và cả hai đều có dung lượng lưu trữ 1TB. /dev/sda sử dụng kích thước khối 4096. /dev/sdalà một ổ đĩa cục bộ và /dev/sdblà một caddy từ xa. Tôi có thể sử dụng các giao thức sau:

  • USB2.0 HighSpeed ​​(Hiện tại là gói)
  • Bản sao Gigabit trên mạng (Thực sự không muốn thử cái này)
  • USB3.0 (Nếu tôi tìm thấy ổ đĩa khác của mình)
  • eSATA (Nếu tôi tìm / mua cáp)
  • SATA (Nếu tôi tìm / mua cáp, phải yêu ổ đĩa CD máy tính xách tay)

Có cách nào để chạy bản sao ổ đĩa này mà mất ít hơn 96 giờ không? Tôi mở để sử dụng các công cụ khác hơn dd.

Tôi cần sao chép các phân vùng sau (bao gồm cả UUID)

  • Phân vùng Fat32 EFI (*)
  • Phân vùng Windows NTFS (*)
  • Phân vùng HFS + OSX
  • Phân vùng Ubuntu EXT4 (*)
  • Phân vùng hoán đổi (*)

* Được hỗ trợ bởi Clonezilla


Tôi đã thử Clonezilla (và nó NHIỀU nhanh hơn), nhưng nó không hỗ trợ sao chép thông minh HFS + mà tôi cần. Có lẽ phiên bản mới nhất hỗ trợ này?

Khi tôi tạo bản sao đầu tiên của mình, tôi đã thực hiện tất cả các phân vùng ngoại trừ HFS + và nó đã diễn ra rất nhanh. (Tổng cộng không quá 3 giờ)


1
Bạn có lẽ tốt hơn là sử dụng một cái gì đó như clonezilla. ddsao chép mọi thứ , kể cả không gian trống. Những nhược điểm trở nên cực kỳ rõ ràng khi bạn có các đĩa lớn không hoàn toàn đầy đủ.
Boris the Spider

Có thể mua cáp SATA và tạm thời gắn ổ đĩa ngoài vào cổng SATA trên bo mạch chủ không?
Đánh dấu Plotnick

Có lẽ ai đó có thể giải thích các vấn đề sau: Làm thế nào về việc nhân bản bảng phân vùng (sử dụng clonezilla hoặc dd), sử dụng Clonezilla để sao chép tất cả các phân vùng trừ HFS + và sử dụng dd cho một phân vùng đó? Điều này sẽ khả thi?
Alexander

@Alexander Đó là cách tôi tạo bản sao đầu tiên của mình.
Kaz Wolfe

1
@LuisAlvarado Mình mới bắt đầu nhân bản, anh bạn!
Kaz Wolfe

Câu trả lời:


69

Theo kinh nghiệm của tôi, tôi không nghĩ rằng có một cái gì đó nhanh hơn trong dòng lệnh như dd. Điều chỉnh bstham số có thể tăng tốc độ, ví dụ: tôi có 2 ổ cứng mà tôi biết có tốc độ đọc / ghi lớn hơn 100 MB / s nên tôi làm điều này:

dd if=/dev/sda of=/dev/sdb bs=100M

Ngoài ra còn có pv(Cần phải cài đặt trước) để kiểm tra tốc độ nhanh nhất trên cả hai ổ đĩa và sau đó tiến hành nhân bản. Điều này phải được thực hiện tất nhiên từ root:

pv < /dev/sda > /dev/sdb

Với PV tôi nhận được 156 MB / s

Điều tuyệt vời pvngoài tốc độ là nó cho thấy sự tiến bộ, tốc độ hiện tại, thời gian kể từ khi nó bắt đầu và ETA. Liên quan đến HFS + tôi không biết, tôi chỉ đang cố gắng giúp đỡ về phần "tốc độ". Với pvhoặc một bstham số được tối ưu hóa , bạn có thể thực hiện ổ đĩa 4 TB trong vòng chưa đầy 7 giờ (6 giờ 50 phút với tốc độ hiện tại 150 MB / s).

nhập mô tả hình ảnh ở đây

Tôi đã thực hiện một vài thử nghiệm với các loại kết nối bạn đang sử dụng và các loại khác mà tôi có sẵn. Tôi đang sử dụng Asus Z87 Pro và Intel DZ68DP. Đây là kết quả của tôi, nhưng trước tiên chúng ta cần biết rằng tốc độ lý thuyết cho nhiều tốc độ truyền (Tốc độ thô) chỉ là lý thuyết . Thực hiện các thử nghiệm thực tế cho thấy chúng nằm trong khoảng từ 40% đến 80% tốc độ thô đó. Thử nghiệm này có thể thay đổi tùy thuộc vào Thiết bị được sử dụng, loại kết nối, bo mạch chủ, loại cáp kết nối, loại hệ thống tệp và hơn thế nữa. Với ý nghĩ đó, đây là những gì tôi nhận được (Tôi chỉ kiểm tra tốc độ ghi vào thiết bị, đọc thường cao hơn):

Connected Device  -  Connection Type  -  Speed (Write Speed)
  USB 2.0                 USB 2.0              25 MB/s
  USB 3.0                 USB 2.0              35 MB/s
  USB 3.0                 USB 3.0              73 MB/s
  eSata                   eSata                80 MB/s
  Sata 2G HDD             Sata 2G              120 MB/s
  Sata 3G HDD             Sata 2G              140 MB/s
  Sata 3G HDD             Sata 3G              190 MB/s
  Sata 2G SDD             Sata 2G              170 MB/s
  Sata 3G SDD             Sata 2G              210 MB/s
  Sata 3G SDD             Sata 3G              550 MB/s 

3
gửi tín hiệu USR1, để có được tiến trình của dd. Nhược điểm của dd là sao chép không gian trống.
jfs

1
Theo kinh nghiệm của tôi, việc điều chỉnh bstham số có thể thực hiện ddnhanh như cat. Bạn cũng có thể sử dụng catở nơi đầu tiên.
Gilles 'SO- ngừng trở thành ác quỷ'

3
pvbởi chính nó hoạt động rất rất tốt.
Kaz Wolfe

11
Bạn có thể sử dụng dd để thực hiện công việc nhưng chèn pv vào chuỗi để theo dõi tốc độ truyền như thế này:dd if=/dev/sda1 | pv | dd of=/dev/sdb1
thomasrutter 21/12/14

4
Tôi đã luôn luôn sử dụng pvở giữa dds. Không bao giờ biết nó có thể được sử dụng độc lập!
korylprince

12

Để sao chép một phân vùng bán buôn, sử dụng catthay vìdd . Tôi đã chạy điểm chuẩn một lúc trước, sao chép một tệp lớn thay vì phân vùng, giữa hai đĩa (trên cùng một đĩa, thời gian tương đối là khác nhau):

dd bs=64M    51.3
dd bs=1M     41.8
dd bs=4k     48.5
dd bs=512    48.9
cat          41.7
cp           45.3

Kết luận từ điểm chuẩn này là việc lựa chọn kích thước khối cho ddcác vấn đề (nhưng không nhiều) và cattự động tìm ra cách tốt nhất để tạo bản sao nhanh: ddchỉ có thể làm bạn chậm lại. Với kích thước khối nhỏ, ddlãng phí thời gian làm mất đi những lần đọc và viết nhỏ. Với kích thước khối lớn, một đĩa không hoạt động trong khi đĩa kia đang đọc hoặc ghi. Tốc độ tối ưu đạt được khi một đĩa đọc trong khi đĩa kia ghi.

Để sao chép một phân vùng, có thể nhanh hơn để sao chép các tệp với cp -a. Điều này phụ thuộc vào có bao nhiêu tệp và bao nhiêu phần của hệ thống tệp là không gian trống. Sao chép tệp có chi phí gần bằng tỷ lệ với số lượng tệp, nhưng mặt khác, sao chép không gian trống sẽ lãng phí thời gian.

Tốc độ dữ liệu tối đa cho USB2 chỉ dưới 50 MB / s, hoạt động trong 6 giờ7 để chuyển 1TB. Điều này giả định rằng một đĩa cứng đủ nhanh để bão hòa bus USB; Tôi nghĩ rằng các ổ đĩa 7200 vòng / phút nhanh hơn có thể làm điều đó nhưng 5900 vòng / phút có thể không nhanh như vậy (có lẽ chúng là dành cho ghi tuyến tính?).

Nếu một trong hai đĩa được sử dụng song song, điều này có thể làm chậm đáng kể việc sao chép vì các đầu đĩa sẽ cần phải di chuyển xung quanh.


Tôi đang cố gắng sao chép toàn bộ đĩa.
Kaz Wolfe

Tôi hy vọng sự khác biệt sẽ có cùng thứ tự, nhưng hãy chạy một điểm chuẩn trên hệ thống của bạn để có được dữ liệu đáng tin cậy hơn.
Gilles 'SO- ngừng trở nên xấu xa'

Có thể catđược sử dụng cho dd if=ubuntu.iso of=/dev/usb? ddTốc độ của việc này đối với USB2 hoặc USB3 rất chậm.
Oxwivi

1
@Oxwivi Vâng, cat ubuntu.iso >/dev/usbhoàn toàn tương đương. Không có phép thuật trong dd, nó chỉ là một công cụ để sao chép đầu vào của nó vào đầu ra của nó.
Gilles 'SO- ngừng trở nên xấu xa'

Lệnh cat đưa ra ở trên không hoạt động trên máy mac. Tôi đã thử sudo cat linuxmint-17.3-cinnamon-64bit.iso >/dev/disk1Gave back "-bash: / dev / đĩa1: Quyền bị từ chối"
Nay

12

Vấn đề là loại kết nối của bạn và kích thước khối. Để có kết quả nhanh nhất, kích thước khối của bạn phải bằng một nửa tốc độ ghi thấp nhất bạn thường nhận được. Điều này sẽ cung cấp cho bạn một mức an toàn, nhưng vẫn cho phép một số lượng lớn; tất nhiên bạn cũng cần có đủ ram để giữ dữ liệu.

USB 2.0 là 12 megabit / giây (Mbps), USB 2.0 tốc độ cao là 480 Mbps. Tất nhiên đây là tốc độ thô; với 8 bit trong một byte và đóng khung trên đầu, tốc độ có thể sử dụng tính bằng MB / s thường là một vị trí thập phân. Vì vậy, ví dụ 480 thô, trở thành 48 MB có thể sử dụng được. Hãy nhớ rằng đây là toán học tốt nhất, trong thế giới thực, nó sẽ thấp hơn một chút. Đối với các kết nối tốc độ cao usb 2.0, bạn nên mong đợi ở đâu đó khoảng 30 - 35 MB tốc độ ghi tối đa, miễn là thiết bị lưu trữ thực tế có thể tương đương hoặc vượt qua tốc độ kết nối.


6
Nitpicking đơn vị: Tốc độ cao USB2.0 là 480 Mbit / s = 60 MByte / s, tốc độ thô. Tốc độ có thể sử dụng không phải là một vị trí thập phân, mà là khoảng 80% tốc độ thô. Tốc độ thực tế "tốc độ thực tế tính bằng MByte / s là 1/10 tốc độ thô tính bằng Mbit / s" là hợp lệ.
jpa

5

Tôi đồng ý rằng tốc độ thô của lệnh được điều chỉnh tốt dd('pv') hoặc 'cat' rất khó để đánh bại, nhưng nếu có bất kỳ vấn đề nào với bản sao (lỗi xấu, mất điện, lỗi người dùng, v.v.) thì bạn phải bắt đầu kết thúc.

Tôi muốn đề xuất ddresTHER - một công cụ FOSS có tất cả tốc độ của dd nhưng nó sẽ hoạt động xung quanh các lỗi đĩa và tiếp tục lại sau đó nếu có lỗi.


2

Tôi đang chuyển Windows 7 từ ổ cứng sang SSD và tìm thấy câu trả lời này và một số câu trả lời khác ... Tôi đã học được điều gì đó có thể giúp người khác. Trong trường hợp của tôi, ổ đĩa nguồn lớn hơn, tôi sẽ làm việc ở cấp thiết bị / dev / sda -> / dev / sdb.

Win7 và 3 phân vùng của nó ... Tôi đã sử dụng cd trực tiếp Xbfox 14.04 trên usb. Xuất hiện DVD của máy tính win và đặt SSD vào vị trí của nó. Đã cài đặt partclone và thử điều này:

partclone.ntfs -b -N -s /dev/sda3 -o /dev/sdb3

Partclone đã bị lỗi trên ntfs cần chkdisk chạy trong Windows, vì vậy một bản sửa lỗi nhanh đã khiến partclone hài lòng:

ntfsfix -b /dev/sda3
ntfsfix -d /dev/sda3

Tất cả các lệnh chạy như root. Giao diện người dùng của Partclone (tùy chọn -N) cho biết việc chuyển tiền là 7GB / phút và kết thúc ở mức 5GB / phút, tương đương với 83MB / giây. Phần tuyệt vời là partclone không sao chép không gian chưa sử dụng, do đó, điều này làm cho bản sao nhanh chóng đáng kể.

Các vấn đề tiềm năng khác:

  • nếu ổ đĩa bạn đang chuyển đến đã được sử dụng trước đó, nó có thể còn sót lại GPT. Các bản cài đặt của nhà máy Windows 7 thường là các bảng phân vùng msdos / mbr. Bạn sẽ cần xóa các đoạn GPT khỏi ổ đĩa đích. Đây Unix & Linux QA giúp tôi với điều này. Bạn phải sử dụng gdisktrên thiết bị, sử dụng x rồi z và có để zap dữ liệu GPT và đảm bảo bạn GIỮ MBR.

  • Và đừng quên nếu bạn không làm dd cấp độ thiết bị, bạn sẽ cần sao chép MBR bằng cách sử dụng
    dd if=/dev/sdb of=/dev/sda bs=446 count=1
    sdb là nguồn hoặc ổ đĩa cũ và sda là đích hoặc ổ đĩa mới ( nguồn )


1

Gần đây tôi đã tạo một hình ảnh của phân vùng 100 GB (HDD) và ghi nó vào đĩa SSD mới.

Đây là một mẹo có thể tăng tốc đáng kể quá trình :)

Chia tệp thành các phần nhỏ hơn (tệp càng lớn thì hoạt động càng chậm)

sudo dd if=/dev/sda3 conv=sync,noerror bs=2M | split -a 3 -d -b 1G - /maindisk.img

Trong quá trình, bạn có thể kiểm tra tốc độ bằng cách sử dụng (trong thiết bị đầu cuối riêng biệt)

pgrep -l '^dd$' #to find PROCESSID
kill -USR1 PROCESSID #to check the speed

Sau đó, khi bạn có một thư mục chứa đầy các tệp kết quả (maindisk.img000, maindisk.img001, v.v.) hãy sử dụng

sudo cat maindisk.img* | sudo dd of=/dev/sda1

để 'ghi' hình ảnh vào partiton mới của SSD (parition phải có cùng kích thước với hình ảnh cũ)

Đối với tôi nó hoạt động nhanh hơn so với cách thông thường (không chia tách). Tốc độ trung bình của việc tạo hình ảnh là ~ 13MB / s. Khi tôi sử dụng cách 'bình thường', nó bắt đầu với ~ 15MB / s và sau đó giảm xuống 1MB / s.


1
Tại sao việc viết một tệp lớn thay vì nhiều tệp nhỏ hơn sẽ chậm hơn? Loại hệ thống tệp mục tiêu và cờ gắn kết của nó là gì?
David Foerster

Cũng conv=syncgây bất lợi cho hiệu suất và khá vô dụng trong trường hợp sử dụng này.
David Foerster

0

Đối với bất kỳ ai tìm thấy chủ đề này, việc sử dụng một công cụ được thiết kế để phục hồi dữ liệu như ddresTHER sẽ dễ dàng và nhanh hơn nhiều . Nó cố gắng cứu những phần tốt trước trong trường hợp đọc lỗi. Ngoài ra, bạn có thể làm gián đoạn cuộc giải cứu bất cứ lúc nào và tiếp tục lại sau đó tại cùng một điểm.

Chạy nó hai lần:

Vòng đầu tiên, sao chép mọi khối mà không đọc lỗi và ghi lại các lỗi để cứu.log.

sudo ddrescue -f -n /dev/sdX /dev/sdY rescue.log

Vòng thứ hai, chỉ sao chép các khối xấu và thử 3 lần để đọc từ nguồn trước khi bỏ cuộc.

sudo ddrescue -d -f -r3 /dev/sdX /dev/sdY rescue.log

Bây giờ bạn có thể gắn ổ đĩa mới và kiểm tra hệ thống tập tin xem có bị hỏng không.

Thông tin thêm:
https://www.gnu.org/software/ddresTHER/manual/ddresTHER_manual.html


0

Id khuyên bạn nên nhập / đọc - tệp / đĩa trên SATA để tăng tốc độ đọc. Tốc độ cao của USB 2.0 cũng rất tốt vì tôi nhận được tốc độ trung bình 33816 kb / giây với ddresTHER so với khi cài đặt là USB 2.0 sang SATA ở mức 2014 kb / s


0

Sử dụng một kích thước khối khác nhau. Đó là lượng dữ liệu ddđọc tại một thời điểm. Nếu đọc quá ít, phần lớn thời gian sẽ dành cho logic chương trình và nếu đọc quá nhiều, sẽ mất nhiều thời gian để di chuyển dữ liệu lớn xung quanh.

Để đo tốc độ ở các kích thước khối khác nhau, hãy sử dụng bashtập lệnh sau :

  • đặt $devvào thiết bị
  • sửa chữa cbtotalít nhất gấp 5 lần tốc độ đọc dự kiến ​​của bạn
    (set -o errexit; skip=0; cbtotal=$((120*1024**2)); bs=256;
    for power in `seq 10`; do
      bs=$((bs*2)); skip=$((skip/2)); count=$((cbtotal/bs));
      if [ "$count" -lt 1 ]; then break; fi;
      echo $bs;
      dd if=$dev of=/dev/null skip=$skip bs=$bs count=$count
      skip=$((skip+count))
    done)

Kết quả có thể bị sai lệch về kích thước lớn hơn do đĩa đọc trước - đó là lý do tại sao điều quan trọng là phải đặt cbtotalđủ lớn.

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.