ZFS 可在集區裝置上提供寫入快取功能,並於發生系統電源中斷時安全地處理快取清除。然而,也可能在資料尚未妥善存放至穩定的儲存體時就發生開機重設的情形。
在沒有單一失敗點的環境中,ZFS 會在下次讀取資料時自動偵測並更正這個狀況。定期集區清理可針對所有遺失的寫入作業提高偵測率和修復率。
在單一失敗點的環境中,此問題可能會導致資料遺失。
此問題在存取從叢集化配置匯出的 LUN 時可能會更頻繁地發生。在叢集容錯移轉期間,失敗端快取的資料可能因仍作用端之 SCSI 目標明確傳送的開機重設事件而遺失。在此情況下,即使是沒有單一失敗點的集區也可能受到影響。
此問題的徵兆是叢集持續發生總和檢查錯誤。您可以利用 fmdump –eV 的輸出來判斷總和檢查錯誤是否已經診斷為持續發生。fmdump –eV 輸出中的 zio_txg 項目代表寫入資料區塊的時間。請注意,持續發生的總和檢查錯誤也可能是裝置、軟體或硬體故障的徵兆。
解決方法:對於使用叢集匯出之 LUN 的系統或是含有單一失敗點的系統,請考慮停用系統上的裝置寫入快取。
執行下列步驟以針對 SCSI (sd) 或 FC (ssd) 裝置停用寫入快取並抑制快取清除。
依據您的儲存裝置,將 /kernel/drv/sd.conf 檔案或 /kernel/drv/ssd.conf 檔案複製到 /etc/driver/drv 目錄中。
編輯 /etc/driver/drv/sd.conf 檔案或 /etc/driver/drv/ssd.conf 檔案以停用寫入快取並抑制快取清除。
使用 sd (7D) 線上手冊中說明的適當值加入數行,來取代 VID、PID 或 SUN COMSTAR 的值。
SPARC 系統:
sd-config-list="SUN COMSTAR","disable-cache-suppress-flush"; disable-cache-suppress-flush=1,0x40010,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
x64 系統:
sd-config-list="SUN COMSTAR","disable-cache-suppress-flush"; disable-cache-suppress-flush=1,0x40008,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
重新啟動系統並覆寫快速重新啟動選項。
# reboot -p