宣告規則決定哪個多重路徑模組擁有特定儲存裝置的路徑。同時,還定義了主機向裝置提供的多重路徑支援的類型。

若要進一步瞭解多重路徑模組,請參閱多重路徑概念和縮寫

宣告規則已於 /etc/vmware/esx.conf 檔案中列出。

規則可分為這些類別:
  • 核心宣告規則 。這些宣告規則決定哪個多重路徑模組 (NMP、HPP 或第三方 MPP) 宣告特定裝置。
  • SATP 宣告規則。根據裝置類型,這些規則會將可提供廠商專屬多重路徑管理的特定 SATP 子模組指派給裝置。

您可以使用esxcli命令新增或變更核心和 SATP 宣告規則。通常,可新增宣告規則以載入第三方 MPP 或從主機隱藏 LUN。如果特定裝置的預設設定不足,可能需要變更宣告規則。

如需可用於管理 PSA 宣告規則的命令的詳細資訊,請參閱 ESXCLI 入門

如需儲存區陣列和對應 SATP 與 PSP 的清單,請參閱 vSphere Compatibility Guide的〈儲存區/SAN〉一節。

多重路徑考量事項

管理儲存區多重路徑外掛程式和宣告規則時,需注意一些特定考量事項。

下列考量事項可協助您使用多重路徑:

  • 如果宣告規則未將任何 SATP 指派給裝置,則 iSCSI 或 FC 裝置的預設 SATP 為 VMW_SATP_DEFAULT_AA。預設 PSP 為 VMW_PSP_FIXED。
  • 當系統搜尋 SATP 規則以找到指定裝置的 SATP 時,會首先搜尋驅動程式規則。如果沒有符合項,則搜尋廠商/型號規則,最後搜尋傳輸規則。如果未出現符合項,NMP 將選取裝置的預設 SATP。
  • 如果已將 VMW_SATP_ALUA 指派給某特定的儲存裝置,但該裝置無法感知 ALUA,該裝置將沒有任何符合的宣告規則。裝置將由預設 SATP 依據裝置的傳輸類型進行宣告。
  • 由 VMW_SATP_ALUA 宣告的所有裝置的預設 PSP 為 VMW_PSP_MRU。VMW_PSP_MRU 選取由 VMW_SATP_ALUA 報告的主動/最佳化的路徑,如果沒有主動/最佳化的路徑,則選取主動/未最佳化的路徑。在有更好的路徑可用 (MRU) 之前,將一直使用此路徑。例如,如果 VMW_PSP_MRU 目前正在使用主動/未最佳化的路徑,那麼,當主動/最佳化的路徑變為可用時,VMW_PSP_MRU 會將目前路徑切換到主動/最佳化的路徑。
  • 儘管依預設通常為 ALUA 陣列選取 VMW_PSP_MRU,但某些 ALUA 儲存區陣列仍需使用 VMW_PSP_FIXED。若要檢查儲存區陣列是否需要使用 VMW_PSP_FIXED,請參閱《VMware 相容性指南》或連絡儲存裝置廠商。如果將 VMW_PSP_FIXED 用於 ALUA 陣列,除非明確指定慣用路徑,否則 ESXi 主機將選取最佳的工作路徑,並將其指定為預設慣用路徑。如果主機選取的路徑無法使用,主機將選取替代的可用路徑。但是,如果您明確指定該慣用路徑,則無論其為何狀態,都將始終為慣用路徑。
  • 依預設,PSA 宣告規則 101 會遮罩 Dell 陣列虛擬裝置。除非您要取消遮罩這些裝置,否則請不要刪除此規則。

列出主機的多重路徑宣告規則

使用 esxcli 命令可列出可用的多重路徑宣告規則。

宣告規則指出管理指定實體路徑的是 NMP、HPP 還是第三方 MPP。每個宣告規則都會根據下列參數來識別一組路徑:

  • 廠商/型號字串
  • 傳輸,例如 SATA、IDE、光纖通道
  • 介面卡、目標或 LUN 位置
  • 裝置驅動程式 (如 Mega-RAID)

程序

  • 透過執行 esxcli storage core claimrule list --claimrule-class=MP 命令,列出多重路徑宣告規則。
    如果您不使用 claimrule-class 選項,則默許使用 MP 規則類別。

範例: esxcli storage core claimrule list 命令的輸出範例

Rule Class  Rule   Class    Type       Plugin     Matches
MP           10    runtime  vendor     HPP        vendor=NVMe model=*              
MP           10    file     vendor     HPP        vendor=NVMe model=*              
MP           50    runtime  transport  NMP        transport=usb
MP           51    runtime  transport  NMP        transport=sata
MP           52    runtime  transport  NMP        transport=ide
MP           53    runtime  transport  NMP        transport=block
MP           54    runtime  transport  NMP        transport=unknown
MP          101    runtime  vendor     MASK_PATH  vendor=DELL model=Universal Xport
MP          101    file     vendor     MASK_PATH  vendor=DELL model=Universal Xport
MP          200    runtime  vendor     MPP_1      vendor=NewVend model=* 
MP          200    file     vendor     MPP_1      vendor=NewVend model=* 
MP          201    runtime  location   MPP_2      adapter=vmhba41 channel=* target=* lun=* 
MP          201    file     location   MPP_2      adapter=vmhba41 channel=* target=* lun=* 
MP          202    runtime  driver     MPP_3      driver=megaraid 
MP          202    file     driver     MPP_3      driver=megaraid 
MP          65535  runtime  vendor     NMP        vendor=* model=*
此範例指示下列內容:
  • NMP 會宣告連線到使用 USB、SATA、IDE 和封鎖 SCSI 傳輸之儲存裝置的所有路徑。
  • 已新增 HPP、MPP_1、MPP_2,以及 MPP_3 的規則,以便模組可宣告指定的裝置。例如,HPP 宣告所有廠商 NVMe 裝置。無論實際廠商是誰,均會宣告由收件匣 nvme 驅動程式處理的所有裝置。MPP_1 模組會宣告連線到任何 NewVend 儲存區陣列型號的所有路徑。
  • 您可以使用 MASK_PATH 模組來隱藏主機中未使用的裝置。依預設,PSA 宣告規則 101 會遮罩廠商字串為 DELL 且型號字串為 Universal Xport 的 Dell 陣列虛擬裝置。
  • 輸出中的 [Rule Class] 資料行說明宣告規則的類別。類別可以是 MP (多重路徑外掛程式)、篩選器或 VAAI。
  • [Class] 資料行顯示已定義的規則和已載入的規則。[Class] 資料行中的 file 參數指示規則已定義。runtime 參數指示已將規則載入系統。若要讓使用者定義的宣告規則成為作用中狀態,必須存在兩個具有相同規則編號的行,一行用於採用 file 參數的規則,另一行用於採用 runtime 的規則。數個預設系統定義的宣告規則只有一行,其 Class 為 runtime。您無法修改這些規則。
  • 預設規則 65535 會將所有未宣告的路徑指派給 NMP。請勿刪除此規則。

新增多重路徑宣告規則

使用 esxcli 命令將多重路徑 PSA 宣告規則新增到系統上的宣告規則集。為啟用新宣告規則,請先定義規則,然後載入到系統中。

新增 PSA 宣告規則時的範例包括:
  • 載入新的第三方 MPP,且必須定義此模組宣告的路徑。
  • 您必須啟用原生 HPP。
警告: 您無法建立兩個不同外掛程式宣告同一個裝置的路徑的規則。嘗試建立這些宣告規則會失敗,並在 vmkernel.log 中顯示警告。

必要條件

安裝 ESXCLI。請參閱ESXCLI 入門。若要進行疑難排解,請在 ESXi Shell 中執行 esxcli 命令。

程序

  1. 若要定義新宣告規則,請使用下列命令:
    esxcli storage core claimrule add

    該命令採用下列選項:

    選項 說明
    -A|--adapter=<adapter> 要使用的路徑的介面卡。僅當 --typelocation 時有效。
    -u|--autoassign 根據特性新增宣告規則。不需要規則編號。
    -C|--channel=<channel> 要使用的路徑的通道。僅當 --typelocation 時有效。
    -c|--claimrule-class=<cl> 此作業中要使用的宣告規則類別。您可以指定 MP (預設值)、FilterVAAI

    若要為新陣列設定硬體加速,請新增兩個宣告規則,一個用於 VAAI 篩選器,而另一個用於 VAAI 外掛程式。如需詳細指示,請參閱新增硬體加速宣告規則

    -d|--device=<device_uid> 裝置的 UID。僅當 --typedevice 時有效。
    -D|--driver=<driver> 要使用的路徑的 HBA 驅動程式。僅當 --typedriver 時有效。
    -f|--force 強制宣告規則在任何情況下均略過有效性檢查並安裝規則。
    --force-reserved 對保留的規則識別碼範圍覆寫保護。

    保留的宣告規則是識別碼低於 100 的規則。您可以使用它們將本機裝置重新指派到特定外掛程式,例如將 NVMe 裝置重新指派到 HPP。

    --if-unset=<str> 如果此進階使用者變數未設定為 1,則執行該命令。
    -i|--iqn=<iscsi_name> 目標的 iSCSI 限定名稱。僅當 --typetarget 時有效。
    -L|--lun=<lun_id> 路徑的 LUN。僅當 --typelocation 時有效。

    LUN 識別碼不能大於進階組態選項 /Disk/MaxLUN 的值。

    -M|--model=<model> 要使用的路徑的型號。僅當 --typevendor 時有效。

    有效值為 SCSI 查詢字串中的型號字串值。在每個裝置上執行 vicfg-scsidevs <conn_options> -l 可查看型號字串值。

    -P|--plugin=<plugin> 要使用的 PSA 外掛程式。值是 NMPMASK_PATHHPP。第三方還可以提供自己的 PSA 外掛程式。必要。
    -r|--rule=<rule_ID> 要使用的規則識別碼。規則識別碼指示宣告規則的評估順序。會以 101 開始的數字順序評估使用者定義的宣告規則。

    您可以執行 esxcli storage core claimrule list 來判定哪些規則識別碼可用。

    -T|--target=<target> 要使用的路徑的目標。僅當 --typelocation 時有效。
    -R|--transport=<transport>

    要使用的路徑的傳輸。僅當 --typetransport 時有效。支援下列值。

    • block — 區塊儲存區
    • fc — 光纖通道
    • iscsivendor — iSCSI
    • iscsi — 目前未使用
    • ide — IDE 儲存區
    • sas — SAS 儲存區
    • sata — SATA 儲存區
    • usb — USB 儲存裝置
    • parallel — 平行
    • fcoe — FCoE
    • unknown
    -t|--type=<type> 要用於此作業的相符類型。有效值如下。必要。
    • vendor
    • location
    • driver
    • transport
    • device
    • target
    -V|--vendor=<vendor> 要使用的路徑的廠商。僅當 --typevendor 時有效。

    有效值為 SCSI 查詢字串中的廠商字串值。在每個裝置上執行 vicfg-scsidevs <conn_options> -l 可查看廠商字串值。

    --wwnn=<wwnn> 目標的全球節點編號。
    --wwpn=<wwpn> 目標的全球連接埠號碼。
    -a|--xcopy-use-array-values 使用陣列報告的值來建構 XCOPY 命令,以傳送到儲存區陣列。這僅適用於 VAAI 宣告規則。
    -s|--xcopy-use-multi-segs 發出 XCOPY 要求時,使用多個區段。僅當指定了 --xcopy-use-array-values 時有效。
    -m|--xcopy-max-transfer-size 使用的傳輸大小不同於陣列報告的大小時的最大資料傳輸大小 (以 MB 為單位)。僅當指定了 --xcopy-use-array-values 時有效。
    -k|--xcopy-max-transfer-size-kib 使用的傳輸大小不同於陣列報告的大小時,針對 XCOPY 命令的最大傳輸大小 (以 KiB 為單位)。僅當指定了 --xcopy-use-array-values 時有效。
  2. 若要將新宣告規則載入到系統中,請使用下列命令:
    esxcli storage core claimrule load
    此命令會將所有新建立的多重路徑宣告規則從 esx.conf 組態檔載入到 VMkernel。此命令沒有選項。
  3. 若要套用載入的宣告規則,請使用下列命令:
    esxcli storage core claimrule run

    該命令採用下列選項:

    選項 說明
    -A|--adapter=<adapter> 如果 --typelocation,則為宣告規則執行所在路徑的 HBA 名稱。若要從所有介面卡在路徑上執行宣告規則,請省略此選項。
    -C|--channel=<channel> 如果 --typelocation,則指示此作業中要使用的路徑的通道。若要在使用任何通道編號的路徑上執行宣告規則,請省略此選項。
    -c|--claimrule-class=<cl> 此作業中要使用的宣告規則類別。
    -d|--device=<device_uid> 裝置的 UID。
    -L|--lun=<lun_id> 如果 --typelocation,則指示在其上執行宣告規則之路徑的 LUN。若要在使用任何 LUN 的路徑上執行宣告規則,請省略此選項。
    -p|--path=<path_uid> 如果 --typepath,此選項會指示唯一路徑識別碼 (UID) 或宣告規則執行所在路徑的執行階段名稱。
    -T|--target=<target> 如果 --typelocation,則指示在其上執行宣告規則之路徑的目標。若要在使用任何目標編號的路徑上執行宣告規則,請省略此選項。
    -t|--type=<location|path|all> 要執行的宣告類型。依預設,會使用 all,這表示會在對特定路徑無限制的情況下執行宣告規則。有效值為 locationpathall
    -w|--wait 此選項必須與 --type all 搭配使用。

    如果包含此選項,宣告會等待路徑得以解決,然後再執行宣告作業。在此情況下,系統不會啟動宣告程序,直到系統上的所有路徑均已顯示,然後再啟動宣告程序。

    宣告程序啟動後,只有在完成裝置登錄後才會傳回命令。

    如果您在宣告或探索程序期間新增或移除路徑,此選項可能無法正常運作。

範例: 定義多重路徑宣告規則

在下列範例中,您可以新增並載入編號為 500 的規則。該規則會為 NMP 外掛程式宣告型號字串為 NewMod 以及廠商字串為 NewVend 的所有路徑。

# esxcli storage core claimrule add -r 500 -t vendor -V NewVend -M NewMod -P NMP

# esxcli storage core claimrule load

執行 esxcli storage core claimrule list 命令之後,您可以看到新宣告規則出現在清單中。

下列輸出指示宣告規則 500 已載入到系統中,且處於作用中狀態。
Rule Class  Rule   Class    Type       Plugin     Matches
...         ...    ...      ...        ...        ...
MP          500    runtime  vendor     NMP        vendor=NewVend model=NewMod  
MP          500    file     vendor     NMP        vendor=NewVend model=NewMod 

刪除多重路徑宣告規則

使用 esxcli 命令將多重路徑 PSA 宣告規則從系統上的宣告規則集移除。

必要條件

安裝 ESXCLI。請參閱ESXCLI 入門。若要進行疑難排解,請在 ESXi Shell 中執行 esxcli 命令。

程序

  1. 從宣告規則集刪除宣告規則。
    esxcli storage core claimrule remove
    備註: 依預設,PSA 宣告規則 101 會遮罩 Dell 陣列虛擬裝置。除非您要取消遮罩這些裝置,否則請不要刪除此規則。

    該命令採用下列選項:

    選項 說明
    -c|--claimrule-class=<str>

    指示宣告規則類別 (MP、篩選器和 VAAI)。

    -P|--plugin=<str> 指示外掛程式。
    -r|--rule=<long> 指示規則識別碼。
    此步驟將從 [檔案] 類別移除宣告規則。
  2. 從系統移除宣告規則。
    esxcli storage core claimrule load
    此步驟將從 [執行階段] 類別移除宣告規則。

遮罩路徑

可以阻止主機存取儲存裝置或 LUN,或阻止主機使用某個 LUN 的個別路徑。使用 esxcli 命令可遮罩路徑。遮罩路徑時,請建立宣告規則,將 MASK_PATH 外掛程式指派給指定路徑。

必要條件

安裝 ESXCLI。請參閱ESXCLI 入門。若要進行疑難排解,請在 ESXi Shell 中執行 esxcli 命令。

程序

  1. 查看下一個可用的規則識別碼是多少。
    esxcli storage core claimrule list
    用於遮罩路徑之宣告規則的規則識別碼都在 101 到 200 範圍內。如果此命令顯示規則 101 和 102 已經存在,則可以為要新增的規則指定 103。
  2. 透過為 MASK_PATH 外掛程式建立新的宣告規則,將該外掛程式指派給某個路徑。
    esxcli storage core claimrule add -P MASK_PATH
  3. 將 MASK_PATH 宣告規則載入系統中。
    esxcli storage core claimrule load
  4. 確認已新增正確的 MASK_PATH 宣告規則。
    esxcli storage core claimrule list
  5. 如果存在已遮罩路徑的宣告規則,則移除此規則。
    esxcli storage core claiming unclaim
  6. 執行路徑宣告規則。
    esxcli storage core claimrule run

結果

在將 MASK_PATH 外掛程式指派給路徑之後,路徑狀態變為不相關,且不再由主機進行維護。因此,顯示遮罩路徑資訊的命令可能將路徑狀態顯示為 [無作用]。

範例: 遮罩 LUN

在此範例中,遮罩目標 T1 和 T2 上,透過儲存裝置介面卡 vmhba2 和 vmhba3 存取的 LUN 20。

  1. #esxcli storage core claimrule list
  2. #esxcli storage core claimrule add -P MASK_PATH -r 109 -t location -A vmhba2 -C 0 -T 1 -L 20 
    #esxcli storage core claimrule add -P MASK_PATH -r 110 -t location -A vmhba3 -C 0 -T 1 -L 20 
    #esxcli storage core claimrule add -P MASK_PATH -r 111 -t location -A vmhba2 -C 0 -T 2 -L 20 
    #esxcli storage core claimrule add -P MASK_PATH -r 112 -t location -A vmhba3 -C 0 -T 2 -L 20
  3. #esxcli storage core claimrule load
  4. #esxcli storage core claimrule list
  5. #esxcli storage core claiming unclaim -t location -A vmhba2 
    #esxcli storage core claiming unclaim -t location -A vmhba3
  6. #esxcli storage core claimrule run

取消遮罩路徑

當需要主機存取被遮罩的儲存裝置時,請取消遮罩該裝置的路徑。

備註: 當您使用裝置內容 (例如裝置識別碼或廠商) 執行取消宣告作業時,不會取消宣告由 MASK_PATH 外掛程式宣告的路徑。MASK_PATH 外掛程式不會追蹤其宣告路徑的任何裝置內容。

必要條件

安裝 ESXCLI。請參閱ESXCLI 入門。若要進行疑難排解,請在 ESXi Shell 中執行 esxcli 命令。

程序

  1. 刪除 MASK_PATH 宣告規則。
    esxcli storage core claimrule remove -r rule#
  2. 確認已正確刪除該宣告規則。
    esxcli storage core claimrule list
  3. 將組態檔中的路徑宣告規則重新載入 VMkernel。
    esxcli storage core claimrule load
  4. 對於遮罩儲存裝置的每個路徑,執行 esxcli storage core claiming unclaim 命令。
    例如:

    esxcli storage core claiming unclaim -t location -A vmhba0 -C 0 -T 0 -L 149

  5. 執行路徑宣告規則。
    esxcli storage core claimrule run

結果

您的主機現在即可存取之前遮罩的儲存裝置。

定義 NMP SATP 規則

NMP SATP 宣告規則定義由哪一個 SATP 來管理儲存裝置。通常,您可以使用針對儲存裝置提供的預設 SATP。如果預設設定不足,請使用 esxcli 命令來變更特定裝置的 SATP。

當安裝特定儲存區陣列的第三方 SATP 時,可能需要建立 SATP 規則。

必要條件

安裝 ESXCLI。請參閱ESXCLI 入門。若要進行疑難排解,請在 ESXi Shell 中執行 esxcli 命令。

程序

  1. 若要新增特定 SATP 的宣告規則,請執行 esxcli storage nmp satp rule add 命令。該命令採用下列選項。
    選項 說明
    -b|--boot 此規則是在開機時新增的系統預設規則。請勿修改 esx.conf 或新增到主機設定檔。
    -c|--claim-option=string 新增 SATP 宣告規則時,設定宣告選項字串。
    -e|--description=string 新增 SATP 宣告規則時,設定宣告規則說明。
    -d|--device=string 新增 SATP 宣告規則時設定裝置。裝置規則與廠商/型號和驅動程式規則互斥。
    -D|--driver=string 新增 SATP 宣告規則時,設定驅動程式字串。驅動程式規則與廠商/型號規則互斥。
    -f|--force 強制宣告規則在任何情況下均略過有效性檢查並安裝規則。
    -h|--help 顯示說明訊息。
    -M|--model=string 新增 SATP 宣告規則時,設定型號字串。廠商/型號規則與驅動程式規則互斥。
    -o|--option=string 新增 SATP 宣告規則時,設定選項字串。
    -P|--psp=string 設定 SATP 宣告規則的預設 PSP。
    -O|--psp-option=string 設定 SATP 宣告規則的 PSP 選項。
    -s|--satp=string 將為其新增規則的 SATP。
    -R|--transport=string 新增 SATP 宣告規則時,設定宣告傳輸類型字串。
    -t|--type=string 新增 SATP 宣告規則時,設定宣告類型。
    -V|--vendor=string 新增 SATP 宣告規則時,設定廠商字串。廠商/型號規則與驅動程式規則互斥。
    備註: 搜尋 SATP 規則以尋找指定裝置的 SATP 時,NMP 會首先搜尋驅動程式規則。如果沒有相符項,則搜尋廠商/型號規則,最後搜尋傳輸規則。如果仍然沒有相符項,NMP 將選取裝置的預設 SATP。
  2. 將主機重新開機。

範例: 定義 NMP SATP 規則

下列範例命令將指派 VMW_SATP_INV 外掛程式,可管理廠商字串為 NewVend 和型號字串為 NewMod 的儲存區陣列。

# esxcli storage nmp satp rule add -V NewVend -M NewMod -s VMW_SATP_INV

如果執行 esxcli storage nmp satp list -s VMW_SATP_INV 命令,則可以查看新增到 VMW_SATP_INV 規則清單中的新規則。