Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.14. GFS2 撤出功能

GFS2「撤出」(withdraw)功能是一項在叢集中的 GFS2 檔案系統資料整合功能。若 GFS2 kernel 模組在進行了一項 I/O 作業後,偵測到了 GFS2 檔案系統中有不一致的情況,叢集便無法使用該檔案系統。I/O 作業將會停下,並且系統會等待之後的 I/O 作業因錯誤而停下,以避免造成更多的損害。當此情況發生時,您可手動式停下任何其它服務或應用程式,在這之後,您便能重新開機並重新掛載 GFS2 檔案系統,以重新執行日誌。若問題並未解決,您可卸載叢集中所有節點的檔案系統,並透過 fsck.gfs2 指令執行檔案系統復原。GFS 撤出功能的問題與會造成另一節點隔離該節點的 kernel panic 相較之下,比較沒這麼嚴重。
若您的系統啟用了 gfs2 開機 script,並且 GFS2 檔案系統包含在 /etc/fstab 檔案中的話,當您重新開機時,GFS2 檔案系統將會被重新掛載。若基於檔案系統損毀而發生了 GFS2 檔案系統撤出,建議您在重新掛載檔案系統之前,執行 fsck.gfs2 指令。在此情況下,若要避免您的檔案系統在開機時重新掛載,您可執行下列程序:
  1. 透過下列指令暫時性地停用受影響之節點上的開機 script:
    # chkconfig gfs2 off
  2. 重新啟動受影響的節點,啟用叢集軟體。GFS2 檔案系統將不會被掛載。
  3. 將檔案系統由叢集中的所有節點上卸載。
  4. 由單一節點的檔案系統上執行 fsck.gfs2 可確保檔案系統未損毀。
  5. 藉由執行下列指令,以在受影響的節點上重新啟用開機 script:
    # chkconfig gfs2 on
  6. 將叢集中所有節點上的 GFS2 檔案系統重新掛載。
另一個會造成 GFS2 撤出的不一致範例,是不正確的區塊計算。當 GFS kernel 由檔案系統中刪除掉了某個檔案時,它會系統性地移除所有與該檔案相聯的資料和 metadata 區塊。當完成後,它便會檢查區塊計算。若是區塊計算非 1 的話(代表只剩下磁碟 inode 本身),這表示檔案系統不一致,因為區塊計算與找到的區塊清單不符。
您可藉由指定 -o errors=panic 選項掛載檔案系統,以置換 GFS2 撤出功能。當指定了此選項時,任何原本會造成系統撤出的錯誤皆會使系統進入 panic 狀態。這將會停止節點的叢集通訊,並使節點被隔離。
就內部來說,GFS2 會透過 kernel 發送訊息到 gfs_controld daemon 要求撤出。gfs_controld daemon 會執行 dmsetup 程式,將 device mapper 目標的錯誤放到檔案系統下方,以避免更進一步存取區塊裝置。然後它會告訴 kernel 這項動作已經完成。這是支援 GFS2 需求的原因,好在 GFS2 下使用 CLVM 裝置;否則的話,就不可能插入 device mapper 目標。
device mapper 錯誤目標的緣由,是要確保接下來的所有 I/O 運作都會導致 I/O 錯誤,讓檔案系統按照順序卸載。因此,發生撤出事件時,您會看到系統日誌中,從 device mapper 裝置傳來的多個錯誤訊息,這是正常現象。
偶爾 dmsetup 程式無法插入錯誤目標,而導致無法撤出的現象。如果撤出時記憶體不足,同時因為撤出事件發生在前而無法回收記憶體,那麼就會發生這個問題。
發生撤出事件並不一定表示 GFS2 發生錯誤。有時候撤出功能可以透過底層區塊裝置的 I/O 錯誤而啟動。我們強烈建議您檢查日誌,看看是否發生這種情況。