Latar belakang / konteks:
Saat ini saya sedang menjalankan GNU ddrescue 1.18.1 untuk memulihkan data dari USB yang mengalami pemutusan kabel saat saya sedang menulis gambar disk virtual ke partisi disk2s1. Awalnya saya memulihkan partisi kedua saya (disk2s2) dan perhatikan bahwa saya telah mencapai tahap ketiga (Memisahkan). Saya menempatkan gambar ke penyimpanan jaringan.
Pertanyaan:
Saya perhatikan bahwa fase ini berulang. Apakah ada cara untuk menghitung jumlah loop yang mungkin saya alami, mengingat informasi status saya saat ini (saya hanya menunjukkan dua kesalahan)?
Status:
Perbarui / Edit:
Jadi saya masih sangat tertarik pada bagaimana seseorang dapat memperkirakan loop / waktu untuk penyelesaian menggunakan alat ddrescue. Per komentar, saya menambahkan evaluasi file log untuk partisi disk2s1 saya karena sedang berjalan (disk2s2 telah selesai setelah 14,5 jam, dengan satu gangguan pengguna selama sekitar 6 jam).
Log Partisi yang Selesai
Untuk partisi yang baru saja selesai, berikut adalah hasil pemeriksaan log.
Referensi (catatan algoritme ddrescue):
4 Algoritma
GNU ddrescue bukan merupakan turunan dari dd, juga tidak terkait dengan dd dengan cara apa pun kecuali bahwa keduanya dapat digunakan untuk menyalin data dari satu perangkat ke perangkat lainnya. Perbedaan utama adalah bahwa ddrescue menggunakan algoritma yang canggih untuk menyalin data dari drive yang gagal menyebabkan kerusakan sesedikit mungkin.
Ddrescue mengelola secara efisien status penyelamatan yang sedang berlangsung dan mencoba menyelamatkan bagian yang baik terlebih dahulu, penjadwalan membaca di dalam area yang buruk (atau lambat) untuk nanti. Ini memaksimalkan jumlah data yang akhirnya dapat dipulihkan dari drive yang gagal.
Utilitas dd standar dapat digunakan untuk menyimpan data dari drive yang gagal, tetapi membaca data secara berurutan, yang mungkin aus drive tanpa menyelamatkan apa pun jika kesalahan ada di awal drive.
Program lain membaca data secara berurutan tetapi beralih ke pembacaan ukuran kecil ketika mereka menemukan kesalahan. Ini adalah ide yang buruk karena itu berarti menghabiskan lebih banyak waktu di area kesalahan, merusak permukaan, kepala dan mekanisme penggerak, alih-alih keluar secepat mungkin. Perilaku ini mengurangi kemungkinan penyelamatan data baik yang tersisa.
Algoritma ddrescue adalah sebagai berikut (pengguna dapat mengganggu proses pada titik mana pun, tetapi perlu diketahui bahwa drive yang buruk dapat memblokir ddrescue untuk waktu yang lama sampai kernel menyerah):
1) Secara opsional, baca file log yang menjelaskan status penyelamatan multi-bagian atau yang sebelumnya terputus. Jika tidak ada file log yang ditentukan atau kosong atau tidak ada, tandai semua domain penyelamatan sebagai tidak dicoba.
2) (Fase pertama; Menyalin) Baca bagian-bagian yang tidak dicoba dari file input, tandai blok yang gagal sebagai tidak terpangkas dan melompati di luarnya. Lewati juga di luar area yang lambat. Area yang dilewati akan dicoba kemudian dalam dua lintasan tambahan (sebelum pemotongan), membalikkan arah setelah setiap lintasan sampai semua domain penyelamatan dicoba. Pass ketiga adalah sweeping pass, dengan lompatan dinonaktifkan. (Tujuannya adalah untuk membatasi kesalahan besar dengan cepat, menjaga logfile tetap kecil, dan menghasilkan titik awal yang baik untuk pemangkasan). Hanya area yang belum dicoba dibaca dalam blok besar. Pemangkasan, pemisahan dan coba lagi dilakukan sektor demi sektor. Setiap sektor paling banyak dicoba dua kali; yang pertama dalam langkah ini (biasanya sebagai bagian dari blok besar dibaca, tetapi kadang-kadang sebagai sektor tunggal dibaca), yang kedua di salah satu langkah di bawah ini sebagai sektor tunggal dibaca.
3) (Fase kedua; Pemangkasan) Baca maju satu sektor pada satu waktu dari tepi terkemuka dari blok non-terpangkas terkecil, sampai sektor yang buruk ditemukan. Kemudian baca mundur satu sektor pada satu waktu dari tepi trailing dari blok yang sama, sampai ditemukan sektor yang buruk. Untuk setiap blok yang tidak dipangkas, tandai sektor buruk yang ditemukan sebagai sektor buruk dan tandai sisa blok tersebut sebagai non-split tanpa mencoba membacanya. Ulangi sampai tidak ada lagi blok yang tidak terpangkas. (Blok non-trim besar diproduksi oleh gabungan dari yang lebih kecil, dan fraksi data yang baik di tepi karenanya lebih kecil).
4) (Tahap ketiga; Pemisahan) Baca maju satu sektor pada satu waktu dari pusat blok non-split terbesar, sampai ditemukan sektor yang buruk. Kemudian, jika bad sector ditemukan bukan yang pertama dicoba, baca mundur satu per satu sektor dari pusat blok yang sama, sampai ditemukan bad sector. Jika logfile lebih besar dari '--logfile-size', baca secara berurutan blok non-split terbesar sampai jumlah entri dalam logfile turun di bawah '--logfile-size'. Ulangi sampai semua blok non-split yang tersisa memiliki kurang dari 7 sektor. Kemudian baca sisa blok non-split secara berurutan.
5) (Fase keempat; Coba lagi) Secara opsional cobalah membaca lagi bad sector sampai jumlah yang ditentukan coba lagi tercapai. Setiap bad sector dicoba hanya sekali dalam setiap pass. Ddrescue tidak dapat mengetahui apakah sektor yang buruk tidak dapat dipulihkan atau apakah pada akhirnya akan dibaca setelah beberapa percobaan ulang.
6) Secara opsional menulis file log untuk digunakan nanti.
Ukuran kesalahan total ('errsize') adalah jumlah dari semua blok yang tidak dipangkas, tidak terpecah dan sektor buruk. Ini meningkat selama fase penyalinan dan dapat berkurang selama pemangkasan, pemisahan, dan coba lagi. Perhatikan bahwa saat ddrescue memecah blok yang gagal, membuatnya lebih kecil, ukuran kesalahan total dapat berkurang sementara jumlah kesalahan meningkat.
File log secara berkala disimpan ke disk, juga ketika ddrescue selesai atau terganggu. Jadi jika terjadi kecelakaan, Anda dapat melanjutkan penyelamatan dengan sedikit penyalinan ulang. Interval antara penyimpanan bervariasi dari 30 detik hingga 5 menit tergantung pada ukuran file log (file log yang lebih besar disimpan pada interval yang lebih lama).
Juga, file log yang sama dapat digunakan untuk beberapa perintah yang menyalin area berbeda dari file input, dan untuk beberapa upaya pemulihan melalui subset yang berbeda. Lihat contoh ini:
Pertama-tama, selamatkan bagian terpenting dari disk. ddrescue -i0 -s50MiB / dev / hdc hdimage logfile ddrescue -i0 -s1MiB -d -r3 / dev / hdc hdimage logfile
Kemudian selamatkan beberapa area disc utama. ddrescue -i30GiB -s10GiB / dev / hdc hdimage logfile ddrescue -i230GiB -s5GiB / dev / hdc hdimage logfile
Sekarang selamatkan sisanya (tidak menyalin kembali apa yang sudah dilakukan). ddrescue / dev / hdc hdimage logfile ddrescue -d -r3 / dev / hdc hdimage logfile
ddrescuelog -t YourLog.txt
di terminal lain?
ddrescue
hanya dapat mencoba memulihkan masalah fisik dan tidak akan membantu dengan kesalahan logis sama sekali. Untuk yang terakhir, coba fsck
atau sama-sama ..
ddrescue
hanya perlu jika disk memiliki blok buruk, yang tidak akan disebabkan oleh "kabel putus". Jika Anda memiliki masalah kabel, coba saja kabel yang berbeda ...