Zfs

zfs raidz-2 如何從 3 個驅動器故障中恢復?

  • January 25, 2020

我想知道發生了什麼,ZFS 是如何完全恢復的,或者我的數據是否仍然完好無損。

當我昨晚進來時,我感到沮喪,然後感到困惑。

zpool status
 pool: san
state: DEGRADED
status: One or more devices has experienced an unrecoverable error.  An
       attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
       using 'zpool clear' or replace the device with 'zpool replace'.
  see: http://zfsonlinux.org/msg/ZFS-8000-9P
 scan: resilvered 392K in 0h0m with 0 errors on Tue Jan 21 16:36:41 2020
config:

       NAME                                          STATE     READ WRITE CKSUM
       san                                           DEGRADED     0     0     0
         raidz2-0                                    DEGRADED     0     0     0
           ata-WDC_WD20EZRX-00DC0B0_WD-WMC1T3458346  ONLINE       0     0     0
           ata-ST2000DM001-9YN164_W1E07E0G           DEGRADED     0     0    38  too many errors
           ata-WDC_WD20EZRX-19D8PB0_WD-WCC4M0428332  DEGRADED     0     0    63  too many errors
           ata-ST2000NM0011_Z1P07NVZ                 ONLINE       0     0     0
           ata-WDC_WD20EARX-00PASB0_WD-WCAZAJ490344  ONLINE       0     0     0
           wwn-0x50014ee20949b6f9                    DEGRADED     0     0    75  too many errors

errors: No known data errors 

怎麼可能沒有數據錯誤,並且整個池都沒有故障?

一個驅動器sdf對 SMART 的 smartctl 測試失敗read fail,其他驅動器的問題稍小;不可糾正/未決扇區或 UDMA CRC 錯誤。

我嘗試將每個發生故障的驅動器切換到離線狀態,然後一次切換到一個線上狀態,但這沒有幫助。

   $ zpool status
 pool: san
state: DEGRADED
status: One or more devices has experienced an unrecoverable error.  An
       attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
       using 'zpool clear' or replace the device with 'zpool replace'.
  see: http://zfsonlinux.org/msg/ZFS-8000-9P
 scan: resilvered 392K in 0h0m with 0 errors on Tue Jan 21 16:36:41 2020
config:

       NAME                                          STATE     READ WRITE CKSUM
       san                                           DEGRADED     0     0     0
         raidz2-0                                    DEGRADED     0     0     0
           ata-WDC_WD20EZRX-00DC0B0_WD-WMC1T3458346  ONLINE       0     0     0
           ata-ST2000DM001-9YN164_W1E07E0G           DEGRADED     0     0    38  too many errors
           ata-WDC_WD20EZRX-19D8PB0_WD-WCC4M0428332  OFFLINE      0     0    63
           ata-ST2000NM0011_Z1P07NVZ                 ONLINE       0     0     0
           ata-WDC_WD20EARX-00PASB0_WD-WCAZAJ490344  ONLINE       0     0     0
           wwn-0x50014ee20949b6f9                    DEGRADED     0     0    75  too many errors

因此,如果我的數據實際上仍然全部存在,我感到非常幸運,或者有點困惑,在檢查了最差的驅動器之後,我用我唯一的備用驅動器進行了更換。

   $ zpool status
 pool: san
state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
       continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scan: resilver in progress since Tue Jan 21 17:33:15 2020
       467G scanned out of 8.91T at 174M/s, 14h10m to go
       77.6G resilvered, 5.12% done
config:

       NAME                                              STATE     READ WRITE CKSUM
       san                                               DEGRADED     0     0     0
         raidz2-0                                        DEGRADED     0     0     0
           ata-WDC_WD20EZRX-00DC0B0_WD-WMC1T3458346      ONLINE       0     0     0
           replacing-1                                   DEGRADED     0     0     0
             ata-ST2000DM001-9YN164_W1E07E0G             OFFLINE      0     0    38
             ata-WDC_WD2000FYYZ-01UL1B1_WD-WCC1P1171516  ONLINE       0     0     0  (resilvering)
           ata-WDC_WD20EZRX-19D8PB0_WD-WCC4M0428332      DEGRADED     0     0    63  too many errors
           ata-ST2000NM0011_Z1P07NVZ                     ONLINE       0     0     0
           ata-WDC_WD20EARX-00PASB0_WD-WCAZAJ490344      ONLINE       0     0     0
           wwn-0x50014ee20949b6f9                        DEGRADED     0     0    75  too many errors

resilver 確實成功完成。

$ zpool status
 pool: san
state: DEGRADED
status: One or more devices has experienced an unrecoverable error.  An
       attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
       using 'zpool clear' or replace the device with 'zpool replace'.
  see: http://zfsonlinux.org/msg/ZFS-8000-9P
 scan: resilvered 1.48T in 12h5m with 0 errors on Wed Jan 22 05:38:48 2020
config:

       NAME                                            STATE     READ WRITE CKSUM
       san                                             DEGRADED     0     0     0
         raidz2-0                                      DEGRADED     0     0     0
           ata-WDC_WD20EZRX-00DC0B0_WD-WMC1T3458346    ONLINE       0     0     0
           ata-WDC_WD2000FYYZ-01UL1B1_WD-WCC1P1171516  ONLINE       0     0     0
           ata-WDC_WD20EZRX-19D8PB0_WD-WCC4M0428332    DEGRADED     0     0    63  too many errors
           ata-ST2000NM0011_Z1P07NVZ                   ONLINE       0     0     0
           ata-WDC_WD20EARX-00PASB0_WD-WCAZAJ490344    ONLINE       0     0     0
           wwn-0x50014ee20949b6f9                      DEGRADED     0     0    75  too many errors

我現在正處於十字路口。我通常dd將故障驅動器的前 2MB 歸零,然後用它自己替換,我可以這樣做,但是如果確實有數據失去,我可能需要最後兩個卷來恢復。

我現在桌子上有這個sdf,已刪除。我覺得我可以,在最壞的情況下,用這個來幫助恢復。

與此同時,我想我現在要對降級驅動器的前幾 MB 進行開發/歸零,並自行更換,我認為事情應該會解決,沖洗並重複第二個故障驅動器,直到我能得到一些替換手上。

問題 發生了什麼,池如何能夠掛起,或者我可能失去了一些數據(考慮到 zfs 及其報告的完整性,值得懷疑)

可能是由於幸運的失敗順序,例如失敗的堆棧的頂部驅動器?

問題 這只是僅供參考,與主題無關。是什麼導致所有 3 個同時失敗?我認為這是一種磨砂膏,它是催化劑。我前一天晚上檢查了所有驅動器都線上。

請注意,最近佈線一直是個問題,辦公室晚上很冷,但這些問題只是drive unavailable,而不是校驗和錯誤。我認為那不是佈線,而是老化的驅動器,它們已經 5 年了。但是一天3次失敗?來吧,這足以嚇到我們很多人!

RAID-Z2 是雙奇偶校驗,冗餘類似於 RAID 6。兩個磁碟可能完全失效,數據從奇偶校驗中恢復。假設陣列的其餘部分是健康的。

您不一定有 I/O 錯誤。DEGRADED 表示 ZFS 繼續使用磁碟,儘管有校驗和錯誤。也許是因為一些翻轉,但驅動器仍然可以工作。根據該輸出的連結

執行“zpool status -x”以確定哪個池出現錯誤。

查找 READ、WRITE 或 CKSUM 錯誤計數非零的設備。這表明設備遇到了讀取 I/O 錯誤、寫入 I/O 錯誤或校驗和驗證錯誤。由於該設備是鏡像或 RAID-Z 設備的一部分,因此 ZFS 能夠從錯誤中恢復並隨後修復損壞的數據。

如果這些錯誤持續一段時間,ZFS 可能會確定設備有故障並將其標記為故障。但是,這些錯誤計數可能表示或可能不表示設備不可用。

關於驅動器健康:

也許是老化的驅動器,它們已經 5 年了。但是一天3次失敗?來吧,這足以嚇到我們很多人!

現在備份恢復測試重要數據。來自不同的媒體,不是這個數組。

更換繼續降級的驅動器。肯定是核心在 syslog 中報告 I/O 錯誤。如果在保修或支持契約下,請利用這一點。如果通過保修,製造商打賭他們不會持續這麼久,所以要考慮到這一點。

引用自:https://serverfault.com/questions/1000026