Pemulihan lebih cepat dari disk dengan bad sector

13

Baru-baru ini saya mencoba dddari HDD yang tidak sehat ke sebuah file. Saya menggunakan dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Masalah saya adalah ddbanyak waktu yang terbuang ketika menemui blok buruk. Dalam kasus penggunaan saya, saya akan dengan senang hati membayar dengan beberapa kehilangan data untuk hasil yang lebih cepat.

Apakah ada cara untuk membuat penanganan kesalahan lebih cepat? Mungkin tweak kernel (memberitahu HDD untuk mengurangi upaya membaca blok)? Atau program lain?

Tidak dalam daftar
sumber

Jawaban:

29

Pertama, untuk perangkat lunak untuk penggunaan: Anda bisa mencoba menggunakan ddrescuebukan dd.

ddrescuememiliki saklar untuk melakukan hanya sejumlah percobaan yang terbatas. Itu juga dapat menggunakan file log, jadi ini mencatat blok mana yang buruk. Jika nanti Anda merasa ingin melakukan lebih banyak percobaan, Anda dapat menggunakan file log yang sama untuk menjalankan ddrescue lagi dengan opsi yang berbeda (seperti lebih banyak coba lagi) dan hanya akan mencoba lagi blok yang diperlukan.

Contoh penggunaan:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

Dari halaman ddrescueinfo:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Berikut adalah beberapa sumber tambahan untuk digunakan ddrescue:


Edit

Dalam kasus HDD itu sendiri terlalu lama, Anda dapat mencoba untuk mengaktifkan fitur yang disebut TLER ( T ime L imited E rror R ecovery) atau CCTL ( C ommand C ompletion T ime L imit). Tidak semua HDD memilikinya, tetapi Anda dapat menggunakannya untuk membatasi waktu pada pengontrol HDD itu sendiri. Pendekatan ini dapat dikombinasikan dengan menggunakan ddrecue, tentu saja.

Linux memiliki alat yang disebut smartctl(dalam smartmontoolspaket).

Untuk memeriksa pengaturan saat ini ("dinonaktifkan" berarti waktu yang tidak terbatas, yang tidak Anda inginkan):

# smartctl -l scterc /dev/sda

Untuk menetapkannya ke nilai tetap (5,0 detik dalam contoh ini. Menetapkannya ke 0 menonaktifkan TLER):

# smartctl -l scterc,50,50 /dev/sda

Sumber untuk TLER: http://en.wikipedia.org/wiki/TLER

Slizzered
sumber
2
Alat lain yang bisa dilihat adalah dc3dd yang merupakan versi forensik dari dd
fpmurphy
oh bagus, saya tidak tahu alat itu!
Slizzered
2
Saya tidak tahu tentang TLER itu, tetapi itu benar-benar menyelamatkan hari saya. Pada disk saya ini dinonaktifkan dan setiap kali saya menjalankan ddrescue disk saya diblokir setelah beberapa detik. Matikan, matikan dan coba lagi berikutnya. Sekarang saya mengaturnya menjadi 2 detik dengan perintah yang Anda sebutkan dan itu tidak pernah memblokir lagi, ia melompati beberapa sektor, tetapi setidaknya berjalan tanpa gangguan.
Sven Rieke
2

Saya mendapatkan hasil yang baik dari disk yang tidak dapat dibaca dengan perangkat lunak ini.

http://www.cgsecurity.org/wiki/TestDisk

Ini selanjutnya adalah alat pemulihan yang solid juga. Itu bisa mendapatkan file bahkan jika tabel file Anda rusak atau jika mereka dihapus. Ini alat forensik yang bagus. Itu membuang hal-hal dengan cara yang benar-benar tidak terorganisir, tetapi Anda bisa memindahkan semua data.

http://www.cgsecurity.org/wiki/PhotoRec

fu9ar
sumber
2

Untuk opsi cepat dan cepat untuk menyelamatkan disk, Anda dapat menggunakan file skrip sh dan menjalankan file dengan sh. Ini berisi baris ini, ulangi saja sudo ddrescuedan sleep 3beberapa kali lagi. Tidur digunakan untuk membuat drive beristirahat beberapa detik:

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

Opsi yang digunakan di atas:

  • -r0 : tanpa coba lagi
  • -e +0: keluar saat kesalahan pertama
  • -T 1s: keluar dengan 1 detik gagal dibaca
  • -d : I / O Langsung
  • -n : tidak ada gesekan

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

Dealazer
sumber
0

Tergantung pada ukuran hard drive Anda dan berapa banyak blok buruk yang dimilikinya. Biasanya saya membutuhkan waktu 20 menit untuk mencadangkan menggunakan DD 1 hd sehat. Dengan blok buruk saya baru saja pulih pagi ini, butuh waktu dua kali. Saya mengalami masalah menduplikasi (membuat cadangan disk) dengan sekitar 30 blok buruk. Hal pertama yang saya lakukan adalah membuat cadangan file menggunakan Filezilla biasa untuk membuat cadangan semua data yang baik. Saya perhatikan bahwa satu file besar tidak menyalin dengan benar (Berhenti di tengah dan memulai kembali transfer). Untungnya saya memiliki cadangan file yang sama sebelumnya. Untuk menduplikasi disk, maka saya harus menemukan blok buruk pada disk menggunakan prosedur ini:

Pertama, temukan disk masalah yang mengidentifikasi info HD menggunakan fdisk -l

2nd jika katakanlah disk Anda adalah / dev / sdb maka Anda perlu menjalankan perintah badblocks -v / dev / sdb itu akan mencantumkan semua Anda blok buruk pada drive. Untungnya akan ada beberapa. Jika tidak ada blok buruk yang ditemukan, maka blok drive Anda OK dan perlu mencari hal lain. Ukuran blok saya adalah 512 jadi saya menggunakan nomor default itu untuk menjalankan DD

3 setiap blok berukuran 512, jadi yang saya lakukan adalah mengatur bs = 512

Setiap kali saya menjalankan DD secara teratur seperti yang selalu saya lakukan, data saya, setelah kesalahan, akan keluar rusak. Jadi saya kemudian menggunakan parameter seperti yang dijelaskan pada halaman https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html mencari bagian "Untuk gagal disk".

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Butuh beberapa saat. Setiap blok buruk menemukan suara seperti membenturkan drive yang rusak. Itu menyalin blok demi blok, dan melalui semua blok buruk saya membuat suara yang sama. Jumlah kali membuat suara, adalah karena ia menemukan blok buruk lain dan memberitahu Anda tentang kesalahan tampilan pada pesan. Apa yang dilakukan oleh 'conv = noerror, sync' , adalah untuk menghapus pembacaan yang buruk dengan NUL, sementara 'iflag = fullblock' melayani pembacaan singkat, tetapi tetap menyinkronkan data Anda hingga akhir. Tidak ada korupsi sama sekali, itu hanya tidak menyalin blok yang salah dan mengisinya dengan NUL kosong.

Setelah penyalinan dengan DD selesai, saya hanya mengganti file yang buruk mengembalikan Filezilla dari cadangan masa lalu dan semuanya bekerja OK. Saya harap ini akan bermanfaat bagi orang lain yang mencoba membuat cadangan drive yang rusak.

CATATAN: Blok buruk saya di mana cukup dekat satu sama lain. Sekitar 4 blok sekaligus dalam kelompok yang terdeteksi buruk. Jika blok Anda ada di seluruh disk, beberapa file dapat terpengaruh. Untungnya, pada kasus saya, file 4gb basis data besar hanya terpengaruh.

Luis H Cabrejo
sumber
1
Jika jawaban yang sama membahas beberapa pertanyaan, ada kemungkinan besar pertanyaan itu adalah duplikat. Jika demikian, lebih baik untuk menjawab satu dan menandai yang lain sebagai kemungkinan rangkap. Itu menghindari penggumpalan jawaban berulang, dan menghubungkan pertanyaan membuatnya lebih mudah bagi pembaca untuk menemukan semua jawaban.
fixer1234
Tidak juga, tetapi jika Anda berpikir demikian, beri tahu saya agar saya akan menghapus jawaban saya. Saya mencari solusi yang tepat di mana-mana, tetapi saya menemukan cara untuk memperbaiki masalah dengan server saya. Ada beberapa pertanyaan serupa lainnya, yang tidak menjawab masalah saya. Sejauh ini saya menemukan sekitar selusin pertanyaan serupa di seluruh. Saya baru saja menjawab pasangan untuk menuliskan pengalaman saya dan bagaimana saya bisa menyelesaikannya. Beri tahu saya jika Anda ingin saya menghapus jawaban saya dan saya akan senang melakukannya. Salam.
Luis H Cabrejo