Apa yang ditunjukkan oleh kesalahan ZFS permanen?

18

Beberapa permanent errorsdilaporkan di zpool saya hari ini.

  pool: seagate3tb
 state: ONLINE
status: One or more devices has experienced an error resulting in data
        corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
        entire pool from backup.
   see: http://zfsonlinux.org/msg/ZFS-8000-8A
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        seagate3tb  ONLINE       0     0    28
          sda       ONLINE       0     0    56

errors: Permanent errors have been detected in the following files:

        /mnt/seagate3tb/Install.iso
        /mnt/seagate3tb/some-other-file1.txt
        /mnt/seagate3tb/some-other-file2.txt

Sunting: Saya yakin jika CKSUMnilai - nilai itu akurat. Saya sedang mengubah data dan mungkin telah merusaknya secara tidak sengaja. Mereka mungkin 0. Sayangnya, saya tidak dapat menemukan jawaban konklusif dalam catatan saya dan kesalahan diselesaikan sekarang jadi saya tidak yakin, tetapi semua yang lain akurat / mencerminkan apa yang dilaporkan zpool.

/mnt/seagate3tb/Install.iso adalah salah satu contoh file yang dilaporkan memiliki kesalahan permanen.

Di sinilah saya bingung. Jika saya membandingkan "kesalahan permanen" saya Install.isodengan cadangan file yang sama persis pada sistem file lain, mereka terlihat sama.

shasum "/mnt/seagate3tb/Install.iso"
1ade72fe65902b2a978e5504aaebf9a3a08bc328  /mnt/seagate3tb/Install.iso
shasum "/mnt/backup/Install.iso"
1ade72fe65902b2a978e5504aaebf9a3a08bc328  /mnt/backup/Install.iso
cmp /mnt/seagate3tb/Install.iso /mnt/backup/Install.iso
diff /mnt/seagate3tb/Install.iso /mnt/backup/Install.iso

File-file itu tampaknya identik. Terlebih lagi, file berfungsi dengan baik. Jika saya menggunakannya dalam suatu aplikasi, berperilaku seperti yang saya harapkan.

Seperti yang dinyatakan dokumen :

Kesalahan data korupsi selalu berakibat fatal.

Tetapi berdasarkan verifikasi file dasar saya, saya tidak yakin saya mengerti definisi fatal.

status: Satu atau lebih perangkat mengalami kesalahan yang mengakibatkan kerusakan data. Aplikasi mungkin terpengaruh.

aksi: Kembalikan file yang dimaksud jika memungkinkan. Kalau tidak, kembalikan seluruh kumpulan dari cadangan.

Mungkin saya melewatkan sesuatu, tetapi file tersebut tampaknya baik-baik saja sejauh yang saya tahu, dan memang membutuhkan pemulihan apa pun juga tidak menunjukkan korupsi, meskipun direkomendasikan dari ZFS.

Saya telah melihat artikel lain dengan kesalahan yang sama , tetapi saya belum menemukan jawaban untuk pertanyaan saya.

Apa kesalahan permanen dengan file? Apakah ada masalah tingkat lebih rendah dengan file yang tidak mudah bagi saya? Jika demikian, mengapa itu tidak terdeteksi oleh shasumsebagai perbedaan dalam file?

Dari sudut pandang orang awam, saya melihat tidak ada yang menunjukkan kesalahan dengan file ini.

Will Haley
sumber
Apakah Anda memiliki snapshot?
ewwhite
3
Apakah, karena tidak ada orang lain yang mengatakannya, bolehkah saya menyambut Anda di ServerFault? Bagi saya ini adalah pertanyaan pertama yang sangat bagus , dan saya harap pertanyaan ini terus mendapatkan jawaban instruktif. Saya harap Anda memutuskan untuk tetap di SF dan berkontribusi lebih lanjut.
MadHatter mendukung Monica
@MadHatter terima kasih! Saya menghargai sambutan baik Anda, dan pasti akan tetap di SF. Saya sudah menambahkannya ke daftar singkat komunitas SE saya.
Will Haley

Jawaban:

22

Kata-katanya zpool statussedikit menyesatkan. Kesalahan permanen (dalam konteks ini) menunjukkan bahwa kesalahan I / O telah terjadi dan telah dicatat ke log kesalahan SPA (Storage Pool Allocator) untuk pool tersebut. Hal ini tidak berarti ada irrecoverable korupsi data.

Yang harus Anda lakukan adalah menjalankan zpool scrubdi kolam renang. Ketika scrub selesai, log kesalahan SPA akan diputar dan tidak akan lagi menampilkan kesalahan dari sebelum scrub. Jika scrub tidak menemukan kesalahan maka zpool statustidak akan lagi menunjukkan kesalahan "permanen".

Mengenai dokumentasi, dikatakan bahwa hanya "kesalahan fatal" dicatat dengan cara ini. Kesalahan fatal adalah kesalahan I / O yang tidak dapat secara otomatis diperbaiki oleh ZFS dan karenanya terkena aplikasi sebagai I / O yang gagal. Sebaliknya, jika I / O segera dicoba kembali dengan sukses atau jika I / O logis puas dari perangkat yang berlebihan, itu tidak akan dianggap sebagai kesalahan fatal dan karenanya tidak akan dicatat sebagai kesalahan korupsi data.

Kesalahan fatal tidak selalu berarti kehilangan data permanen, itu hanya berarti bahwa pada saat itu tidak dapat diperbaiki sebelum disebarkan ke aplikasi. Misalnya, kabel yang longgar atau pengontrol yang buruk dapat menyebabkan kesalahan fatal sementara yang ZFS akan gambarkan sebagai "permanen." Apakah itu benar-benar masalah tergantung pada sifat I / O dan apakah aplikasi mampu pulih dari kesalahan I / O.

EDIT: Sepenuhnya setuju dengan @bahamat bahwa Anda harus berinvestasi dalam redundansi sesegera mungkin.

Tom Shaw
sumber
Log kesalahan SPA yang melaporkan ini sebagai "permanen" memang tampak agak menyesatkan. The zpool scrubmelakukan persis apa yang disarankan @ tom-shaw, dan penjelasan Anda masuk akal. Saya tidak lagi melihat "kesalahan permanen" pada array ini setelah scrub. Saya tidak memikirkan kesalahan fatal dalam konteks pembacaan yang gagal. Saya pikir itu pasti hanya kesalahan I / O sementara pada pembacaan seperti yang Anda sarankan. Saya juga sepenuhnya setuju tentang perlunya redundansi.
Will Haley
Tom, sudah lama tidak melihatmu. Selamat datang kembali.
the-wabbit
7

Kesalahan permanen berarti bahwa ada kesalahan checksum dalam file dan tidak ada replika yang cukup untuk diperbaiki. Ini berarti bahwa setidaknya satu membaca data yang rusak dikembalikan karena kesalahan I / O. Jika apa pun yang diterima dibaca, maka tulis kembali ke file disk yang sama Anda sekarang akan memiliki data korupsi yang tidak dapat dipulihkan.

Melihat konfigurasi kolam Anda, sepertinya Anda tidak memiliki redundansi. Ini sangat berbahaya. Anda tidak mendapatkan manfaat penyembuhan diri dari ZFS, tetapi itu akan dapat memberi tahu Anda ketika telah terjadi korupsi data. Biasanya ZFS akan secara otomatis dan diam-diam mengoreksi bacaan yang rusak, tetapi dalam kasus Anda tidak dapat. Sepertinya Anda sudah menjalankannya zpool clearkarena CKSUMhitungannya 0untuk kedua drive.

Sayangnya, tanpa replika, benar-benar tidak ada cara untuk mengetahuinya.

bahamat
sumber
2
Tidakkah zpool clearjuga menghapus pesan kesalahan itu sendiri, bukan hanya kesalahan yang diperhitungkan? Sungguh aneh bahwa pesan itu tetap ada, namun tidak ada kesalahan yang ditampilkan.
user121391
2
Permintaan maaf saya. Saya telah menghapus file dari daftar kesalahan permanen untuk privasi. Dalam mengedit output itu, saya juga menghitung jumlah CKSUM dan kehilangan konteks yang berharga. Saya telah mengedit pertanyaan untuk mencerminkan kenyataan. @ user121391
Will Haley
Dalam hal itu, jika angka yang Anda tunjukkan benar, maka kemungkinan Anda memiliki kesalahan perangkat keras di suatu tempat. Karena kedua disk menunjukkan CKSUM countsitu mungkin controller, kabel, atau perangkat keras bersama antara kedua disk. Mungkin juga kedua disk gagal. Dalam hal apa pun ini menggarisbawahi kebutuhan untuk menambahkan redundansi ASAP, dan memeriksa file yang ditunjukkan untuk korupsi.
bahamat
OP tampaknya tidak memiliki redundansi; vdev memiliki 56 kesalahan CKSUM, dan kumpulan memiliki 28 kesalahan CKSUM. Jadi saya tidak yakin apa yang Anda maksudkan dengan "kedua disk" di komentar Anda sebelumnya. Saya setuju dengan poin Anda tentang nilai redundansi.
CVn
Kamu benar. Saya salah membaca nama kolam seolah-olah itu disk lain. Terima kasih telah menunjukkannya.
bahamat