Bagaimana cara membuat disk saya tidak dipetakan sambil menunggu sektor yang tidak dapat dibaca

10

Saya memiliki disk dengan beberapa sektor tertunda yang tidak dapat dibaca, menurut smartd. Apa cara termudah untuk membuat disk memetakannya dan menghentikan smartd dari komplain?

Hari ini, saya mendapatkan dua dari ini setiap jam:

10 Sep 23:15:35 hylton smartd [3353]: Perangkat: / dev / sdc, 1 Sektor yang saat ini tidak dapat dibaca (tertunda)

Sistem ini adalah sistem x86 yang menjalankan Ubuntu Linux 9.10 (jaunty). Disk adalah bagian dari grup LVM. Inilah cara smartctl mengidentifikasi disk:

Keluarga Model: Western Digital Caviar Second Generation Serial ATA family
Model Perangkat: WDC WD5000AAKS-00TMA0
Nomor Seri: WD-WCAPW4207483
Versi Firmware: 12.01C01
Kapasitas Pengguna: 500.107.862.016 byte
dkagedal
sumber
2
Masalah ini terpecahkan dengan sendirinya; disk mulai mengeluh lebih keras, jadi saya menggantinya.
dkagedal

Jawaban:

15

Sektor tertunda yang tidak dapat dibaca adalah sektor yang mengembalikan kesalahan baca dan yang ditandai oleh drive untuk dipetakan ulang pada peluang pertama yang mungkin. Namun, itu tidak dapat melakukan pemetaan ulang sampai salah satu dari dua hal terjadi:

  1. Sektor ini berhasil dibaca ulang
  2. Sektor ini ditulis ulang

Sampai saat itu, sektor ini masih tertunda. Jadi, Anda memiliki dua cara yang sesuai untuk menangani ini:

  1. Terus mencoba membaca ulang sektor ini sampai Anda berhasil
  2. Timpa sektor itu dengan data baru

Jelas, (1) tidak merusak, jadi Anda mungkin harus mencobanya terlebih dahulu, walaupun perlu diingat bahwa jika drive mulai gagal secara serius maka membaca terus-menerus dari area yang buruk cenderung membuatnya gagal lebih cepat. . Jika Anda memiliki banyak sektor yang tertunda dan kesalahan lainnya, dan Anda peduli tentang data pada drive, saya sarankan mengeluarkannya dari layanan dan menggunakan alat luar biasa ddrescue untuk memulihkan data sebanyak mungkin. Kemudian buang drive.

Jika sektor yang dimaksud berisi data yang tidak Anda pedulikan, atau dapat dipulihkan dari cadangan, maka menimpanya mungkin merupakan solusi tercepat dan termudah. Anda kemudian dapat melihat jumlah yang dialokasikan dan menunggu untuk drive untuk memastikan sektor ini diurus.

Bagaimana Anda mengetahui apa yang berhubungan dengan sektor dalam sistem file? Saya menemukan artikel yang bagus di situs web smartmontools , di sini , meskipun cukup teknis dan khusus untuk ext2 / 3/4 dan sistem file reiser.

Pendekatan yang lebih sederhana, yang saya gunakan pada salah satu drive (Mac) saya sendiri, adalah digunakan find / -xdev -type f -print0 | xargs -0 ...untuk membaca setiap file pada sistem. Catat jumlah yang tertunda sebelum menjalankan ini. Jika sektor ini ada di dalam file, Anda akan mendapatkan pesan kesalahan dari alat yang Anda gunakan untuk membaca file (mis. Md5sum) yang menunjukkan Anda path ke sana. Anda kemudian dapat memfokuskan perhatian Anda pada membaca kembali hanya file ini sampai berhasil dibaca. Seringkali ini akan menyelesaikan masalah, jika itu adalah file yang jarang digunakan yang hanya perlu dibaca beberapa kali. Jika kesalahan hilang, atau Anda tidak menemukan kesalahan dalam membaca semua file, periksa jumlah yang tertunda untuk melihat apakah itu menurun. Jika sudah, masalah diselesaikan dengan membaca.

Jika file tidak dapat dibaca dengan sukses setelah beberapa kali dicoba (mis. 20) maka Anda perlu menimpa file, atau blok di dalam file, untuk memungkinkan drive untuk merealokasi sektor tersebut. Anda dapat menggunakan ddrescue pada file (daripada partisi) untuk menimpa hanya satu sektor, dengan menyalin ke file sementara dan kemudian menyalin kembali. Perhatikan bahwa hanya menghapus file pada titik ini adalah ide yang buruk, karena bad sector akan masuk ke daftar gratis di mana itu akan lebih sulit ditemukan. Menimpa sepenuhnya itu buruk juga, karena sekali lagi sektor akan masuk ke daftar gratis. Anda perlu menulis ulang blok yang ada. The notruncpilihan ddadalah salah satu cara untuk melakukan hal ini.

Jika Anda tidak menemukan kesalahan, dan jumlah yang tertunda tidak berkurang, maka sektor tersebut harus berada dalam daftar bebas atau sebagian dari infrastruktur sistem file (misalnya tabel inode). Anda dapat mencoba mengisi semua ruang kosong dengan cat /dev/zero >tempfile, dan kemudian memeriksa jumlah yang tertunda. Jika turun, masalahnya ada di daftar gratis dan sekarang sudah hilang.

Jika sektor ini dalam infrastruktur, Anda memiliki masalah yang lebih serius, dan Anda mungkin akan menemui kesalahan hanya dengan berjalan di pohon direktori. Dalam situasi ini, saya pikir satu-satunya solusi yang masuk akal adalah memformat ulang drive, opsional menggunakan ddrescue untuk memulihkan data jika perlu.

Awasi drive dengan sangat dekat. Realokasi sektor adalah kenari yang sangat baik di tambang batu bara , berpotensi memberi Anda peringatan dini tentang penggerak yang gagal. Dengan mengambil tindakan dini, Anda dapat mencegah bencana tanah longsor yang kemudian sangat menyakitkan. Saya tidak menyarankan bahwa realokasi beberapa sektor merupakan indikasi bahwa Anda harus membuang drive. Semua drive modern perlu melakukan realokasi. Namun, jika drive tidak terlalu lama (<1 tahun) atau Anda mendapatkan realokasi baru yang sering (> 1 / bulan) maka saya sarankan Anda segera menggantinya.

Saya tidak memiliki bukti empiris untuk membuktikannya, tetapi pengalaman saya menunjukkan bahwa masalah disk dapat dikurangi dengan membaca seluruh disk sesekali, baik dengan salah satu dddisk mentah atau dengan membaca setiap file menggunakan find. Hampir semua masalah disk yang saya alami dalam beberapa tahun terakhir telah dipangkas pertama kali dalam file yang jarang digunakan, atau pada mesin yang tidak banyak digunakan. Hal ini juga masuk akal secara heuristik, dalam hal jika suatu sektor sedang dibaca ulang sering kali drive memiliki kesempatan untuk merealokasi ketika pertama kali mendeteksi masalah kecil dengan sektor itu daripada menunggu sampai sektor tersebut benar-benar tidak dapat dibaca. Drive tidak berdaya untuk melakukan apa pun dengan sektor kecuali tuan rumah mengaksesnya entah bagaimana, baik dengan membaca atau menulisnya atau dengan melakukan salah satu tes SMART.

Saya ingin bereksperimen dengan gagasan pekerjaan cron malam atau mingguan yang membaca seluruh disk. Saat ini saya menggunakan "orang miskin RAID" di mana saya memiliki hard drive kedua di mesin dan saya membuat cadangan disk utama untuk itu setiap malam. Dalam beberapa hal, ini sebenarnya lebih baik daripada mirroring RAID, karena jika saya melakukan kesalahan dan menghapus file karena kesalahan saya bisa mendapatkan versi kemarin langsung dari disk cadangan. Di sisi lain, saya percaya pengontrol RAID perangkat keras melakukan banyak pekerjaan yang baik di latar belakang untuk memantau, melaporkan dan memperbaiki masalah disk saat mereka muncul. Skrip cadangan saya saat ini digunakan rsyncuntuk menghindari penyalinan data yang tidak berubah, tetapi mengingat perlunya membaca ulang semua sektor, mungkin akan lebih baik untuk menyalin semuanya, atau memiliki skrip terpisah yang membaca seluruh disk mentah setiap minggu.

Neil Mayhew
sumber
2
Jika Anda melakukan pencadangan (melakukan sinkronisasi ke disk internal tidak dihitung;)) maka semua data Anda (kembali) dibaca dalam interval waktu tertentu (tergantung pada jadwal cadangan penuh / kenaikan Anda). RAID atau rsync bukan pengganti cadangan. Dan btw, saya 'percaya' bahwa Anda terlalu percaya pada vendor Hardware-RAID. ;)
maxschlepzig
@maxschlepzig: Anda benar. Saya punya rezim cadangan terpisah juga. Namun, pengalaman saya adalah bahwa kemungkinan kehilangan data karena drive yang gagal jauh melebihi semua risiko lain yang disatukan (pencurian, kebakaran, dll.). Hard drive modern memiliki keandalan yang buruk sehingga saya benar-benar paranoid tentang mereka saat ini. Jadi drive internal kedua saya adalah bagian utama dari strategi saya.
Neil Mayhew
Saya telah membaca dan membaca kembali isi disk menggunakan dd if=/dev/sda ...dan sektor masih tertunda, tahu mengapa?
dmansfield
@ Davidmanfield, jika Anda tidak menemukan kesalahan, maka saya tidak yakin mengapa. Saya perhatikan bahwa hanya nilai mentah yang akurat dalam output pintar, jadi jika Anda hanya melihat nilai 'matang', mungkin Anda tidak memiliki sektor yang tertunda.
Neil Mayhew
1

Gunakan perangkat lunak Data Lifeguard Diagnostic untuk DOS (bootable CD) yang tersedia dari situs Western Digital

AlexD
sumber
1
  1. Cadangkan data Anda
  2. Hapus perangkat ini dari grup LVM
  3. dd if=/dev/zero of=/dev/sdc bs=4k- ini akan menghapus semua data pada/dev/sdc
  4. Masukkan lagi ke dalam grup LVM
  5. Kembalikan cadangan Anda
maxschlepzig
sumber
3
0. Memiliki cadangan. :-)
Steven D
Tetapi ini adalah kesalahan pembacaan yang tertunda, jadi bukankah seharusnya cukup dengan hanya membaca semua sektor?
dkagedal
1
@dkagedal: Tidak, firmware HD sudah mendeteksi bahwa ia tidak dapat membaca sektor yang satu ini. Ia tidak memiliki cara untuk memulihkannya (sendiri, selain mungkin mencoba kembali dan mencoba lagi dan beruntung di beberapa titik ... mudah-mudahan itu bukan data yang rusak kemudian dikembalikan) dan dengan demikian mengatur kesalahan SMART ini. Tetapi jika firmware mendeteksi tulisan pada sektor tertentu, ia memetakan sektor ini menjauh (dan tidak menggunakannya lagi) dan sebagai gantinya memetakan sektor cadangan (yang berfungsi) ke alamat ini.
maxschlepzig
@dkagedal: Terkadang hanya satu atau dua bacaan tambahan akan mengembalikan sektor ini. Di lain waktu, tidak ada yang akan mengembalikannya. Juga, drive memutuskan secara internal apakah akan memetakan kembali sektor atau menggunakannya kembali, berdasarkan tingkat keparahan kesalahan asli, dan apakah ia dapat membacanya kembali dengan sukses setelah menulis kepadanya. Satu-satunya cara Anda dapat mengetahui adalah dengan melihat jumlah yang dialokasikan untuk drive. Saya percaya bahwa drive menggunakan checksumming yang cukup luas untuk memastikan bahwa ketika data dibaca tidak rusak, sehingga Anda dapat cukup percaya diri tentang sektor yang tidak dialokasikan kembali.
Neil Mayhew