Có cách nào để tăng tốc ddresTHER không?


26

Tôi đã gặp sự cố ổ cứng 500 GB khoảng 5 ngày trước. Tôi đã sử dụng ddrescuetrên phân vùng quan trọng một vài ngày trước và nó đã được "Cắt các khối không thành công" trong gần 2 ngày nay.

Lệnh gốc:

ddrescue -n /dev/rdisk1s2 /Volumes/OSXBackup/rdisk1s2.img /Volumes/OSXBackup/rdisk1s2.log

Sản lượng hiện tại:

Initial status (read from logfile)
rescued:   248992 MB,  errsize:   1007 MB,  errors:   15867
Current status
rescued:   249021 MB,  errsize:    978 MB,  current rate:    17408 B/s
   ipos:    44405 MB,   errors:   15866,    average rate:     2784 B/s
   opos:    44405 MB,     time from last successful read:       0 s
Trimming failed blocks...

Lệnh ban đầu đã sử dụng ddrescue -ntham số và tôi đã khởi động lại quá trình một vài lần khi cần thiết (và dường như nó sẽ chọn đúng nơi nó rời đi mỗi lần).

Có cách nào để tăng tốc quá trình này?

Chỉnh sửa: Sáu giờ sau, đây là trạng thái hiện tại:

rescued:   249079 MB,  errsize:    920 MB,  current rate:      409 B/s
   ipos:    39908 MB,   errors:   15851,    average rate:     2698 B/s
   opos:    39908 MB,     time from last successful read:       0 s
Trimming failed blocks...

Có vẻ như trong khi "lỗi" đang đếm ngược chậm chạp, thì ipose / opos đang đếm ngược xem nó phải chuyển bao nhiêu dữ liệu và dường như nó đang hoạt động với tốc độ 750MB / giờ. Với tốc độ này, nó sẽ hoàn thành trong ~ 53 giờ. Rất tiếc.

Chỉnh sửa # 2: Hai ngày sau, vẫn chạy. Tuy nhiên, có hy vọng. Nó đã chuyển qua phần "Cắt xén các khối thất bại" và chuyển sang giai đoạn tiếp theo "Tách các khối thất bại". Nếu có bất cứ điều gì, những gì nên được đưa ra khi xem câu hỏi này là điều này chắc chắn sẽ mất một thời gian dài khi một lượng lớn dữ liệu / lỗi có liên quan. Hy vọng duy nhất của tôi là tôi có thể khôi phục thành công một số dữ liệu quan trọng khi tất cả được nói và thực hiện.

rescued:   249311 MB,  errsize:    688 MB,  current rate:        0 B/s
ipos:    26727 MB,   errors:   15905,    average rate:     1331 B/s
opos:    26727 MB,     time from last successful read:      20 s
Splitting failed blocks...

2
Đó là bởi thiết kế, rất có thể. Nó thực hiện nhiều lần để trích xuất càng nhiều dữ liệu càng tốt
Journeyman Geek

17
Đổ một ổ cứng nhỏ hơn vào lần tới ;-)
Joey

4TB của tôi đã mất 3 tuần để đến giai đoạn Cắt tỉa ... (Tôi khá chắc chắn rằng tất cả đã được sao lưu, nhưng không đau để giải cứu;)) ... và cảm ơn @nza, tôi chỉ hy vọng Tôi sẽ kết thúc vào Giáng sinh
Stephen

Chà ... sáng nay tôi đã tính toán khoảng một tuần để đi dựa trên tốc độ cắt tỉa và voila! Xong rôi! Vì vậy, ~ 3 tuần để cắt tỉa và ~ 3 tuần cắt tỉa. Quét rất nhanh mặc dù nó là 1,93% dữ liệu - Tôi đoán dữ liệu tốt và xấu là nhanh ... chỉ là giữa chậm kinh khủng? (Tôi đang chạy lại -Mchỉ trong trường hợp sáng nay khởi động lại và nâng cấp đã tạo ra một số thứ lộn xộn)
Stephen

Câu trả lời:


14

Tôi quan sát thấy rằng sử dụng -ntùy chọn (không phân chia) cùng với -r 1(thử lại một lần) và cài đặt -c(kích thước cụm) thành một giá trị nhỏ hơn có thể giúp ích.

Ấn tượng của tôi là bước chia tách rất chậm khi ddrescuetách và tách lại các khu vực bị hư hỏng. Điều này mất rất nhiều thời gian vì ddrescuecố gắng khôi phục các phần dữ liệu rất nhỏ. Vì vậy, tôi thích sử dụng -n(không-chia) cùng với -c 64, -c 32, -c 16, aso

Có lẽ -n(không phân chia) phải luôn được sử dụng cho một lần đầu tiên theo hướng thuận và ngược. Dường như dữ liệu được chia càng nhiều, việc nhân bản càng chậm, mặc dù tôi không chắc về điều này. Tôi giả sử các khu vực không được xử lý càng lớn, tốt nhất khi chạy ddrescuelại, bởi vì các khu vực tiếp giáp nhiều hơn sẽ được nhân bản.

Khi tôi đang sử dụng một logfile, tôi không ngần ngại hủy lệnh bằng Ctrl+ Ckhi tốc độ đọc dữ liệu trở nên thấp.

Tôi cũng sử dụng -Rchế độ (Đảo ngược) và sau lần vượt qua đầu tiên, nó thường cho tôi tốc độ đọc ngược cao hơn so với chuyển tiếp.

Tôi không rõ các khu vực đã thử lại ( -r N) đã được xử lý như thế nào khi chạy lại ddrescuelệnh, đặc biệt là khi xen kẽ -Rcác lệnh nhân bản chuyển tiếp (mặc định) và đảo ngược ( ). Tôi không chắc chắn nếu số lần họ đã thử được lưu trữ trong logfile và có lẽ công việc được thực hiện lại vô dụng.

Có lẽ -icờ (vị trí đầu vào) cũng có thể giúp tăng tốc mọi thứ.


8

Có thể rất khó để xem tiến trình của ddrescue, nhưng có một lệnh khác được gọi ddrescuelog.

Một lệnh đơn giản ddrescuelog -t YourLog.txtsẽ xuất ra các infos đẹp này:

current pos:     2016 GB,  current status: trimming
domain size:     3000 GB,  in    1 area(s)
rescued:     2998 GB,  in 12802 area(s)  ( 99.91%)
non-tried:         0 B,  in    0 area(s)  (  0%)

errsize:     2452 MB,  errors:   12801  (  0.08%)
non-trimmed:   178896 kB,  in 3395 area(s)  (  0.00%)
non-split:     2262 MB,  in 9803 area(s)  (  0.07%)
bad-sector:    10451 kB,  in 19613 area(s)  (  0.00%)

Bạn thậm chí có thể sử dụng nó trong khi ddrescueđang chạy ...


3 tuần để nhận 4TB của tôi để cắt tỉa : errsize: 289420 MB, errors: 34926 ( 7.23%) non-trimmed: 288130 MB, in 105407 area(s) ( 7.20%) non-split: 1243 MB, in 185 area(s) ( 0.03%) bad-sector: 47490 kB, in 92728 area(s) ( 0.00%); (... nhưng cảm ơn rất nhiều vì lệnh!
Stephen

4

Một cách nữa để theo dõi tiến trình của ddresTHER (trên Linux, ít nhất) là thông qua việc sử dụng strace.

Đầu tiên, tìm PID cho quá trình ddresTHER bằng cách sử dụng "ps aux | grep ddresTHER"

root@mojo:~# ps aux | grep ddrescue
root     12083  0.2  0.0  15764  3248 pts/1    D+   17:15   0:04 ddrescue --direct -d -r0 /dev/sdb1 test.img test.logfile
root     12637  0.0  0.0  13588   940 pts/4    S+   17:46   0:00 grep --color=auto ddrescue

Sau đó chạy "strace" chống lại quá trình đó. Bạn sẽ thấy một cái gì đó như:

root@mojo:~# strace -p 12083
Process 12083 attached - interrupt to quit
lseek(4, 1702220261888, SEEK_SET)       = 1702220261888
write(4, "\3101\316\335\213\217\323\343o\317\22M\346\325\322\331\3101\316\335\213\217\323\343o\317\22M\346\325\322\331"..., 512) = 512
lseek(3, 1702220261376, SEEK_SET)       = 1702220261376
read(3, "\3101\316\335\213\217\323\343o\317\22M\346\325\322\331\3101\316\335\213\217\323\343o\317\22M\346\325\322\331"..., 512) = 512
lseek(4, 1702220261376, SEEK_SET)       = 1702220261376
write(4, "\3101\316\335\213\217\323\343o\317\22M\346\325\322\331\3101\316\335\213\217\323\343o\317\22M\346\325\322\331"..., 512) = 512
^C

... và cứ thế. Đầu ra nhanh và xấu, vì vậy tôi sau đó chuyển nó qua "grep" để lọc ra những thứ tôi quan tâm:

root@mojo:/media/u02/salvage# nice strace -p 12083 2>&1|grep lseek
lseek(4, 1702212679168, SEEK_SET)       = 1702212679168
lseek(3, 1702212678656, SEEK_SET)       = 1702212678656
lseek(4, 1702212678656, SEEK_SET)       = 1702212678656
lseek(3, 1702212678144, SEEK_SET)       = 1702212678144
lseek(4, 1702212678144, SEEK_SET)       = 1702212678144
lseek(3, 1702212677632, SEEK_SET)       = 1702212677632
lseek(4, 1702212677632, SEEK_SET)       = 1702212677632
lseek(3, 1702212677120, SEEK_SET)       = 1702212677120
lseek(4, 1702212677120, SEEK_SET)       = 1702212677120
lseek(3, 1702212676608, SEEK_SET)       = 1702212676608
^C

Trong ví dụ đó, "1702212676608" tương đương với "lượng dữ liệu vẫn cần được xử lý trên đĩa 2 Tb mà bạn đang cố gắng cứu vãn". (Yeah. Ouch.) DdresTHER đang tạo ra một số tương tự - mặc dù là "1720 GB" - trong đầu ra màn hình của nó.

strace cung cấp cho bạn một luồng dữ liệu chi tiết cao hơn NHIỀU để bạn kiểm tra; đó là một cách nữa để đánh giá tốc độ của ddresTHER và ước tính ngày hoàn thành.

Chạy nó liên tục có lẽ là một kế hoạch tồi vì nó sẽ cạnh tranh với ddresTHER cho thời gian CPU. Tôi đã đưa đường ống đến "đầu" để tôi có thể lấy 10 giá trị đầu tiên:

root@mojo:~# strace -p 4073 2>&1 | grep lseek | head

Hy vọng điều này sẽ giúp được ai đó.


strace -e lseek …điều đó - mặc dù pv -d <pid>có thể đẹp hơn.
grawity

3

Nếu mục đích của bạn là lấy được phần lớn dữ liệu nguyên vẹn, thì bạn có thể tăng tốc độ trích xuất của nó. Nhưng nếu bạn thực sự muốn cứu càng nhiều dữ liệu càng tốt, thì hãy để ddrecue nibble ở mỗi và mọi thứ là tuyến đường cần thực hiện.


2
Làm thế nào chính xác để làm điều đó?
William Entriken

3

Tôi đã thấy rằng chơi với tham số -K bạn có thể tăng tốc mọi thứ. Từ những gì tôi đã thấy nếu ddresTHER phát hiện ra lỗi khi chạy với tùy chọn -n cố gắng nhảy một số lượng cố định của các cung. Nếu nó vẫn không thể đọc được thì nó sẽ tăng gấp đôi kích thước. Nếu bạn có các khu vực bị hư hỏng lớn, bạn có thể chỉ ra giá trị K lớn (ví dụ 100M) và do đó lần đầu tiên xảy ra lỗi sẽ lớn hơn và sẽ dễ dàng tránh được các khu vực có vấn đề nhanh chóng.

Nhân tiện, có một ứng dụng đồ họa tuyệt vời để phân tích nhật ký.

http://sourceforge.net/projects/ddrescueview/


0

Hệ thống tập tin của đĩa cứng nơi bạn lưu hình ảnh cứu hộ và logfile là gì? Tôi vừa thực hiện trải nghiệm giải cứu ổ cứng nội bộ 500 GB (được kết nối qua SATA) trên Máy tính xách tay chạy Linux Mint từ USB Stick, lưu hình ảnh cứu hộ và logfile trên exFatổ cứng USB được định dạng, bắt đầu khá chậm (1-2MB / giây) nhưng sau khoảng 250GB, nó chỉ thu thập dữ liệu ở mức <100KB / giây. Nó dường như trở nên chậm hơn khi tập tin hình ảnh giải cứu càng lớn.

Sau đó, tôi di chuyển hình ảnh cứu hộ và logfile sang một nơi tạm thời khác, định dạng lại ổ cứng USB với ext4hệ thống tệp, di chuyển các tệp trở lại trên đó và tiếp tục quá trình ddresTHER - và bây giờ nó chạy lại với tốc độ 1-20MB / giây nhưng trung bình khoảng 7MB / giây)!

Có vẻ như exFatkhông chơi rất tốt với các tệp rất lớn (vài trăm gigabyte).


0

Để có tùy chọn nhanh hơn và nhanh hơn để cứu đĩa, bạn có thể sử dụng tệp sh script và chạy tệp với "sh filename.sh". Nó chứa dòng này được hiển thị, chỉ cần lặp lại "sudo ddresTHER" và "ngủ 3" thêm vài lần nữa, giấc ngủ được sử dụng để làm cho ổ đĩa nghỉ vài giây, nó có thể tốt cho một số lý do:

#! /bin/sh -e  
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

-R0 không có phản hồi. -E +0 là để thoát trên 1 lỗi. Các -T 1 thoát với 1 giây không đọc được. Có các tùy chọn có thể được sử dụng như -d cho trực tiếp và -n cho không có scrape nào có thể tăng tốc.

Bạn có thể sử dụng -R sau khi kết thúc với tùy chọn -A một lần, điều đó sẽ đảo ngược và loại bỏ tất cả lỗi và bắt đầu lại từ đầu. Có nghĩa là nó sẽ đọc lỗi khác nhau.


-1

dd_rhelp là tập lệnh shell sử dụng dd_resTHER "[...] trên toàn bộ đĩa của bạn, NHƯNG nó sẽ cố gắng thu thập dữ liệu hợp lệ tối đa trước khi thử trong nhiều năm với các lỗi xấu"

nó khá cũ (2012) nhưng vẫn hoạt động. chưa thử ddresTHER.


Câu hỏi là về GNU ddresTHER (KHÔNG phải dd_resTHER), đây chính xác là một sự thay thế cải tiến của tập lệnh này.
kinokijuf
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.