Bolehkah Data pada Pemacu Keras Degrade Tanpa Amaran Mengenai Kerosakan?
Kami bimbang untuk memastikan data dan fail kami selamat dan tidak terjejas, tetapi adakah data mungkin menjadi rosak dan boleh diakses oleh pengguna tanpa pemberitahuan atau memberi amaran tentang apa-apa masalah? Pos Q & A SuperUser hari ini mempunyai jawapan kepada soalan pembaca yang bimbang.
Sesi Soalan & Jawapan hari ini datang kepada kami dengan ihsan SuperUser-bahagian pembahagian Stack Exchange, kumpulan yang diketuai oleh komuniti laman web Q & A.
Photo courtesy of generalising (Flickr).
Soalan
Pembaca SuperUser topo morto ingin mengetahui sama ada data pada cakera keras boleh merendahkan dan diakses tanpa memberi amaran tentang kerosakan:
Adakah mungkin bahawa degradasi fizikal cakera keras boleh menyebabkan bit untuk "flip" dalam kandungan fail tanpa sistem operasi yang memerhatikan perubahan dan memaklumkan pengguna tentangnya semasa membaca fail? Sebagai contoh, bolehkah "p" (binari 01110000) dalam fail teks ASCII berubah menjadi "q" (binari 01110001), kemudian apabila pengguna membuka fail, mereka melihat "q" tanpa mengetahui bahawa kegagalan telah berlaku?
Saya berminat dengan jawapan yang berkaitan dengan FAT, NTFS, atau ReFS (jika ia membuat perbezaan). Saya ingin tahu jika sistem operasi melindungi pengguna daripada ini, atau jika kita perlu menyemak data kami untuk variasi antara salinan dari masa ke masa.
Bolehkah data pada pemacu keras merosakkan dan diakses tanpa memberi amaran tentang kerosakan?
Jawapan
Penyumbang SuperUser Guntram Blohm mempunyai jawapan untuk kami:
Ya, ada satu perkara yang dipanggil sedikit reput. Tetapi tidak, ia tidak akan menjejaskan pengguna yang tidak disedari.
Apabila cakera keras menulis sektor kepada piringan, ia tidak hanya menulis bit dengan cara yang sama bahawa ia disimpan dalam RAM, ia menggunakan pengekodan untuk memastikan tidak ada urutan bit yang sama yang terlalu panjang. Ia juga menambah kod ECC yang membenarkan ia membetulkan ralat yang mempengaruhi beberapa bit dan mengesan ralat yang menjejaskan lebih daripada beberapa bit.
Apabila cakera keras membaca sektor itu, ia memeriksa kod ECC ini dan membaiki data jika perlu (dan jika mungkin). Apa yang berlaku seterusnya bergantung pada keadaan dan firmware cakera keras, yang dipengaruhi oleh penunjuk drive.
- Jika sektor boleh dibaca dan tidak mempunyai masalah kod ECC, maka ia akan diserahkan kepada sistem operasi.
- Sekiranya sesebuah sektor boleh diperbaiki dengan mudah, versi yang dibaiki boleh ditulis ke cakera, baca kembali, kemudian disahkan untuk menentukan sama ada kesilapan itu adalah satu rawak (iaitu sinar kosmik, dsb.) Atau jika terdapat ralat sistematik dengan media.
- Sekiranya cakera keras menentukan bahawa ada kesilapan dengan media, ia mengembalikan sektor tersebut.
- Sekiranya sektor tidak boleh dibaca dan tidak diperbetulkan selepas beberapa cubaan baca (pada cakera keras yang ditetapkan sebagai cakera keras RAID), maka cakera keras akan menyerah, menaikkan semula sektor itu, dan memberitahu pengawal bahawa terdapat masalah . Ia bergantung pada pengawal RAID untuk membina semula sektor dari anggota RAID yang lain dan menuliskannya kembali kepada pemacu keras yang gagal, yang kemudian menyimpannya di sektor yang diperuntukkan semula (yang sememangnya tidak mempunyai masalah).
- Jika sektor tidak dapat dibaca atau diperbetulkan pada cakera keras desktop, maka cakera keras akan melibatkan lebih banyak percubaan untuk membacanya. Bergantung kepada kualiti cakera keras, ini mungkin melibatkan penyesuaian semula kepala, memeriksa untuk melihat sama ada terdapat sebarang bit yang diketepikan apabila dibaca secara berulang, memeriksa bit yang paling lemah, dan beberapa perkara lain. Jika mana-mana percubaan ini berhasil, cakera keras akan mengalihkan semula sektor itu dan menulis semula data yang telah dibaiki.
Ini adalah salah satu perbezaan utama antara pemacu keras yang dijual sebagai cakera keras "desktop", "NAS / RAID" atau "pengawasan video". Pemacu keras RAID hanya boleh menyerah dengan cepat dan menjadikan pembaikan pengawal sektor itu untuk mengelakkan kependaman di sisi pengguna. Pemacu cakera desktop akan terus mencuba lagi dan lagi kerana pengguna tunggu beberapa saat mungkin lebih baik daripada memberitahu mereka data hilang. Dan pemacu keras video nilai harga data malar lebih daripada pemulihan ralat sebagai kerangka yang rosak biasanya tidak akan diperhatikan.
Pada kadar apa pun, cakera keras akan tahu jika ada sedikit reput, biasanya akan pulih dari itu, dan jika tidak, ia akan memberitahu pengawal yang pada gilirannya akan memberitahu pemandu yang kemudiannya akan memberitahu sistem operasi. Kemudian, ia terpulang kepada sistem operasi untuk membentangkan ralat kepada pengguna dan bertindak ke atasnya. Itulah sebabnya cybernard berkata:
- Saya tidak pernah menyaksikan kesilapan kecil sendiri, tetapi saya telah melihat banyak pemacu keras di mana seluruh sektor telah gagal.
Pemacu keras akan mengetahui jika terdapat sesuatu yang tidak kena dengan sektor, tetapi ia tidak akan tahu yang mana bit telah gagal. Satu bit yang telah gagal akan sentiasa ditangkap oleh ECC.
Sila ambil perhatian bahawa chkdsk dan sistem fail yang membaik pulih secara automatik tidak menangani membaiki data dalam fail. Ini disasarkan kepada rasuah dalam struktur sistem fail itu sendiri, seperti perbezaan saiz fail antara entri direktori dan bilangan blok yang diperuntukkan. Ciri penyembuhan diri NTFS akan mengesan kerosakan struktur dan menghalangnya daripada mempengaruhi data anda lebih jauh, tetapi ia tidak akan memperbaiki sebarang data yang sudah rosak.
Sudah tentu ada alasan lain mengapa data boleh menjadi rosak. Sebagai contoh, RAM yang buruk pada pengawal boleh mengubah data sebelum ia dihantar ke pemacu keras. Dalam kes itu, tiada mekanisme pada cakera keras akan mengesan atau membaiki data, dan ini mungkin salah satu sebab mengapa struktur sistem fail rosak. Sebab-sebab lain termasuk bug perisian, pemadaman ketika menulis ke cakera keras (walaupun ini ditangani oleh sistem fail journaling), atau pemacu sistem fail yang buruk (pemacu NTFS pada Linux yang gagal untuk baca-hanya untuk waktu yang lama sejak NTFS dibina semula, tidak didokumenkan, dan pemaju tidak mempercayai kod mereka sendiri).
- Saya mempunyai senario ini sekali di mana aplikasi akan menyimpan semua failnya ke dua pelayan yang berbeza di dua pusat data yang berbeza untuk menyimpan satu salinan data yang tersedia dalam semua keadaan. Selepas beberapa bulan, kami mendapati bahawa kira-kira 0.1 peratus daripada semua fail yang disalin tidak sepadan dengan jumlah cek MD5 bahawa aplikasi yang disimpan dalam pangkalan datanya. Ternyata kabel serat yang salah antara pelayan dan SAN.
Sebab-sebab lain adalah mengapa beberapa sistem fail, seperti ZFS, menyimpan maklumat jumlah cek tambahan untuk mengesan ralat. Mereka direka untuk melindungi anda dari banyak perkara yang boleh menjadi salah daripada sekadar sedikit reput.
Mempunyai sesuatu untuk menambah penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan dari pengguna Stack Exchange yang berteknologi tinggi? Lihat thread perbincangan penuh di sini.