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 .
Jawaban:
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)
sumber
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.
sumber
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 .Saya pikir yang harus Anda lakukan adalah:
dengan asumsi / dev / hda1 adalah partisi (tidak di-mount). Atau:
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.
sumber
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.
sumber
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.
sumber
Jika disk rusak, gantilah. Itu tidak sebanding dengan risiko bahwa itu akan berantakan lagi.
sumber