ZFS resilver tak berujung

29

Saya memiliki kelompok besar (> 100TB) ZFS (FUSE) di Debian yang kehilangan dua drive. Ketika drive gagal, saya menggantinya dengan suku cadang sampai saya dapat menjadwalkan pemadaman dan secara fisik mengganti disk buruk.

Ketika saya menurunkan sistem dan mengganti drive, kolam mulai resilver seperti yang diharapkan, tetapi ketika mencapai sekitar 80% selesai (ini biasanya memakan waktu sekitar 100 jam) itu restart lagi.

Saya tidak yakin apakah mengganti dua drive sekaligus menciptakan kondisi balapan, atau jika karena ukuran pool resilver membutuhkan waktu begitu lama sehingga proses sistem lain mengganggu dan menyebabkannya untuk restart, tetapi tidak ada indikasi yang jelas dalam hal ini. hasil 'status zpool' atau log sistem yang menunjukkan masalah.

Sejak itu saya telah memodifikasi cara saya meletakkan kumpulan ini untuk meningkatkan kinerja resilver tetapi setiap petunjuk atau saran untuk mengembalikan sistem ini ke produksi dihargai.

keluaran status zpool (kesalahannya baru sejak terakhir kali saya memeriksa):

  pool: pod
 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://www.sun.com/msg/ZFS-8000-8A
 scrub: resilver in progress for 85h47m, 62.41% done, 51h40m to go
config:

    NAME                                                 STATE     READ WRITE CKSUM
    pod                                                  ONLINE       0     0 2.79K
      raidz1-0                                           ONLINE       0     0 5.59K
        disk/by-id/wwn-0x5000c5003f216f9a                ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWPK    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQAM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPVD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ2Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CVA3    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQHC    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPWW    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09X3Z    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ87    ONLINE       0     0     0
        spare-10                                         ONLINE       0     0     0
          disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F20T1K  ONLINE       0     0     0  1.45T resilvered
          disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BJN  ONLINE       0     0     0  1.45T resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQG7    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQKM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQEH    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09C7Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWRF    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ7Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C7LN    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQAD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CBRC    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPZM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPT9    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ0M    ONLINE       0     0     0
        spare-23                                         ONLINE       0     0     0
          disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F226B4  ONLINE       0     0     0  1.45T resilvered
          disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CCMV  ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0D6NL    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWA1    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CVL6    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0D6TT    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPVX    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BGJ    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C9YA    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09B50    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0AZ20    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BKJW    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F095Y2    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F08YLD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQGQ    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0B2YJ    ONLINE       0     0    39  512 resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQBY    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C9WZ    ONLINE       0     0     0  67.3M resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQGE    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ5C    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWWH    ONLINE       0     0     0
    spares
      disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CCMV      INUSE     currently in use
      disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BJN      INUSE     currently in use

errors: 572 data errors, use '-v' for a list
jasongullickson
sumber
tolong berikan outputzpool status
longneck
Jadi, kesalahan apa yang dilaporkan jika Anda gunakan -v?
Bobby
"kesalahan: Kesalahan permanen telah terdeteksi dalam file berikut:" dan kemudian daftar sekitar 12 file yang memiliki kesalahan.
jasongullickson
Untuk bagian 'lihat:', Anda dapat membaca penjelasan yang lebih terperinci di sini: illumos.org/msg/ZFS-8000-8A
Raymond Tau

Jawaban:

56

Selamat dan uh-oh. Anda menemukan salah satu hal terbaik tentang ZFS, tetapi juga melakukan dosa konfigurasi.

Pertama, karena Anda menggunakan raidz1, Anda hanya memiliki satu data paritas disk. Namun, Anda memiliki dua drive gagal secara bersamaan. Satu-satunya hasil yang mungkin di sini adalah kehilangan data . Tidak ada jumlah resilver yang akan memperbaikinya.

Suku cadang Anda membantu Anda keluar sedikit di sini dan menyelamatkan Anda dari kegagalan total. Saya akan pergi mengambil risiko di sini dan mengatakan bahwa dua drive yang gagal tidak gagal pada saat yang sama dan bahwa cadangan pertama hanya sebagian disetting ulang sebelum drive kedua gagal.

Tampaknya sulit untuk diikuti. Ini gambarnya:

urutan peristiwa

Ini sebenarnya adalah hal yang baik karena jika ini adalah array RAID tradisional, seluruh array Anda akan langsung offline begitu drive kedua gagal dan Anda TIDAK akan memiliki peluang untuk pemulihan di tempat. Tetapi karena ini adalah ZFS, ia masih dapat berjalan menggunakan potongan-potongan yang dimilikinya dan hanya mengembalikan kesalahan tingkat blok atau file untuk potongan-potongan yang tidak.

Inilah cara Anda memperbaikinya: Jangka pendek, dapatkan daftar file yang rusak dari zpool status -vdan salin file-file itu dari cadangan ke lokasi aslinya. Atau hapus file. Ini akan memungkinkan resilver untuk melanjutkan dan menyelesaikan.

Ini adalah dosa konfigurasi Anda : Anda memiliki terlalu banyak drive dalam grup raidz.

Jangka panjang: Anda perlu mengkonfigurasi ulang drive Anda. Konfigurasi yang lebih tepat adalah mengatur drive ke grup kecil dengan 5 drive atau lebih di raidz1. ZFS akan secara otomatis menghapus seluruh grup kecil tersebut. Ini secara signifikan mengurangi waktu resilver ketika sebuah drive gagal karena hanya 5 drive yang perlu berpartisipasi daripada semuanya. Perintah untuk melakukan ini adalah sesuatu seperti:

zpool create tank raidz da0 da1 da2 da3 da4 \
                  raidz da5 da6 da7 da8 da9 \
                  raidz da10 da11 da12 da13 da14 \
                  spare da15 spare da16
leher panjang
sumber
Terima kasih banyak @longneck untuk jawaban yang terperinci dan informatif! Anda tahu tentang urutan kejadian, dan saya sudah mengikuti saran Anda tentang konfigurasi perangkat (perangkat kedua yang saya buat dikonfigurasi hampir persis seperti yang Anda jelaskan, dengan beberapa pertimbangan tambahan untuk menjaga agar setiap serangan menyebar di seluruh perangkat keras untuk mengurangi kemungkinan kehilangan seluruh serangan karena kegagalan backplane, dll).
jasongullickson
Setelah menghapus file yang rusak, "zfs status" sekarang mengembalikan nilai hex alih-alih nama file; Saya menganggap ini akan hilang ketika scrub akhirnya selesai?
jasongullickson
@jasongullickson hanya jika metadata dari sistem file juga utuh. ZFS cukup agresif dalam melindungi metadata sehingga Anda mungkin akan menjadi baik. hanya waktu yang akan memberitahu.
longneck
secara pribadi saya belum menjalankan acara korupsi metadata sebelumnya, jadi saya tidak tahu akan seperti apa dalam hal peristiwa kesalahan.
longneck
1
@ Longneck Gotcha, maka kami sepakat - itu ide yang buruk untuk memiliki kelompok RAID-Z yang cukup besar sehingga Anda menghambat resilver dan memperlambatnya. Dan risiko besar lainnya dari kelompok yang lebih besar adalah meningkatnya peluang kegagalan perangkat kedua selama resilver - peningkatan jumlah disk paritas (dengan RAID-Z2 atau 3) akan membantu dengan masalah keandalan, tetapi tidak dengan kecepatan resilver .
Shane Madden