GNU/Linux >> Belajar Linux >  >> Linux

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

Solusi 1:

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

Pertama, sebagian besar blok buruk terdeteksi saat membaca, bukan menulis. Penulisan dilakukan secara membabi buta, artinya data ditulis tanpa diperiksa. Jadi pada penulisan jika medianya buruk, Anda tidak akan mengetahuinya sampai tuan rumah membaca ke sektor itu. Ada bagian kecil dari sektor (header sektor) yang dibaca saat menulis untuk menemukan 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 saat dibaca, dan hanya karena penulisan berhasil ke suatu sektor tidak berarti media tersebut baik atau sektor tersebut telah dipindahkan.

Sekarang tentang penugasan ulang blok yang buruk (juga disebut realokasi). Ya, biasanya drive akan mencoba menetapkan kembali suatu sektor jika kesalahannya 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 host sebelumnya dapat memberi tahu drive untuk tidak melakukan realokasi otomatis, tetapi ini jarang dilakukan.

Jadi apa yang terjadi jika drive membaca dan tidak dapat memulihkan data? Tidak ada apa-apa. Kesalahan dilaporkan ke tuan rumah, tetapi tidak ada penugasan ulang yang dilakukan. Masalahnya adalah drive dapat menugaskan kembali sektor tersebut, tetapi tidak tahu sama sekali data apa yang harus ditulis di sektor yang baru dipindahkan. Jika hanya menulis banyak nol, katakanlah, dan kemudian sektor itu dibaca lagi, itu akan mengembalikan semua nol tanpa ada indikasi bahwa datanya 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 saat data tidak dapat ' t dapat dipulihkan.

Drive modern, bagaimanapun, akan menyimpan lokasi bad sector ketika tidak dapat dialokasikan kembali. Jumlah bad sector yang menunggu realokasi dapat ditemukan di data SMART. Apa yang terjadi adalah jika penulisan dilakukan ke salah satu bad sector menunggu realokasi, realokasi dilakukan karena drive sekarang memiliki data yang valid untuk ditulis setelah realokasi. Jadi ketika orang mengatakan menulis ke bad sector akan mengalokasikannya kembali, itu sebenarnya hanya setengah dari cerita. Drive harus dibaca terlebih dahulu agar 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 yang menunggu realokasi, tetapi Anda belum tentu membersihkan drive dari semua bad sector. Jadi, jika Anda benar-benar ingin membersihkan drive dari semua bad sector, hal terbaik adalah membaca seluruh drive terlebih dahulu, diikuti dengan menulis seluruh drive (tentu saja, ini akan menghancurkan semua data sebelumnya di drive).

Ada cara lain untuk menangani blok buruk yang tidak dapat dialokasikan kembali. Jika hard disk merupakan bagian dari konfigurasi RAID redundan (yakni apa pun selain RAID 0), perangkat lunak RAID akan secara otomatis memulihkan data untuk sektor buruk dari hard disk lain dan menuliskannya ke sektor yang dialokasikan kembali. Disk SCSI memiliki perintah blok penetapan ulang eksplisit yang dapat digunakan host untuk memaksa penetapan ulang meskipun tidak ada data valid untuk menulis ke blok, tetapi penggunaannya cukup rendah.

Solusi 2:

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

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

Solusi 3:

Saya pikir yang harus Anda lakukan adalah:

e2fsck -c /dev/hda1

dengan asumsi /dev/hda1 adalah partisi (unmount). Atau:

e2fsck -c -c /dev/hda1

untuk melakukan tes baca-tulis non-destruktif (lebih lambat). Itu masih harus dilepas. Namun, menurut saya ini tidak akan memberi Anda detail tentang data yang hilang.

Solusi 4:

Michael sudah benar dan dalam banyak kasus saya akan mengatakan hanya mengganti drive yang murah. Namun, jika Anda tidak memiliki cadangan dan tidak dapat mengambil data penting dari drive, atau hanya ingin mencoba memperbaiki drive, 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 bising berhenti. Drive telah bekerja selama lebih dari dua tahun sejak saat itu.


Linux
  1. Cara mempartisi disk di Linux

  2. Bagaimana menemukan nomor model disk drive Linux?

  3. Bagaimana cara membuat disk saya unmap menunggu sektor yang tidak dapat dibaca

  1. Cara menggunakan Google Drive di Linux

  2. Cara mengenkripsi satu sistem file Linux

  3. Cara Memasang Drive Disk USB di UNIX atau Linux

  1. Bagaimana cara mengganti hard drive di Linux

  2. Cara mempartisi dan memformat drive di Linux

  3. Cara Memeriksa Ruang Disk di Linux