Saya mengalami kecelakaan drive HDD 500GB sekitar 5 hari yang lalu. Saya menggunakan ddrescue
pada 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 -n
parameter, 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...
sumber
-M
berjaga-jaga kalau-kalau reboot dan dist-upgrade pagi ini membuat semacam kekacauan)Jawaban:
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
ddrescue
membelah dan membelah lagi area yang rusak. Ini membutuhkan banyak waktu karenaddrescue
mencoba mengembalikan bagian data yang sangat kecil. Jadi, saya lebih suka menggunakan-n
(no-split) bersama-sama dengan-c 64
,-c 32
,-c 16
, asoMungkin
-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 berjalanddrescue
lagi, 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
-R
mode (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 menjalankanddrescue
perintah 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
-i
bendera (posisi input) dapat membantu mempercepat segalanya.sumber
Ini bisa sangat sulit untuk melihat kemajuan
ddrescue
, tetapi ada perintah lain termasuk dipanggilddrescuelog
.Perintah sederhana
ddrescuelog -t YourLog.txt
akan menampilkan info bagus ini:Anda bahkan dapat menggunakannya saat
ddrescue
sedang menjalankan ...sumber
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!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"
Kemudian jalankan "strace" terhadap proses itu. Anda akan melihat sesuatu seperti:
...dan seterusnya. Outputnya cepat dan jelek, jadi saya kemudian menyalurkannya melalui "grep" untuk menyaring hal-hal yang saya pedulikan:
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:
Semoga ini bisa membantu seseorang.
sumber
strace -e lseek …
untuk itu - meskipunpv -d <pid>
mungkin lebih cantik.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.
sumber
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/
sumber
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
exFat
hard 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
ext4
sistem 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
exFat
tidak bermain dengan sangat baik dengan file yang sangat besar (beberapa ratus gigabytes).sumber
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:
-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.
sumber
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.
sumber