Freebsd

ZFS vdev 會累積校驗和錯誤,但單個磁碟不會

  • September 19, 2016

我正在執行 FreeNAS 9.3 的特定於供應商的衍生產品。

當我安裝一個新的 JBOD 機箱向我的池中添加兩個新的 vdev 時,我的麻煩就開始了,而機箱的主機板壞了。在此期間,我看到壞板上的驅動器出現 SAS 電源錯誤——我的新驅動器每分鐘都在重複地打開和關閉。

我更換了主機板,現在,從大多數方面來看,驅動器執行良好,但是當我查看zpool status. 我認為當我遇到 SAS 電源問題時,有一些糟糕的 CoW 寫入。

帶有 CPU、引導驅動器、RAM 等的第一個機箱通過 mini-SAS 連接到第一個擴展 JBOD 機箱,第二個 JBOD 擴展機箱通過第一個 JBOD 擴展機箱以菊花鏈方式連接,也通過 mini-SAS。

  • $$ Chassis 1: boot drive, two L2ARC SSDs, 11/11 drives of RAIDZ3-0, 1/11 drives RAIDZ3-1 $$–>mini-SAS 到機箱 2
  • $$ Chassis 2: 10/11 drives of RAID Z3-1, 6/11 drives of RAID Z3-2 $$–>mini-SAS 到機箱 3
  • $$ Chassis 3: 5/11 drives of RAIDZ3-2, 11/11 drives of RAIDZ3-3 $$

校驗和錯誤不會整齊地映射到任何一個控制器或機箱,但我的直覺是,當我遇到這些電源問題時,寫入不同新磁碟的任何數據都在兩個新 vdev 上寫入錯誤。

我的 HBA 都在良好的 LSI 韌體上——全部都在 20.00.04.00 或 20.00.08.00

我已經更換了 mini-SAS 電纜,並嘗試使用不同的埠,但無濟於事。

的輸出zpool status顯示了兩個新 vdev 上累積的校驗和錯誤,並且在清理、重新啟動或zpool clear之後,最終將zpool status這些 vdev 標記為降級。奇怪的是,它還將屬於那些 vdev 的一些驅動器標記為降級,但它們的各個磁碟的實際錯誤計數都是 0。zdb表明各個驅動器被標記為降級,因為它們有太多的校驗和錯誤,即使他們所有的校驗和錯誤計數實際上都是 0。同樣奇怪的是池級校驗和錯誤顯示的數字低於兩個問題 vdev 加在一起的校驗和錯誤。

zpool status -v在映射到0x0早已被刪除但似乎無法通過多次清理、重新啟動或zpool clear. 此外,其他永久性錯誤會時不時出現,有時僅顯示為十六進制程式碼 inode,有時則顯示為最近快照的一部分。我找不到任何0x0.lsof

我相信池中的元數據可能存在某種數據損壞。

**我正在尋找一種方法來通過手術移除這些幻像快照,或者以其他方式將我的池恢復到健康狀態而不破壞我的數據。**我懷疑在某個地方,ZFS 正在迭代這些損壞的幻像快照,並導致奇怪的校驗和錯誤和 vdev 上的降級狀態。

我有很多重要數據的“冷”LTO 備份,但除此之外,如果我無法修復我的池,我正準備設置第二台伺服器,將所有內容解除安裝到“熱”的第二台伺服器,銷毀我的池在頂層,然後從熱備份重新載入。

這是輸出zpool status -v

[root@Jupiter] ~# zpool status -v
 pool: freenas-boot
state: ONLINE
status: One or more devices are configured to use a non-native block size.
       Expect reduced performance.
action: Replace affected devices with devices that support the configured block size, or migrate data to a properly configured pool.
 scan: resilvered 944M in 0h17m with 0 errors on Tue Aug  9 11:56:28 2016
config:

   NAME        STATE     READ WRITE CKSUM
   freenas-boot  ONLINE       0     0     0
     mirror-0  ONLINE       0     0     0
       da46p2  ONLINE       0     0     0  block size: 8192B configured, 8388608B native
       da47p2  ONLINE       0     0     0  block size: 8192B configured, 8388608B native

errors: No known data errors

 pool: pool
state: DEGRADED
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://illumos.org/msg/ZFS-8000-8A
 scan: scrub in progress since Fri Sep  9 22:43:51 2016
       6.27T scanned out of 145T at 1.11G/s, 35h27m to go
       0 repaired, 4.33% done
config:

   NAME                                            STATE     READ WRITE CKSUM
   pool                                            DEGRADED     0     0   118
     raidz3-0                                      ONLINE       0     0     0
       gptid/ac108605-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/ac591d4e-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/ac92fd0d-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/accd3076-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/ad067e97-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/ad46cbee-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/ad91ba17-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/adcbdd0a-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/ae07dc0d-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/ae494d10-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
       gptid/ae93a3a5-265c-11e5-9a02-0cc47a599098  ONLINE       0     0     0
     raidz3-1                                      ONLINE       0     0     0
       gptid/12f6a4c5-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/511ea1f9-1932-11e6-9b1e-0cc47a599098  ONLINE       0     0     0
       gptid/14436fcf-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/14f50aa3-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/159b5654-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/163d682b-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/16ee624e-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/1799dde3-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/184c2ea4-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/18f51c30-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
       gptid/19a861ea-c929-11e5-8075-0cc47a599098  ONLINE       0     0     0
     raidz3-2                                      DEGRADED     0     0   236
       gptid/5f80fc42-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/60369e0f-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/60e8234a-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/61a235f2-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/62580471-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/6316a38a-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/63d4bce8-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/ebfc2b99-6893-11e6-9b09-0cc47a599098  ONLINE       0     0     0
       gptid/654f143a-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/66236b33-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/66eda3f6-4e00-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
     raidz3-3                                      DEGRADED     0     0   176
       gptid/c77a9da9-4e02-11e6-b7cf-0cc47a599098  ONLINE       0     0     0
       gptid/c83e100e-4e02-11e6-b7cf-0cc47a599098  ONLINE       0     0     0
       gptid/c8fd9ced-4e02-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/c9bb21ba-4e02-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/ca7a48db-4e02-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/cb422329-4e02-11e6-b7cf-0cc47a599098  DEGRADED     0     0     0  too many errors
       gptid/cbfe4c21-4e02-11e6-b7cf-0cc47a599098  ONLINE       0     0     0
       gptid/ccc43528-4e02-11e6-b7cf-0cc47a599098  ONLINE       0     0     0
       gptid/cd93a34c-4e02-11e6-b7cf-0cc47a599098  ONLINE       0     0     0
       gptid/ce622f51-4e02-11e6-b7cf-0cc47a599098  ONLINE       0     0     0
       gptid/cf2591d3-4e02-11e6-b7cf-0cc47a599098  ONLINE       0     0     0
   cache
     gptid/aedd3872-265c-11e5-9a02-0cc47a599098    ONLINE       0     0     0
     gptid/af559c10-265c-11e5-9a02-0cc47a599098    ONLINE       0     0     0

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

       <0x357>:<0x2aef3>
       <0x37b>:<0x397285>
pool/.system@auto-20160720.2300-2d:<0x0>

通過 FreeNAS GUI,我嘗試將System dataset poolfrom複製poolfreenas-boot,然後嘗試使用zfs destroy刪除pool副本pool/.system並保持freenas-boot副本完好無損。我可以zfs destroy用來刪除 pool/.system列出的所有內容zfs list,但是在嘗試使用 銷毀pool/.systemzfs destroy,shell 返回了錯誤:Cannot iterate filesystems: I/O error根據Oracle ZFS 文件,我嘗試zfs destroy使用pool/.system、和標誌,但無濟於事。-f``-r``-R

我又開始了另一次磨砂。也許刪除副本上的pool/.system內容將允許清理使用幻像快照清除元數據錯誤。pool``System dataset pool``pool/.system@auto-20160720.2300-2d

我想知道是否可以對每個顯示為降級的磁碟進行重新同步,以便可以放棄沒有被引用的“壞”元數據。我已經重新同步了兩個磁碟,但現在我遇到了一個問題,其中重新同步任何其他磁碟會導致我已經重新同步的其他磁碟同時開始再次重新同步。我相信這可能是與定期快照任務相關的 ZFS 錯誤,我已經刪除了我的定期快照任務並銷毀了我所有的快照,但我猶豫是否嘗試重新同步另一個降級的驅動器害怕所有先前重新同步的磁碟將再次重新同步,使我沒有任何冗餘,最終導致池出現故障。

在禁用我的定期快照任務並刪除我的所有快照後,我嘗試擦除一個磁碟然後重新同步它,但是我已經重新同步的三個磁碟再次開始重新同步。現在我幾乎可以肯定,每個問題 RAID-Z3 vdev 都有兩個不同的磁碟可以重新同步,所以如果我嘗試重新同步更多磁碟,我將失去每個問題 vdev 和我的池中的冗餘會出錯。

另一種奇怪的行為是檢查zpool status -v實際上會逐漸增加池的校驗和錯誤計數,但檢查zpool status不會。就好像-v標誌本身正在迭代導致校驗和錯誤的任何機制。

在我的池中使用zdb -c是否能夠以某種方式“修復”這些元數據錯誤?

元數據損壞時,會出現0x0和其他十六進制數字,而不是文件名和其他對象。如果您無法通過破壞受影響的對象來擺脫它(我理解它們指的是快照),那麼損壞可能太大而無法修復。在這種情況下,我會從備份中恢復池,尤其是當您有更多奇怪的影響時,例如損壞的元數據出現和消失。

您可以在此處閱讀 ZFS 管理指南中有關如何解決大多數問題的方法。但是 ZFS 還為您提供了一個 URL,當您鍵入zpool status.

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