Bagaimana saya dengan mudah memperbaiki satu blok yang tidak dapat dibaca pada disk Linux?

22

Sistem Linux saya sudah mulai melempar kesalahan SMART di syslog. Saya melacaknya dan percaya masalahnya adalah satu blok pada disk. Bagaimana caranya dengan mudah mendapatkan disk untuk merealokasi satu blok itu? Saya ingin tahu file apa yang dihancurkan dalam proses. (Saya sadar bahwa jika satu blok gagal pada disk, orang lain kemungkinan akan mengikuti; Saya memiliki cadangan yang berkelanjutan dan hanya ingin mencoba agar disk ini berfungsi.)

Pencarian web mengarah ke HOWTO blok buruk , yang menjelaskan proses manual pada disk yang tidak terpasang. Tampaknya rumit dan rawan kesalahan. Apakah ada alat untuk mengotomatiskan proses ini di Linux? Satu-satunya pilihan saya adalah alat diagnostik pabrikan , tetapi saya kira itu akan menghancurkan blok buruk tanpa melaporkan apa yang telah dihancurkan. Kasus terburuk, mungkin metadata sistem file.

Disk yang dimaksud adalah partisi sistem utama. Menggunakan ext3fs dan LVM. Inilah log kesalahan dari syslog dan bit yang relevan dari smartctl.

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

Ada dump smartctl penuh pada pastebin .

Nelson
sumber
Saya pikir firmware disk akan secara otomatis memetakan ulang blok buruk saat dibaca, jadi secara teoritis sudah dilakukan. Seperti yang dinyatakan di bawah ini, jalankan fsck (atau equiv yang benar untuk FS Anda) untuk memastikan FS overlay masih stabil.
BuildTheRobots
2
Pemahaman saya adalah firmware disk hanya akan memetakan ulang blok pada tulis , bukan saat dibaca. Jadi saya benar-benar harus memaksa menulis ke blok yang dimaksud.
Nelson
1
Saya akhirnya menghentikan disk ini. Ini berjalan dengan baik selama beberapa bulan, tetapi setelah kesalahan baca ke-5 saya menyerah.
Nelson

Jawaban:

12

Anda bisa mencoba hdparm --write-sector <LBA> /dev/ice.

Saya tidak tahu cara lain untuk melakukan ini - Anda perlu mengkonversi LBA menjadi blok sistem file secara manual (seperti yang sudah Anda temukan)

James
sumber
Ooh, itu bendera baru! Itu pasti akan mengurus realokasi blok buruk. Sekarang yang saya butuhkan adalah cara mudah untuk menemukan apa yang akan musnah.
Nelson
3
Setelah menggunakan metode ini untuk memperbaiki disk, saya dapat mengatakan ini adalah metode yang benar. Memaksa penulisan ke sektor yang bersangkutan akan memaksa dorongan untuk menghadap ke sektor tersebut dan (a) mendapatkan tulisan yang berhasil, atau (b) berakhir dengan angka buruk permanen bersama dengan remap.
Avery Payne
Besar! Dan jauh lebih mudah daripada smartmontools.sourceforge.net/badblockhowto.html
Janning
Sungguh aneh bahwa proses berulang ini (mencari sektor buruk berikutnya melalui SMART dan memaksanya untuk mengalokasikan kembali) tidak diotomatisasi dengan utilitas sederhana! ..
imz - Ivan Zakharyaschev
32

Saya biasa menulis firmware disk untuk WD, dan saya pernah menulis firmware yang menugaskan blok buruk.

Pertama, sebagian besar blok buruk terdeteksi saat dibaca, bukan ditulis. Menulis dilakukan secara membabi buta, artinya data ditulis tanpa diperiksa. Jadi pada saat menulis jika medianya buruk, Anda tidak akan mengetahuinya sampai host membaca untuk sektor tersebut. Ada bagian kecil dari sektor (header sektor) yang dibaca saat menulis untuk mencari sektor yang benar, sehingga jika ada kesalahan dalam membaca header sektor, drive akan menugaskan kembali sektor tersebut dan menulisnya dengan data yang diterima dari perintah tulis. Tetapi sebagian besar blok buruk terdeteksi pada pembacaan, dan hanya karena penulisan berhasil ke suatu sektor tidak berarti media itu baik atau bahwa sektor tersebut telah dipindahkan.

Sekarang tentang penggantian blok yang buruk (juga disebut realokasi). Ya, biasanya drive akan mencoba untuk menetapkan kembali sektor jika kesalahan cukup buruk (yaitu, kegagalan ECC cukup buruk) tetapi drive masih dapat memulihkan data setelah koreksi ECC. Biasanya ini dilakukan secara otomatis. Satu-satunya pengecualian adalah bahwa tuan rumah sebelumnya bisa mengatakan kepada drive untuk tidak melakukan realokasi otomatis, tetapi ini jarang dilakukan.

Jadi apa yang terjadi jika drive tidak membaca dan tidak dapat memulihkan data? Tidak ada. Kesalahan dilaporkan ke tuan rumah, tetapi tidak ada penugasan kembali yang dilakukan. Masalahnya adalah bahwa drive dapat menugaskan kembali sektor ini, tetapi tidak memiliki ide sedikit pun data apa yang akan ditulis di sektor yang baru dipindahkan. Jika hanya menulis sekelompok nol, katakanlah, dan kemudian sektor dibaca lagi, itu akan mengembalikan semua nol tanpa indikasi bahwa data tidak valid. Ini pada dasarnya sama dengan korupsi data. Drive tidak dapat mengandalkan host yang melacak kesalahan karena berbagai alasan (misalnya, bagaimana jika drive dipindahkan ke host baru?), Jadi tindakan terbaik adalah tidak melakukan apa-apa ketika data dapat ' t dipulihkan.

Drive modern, bagaimanapun, akan menyimpan lokasi bad sector ketika tidak dapat dialokasikan kembali. Jumlah bad sector yang menunggu realokasi dapat ditemukan dalam data SMART. Apa yang terjadi adalah jika penulisan dilakukan ke salah satu sektor buruk yang menunggu realokasi, realokasi dilakukan karena drive sekarang memiliki data yang valid untuk menulis kepadanya setelah realokasi. Jadi ketika orang mengatakan menulis ke sektor yang buruk akan merealokasi itu, itu benar-benar hanya setengah dari cerita. Drive harus dibaca terlebih dahulu sehingga drive dapat menemukan semua bad sector yang tidak dapat dialokasikan kembali secara otomatis. Dengan demikian Anda dapat menulis seluruh drive, dan data SMART akan mengatakan tidak ada bad sector menunggu realokasi, tetapi Anda belum tentu membersihkan drive dari semua bad sector. Jadi jika Anda benar-benar ingin menghapus drive dari semua bad sector,

Ada beberapa cara lain untuk mengatasi blok buruk yang tidak dapat dialokasikan kembali. Jika drive adalah bagian dari konfigurasi RAID yang berlebihan (yaitu, apa pun kecuali RAID 0), perangkat lunak RAID harus secara otomatis memulihkan data untuk sektor yang buruk dari drive lain dan menulisnya ke sektor yang dialokasikan kembali. Disk SCSI memiliki perintah blok penetapan ulang eksplisit yang tuan rumah dapat gunakan untuk memaksa penetapan ulang bahkan ketika tidak ada data yang valid untuk menulis ke blok, tetapi penggunaannya cukup rendah.

uang kertas sepuluh dolar
sumber
1
Mungkin perlu disebutkan juga bahwa setidaknya beberapa HDD Seagate mendukung Write-Read-Verify, yang dapat dihidupkan menggunakan hdparm -R(dengan asumsi hdparm yang cukup baru). Ini datang pada penalti kinerja penulisan yang signifikan (kira-kira mengurangi separuh throughput penulisan dan menulis IOPS, karena setiap penulisan sekarang menimbulkan pembacaan berikutnya) tetapi jika perangkat keras Anda mendukungnya dan beban kerja Anda banyak-baca maka ini mungkin merupakan langkah pencegahan yang sangat bisa diterapkan .
CVn
2

Saya pikir yang harus Anda lakukan adalah:

e2fsck -c /dev/hda1

dengan asumsi / dev / hda1 adalah partisi (tidak di-mount). Atau:

e2fsck -c -c /dev/hda1

untuk melakukan tes baca-tulis (lebih lambat) yang tidak merusak. Itu masih harus dilepas. Saya tidak berpikir ini akan memberi Anda rincian tentang data yang hilang.

Matthew Flaschen
sumber
Tetapi sangat disayangkan bahwa sepertinya tidak menggunakan informasi dari SMART tentang blok buruk. Saya bertanya-tanya mengapa tidak ada alat fsck yang akan menggunakan informasi blok buruk dari SMART dan mencoba untuk menghindarinya atau memperbaiki file yang terkena dampak seperti yang dijelaskan dalam smartmontools.sourceforge.net/badblockhowto.html atau serverfault.com/a/106130/68972 . ..
imz - Ivan Zakharyaschev
2

Michael sudah benar dan dalam kebanyakan kasus saya akan mengatakan hanya mengganti drive yang murah. Namun jika Anda tidak memiliki cadangan dan tidak bisa mendapatkan data penting dari drive, atau hanya ingin mencoba untuk memperbaiki drive maka Anda mungkin ingin mencoba menggunakan spinrite , pada level tertinggi.

Saya memiliki drive laptop yang mulai mengeluarkan suara beberapa tahun yang lalu. Badblock menunjukkan bahwa drive memiliki 118 atau lebih blok buruk yang terlihat oleh pengguna akhir. Karena saya sudah memiliki salinan SpinRite, saya memutuskan untuk mencobanya sebelum membeli drive baru. Setelah menjalankan spinrite pada drive, badblock menunjukkan 0 blok buruk dan suara berhenti. Drive telah bekerja selama lebih dari dua tahun sejak itu.

Pengaruh 3d
sumber
Nelson apakah Anda hanya akan memilih setiap jawaban yang tidak ingin Anda dengar? Drive yang sehat secara otomatis akan memetakan ulang blok yang buruk. Jika Anda harus keluar dari cara Anda untuk melakukan sesuatu untuk memaksakan ini, drive tidak lagi sehat dan harus diganti.
3dinfluence
Tidak, saya hanya menurunkan satu tanggapan karena tidak menjawab pertanyaan saya. Anda menyarankan spinrite, terima kasih! Pemahaman saya adalah drive yang sehat tidak akan memetakan kembali sektor yang buruk sampai ditulis. Saya mencoba menemukan cara paling sederhana untuk memaksa menulis. Pergi ke saran Matthew dan lihat apakah fsck cukup pintar untuk melakukannya.
Nelson
Maaf saya langsung mengambil kesimpulan di sana setelah melihat 2 jawaban ditolak dengan cepat dan Anda menjawab jawaban lain yang saya duga adalah Anda.
3dinfluence
2
Anda benar bahwa remap sektor buruk terjadi ketika penulisan gagal blok. Jika Anda hanya memiliki blok yang rusak sejauh menyangkut sistem file maka fsck dapat menyelesaikan masalah Anda jika blok yang dimaksud adalah blok metadata. fsck benar-benar hanya memindai dan memperbaiki kesalahan dalam metadata. Jadi tidak ada jaminan pada data itu sendiri. Sistem file gen berikutnya seperti BTRFS dan ZFS dapat mendeteksi dan jika Anda memiliki kesalahan data redundansi yang benar. Spinrite juga akan memaksakan ini ketika membaca, kemudian menulis data yang dibalik, membaca kembali, kemudian membalikkan data kembali pada setiap blok sebagai bagian dari pemindaiannya.
3dinfluence
1

Jika Anda memiliki cadangan dan Anda tahu ini adalah kesalahan logis dan bukan kesalahan fisik, maka cara terbaik untuk melakukannya adalah dengan mengeluarkan disk.

Saya akan menggunakan MHDD itu cukup mudah digunakan dan selama Anda ingat untuk mengatur HDD Anda di Bios ke emulasi IDE dan kemudian kembali ke AHCI ketika pekerjaan Anda selesai, Anda tidak perlu khawatir.

Setelah Anda boot ke MHDD, pilih tipe drive Anda dalam perintah ERASE dan konfirmasikan pilihan Anda.

Dapatkan kopi untuk diri Anda sendiri, ini mungkin butuh waktu.

Setelah Drive memusatkan perhatian, jalankan pemindaian (f4) dengan Remap diatur ke ON (default tidak aktif). Jika masih ada masalah dengan drive (itu berarti ada kerusakan fisik pada platter dan drive berada di lereng menurun ke bawah) pilihan ini akan "Memperbaiki" mereka dengan memetakan area yang rusak ke bagian drive yang sehat.

Jika tidak ada kesalahan UNC maka selamat Anda dan drive Anda masih bisa menjadi teman selama bertahun-tahun yang akan datang.

Jahith
sumber
-1

Jika disk rusak, gantilah. Itu tidak sebanding dengan risiko bahwa itu akan berantakan lagi.

Michael Graff
sumber
Saya secara eksplisit mengetahui disk buruk dan memiliki cadangan untuk menghindari risiko.
Nelson
2
Itu hanya berarti Anda bersedia bertaruh. Saya tidak berpikir itu berarti itu tidak boleh diganti, hanya saja Anda bersedia mengabaikan saran itu. Saya ragu cadangan apa pun dapat menyelamatkan sistem Anda dari dirinya sendiri ketika disk berantakan, dan hal-hal akan menjadi sangat rapuh karena hal-hal menurun.
Michael Graff
3
Jawaban ini harus berupa komentar ... Pertanyaannya spesifik dan exaustive. Dan karena itu ini bukan jawaban.
Pitto