Apakah ada cara untuk mempercepat ddrescue?


26

Saya mengalami kecelakaan drive HDD 500GB sekitar 5 hari yang lalu. Saya menggunakan ddrescuepada partisi penting beberapa hari yang lalu, dan sudah di "Memotong blok gagal" selama hampir 2 hari sekarang.

Perintah asli:

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

Keluaran saat ini:

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...

Perintah asli menggunakan ddrescue -nparameter, dan saya telah me-restart proses beberapa kali sesuai kebutuhan (dan sepertinya mengambil tepat di mana ia tinggalkan setiap kali).

Apakah ada cara untuk mempercepat proses ini?

Sunting: Enam jam kemudian, ini adalah status saat ini:

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...

Tampaknya "kesalahan" menghitung mundur dengan sangat lambat, ipos / opos menghitung mundur berapa banyak data yang harus diaduk, dan tampaknya berfungsi pada kecepatan 750MB / jam. Pada tingkat ini, itu akan selesai dalam ~ 53 jam. Astaga.

Sunting # 2: Dua hari kemudian, masih berjalan. Namun, ada harapan. Itu telah pindah melewati bagian "Memotong blok yang gagal", dan ke fase berikutnya "Memisahkan blok yang gagal". Jika ada, apa yang harus diambil dari melihat pertanyaan ini adalah bahwa ini pasti memakan waktu lama ketika sejumlah besar data / kesalahan terlibat. Satu-satunya harapan saya adalah saya bisa berhasil memulihkan beberapa data penting ketika semua dikatakan dan dilakukan.

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
Secara desain, kemungkinan besar. Ia melakukan beberapa operan untuk mengekstrak data sebanyak mungkin
Journeyman Geek

17
Hancurkan hard drive yang lebih kecil waktu berikutnya ;-)
Joey

4TB saya telah mengambil 3 minggu untuk sampai ke fase Trimming ... (Saya cukup yakin itu semua didukung, tetapi tidak ada salahnya untuk menyelamatkan;)) ... dan terima kasih kepada @nza, saya hanya berharap Saya akan selesai pada Natal
Stephen

Nah ... pagi ini saya menghitungnya sekitar seminggu untuk pergi berdasarkan kecepatan pemangkasan, dan voila! Selesai! Jadi ~ 3 minggu untuk sampai trimming dan ~ 3 minggu trimming. Menggores benar-benar cepat meskipun itu adalah 1,93% data - saya kira data baik dan buruknya cepat ... hanya di antara lambatnya? (Saya menjalankan lagi dengan -Mberjaga-jaga kalau-kalau reboot dan dist-upgrade pagi ini membuat semacam kekacauan)
Stephen

Jawaban:


14

Saya mengamati bahwa menggunakan opsi -n(tanpa-perpecahan) bersama dengan -r 1(coba lagi sekali) dan pengaturan -c(ukuran cluster) ke nilai yang lebih kecil dapat membantu.

Kesan saya adalah bahwa langkah membelah sangat lambat karena ddrescuemembelah dan membelah lagi area yang rusak. Ini membutuhkan banyak waktu karena ddrescuemencoba mengembalikan bagian data yang sangat kecil. Jadi, saya lebih suka menggunakan -n(no-split) bersama-sama dengan -c 64, -c 32, -c 16, aso

Mungkin -n(no-split) harus selalu digunakan untuk satu lintasan pertama maju dan mundur. Tampaknya semakin banyak data terpecah, semakin lambat kloning, meskipun saya tidak yakin tentang ini. Saya berasumsi semakin besar area yang tidak dirawat, yang terbaik ketika berjalan ddrescuelagi, karena lebih banyak sektor yang berdekatan akan dikloning.

Karena saya menggunakan file log, saya tidak ragu untuk membatalkan perintah dengan Ctrl+ Cketika kecepatan membaca data menjadi dua rendah.

Saya juga menggunakan -Rmode (Terbalik) dan setelah lulus pertama sering memberi saya kecepatan membaca yang lebih tinggi daripada maju.

Tidak jelas bagi saya bagaimana sektor yang telah dicoba ulang ( -r N) ditangani saat menjalankan ddrescueperintah lagi, terutama ketika berganti perintah maju (default) dan membalikkan ( -R) kloning. Saya tidak yakin apakah berapa kali mereka dicoba disimpan dalam logfile dan mungkin pekerjaan dilakukan lagi tidak berguna.

Mungkin -ibendera (posisi input) dapat membantu mempercepat segalanya.


8

Ini bisa sangat sulit untuk melihat kemajuan ddrescue, tetapi ada perintah lain termasuk dipanggil ddrescuelog.

Perintah sederhana ddrescuelog -t YourLog.txtakan menampilkan info bagus ini:

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%)

Anda bahkan dapat menggunakannya saat ddrescuesedang menjalankan ...


3 minggu untuk mendapatkan 4TB saya untuk sampai ke Trimming:; 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%)(... tapi terima kasih banyak atas perintahnya!
Stephen

4

Satu lagi cara untuk memantau kemajuan ddrescue (di Linux, setidaknya) adalah melalui penggunaan strace.

Pertama, cari PID untuk proses ddrescue menggunakan "ps aux | grep ddrescue"

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

Kemudian jalankan "strace" terhadap proses itu. Anda akan melihat sesuatu seperti:

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

...dan seterusnya. Outputnya cepat dan jelek, jadi saya kemudian menyalurkannya melalui "grep" untuk menyaring hal-hal yang saya pedulikan:

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

Dalam contoh itu, "1702212676608" sama dengan "jumlah data yang masih perlu diproses pada disk 2 Tb yang Anda coba selamatkan." (Ya. Aduh.) Ddrescue mengeluarkan angka yang sama - meskipun "1720 GB" - dalam output layarnya.

strace memberi Anda aliran data granularitas JAUH lebih tinggi untuk Anda periksa; itu satu cara lagi untuk mengevaluasi kecepatan ddrescue dan memperkirakan tanggal penyelesaian.

Menjalankannya secara konstan mungkin merupakan rencana yang buruk karena akan bersaing dengan ddrescue untuk waktu CPU. Saya mengambil piping ke "head" sehingga saya bisa mengambil 10 nilai pertama:

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

Semoga ini bisa membantu seseorang.


Ada strace -e lseek …untuk itu - meskipun pv -d <pid>mungkin lebih cantik.
grawity

3

Jika tujuan Anda adalah untuk mendapatkan sebagian besar data utuh, maka Anda dapat mempercepat ekstraksinya. Tetapi jika Anda benar-benar ingin menyelamatkan data sebanyak mungkin, maka biarkan ddrecue menggigit di masing-masing dan setiap rute yang harus diambil.


2
Bagaimana tepatnya melakukan itu?
William Entriken

3

Saya telah menemukan bahwa bermain dengan parameter -K Anda dapat mempercepat. Dari apa yang saya lihat jika ddrescue menemukan kesalahan saat menjalankan dengan opsi -n mencoba untuk melompat sejumlah sektor. Jika masih tidak bisa membacanya melompat dua kali lipat. Jika Anda memiliki area yang rusak besar, Anda dapat menunjukkan nilai K yang besar (misalnya 100M) dan melompat pada kesalahan akan lebih besar saat pertama kali dan akan lebih mudah untuk menghindari area yang bermasalah dengan cepat di masa lalu.

Omong-omong, ada aplikasi grafis yang bagus untuk menganalisis log.

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


0

Apa sistem file hard disk tempat Anda menyimpan gambar cadangan dan file log? Saya baru saja membuat pengalaman bahwa menyelamatkan hard drive internal 500GB (terhubung melalui SATA) pada Laptop yang menjalankan Linux Mint dari USB Stick, menyimpan gambar penyelamatan dan logfile pada exFathard drive USB yang diformat, mulai agak lambat (1-2MB / detik) tetapi setelah sekitar 250GB itu hanya merangkak di <100KB / detik. Tampaknya menjadi lebih lambat semakin besar file gambar penyelamatan tumbuh.

Kemudian saya memindahkan gambar rescue dan logfile ke tempat sementara lain, memformat ulang hard drive USB dengan ext4sistem file, memindahkan file kembali ke sana dan melanjutkan proses ddrescue - dan sekarang berjalan dengan 1-20MB / detik lagi (berfluktuasi) tapi rata-rata sekitar 7MB / detik)!

Sepertinya exFattidak bermain dengan sangat baik dengan file yang sangat besar (beberapa ratus gigabytes).


0

Untuk opsi yang lebih cepat dan cepat untuk menyelamatkan disk, Anda dapat menggunakan file skrip sh dan menjalankan file dengan "sh filename.sh". Ini berisi baris ini yang ditunjukkan, ulangi saja "sudo ddrescue" dan "sleep 3" beberapa kali lagi, sleep digunakan untuk membuat drive beristirahat beberapa detik, ini bisa bagus karena beberapa alasan:

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

-R0 adalah tanpa balasan. -E +0 untuk keluar pada 1 kesalahan. -T 1 keluar dengan 1 detik gagal dibaca. Ada beberapa opsi yang dapat digunakan sebagai -d untuk direct dan -n tanpa scrape yang dapat mempercepat.

Anda dapat menggunakan -R setelah selesai dengan opsi -A sekali, yang akan membalikkan dan menghapus semua ukuran kesalahan dan mulai lagi mundur. Berarti itu akan membaca kesalahan secara berbeda.


-1

dd_rhelp adalah skrip shell yang menggunakan dd_rescue "[...] pada seluruh disk Anda, TETAPI itu akan mencoba untuk mengumpulkan data yang valid maksimum sebelum mencoba selama bertahun-tahun pada banyak badsektor"

ini cukup tua (2012) tetapi masih berfungsi. belum mencoba ddrescue.


Pertanyaannya adalah tentang GNU ddrescue (BUKAN dd_rescue), yang tepatnya merupakan perbaikan penggantian skrip ini.
kinokijuf
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.