Centos

如何“修復” device-mapper-multipath 中的錯誤路徑

  • February 7, 2012

我有一個正在工作但現在顯示“錯誤”路徑的多路徑配置:

[root@nas ~]# multipath -ll
sdd: checker msg is "readsector0 checker reports path is down"
mpath1 (36001f93000a63000019f000200000000) dm-2 XIOTECH,ISE1400
[size=200G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=1][active]
\_ 1:0:0:1 sdb 8:16  [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 2:0:0:1 sdd 8:48  [active][faulty]

與此同時,我一遍又一遍地看到這三行/var/log/messages

Feb  5 12:52:57 nas kernel: sd 2:0:0:1: SCSI error: return code = 0x00010000
Feb  5 12:52:57 nas kernel: end_request: I/O error, dev sdd, sector 0
Feb  5 12:52:57 nas kernel: Buffer I/O error on device sdd, logical block 0

這條線也經常出現

Feb  5 12:52:58 nas multipathd: sdd: readsector0 checker reports path is down

我不明白的一件事是為什麼當我的文件說要使用時它使用readsector0檢查方法/etc/multipath.conf``tur

$$ root@nas ~ $$#tail -n15 /etc/multipath.conf

devices {
       device {
               vendor                  "XIOTECH "
               product                 "ISE1400         "
               path_grouping_policy    multibus
               getuid_callout          "/sbin/scsi_id -g -u -d /dev/%n"
               path_checker            tur
               prio_callout              "none"
               path_selector           "round-robin 0"
               failback                    immediate
               no_path_retry           12
               user_friendly_names yes
       }
}

在這裡查看上游文件,這一段似乎很相關: http ://christophe.varoqui.free.fr/usage.html

For each path:

\_ host:channel:id:lun devnode major:minor [path_status][dm_status_if_known]

The dm status (dm_status_if_known) is like the path status
(path_status), but from the kernel's point of view. The dm status has two
states: "failed", which is analogous to "faulty", and "active" which
covers all other path states. Occasionally, the path state and the 
dm state of a device will temporarily not agree. 

對我來說已經超過 24 小時,所以它不是暫時的。

因此,以所有這些作為背景,我的問題是

  • 我如何確定這裡的根本原因?

  • 我如何手動/命令行執行它所做的任何檢查

  • 為什麼它忽略我的 multipath.conf(我做錯了嗎?)

提前感謝您的任何想法,如果還有其他我可以提供的資訊,請在評論中告訴我,我會將其編輯到文章中。

您的 multipath.conf 中有一個細微的錯誤,供應商產品在正則表達式級別匹配,您添加了一系列前導空格導致 multipathd 無法將您的配置與系統上的實際設備匹配。如果您要檢查輸出,echo 'show config' | multipathd -k您會發現SAN 的兩個設備部分,一個匹配您添加的所有額外空間,以及內部數據庫提供的預設配置(如果存在)。

調整你的 multipath.conf 看起來像這樣:

           vendor                  "XIOTECH "
           product                 "ISE1400.*"

SCSI 查詢要求供應商欄位不超過 8 個以 ASCII 零結尾的字元,如果您不使用全部 8 個字元,則必須用空格填充該欄位以達到 8 個字元。Multipathd 正在根據法律條文解釋規範,"XIOTECH.*"如果您真的想確定,您也可以這樣做。

進行這些更改後,使用 initscripts 停止 multipathd,multipath -F 將刷新您的配置,然後再次啟動 multipathd。您的配置文件現在應該得到尊重。如果仍有問題,請重新啟動。

如果您懷疑您的配置文件沒有被遵守,請始終使用 echo 咒語檢查正在執行的配置,並將數據庫中載入的內容與您的配置文件進行比較。

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