跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文件 / 儲存管理指南 / 網路儲存 / 管理裝置的多重路徑 I/O
適用範圍 SUSE Linux Enterprise Server 12 SP5

17 管理裝置的多重路徑 I/O

本章描述如何透過使用多重路徑 I/O (MPIO) 管理伺服器和區塊儲存裝置間多重路徑的容錯移轉和路徑負載平衡。

17.1 瞭解多重路徑 I/O

多重路徑是指伺服器與相同實體或邏輯區塊儲存裝置在伺服器中的主機匯流排介面卡與裝置的儲存控制器之間、跨多重實體路徑進行通訊的能力,通常是在光纖通道 (FC) 或 iSCSI SAN 環境中進行。若有多個通道可用,您還可以與直接連接的儲存建立多個連接。

Linux 多重路徑提供了連接容錯功能並可在各主動連接之間實現負載平衡。設定並執行多重路徑時,會自動隔離並識別裝置連接失敗,並將 I/O 重新路由至替代連接。

常見的連接問題包括介面卡、纜線或控制器錯誤。為裝置設定多重路徑 I/O 後,多重路徑驅動程式將監控裝置間的主動連接。當多重路徑驅動程式偵測到主動路徑的 I/O 錯誤時,會將流量容錯移轉至裝置的指定次要路徑。偏好的路徑復原後,控制將返回至該路徑。

17.2 硬體支援

多重路徑驅動程式和工具支援 SUSE Linux Enterprise Server 適用的所有架構。它們支援大多數儲存陣列。儲存多重路徑裝置的儲存陣列必須支援多重路徑,這樣才能使用多重路徑驅動程式與工具。一些儲存陣列廠商會提供其自己的多重路徑管理工具。請參閱廠商的硬體文件以決定所需設定。

17.2.1 為多重路徑自動偵測儲存陣列

multipath-tools 套件會自動偵測以下儲存陣列︰

3PARdata VV
AIX NVDISK
AIX VDASD
APPLE Xserve RAID
COMPELNT Compellent Vol
COMPAQ/HP HSV101、HSV111、HSV200、HSV210、HSV300、HSV400、HSV 450
COMPAQ/HP MSA、HSV
COMPAQ/HP MSA VOLUME
DataCore SANmelody
DDN SAN DataDirector
DEC HSG80
DELL MD3000
DELL MD3000i
DELL MD32xx
DELL MD32xxi
DGC
EMC Clariion
EMC Invista
EMC SYMMETRIX
EUROLOGC FC2502
FSC CentricStor
FUJITSU ETERNUS_DX、DXL、DX400、DX8000
HITACHI DF
HITACHI/HP OPEN
HP A6189A
HP HSVX700
HP LOGICAL VOLUME
HP MSA2012fc、MSA 2212fc、MSA2012i
HP MSA2012sa、MSA2312 fc/i/sa、MCA2324 fc/i/sa、MSA2000s VOLUME
HP P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI
IBM 1722-600
IBM 1724
IBM 1726
IBM 1742
IBM 1745、1746
IBM 1750500
IBM 1814
IBM 1815
IBM 1818
IBM 1820N00
IBM 2105800
IBM 2105F20
IBM 2107900
IBM 2145
IBM 2810XIV
IBM 3303 NVDISK
IBM 3526
IBM 3542
IBM IPR
IBM Nseries
IBM ProFibre 4000R
IBM S/390 DASD ECKD
IBM S/390 DASD FBA
Intel Multi-Flex
LSI/ENGENIO INF-01-00
NEC DISK ARRAY
NETAPP LUN
NEXENTA COMSTAR
Pillar Axiom
PIVOT3 RAIGE VOLUME
SGI IS
SGI TP9100、TP 9300
SGI TP9400、TP9500
STK FLEXLINE 380
STK OPENstorage D280
SUN CSM200_R
SUN LCSM100_[IEFS]
SUN STK6580、STK6780
SUN StorEdge 3510、T4
SUN SUN_6180

一般說來,大多數其他儲存陣列應該都可使用。自動偵測到儲存陣列後,會套用多重路徑的預設設定。如果您需要非預設設定,則必須手動建立並設定 /etc/multipath.conf 檔案。這對不能自動偵測到的硬體也適用。如需更多資訊,請參閱第 17.6 節 「建立或修改 /etc/multipath.conf 檔案」

請考慮以下警告︰

17.2.2 經測試支援多重路徑的儲存陣列

下列廠商生產的儲存陣列已在 SUSE Linux Enterprise Server 上經過測試︰

EMC
Hitachi
Hewlett-Packard/Compaq
IBM
NetApp
SGI

大多數其他廠商提供的儲存陣列應該也可使用。請參閱廠商文件獲取指導原則。如需 multipath-tools 套件可辨識的預設儲存陣列清單,請參閱第 17.2.1 節 「為多重路徑自動偵測儲存陣列」

17.2.3 需要特定硬體處理器的儲存陣列

從一個路徑到另一個路徑的容錯移轉時需要特殊指令的儲存陣列,或需要特殊非標準錯誤處理的儲存陣列,可能都需要額外的延伸支援。因此,裝置對應程式多重路徑服務已配備用於硬體處理器的插入程式。例如,已針對 EMC CLARiiON CX 陣列系列提供一個此類處理器。

重要
重要:更多資訊

請參閱硬體廠商文件,以確定是否必須安裝硬體處理器以用於裝置對應程式多重路徑。

multipath -t 指令可顯示需要使用特定硬體處理器進行特殊處理之儲存陣列的內部表格。所顯示的清單不是受支援儲存陣列的完整清單。它列出的僅僅是需要特殊處理的陣列,以及 multipath-tools 開發人員在開發該工具期間有存取權限的陣列。

重要
重要:例外

真正支援主動/主動多重路徑的陣列不需要特殊處理,因此 multipath -t 指令不會列出此類陣列。

multipath -t 表格中的清單內容並不表示已在該特定硬體上進行 SUSE Linux Enterprise Server 測試。如需經過測試的儲存陣列清單,請參閱第 17.2.2 節 「經測試支援多重路徑的儲存陣列」

17.3 規劃多重路徑

使用本節中的準則規劃多重路徑 I/O 解決方案。

17.3.1 先決條件

  • 多重路徑在裝置層級進行管理。

  • 您用於多重路徑裝置的儲存陣列必須支援多重路徑。如需詳細資訊,請參閱第 17.2 節 「硬體支援」

  • 只有在伺服器中的主機匯流排配接器和區塊儲存裝置的主機匯流排控制器之間存在多重實體路徑時,才需要設定多重路徑。應按伺服器所見為邏輯裝置設定多重路徑。

  • 對於某些儲存陣列,廠商提供了自己的多重路徑軟體來管理陣列之實體和邏輯裝置的多重路徑。在這種情況下,您應根據廠商的指示設定那些裝置的多重路徑。

  • 在虛擬化環境中使用多重路徑時,將在主機伺服器環境中控制多重路徑。請先設定裝置的多重路徑,然後才能將其指派給虛擬訪客機器。

17.3.2 磁碟管理任務

請先執行以下磁碟管理任務,再嘗試為具有多路徑的實體或邏輯裝置設定多重路徑︰

  • 使用協力廠商工具將實體磁碟分割為數個較小的邏輯磁碟。

  • 使用協力廠商工具分割實體磁碟或邏輯磁碟。如果您變更正在執行系統中的分割區,則裝置對應程式多重路徑 (DM-MP) 模組將不會自動偵測並反映這些變更。DM-MPIO 必須重新啟始化,這通常需要重新開機。

  • 使用協力廠商 SAN 陣列管理工具建立並設定硬體 RAID 裝置。

  • 使用協力廠商 SAN 陣列管理工具建立邏輯裝置,例如 LUN。指定陣列所支援的邏輯裝置類型由陣列廠商決定。

17.3.3 軟體 RAID

Linux 軟體 RAID 管理軟體在多重路徑的最上層執行。對於每個具有多重 I/O 路徑的裝置和要用於軟體 RAID 的裝置來說,您必須先設定多重路徑的裝置,然後才能嘗試建立軟體 RAID 裝置。無法自動探查多重路徑裝置。軟體 RAID 無法知曉多重路徑管理是否於後台執行。

如需為現有軟體 RAID 設定多重路徑的相關資訊,請參閱第 17.12 節 「設定現有軟體 RAID 的多重路徑 I/O」

17.3.4 高可用性解決方案

叢集儲存資源的高可用性解決方案在每個節點上之多重路徑服務的基礎上執行。請確定每個節點上 /etc/multipath.conf 檔案中的組態設定在整個叢集中保持一致。

確定多重路徑裝置在所有裝置中的名稱都相同。如需詳細資訊,請參閱第 17.9.1 節 「HA 叢集中的多重路徑裝置名稱」

用於 LAN 鏡像複製裝置的分散式複製區塊裝置 (DRBD) 高可用性解決方案在多重路徑的基礎上執行。對於每個具有多重 I/O 路徑的裝置和要用於 DRDB 解決方案的裝置來說,您必須先設定多重路徑的裝置,然後才能設定 DRDB。

17.3.5 永遠讓 initrd 與系統組態保持同步

使用多重路徑時最重要的一項目要求是,需確認在根檔案系統及系統開機所需的所有其他檔案系統方面,initrd 與已安裝的系統行為一致。如果在系統中啟用了多重路徑,那麼也需要在 initrd 中啟用多重路徑,反之亦然。如需詳細資料,請參閱第 17.5.1 節 「啟用、停用、啟動和停止多重路徑 I/O 服務」

如果 initrd 與系統不同步,系統將無法正常開機,啟動程序將顯示應急外圍程序。如需如何避免或修復此類情況的說明,請參閱第 17.15.1 節 「啟用多重路徑時系統在開機過程中退出到緊急外圍程序」

17.4 多重路徑管理工具

SUSE Linux Enterprise Server 中的多重路徑支援以 Linux 核心的裝置對應程式多重路徑模組及 multipath-tools 使用者空間套件為基礎。使用多裝置管理公用程式 (multipath) 可以檢視多重路徑裝置的狀態。

17.4.1 裝置對應程式多重路徑模組

裝置對應程式多重路徑 (DM-MP) 模組為 Linux 提供了多重路徑功能。DM-MPIO 是在 SUSE Linux Enterprise Server 中實作多重路徑的較好解決方案。它是該產品提供的唯一一個多重路徑選項,完全受 SUSE 支援。

DM-MPIO 可自動設定多重路徑子系統的多種設定。每個裝置最多可設定 8 個路徑。模組支援主動/被動 (一個主動路徑,其他均為被動路徑) 或主動/主動 (所有路徑均為主動路徑,使用輪替式負載平衡) 組態。

DM-MPIO 框架可以採用以下兩種方式進行擴充︰

DM-MPIO 的使用者空間元件會自動探查路徑並進行分組,還會自動重新測試路徑,以便在先前失敗的路徑恢復正常時,能自動重新啟用該路徑。這樣會將管理員對生產環境的關注需求降到最低。

DM-MPIO 防範的是裝置路徑中的失敗,而不是裝置本身的失敗。如果其中一個主動路徑遺失 (例如網路卡損壞或光纖纜線被移開),則 I/O 會重新導向到其餘的路徑。如果組態為主動/被動模式,則路徑會容錯移轉到其中一個被動路徑。如果您使用的是輪替式負載平衡組態,則流量會分流到其餘的正常路徑。如果所有主動路徑都失敗,則必須喚醒非主動的次要路徑,因此需經過大約 30 秒的延遲之後才會開始容錯移轉。

如果磁碟陣列有多個儲存處理器,請確保 SAN 交換器已連接到您要存取的 LUN 所屬的儲存處理器。在大多數磁碟陣列中,所有 LUN 都屬於兩個儲存處理器,因此兩個連接都處於主動模式。

注意
注意:儲存處理器

在有些磁碟陣列中,儲存陣列透過儲存處理器來管理流量,因此每次只會顯示一個儲存處理器。一個處理器為主動,另外一個為被動,直到發生了失敗。如果您連接到錯誤的儲存處理器 (路徑為被動的處理器),則可能找不到所需的 LUN,或雖然找到了 LUN,但在嘗試存取時會發生錯誤。

表 17.1︰ 儲存陣列的多重路徑 I/O 功能

儲存陣列的功能

描述

主動/被動控制器

只有一個控制器處於主動狀態,並服務所有的 LUN。次要控制器處於待命狀態。次要控制器也會將 LUN 提供給多重路徑元件,以便作業系統瞭解備援路徑的情況。如果主要控制器失敗,則由次要控制器接管其工作並服務所有 LUN。

在某些陣列中,可將 LUN 指定給不同的控制器。將指定的 LUN 指定給要做為其主動控制器的控制器。每次當一個控制器為任何 LUN 執行磁碟 I/O 時,另一個控制器就為該 LUN 保持待命狀態。另外的那個控制器也會提供路徑,但無法執行磁碟 I/O。使用該 LUN 的伺服器會連接到 LUN 的指定控制器。如果一組 LUN 的主要控制器失敗,則由次要控制器接管其工作並服務所有 LUN。

主動/主動控制器

兩個控制器共享所有 LUN 的負載,可以處理任何 LUN 的磁碟 I/O。如果一個控制器失敗,另一個控制器便會自動處理所有流量。

載入平衡

裝置對應程式多重路徑驅動程式會自動對通過所有主動路徑的流量進行負載平衡控制。

控制器容錯移轉

主動控制器容錯移轉到被動 (或待命) 控制器時,裝置對應程式多重路徑驅動程式會自動啟動主機與待命之間的路徑,使其成為主要路徑。

開機/根裝置支援

SUSE Linux Enterprise Server 10 及更高版本提供對根 (/) 裝置的多重路徑支援。主機伺服器必須連接到開機裝置目前的主動控制器與儲存處理器。

SUSE Linux Enterprise Server 11 及更高版本提供了對 /boot 裝置的多重路徑支援。

裝置對應程式多重路徑會偵測每個路徑,查看有無多重路徑裝置做為獨立的 SCSI 裝置。SCSI 裝置名稱採用的格式為 /dev/sdN,其中 N 是為裝置自動產生的字母,從 a 開始,並隨著裝置的建立依序發佈,例如 /dev/sda/dev/sdb,依此類推。如果裝置數量超過 26 個,則字母將會重複,這樣,/dev/sdz 之後的裝置將命名為 /dev/sdaa/dev/sdab,依此類推。

如果有多個路徑未自動偵測到,則您可以在 /etc/multipath.conf 檔案中手動設定。在您建立並設定 multipath.conf 檔案之前,該檔案並不存在。如需更多資訊,請參閱第 17.6 節 「建立或修改 /etc/multipath.conf 檔案」

17.4.2 多重路徑 I/O 管理工具

套件 multipath-toolskpartx 提供了執行自動路徑探查和分組的工具。它們會週期性地自動測試路徑,這樣,先前失敗的路徑在恢復正常後,便可自動重新啟用。這樣會將管理員對生產環境的關注需求降到最低。

表 17.2︰ multipath-tools 套件中的工具

工具

描述

multipath

對系統進行掃描,找出多重路徑裝置並進行組合。

multipathd

等待對應事件,然後執行 multipath

kpartx

將線性 devmaps 對應到多重路徑裝置中的分割區,這樣能夠建立對裝置中各分割區的多重路徑監控。

mpathpersist

管理裝置對應程式多重路徑裝置上的 SCSI 永久保留。

17.4.3 對多重路徑裝置使用 MDADM

Udev 是預設的裝置處理器,該系統可透過 Worldwide ID (而不是裝置節點名稱) 自動識別裝置。這解決了 MDADM 與 LVM 的先前版本中組態檔案 (mdadm.conflvm.conf) 無法正確辨識多重路徑裝置的問題。

與 LVM2 一樣,MDADM 也要求透過 ID 而非裝置節點路徑存取裝置。因此,應使用如下指令設定 /etc/mdadm.conf 中的 DEVICE 項目︰

DEVICE /dev/disk/by-id/*

若您使用的是使用者易記名稱,請按照以下方式指定路徑,以便在設定多重路徑之後僅掃描裝置對應程式名稱︰

DEVICE /dev/disk/by-id/dm-uuid-.*-mpath-.*

17.4.4 multipath 指令

使用 Linux multipath(8) 指令可以設定並管理多重路徑裝置。該指令的一般語法如下所示︰

multipath [-v verbosity_level] [-b bindings_file] [-d] [-h|-l|-ll|-f|-F|-B|-c|-q|-r|-w|-W|-t] [-p failover|multibus|group_by_serial|group_by_prio|group_by_node_name] [DEVICENAME]

如需詳細資料,請參閱 man 8 multipath

一般範例

multipath

設定所有多重路徑裝置。

multipath DEVICENAME

設定特定的多重路徑裝置。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -f

選擇性隱藏多重路徑對應及其對應裝置的分割區。

multipath -d

模擬執行。顯示潛在的多重路徑裝置,但不建立任何裝置,也不更新裝置對應。

multipath -v2 -d

顯示試執行中潛在多重路徑裝置的多重路徑對應資訊。使用 -v2 選項可僅顯示本地磁碟。此詳細層級會列印已建立或已更新的多重路徑名稱,僅用於為 kpartx 等其他工具提供資訊。

如果裝置已存在且沒有變更,則不會輸出內容。使用 multipath -ll 可查看已設定多重路徑裝置的狀態。

multipath -v2 DEVICENAME

設定特定的潛在多重路徑裝置並顯示其多重路徑對應資訊。此詳細層級僅會列印已建立或已更新的多重路徑名稱,用於為 kpartx 等其他工具提供資訊。

如果裝置已存在且沒有變更,則不會輸出內容。使用 multipath -ll 可查看已設定多重路徑裝置的狀態。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -v3

設定潛在的多重路徑裝置並顯示其多重路徑對應資訊。此詳細層級會列印所有已刪除的路徑、多重路徑和裝置對應。WWID 與 devnode 列入黑名單的裝置都會顯示。

multipath -v3 DEVICENAME

設定特定的潛在多重路徑裝置並顯示其資訊。使用 -v3 選項會顯示完整路徑清單。此詳細層級會列印所有已刪除的路徑、多重路徑和裝置對應。WWID 與 devnode 列入黑名單的裝置都會顯示。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -ll

顯示所有多重路徑裝置的狀態。

multipath -ll DEVICENAME

顯示指定多重路徑裝置的狀態。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -F

衝洗所有未使用的多重路徑裝置對應。這會取消解析多個路徑,但不會刪除裝置。

multipath -F DEVICENAME

衝洗指定多重路徑裝置之未使用的多重路徑裝置對應。這會取消解析多個路徑,但不會刪除該裝置。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -p [ failover | multibus | group_by_serial | group_by_prio | group_by_node_name ]

透過指定下表中所述的其中一個群組規則選項,來設定群組規則︰

表 17.3︰ multipath -p 指令的群組規則選項

規則選項

描述

failover

(預設) 每個優先程度群組對應一個路徑。每次只能使用一個路徑。

multibus

所有路徑都在一個優先程度群組中。

group_by_serial

每個偵測到的 SCSI 序號 (控制器節點全球號碼) 對應一個優先程度群組。

group_by_prio

每個路徑優先程度值對應一個優先程度群組。優先程度相同的路徑位於同一個優先程度群組中。優先程度由註標程式決定,在 /etc/multipath.conf 組態檔案中指定為 global、per-controller 或 per-multipath 選項。

group_by_node_name

每個目標節點名稱對應一個優先程度群組。目標節點名稱取自 /sys/class/fc_transport/target*/node_name 位置。

multipath -t

顯示內部硬體表和使用中的多重路徑組態。如需組態參數的詳細資料,請參閱 man multipath

17.4.5 mpathpersist 公用程式

mpathpersist 公用程式可用來管理裝置對應程式多重路徑裝置上的 SCSI 永久保留。該指令的一般語法如下所示︰

mpathpersist [options] [device]

如需詳細資料,請參閱 man 8 mpathpersist

將此公用程式與 /etc/multipath.conf 檔案中的服務動作保留金鑰 (reservation_key 屬性) 配合使用,可設定 SCSI 裝置的永久保留。系統預設不會使用該屬性。如果未設定該屬性,multipathd 精靈將不會檢查新探查到的路徑或已重新啟用之路徑的永久保留。

reservation_key <RESERVATION_KEY>

您可以將該屬性新增至 defaults 區段或 multipaths 區段。例如︰

multipaths {
  multipath {
    wwid   XXXXXXXXXXXXXXXX
    alias      yellow
    reservation_key  0x123abc
  }
}

為所有適合永久管理的多重路徑裝置設定 reservation_key 參數,然後執行以下指令來重新啟動 multipathd 精靈︰

sudo systemctl restart multipathd

設定它之後,您可以在 mpathpersist 指令中指定保留金鑰。

範例

mpathpersist --out --register --param-sark=123abc --prout-type=5 -d /dev/mapper/mpath9

註冊 /dev/mapper/mpath9 裝置的服務動作保留金鑰。

mpathpersist -i -k -d /dev/mapper/mpath9

讀取 /dev/mapper/mpath9 裝置的服務動作保留金鑰。

mpathpersist --out --reserve --param-sark=123abc --prout-type=8 -d /dev/mapper/mpath9

保留 /dev/mapper/mpath9 裝置的服務動作保留金鑰。

mpathpersist -i -s -d /dev/mapper/mpath9

讀取 /dev/mapper/mpath9 裝置的保留狀態。

17.5 設定系統以進行多重路徑

17.5.1 啟用、停用、啟動和停止多重路徑 I/O 服務

若要允許多重路徑服務在開機時啟動,請執行以下指令︰

sudo systemctl enable multipathd

若要在執行中系統內手動啟動服務,或是檢查其狀態,請輸入以下其中一個指令︰

sudo systemctl start multipathd
sudo systemctl status multipathd

若要在目前的工作階段中停止多重路徑服務,以及停用該服務以便在系統下次開機時不啟動它,請執行以下指令︰

sudo systemctl stop multipathd
sudo systemctl disable multipathd
重要
重要:重建 initrd

每次啟用或停用多重路徑服務時,還需要重建 initrd,否則系統可能無法再開機。啟用多重路徑服務時,還需執行以下指令以重建 initrd︰

dracut --force --add multipath

停用服務時,則執行以下指令以重建 initrd︰

dracut --force -o multipath

(選擇性) 此外,如果您還想確保不會設定多重路徑裝置 (即使手動啟動了多重路徑),請在重建 initrd 之前,將以下幾行新增到 /etc/multipath.conf 的結尾處︰

blacklist {
    wwid ".*"
}

17.5.2 準備 SAN 裝置以進行多重路徑

在為 SAN 裝置設定多重路徑 I/O 之前,請視需要執行以下步驟準備 SAN 裝置︰

  • 使用廠商工具對 SAN 進行設定並分區。

  • 使用廠商工具設定儲存陣列中主機 LUN 的許可權。

  • 安裝 Linux HBA 驅動程式模組。安裝模組時,驅動程式會自動掃描 HBA 以探查任何擁有存取主機的許可權的 SAN 裝置。驅動程式會將這些裝置提交至主機以供稍後設定之用。

    注意
    注意:無原生多重路徑

    請確定您使用的 HBA 驅動程式沒有啟用原生多重路徑。

    如需更多詳細資料,請參閱廠商的特定指示。

  • 載入驅動程式模組後,探查指定給特定陣列 LUN 或分割區的裝置節點。

  • 如果 SAN 裝置將做為伺服器上的根裝置使用,請依第 17.14.9 節 「根裝置為多重路徑裝置時的 SAN 逾時設定」 中所述修改該裝置的逾時設定。

如果 HBA 驅動程式無法探查到 LUN,可使用 lsscsi 來檢查作業系統是否能正常探查到 SCSI 裝置。如果 HBA 驅動程式無法探查到 LUN,請檢查 SAN 的分區設定。尤其是要檢查 LUN 遮罩是否處於使用中,且 LUN 是否正確地指定給伺服器。

如果 HBA 驅動程式可以探查到 LUN,但不存在相應的區塊裝置,則還需要其他核心參數來變更 SCSI 裝置的掃描行為,如指出 LUN 沒有連續編號。如需相關資訊,請參閱 SUSE 知識庫中的 TID 3955167︰Troubleshooting SCSI (LUN) Scanning Issues (SCSI (LUN) 掃描問題疑難排解),網址為 https://www.suse.com/support/kb/doc.php?id=3955167

17.5.3 分割多重路徑裝置

不建議對含有多個路徑的裝置進行磁碟分割,但這項操作是受支援的。使用 kpartx 工具無需重新開機即可在多重路徑裝置中建立分割區。在嘗試使用 YaST 中的分割程式功能或使用協力廠商分割工具設定多重路徑之前,也可以製做裝置的分割區。

多重路徑裝置是裝置對應程式裝置。雖然使用指令行工具 (例如 parted、kpartx 或 fdisk) 可以修改裝置對應程式裝置,但並不一定會產生更新其他層所需的 udev 事件。分割裝置對應程式裝置之後,您應該檢查多重路徑對應,確保已對應裝置對應程式裝置。如果未對應它們,您可以重新對應多重路徑裝置,或將伺服器重新開機,以取得多重路徑對應中的所有新分割區。

多重路徑裝置上一個分割區的裝置對應程式裝置不同於一個獨立裝置。使用整個裝置建立 LVM 邏輯磁碟區時,必須指定不包含分割區的裝置。如果您將多重路徑分割區指定為 LVM 邏輯磁碟區的目標裝置,則 LVM 會認為基礎實體裝置已分割,導致建立失敗。如果您需要細分 SAN 裝置,可以拆分 SAN 裝置上的 LUN,並將每個 LUN 做為獨立的多重路徑裝置顯示給伺服器。

17.6 建立或修改 /etc/multipath.conf 檔案

在您建立 /etc/multipath.conf 檔案之前,該檔案並不存在。multipathd 精靈執行時會自動套用預設多重路徑裝置設定,除非您建立多重路徑組態檔案並進行個人化設定。

重要
重要: 測試及永久性套用 /etc/multipath.conf 中的變更

每次建立或修改 /etc/multipath.conf 檔案時,都不會在儲存檔案後自動套用變更。這樣,您便可以在提交變更之前,先進行試執行以驗證這些變更。若對修改後的設定滿意,便可依照第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」中所述來更新多重路徑對應。

17.6.1 建立 /etc/multipath.conf 檔案

  1. 使用慣用的編輯器建立一個空的 /etc/multipath.conf 檔案。

  2. 請務必為您的 SAN 新增相應的 device 區段。大多數廠商會提供有關正確設定 device 區段的文件。請注意,不同的 SAN 需要單獨的 device 區段。

    若要使用自動偵測到的儲存子系統 (請參閱第 17.2.1 節 「為多重路徑自動偵測儲存陣列」),則不需要新增 device,因為在此情況下將會套用此裝置的預設設定。

  3. 建立 blacklist 區段,在其中包含機器的所有非多重路徑裝置。如需詳細資訊,請參閱第 17.8 節 「將非多重路徑裝置列入黑名單」

  4. 如果需要,請新增更多區段至組態檔案。如需簡要介紹,請參閱第 17.6.2 節 「/etc/multipath.conf 檔案中的區段」。執行 man 5 multipath.conf 時會有更多詳細資料可用。

  5. 完成後,請儲存 /etc/multipath.conf 並依照第 17.6.3 節 「驗證 /etc/multipath.conf 檔案中的多重路徑設定」中所述測試您的設定。

  6. 成功驗證組態後,請依照第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」中所述套用組態。

17.6.2 /etc/multipath.conf 檔案中的區段

/etc/multipath.conf 檔案由下列區段構成。如需詳細資料,請參閱 man 5 multipath.conf

defaults

多重路徑 I/O 的一般預設設定。如果在相應的裝置或多重路徑區段中未提供值,則會使用這些值。如需更多資訊,請參閱第 17.7 節 「設定輪詢、排入佇列和錯誤回復的預設規則」

blacklist

列出因不是多重路徑候選而要丟棄的裝置名稱。裝置可透過其裝置節點名稱 (devnode)、WWID (wwid)、廠商或產品字串 (device) 來識別。您一般可能會忽略非多重路徑裝置,例如 hpsafdhdmddmsrscdstramrawloop。如需更多資訊和範例,請參閱第 17.8 節 「將非多重路徑裝置列入黑名單」

blacklist_exceptions

列出即使不在黑名單上也要被視為多重路徑候選之裝置的裝置名稱。裝置可透過其裝置節點名稱 (devnode)、WWID (wwid)、廠商或產品字串 (device) 來識別。您必須使用黑名單中所用之相同關鍵字來指定排除的裝置。例如,如果在黑名單中將 devnode 關鍵字用於裝置,則要使用 devnode 關鍵字來排除黑名單例外中的某些裝置。您無法使用 devnode 關鍵字將裝置列入黑名單,也無法使用 wwid 關鍵字排除其中某些裝置。如需更多資訊和範例,請參閱第 17.8 節 「將非多重路徑裝置列入黑名單」

multipaths

指定個別多重路徑裝置的設定。除了不支援個別設定的設定以外,這些值會覆寫組態檔案之 defaultsdevices 區段中所指定的內容。

devices

指定個別儲存控制器的設定。這些值會覆寫組態檔案之 defaults 區段中所指定的值。如果使用預設不支援的儲存陣列,則可以建立 devices 子區段來指定其預設設定。如果關鍵字允許,可以用個別多重路徑裝置的設定覆寫這些值。

如需資訊,請參閱以下章節︰

17.6.3 驗證 /etc/multipath.conf 檔案中的多重路徑設定

每次建立或修改 /etc/multipath.conf 檔案時,都不會在儲存檔案後自動套用變更。您可以在更新多重路徑對應之前,先執行設定的試執行來驗證多重路徑設定。

在伺服器命令提示字元中輸入

sudo multipath -v2 -d

此指令會掃描裝置,然後顯示提交變更時設定將產生的效果。假設在您修改 /etc/multipath.conf 檔案並進行試執行時,multipathd 精靈已使用舊 (或預設) 的多重路徑設定執行。如果變更可接受,請繼續執行下一步。

輸出類似下方所列︰

26353900f02796769
[size=127 GB]
[features="0"]
[hwhandler="1    emc"]

\_ round-robin 0 [first]
  \_ 1:0:1:2 sdav 66:240  [ready ]
  \_ 0:0:1:2 sdr  65:16   [ready ]

\_ round-robin 0
  \_ 1:0:0:2 sdag 66:0    [ready ]
  \_ 0:0:0:2 sdc   8:32   [ready ]

路徑會分為不同的優先程度群組。每次只有一個優先程度群組處於主動狀態。若要塑造主動/主動組態,所有路徑都必須分在相同的群組。若要塑造主動/被動組態,不應同時處於主動狀態的路徑要放置於幾個不同的優先程度群組中。這通常會在裝置探查時自動進行。

輸出會顯示順序、群組中用來平衡 I/O 的排程規則,以及各優先程度群組的路徑。對於每個路徑,會顯示其實體位址 (host:bus:target:lun)、裝置節點名稱、主要和次要的裝置編號和狀態。

透過在試執行中使用 -v3 詳細層級,可以查看所有已刪除的路徑、多重路徑和裝置對應。WWID 與裝置節點列入黑名單的裝置都會顯示。

下面的範例顯示了有兩個 Qlogic HBA 連接至 Xiotech Magnitude 3000 SAN 之 64 位元 SLES 11 SP2 伺服器上的 -v3 輸出。為精簡範例,省略了一些多重項目。

tux > sudo multipath -v3 d
dm-22: device node name blacklisted
< content omitted >
loop7: device node name blacklisted
< content omitted >
md0: device node name blacklisted
< content omitted >
dm-0: device node name blacklisted
sdf: not found in pathvec
sdf: mask = 0x1f
sdf: dev_t = 8:80
sdf: size = 105005056
sdf: subsystem = scsi
sdf: vendor = XIOtech
sdf: product = Magnitude 3D
sdf: rev = 3.00
sdf: h:b:t:l = 1:0:0:2
sdf: tgt_node_name = 0x202100d0b2028da
sdf: serial = 000028DA0014
sdf: getuid= "/lib/udev/scsi_id --whitelisted --device=/dev/%n" (config file default)
sdf: uid = 200d0b2da28001400 (callout)
sdf: prio = const (config file default)
sdf: const prio = 1
[...]
ram15: device node name blacklisted
[...]
===== paths list =====
uuid              hcil    dev dev_t pri dm_st  chk_st  vend/prod/rev
200d0b2da28001400 1:0:0:2 sdf 8:80  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28005400 1:0:0:1 sde 8:64  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28004d00 1:0:0:0 sdd 8:48  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28001400 0:0:0:2 sdc 8:32  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28005400 0:0:0:1 sdb 8:16  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28004d00 0:0:0:0 sda 8:0   1   [undef][undef] XIOtech,Magnitude 3D
params = 0 0 2 1 round-robin 0 1 1 8:80 1000 round-robin 0 1 1 8:32 1000
status = 2 0 0 0 2 1 A 0 1 0 8:80 A 0 E 0 1 0 8:32 A 0
sdf: mask = 0x4
sdf: path checker = directio (config file default)
directio: starting new request
directio: async io getevents returns 1 (errno=Success)
directio: io finished 4096/0
sdf: state = 2
[...]

17.6.4 套用 /etc/multipath.conf 檔案變更以更新多重路徑對應

multipathd 正在執行時,對 /etc/multipath.conf 檔案所做的變更無法生效。在進行變更後,儲存並關閉檔案,然後執行以下操作以套用變更並更新多重路徑對應︰

  1. 停止 multipathd 服務︰

    sudo systemctl stop multipathd
  2. 輸入以下指令清除舊的多重路徑繫結︰

    sudo /sbin/multipath -F
  3. 輸入以下指令建立新的多重路徑繫結︰

    sudo /sbin/multipath -v2 -l
  4. 重新啟動 multipathd 服務︰

    sudo systemctl start multipathd
  5. 在系統中執行 dracut -f 重新建立 initrd 影像,然後重新開機以使變更生效。

17.6.5 產生 WWID

為了在不同的路徑上識別裝置,多重路徑使用每部裝置的全球通用識別碼 (WWID)。如果兩個裝置路徑的 WWID 相同,則假定它們代表同一部裝置。除非有絕對的理由,否則建議不要變更產生 WWID 的方法。如需詳細資料,請參閱 man multipath.conf

17.7 設定輪詢、排入佇列和錯誤回復的預設規則

多重路徑 I/O 的目的是在儲存系統與伺服器之間提供連接容錯。需要的預設行為視伺服器是獨立伺服器還是高可用性叢集中的節點而定。

如果您為獨立伺服器設定了多重路徑 I/O,no_path_retry 設定可使伺服器作業系統在盡可能長的時間內不收到 I/O 錯誤。它將訊息排入佇列,直到多重路徑容錯移轉發生並提供有效的連接為止。

為高可用性叢集中的節點設定多重路徑 I/O 時,您希望多重路徑報告 I/O 故障以觸發資源容錯移轉,而不是等待多重路徑容錯移轉得以解決。在叢集環境中,您必須修改 no_path_retry 設定,以確保在與儲存系統的連接中斷時,叢集節點會收到與叢集驗證程序相關的 I/O 錯誤 (建議設為 heartbeat 容錯的 50%)。此外,您還希望將多重路徑 I/O 錯誤回復設為手動,以避免因路徑故障而造成資源的乒乓效應。

/etc/multipath.conf 檔案應包含 defaults 區段,您可在其中指定輪詢、排入佇列和錯誤回復的預設行為。如果 device 區段中沒有指定此欄位,系統會為該 SAN 組態套用預設設定。

以下各項是已編譯的預設設定。除非您透過建立並設定個人化的 /etc/multipath.conf 檔案來覆寫這些值,否則將會使用它們。

defaults {
  verbosity 2
#  udev_dir is deprecated in SLES 11 SP3
#  udev_dir              /dev
  polling_interval      5
#  path_selector default value is service-time in SLES 11 SP3
#  path_selector         "round-robin 0"
  path selector         "service-time 0"
  path_grouping_policy  failover
#  getuid_callout is deprecated in SLES 11 SP3 and replaced with uid_attribute
#  getuid_callout        "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
#  uid_attribute is new in SLES 11 SP3
  uid_attribute         "ID_SERIAL"
  prio                  "const"
  prio_args             ""
  features              "0"
  path_checker          "tur"
  alias_prefix          "mpath"
  rr_min_io_rq          1
  max_fds               "max"
  rr_weight             "uniform"
  queue_without_daemon  "yes"
  flush_on_last_del     "no"
  user_friendly_names   "no"
  fast_io_fail_tmo      5
  bindings_file         "/etc/multipath/bindings"
  wwids_file            "/etc/multipath/wwids"
  log_checker_err       "always"

  retain_attached_hw_handler  "no"
  detect_prio           "no"
  failback              "manual"
  no_path_retry         "fail"
  }

如需設定輪詢、排入佇列和錯誤回復規則的相關資訊,請參閱第 17.10 節 「設定路徑容錯移轉規則與優先程度」 中的下列參數︰

修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動伺服器,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」

17.8 將非多重路徑裝置列入黑名單

/etc/multipath.conf 檔案可能包含 blacklist 區段,其中會列出所有非多重路徑裝置。您可以透過 WWID (wwid 關鍵字)、裝置名稱 (devnode 關鍵字) 或裝置類型 (device 區段) 將裝置列入黑名單。您還可以使用 blacklist_exceptions 區段,對透過 blacklist 區段中所用的正規表示式列入黑名單的一些裝置啟用多重路徑。

注意
注意: 慣用的加入黑名單方法

將裝置加入黑名單的慣用方法是透過 WWID 或透過廠商和產品進行。建議不要透過 devnode 加入黑名單,因為裝置節點可能會發生變化,因此對長久識別裝置無幫助。

警告
警告:multipath.conf 中的規則運算式

/etc/multipath.conf 中的規則運算式一般情況下會運作。僅在與通用字串比對時,它們才會運作。不過,多重路徑的標準組態已包含許多裝置和廠商的規則運算式。將這些規則運算式與其他規則運算式比對並不會運作。請務必僅與執行 multipath -t 後所顯示的字串比對。

您一般可能會忽略非多重路徑裝置,例如 hpsafdhdmddmsrscdstramrawloop。例如,本地 SATA 硬碟和隨身碟沒有多重路徑。如果您希望 multipath 忽略單路徑裝置,請將它們加入 blacklist 區段中。

注意
注意:相容性

關鍵字 devnode_blacklist 已被關鍵字 blacklist 取代。

在 SUSE Linux Enterprise Server 12 中使用 glibc 提供的正規表示式。若要與任意字串相符,現在必須使用「.*」,而不是僅使用「*」

例如,若要將本地裝置與 hpsa 驅動程式中的所有陣列列入黑名單,以免受到多重路徑的管理,則 blacklist 區段應為︰

blacklist {
      wwid "26353900f02796769"
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
      devnode "^sd[a-z][0-9]*"
}

您也可以只將驅動程式中的分割區 (而不是整個陣列) 列入黑名單。例如,您可以使用以下正規表示式,只將 cciss 驅動程式中的分割區而非整個陣列列入黑名單︰

blacklist {
      devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}

您可以在 blacklist 中新增 device 區段,並使用 vendorproduct 關鍵字,按特定裝置類型列入黑名單。

blacklist {
      device {
           vendor  "DELL"
           product ".*"
       }
}

您可以使用 blacklist_exceptions 區段,對透過 blacklist 區段中所用的正規表示式列入黑名單的一些裝置啟用多重路徑。您可以透過 WWID (wwid 關鍵字)、裝置名稱 (devnode 關鍵字) 或裝置類型 (device 區段) 新增例外。您必須以將相應裝置列入黑名單的相同方式指定例外。也就是說,wwid 例外適用於 wwid 黑名單,devnode 例外適用於 devnode 黑名單,而裝置類型例外適用於裝置類型黑名單。

例如,如果您擁有來自不同廠商的裝置類型,可以針對所需的裝置類型啟用多重路徑。在 blacklist 區段中將所有廠商的裝置類型列入黑名單,然後在 blacklist_exceptions 區段中新增 device 區段,針對所需的裝置類型啟用多重路徑。

blacklist {
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*"
      device {
           vendor  "DELL"
           product ".*"
       }
}

blacklist_exceptions {
      device {
           vendor  "DELL"
           product "MD3220i"
       }
}

您還可以使用 blacklist_exceptions 僅針對特定裝置啟用多重路徑。例如︰

blacklist {
      wwid ".*"
}

blacklist_exceptions {
        wwid "3600d0230000000000e13955cc3751234"
        wwid "3600d0230000000000e13955cc3751235"
}

修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動伺服器,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」

重新開機之後,當您發出 multipath -ll 指令時,這些本地裝置應不再列於多重路徑對應中。

注意
注意:使用 find_multipaths 選項

SUSE Linux Enterprise Server 12 SP2 開始,多重路徑工具支援 /etc/multipath.confdefaults 區段內的 find_multipaths 選項。簡而言之,此選項會阻止多重路徑和 multipathd 為只有單個路徑的裝置設定多重路徑對應 (如需詳細資料,請參閱 man 5 multipath.conf)。如此,在某些組態中,管理員就無需為本地 SATA 磁碟等建立黑名單項目。

雖然使用 find_multipaths 選項看似很方便,但也有其弊端。它使得系統開機複雜化且速度變慢,因為對於發現的每部裝置,開機邏輯都需要等到探查了所有裝置之後才能確定裝置是否存在第二個路徑。此外,當一些路徑已關閉或在開機期間不可視時可能會出現問題 — 可能會錯誤地將裝置偵測為單路徑裝置並啟動,導致以後新增更多路徑的操作失敗。

find_multipaths 會將 /etc/multipath/wwids 中所列的具有相符 WWID 的所有裝置視為多重路徑裝置。請注意,第一次啟用 find_multipaths 時不會產生任何效果,除非刪除或編輯了 /etc/multipath/wwids,因為所有先前存在的多重路徑對應 (包括單路徑對應) 都列於該 wwids 檔案中。在具有多重路徑根檔案系統的 SAN-boot 系統中,請務定 /etc/multipath/wwids 在初始 RAM 磁碟與檔案系統之間保持同步。

總而言之,雖然在某些情況下使用 find_multipaths 可能很方便,但 SUSE 仍建議使用正確設定了黑名單和黑名單例外的預設組態。

17.9 設定使用者易記的名稱或別名

多重路徑裝置可透過其 WWID、使用者易記的名稱或您為其指定的別名來識別。/dev/sdn/dev/dm-n 格式的裝置節點名稱可在重新開機時變更,並且每次可能都會指定給不同的裝置。裝置的 WWID、使用者易記的名稱和別名在重新開機期間始終不變,因此是識別裝置的最好方法。

重要
重要:建議使用永久的名稱

由於以 /dev/sdn/dev/dm-n 形式表示的裝置節點名稱會在系統重新開機時變更,因此最好使用其 WWID 來參考多重路徑裝置。此外,您還可以使用對應至 WWID 的使用者易記名稱或別名,以便在重新開機時唯一識別裝置。

下表介紹了 /etc/multipath.conf 檔案中可用於裝置的裝置名稱類型。如需 multipath.conf 設定的範例,請參閱 /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic 檔案。

表 17.4︰ 多重路徑裝置名稱類型比較

名稱類型

描述

WWID (預設)

序列 WWID (全球識別碼) 是多重路徑裝置的識別碼,保證其全球唯一,永不變更。多重路徑中使用的預設名稱是邏輯單位的 ID,就是 /dev/disk/by-id 目錄中存放的 ID。例如,WWID 為 3600508e0000000009e6baa6f609e7908 的裝置列為 /dev/disk/by-id/scsi-3600508e0000000009e6baa6f609e7908

使用者易記

/dev/mapper 目錄中的「裝置對應程式多重路徑」裝置名稱還參考了邏輯單位的 ID。這些多重路徑裝置名稱是使用者易記名稱,採用的格式為 /dev/mapper/mpathN,例如 /dev/mapper/mpath0。這些名稱是唯一且永久的,因為它們使用 /var/lib/multipath/bindings 檔案來追蹤 UUID 與易記名稱之間的關聯。

別名

別名是管理員為多重路徑裝置指定的全域唯一名稱。別名會置換 WWID 及使用者易記的 /dev/mapper/mpathN 名稱。

如果您使用的是 user_friendly_names,請不要將別名設為 mpathN 格式。否則可能會與自動指定的使用者易記名稱產生衝突,導致提供的裝置節點名稱不正確。

/etc/multipath.conf 檔案中的全域多重路徑 user_friendly_names 選項用於啟用或停用對多重路徑裝置使用易記名稱的功能。如果將它設定為 no (預設值),多重路徑會使用 WWID 做為裝置的名稱。如果將它設定為 yes,多重路徑會使用 /var/lib/multipath/bindings 檔案,在 /dev/mapper 目錄中以 mpath<N> 格式為裝置指定一個永久的唯一名稱。/etc/multipath.conf 檔案中的 bindings file 選項可用於指定 bindings 檔案的替代位置。

/etc/multipath.conf 檔案中的全域多重路徑 alias 選項用於明確地為裝置指定名稱。如果為多重路徑裝置設定了別名,則會使用別名而不是 WWID 或易記名稱。

在下列情況下,使用 user_friendly_names 選項可能會產生問題︰

根裝置正在使用多重路徑︰

如果系統根裝置正在使用多重路徑,而您使用了 user_friendly_names 選項,則會將 /var/lib/multipath/bindings 檔案中的使用者易記設定包含在 initrd 中。如果您之後變更儲存設定,例如新增或移除裝置,則 initrd 中的繫結設定會與 /var/lib/multipath/bindings 中的繫結設定不符。

警告
警告:繫結不相符項目

initrd/var/lib/multipath/bindings 之間的繫結不符會導致將錯誤的掛接點指定給裝置,進而造成檔案系統損毀及資料遺失。

為了避免此問題發生,建議您對系統根裝置使用預設 WWID 設定。請勿將別名用於系統根裝置。裝置名稱將會不同,因此使用別名會使您失去透過核心指令行順利關閉多重路徑的功能。

從另一個分割區掛接 /var︰

user_friendly_names 組態檔案的預設位置是 /var/lib/multipath/bindings。如果 /var 資料不在系統根設備上,而是從另一個分割區掛接,則設定多重路徑時無法獲取 bindings 檔案。

請確定 /var/lib/multipath/bindings 檔案位於系統根設備上,並且多重路徑可以找到它。例如,可以按如下所示操作:

  1. /var/lib/multipath/bindings 檔案移至 /etc/multipath/bindings

  2. 將 /etc/multipath.confdefaults 區段中的 bindings_file 選項設定為這個新位置。例如︰

    defaults {
                   user_friendly_names yes
                   bindings_file "/etc/multipath/bindings"
    }
initrd 中存在多重路徑︰

即使系統根裝置不在多重路徑上,initrd 中也有可能包含多重路徑。例如,如果系統根裝置位於 LVM 上,便可能會出現這種情況。如果您使用 user_friendly_names 選項並且 initrd 中存在多重路徑,則應該使用參數 multipath=off 開機,以免發生問題。

這會在系統開機期間於 initrd 中停用多重路徑。系統開機之後,boot.multipathmultipathd 開機程序檔便能啟用多重路徑。

HA 叢集中的多重路徑︰

如需詳細資料,請參閱第 17.9.1 節 「HA 叢集中的多重路徑裝置名稱」

若要啟用使用者易記名稱或指定別名︰

  1. 使用 root 權限在文字編輯器中開啟 /etc/multipath.conf 檔案。

  2. (選擇性) 修改 /var/lib/multipath/bindings 檔案的位置。

    替代路徑必須是系統根裝置上可存取的位置,並且多重路徑必須能夠找到它。

    1. /var/lib/multipath/bindings 檔案移至 /etc/multipath/bindings

    2. 將 /etc/multipath.confdefaults 區段中的 bindings_file 選項設定為這個新位置。例如︰

      defaults {
                user_friendly_names yes
                bindings_file "/etc/multipath/bindings"
      }
  3. (選擇性,但不建議) 啟用使用者易記的名稱︰

    1. 取消 Defaults 區段及其結束括號的註解。

    2. 取消 user_friendly_names option 的註解,然後將「否」值變更為「是」。

      例如︰

      ## Use user-friendly names, instead of using WWIDs as names.
      defaults {
        user_friendly_names yes
      }
  4. (選擇性) 在 multipath 區段中使用 alias 選項,為裝置指定您自己的名稱。

    例如︰

    ## Use alias names, instead of using WWIDs as names.
    multipaths {
           multipath {
                   wwid           36006048000028350131253594d303030
                   alias             blue1
           }
           multipath {
                   wwid           36006048000028350131253594d303041
                   alias             blue2
           }
           multipath {
                   wwid           36006048000028350131253594d303145
                   alias             yellow1
           }
           multipath {
                   wwid           36006048000028350131253594d303334
                   alias             yellow2
           }
    }
    重要
    重要:WWWID 與 WWN 的比較

    /etc/multipath.conf 檔案中定義裝置別名時,請確定使用的是每個裝置的 WWID (例如 3600508e0000000009e6baa6f609e7908) 而不是其 WWN,後者會以 0x 取代裝置 ID 的第一個字元,例如 0x600508e0000000009e6baa6f609e7908

  5. 儲存變更,然後關閉檔案。

  6. 修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動伺服器,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」

若要直接使用整個 LUN (例如,若您使用 SAN 功能分割您的儲存區),可為 mkfsfstab、您的應用程式等使用 /dev/disk/by-id/xxx 名稱。分割的裝置會將 _part<n> 附加到裝置名稱中,例如 /dev/disk/by-id/xxx_part1

/dev/disk/by-id 目錄中,多重路徑對應裝置會以裝置的 dm-uuid* 名稱或別名 (如果在 /etc/multipath.conf 檔案中為它指定了別名) 表示。scsi-wwn- 裝置名稱表示裝置的實體路徑。

17.9.1 HA 叢集中的多重路徑裝置名稱

請執行下列操作,來確定多重路徑裝置名稱在所有裝置中都相同︰

  • 使用 UUID 及別名來確保多重路徑裝置名稱在叢集中的所有節點上都保持一致。別名在所有節點中必須是唯一的。將 /etc/multipath.conf 檔案從該節點複製到叢集中所有其他節點的 /etc/ 目錄下。

  • 使用多重路徑對應裝置的連結時,請確定在 /dev/disk/by-id 目錄中指定 dm-uuid* 名稱或別名,而不是裝置的固定路徑例項。如需更多資訊,請參閱第 17.9 節 「設定使用者易記的名稱或別名」

  • user_friendly_names 組態選項設為 no 以將其停用。使用者易記的名稱對於某個節點而言是唯一的,但是叢集中的每個節點可能無法為裝置指定相同的使用者易記名稱。

注意
注意:使用者易記名稱

如果您確實需要使用使用者易記名稱,則可以執行下列操作,強制系統定義的使用者易記名稱在叢集中的所有節點上都保持一致︰

  1. 在一個節點上的 /etc/multipath.conf 檔案中︰

    1. user_friendly_names 組態選項設為 yes 以將其啟用。

      多重路徑會使用 /var/lib/multipath/bindings 檔案,在 /dev/mapper 目錄中以 mpath<N> 格式為裝置指定一個永久的唯一名稱。

    2. (選擇性) 設定 /etc/multipath.conf 檔案之 defaults 區段中的 bindings_file 選項,以指定 bindings 檔案的替代位置。

      預設位置為 /var/lib/multipath/bindings

  2. 設定節點上的所有多重路徑裝置。

  3. /etc/multipath.conf 檔案從該節點複製到叢集中所有其他節點的 /etc/ 目錄下。

  4. bindings 檔案從該節點複製到叢集中所有其他節點上的 bindings_file 路徑中。

  5. 修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動節點,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」。這適用於所有受影響的節點。

17.10 設定路徑容錯移轉規則與優先程度

在 Linux 主機上,若一個儲存控制器有多個路徑,則每個路徑會顯示為獨立的區塊裝置,導致單個 LUN 有多個區塊裝置。裝置對應程式多重路徑服務會偵測到多個路徑具有同一個 LUN ID,然後會使用該 ID 建立新的多重路徑裝置。例如,若主機上有兩個 HBA 透過未分區的光纖通道交換器連接至具有兩個連接埠的某個儲存控制器,則該主機會探查到四個區塊裝置,即 /dev/sda/dev/sdb/dev/sdc/dev/sdd。裝置對應程式多重路徑服務會建立單個區塊裝置 /dev/mpath/mpath1,由它來透過以上 4 個基礎區塊裝置重新路由 I/O。

本節說明如何指定容錯移轉的規則及如何設定路徑的優先程度。請注意,修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動伺服器,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」

17.10.1 設定路徑容錯移轉規則

搭配 -p 選項使用 multipath 指令可設定路徑容錯移轉規則︰

sudo multipath DEVICENAME -p POLICY

用以下其中一個規則選項取代 POLICY

表 17.5︰ multipath -p 指令的群組規則選項

規則選項

描述

failover

(預設) 每個優先程度群組對應一個路徑。

multibus

所有路徑都在一個優先程度群組中。

group_by_serial

每個偵測到的序號對應一個優先程度群組。

group_by_prio

每個路徑優先程度值對應一個優先程度群組。優先程度由註標程式決定,在 /etc/multipath.conf 組態檔案中指定為 global、per-controller 或 per-multipath 選項。

group_by_node_name

每個目標節點名稱對應一個優先程度群組。目標節點名稱取自 /sys/class/fc_transport/target*/node_name 位置。

17.10.2 設定容錯移轉優先程度

您必須在 /etc/multipath.conf 檔案中手動輸入裝置的容錯移轉優先程度。/usr/share/doc/packages/multipath-tools/multipath.conf.annotated 檔案中提供了所有設定與選項的範例。

17.10.2.1 瞭解優先程序群組與屬性

優先程度群組是進入相同實體 LUN 的路徑集合。依預設,I/O 以輪替方式發佈到群組的所有路徑。multipath 指令會根據 SAN 的 path_grouping_policy 設定,在該 SAN 中自動為每個 LUN 建立優先程度群組。multipath 指令會將群組中路徑的數量乘以群組的優先程度,來決定哪個群組為主要群組。計算值最高的群組為主要群組。主要群組中的所有路徑都失敗時,計算值次高的優先程度群組成為主動群組。

路徑優先程度是指定給路徑的整數值。值越大,優先程度越高。系統使用了外部程式來指定每個路徑的優先程度。對於指定的裝置,優先程度相同的路徑屬於同一個優先程度群組。

prio 設定在 /etc/multipath.conf 檔案的 defaults{}devices{} 區段中使用。當為 multipaths{) 區段中的個別 multipath 定義指定該設定時,系統會靜默地將其忽略。prio 行會指定優先程度排序器。如果優先程度排序器需要引數,您可以在另一行上使用 prio_args 關鍵字來指定該引數。

Defaults 或 Devices 區段的 PRIO 設定

prio

指定要呼叫以取得路徑優先程度值的優先程度排序程式。系統會將每個路徑群組的權數加總,以判斷發生故障時要使用的下一個路徑群組。

如果指定的優先程度排序器需要引數,請使用 prio_args 關鍵字進行指定。

如果未指定任何 prio 關鍵字,則所有路徑的優先程度均相等。預設設定為 const,且 prio_args 設定沒有值。

prio "const"
prio_args ""

優先程度排序器範例如下︰

優先程度排序程式

描述

alua

根據 SCSI-3 ALUA 設定產生路徑優先程度。

const

為所有路徑產生相同的優先程度。

emc

為 EMC 陣列產生路徑優先程度。

hdc

為 Hitachi HDS Modular 儲存陣列產生路徑優先程度。

hp_sw

為主動/待命模式下的 Compaq/HP 控制器產生路徑優先程度。

ontap

為 NetApp 陣列產生路徑優先程度。

random

為每個路徑產生隨機優先程度。

rdac

為 LSI/Engenio RDAC 控制器產生路徑優先程度。

weightedpath

依據您在 prio_args 的引數中指定的加權值產生路徑優先程度。

path_latency

依據延遲演算法產生路徑優先程度,您可以透過 prio_args 關鍵字來設定該演算法。

prio_args

指定需要引數之指定優先程度排序程式的引數。大多數 prio 程式都不需要引數。

沒有預設值。該值取決於 prio 設定以及優先程度排序器是否需要引數。

prio_args 引數

描述

weighted

需要格式為 [hbtl|devname|serial|wwn] REGEX1 PRIO1 REGEX2 PRIO2... 的值

hbtl
   Regex must be of SCSI H:B:T:L format, for example  1:0:.:.
   and *:0:0:., with a weight value, where H, B, T, L are the
   host, bus, target, and LUN  IDs for a device. For example:

   prio "weightedpath"
   prio_args "hbtl 1:.:.:. 2 4:.:.:. 4"

devname

Regex 為裝置名稱格式。例如:sda、sd.e

serial

Regex 為序號格式。例如:: .*J1FR.*324。請使用 multipathd show paths format %z 指令查詢您的序號。(multipathd show wildcards 會顯示所有 format 萬用字元。)

path_latency

如果遠端儲存陣列和本地儲存陣列使用的是相同類型的硬體,您可以使用 path_latency 調整這兩個陣列之間的延遲。通常情況下,遠端陣列上的延遲會更高。這需要格式為 io_num=20 base_num=10 的值組。

io_num
   The number of read IOs sent to the current path continuously, which
   are used to calculate the average path latency. Valid values are
   integers from  2 to 200.

base_num
   The base number value of logarithmic scale, used to partition
   different priority ranks. Valid values: Integer, 2 - 10. The maximum
   average latency value is 100s, the minimum is 1us. For example:
   If  base_num=10, the paths will be grouped in priority groups with
   path  latency <=1us, (1us, 10us], (10us, 100us], (100us, 1ms],
   (1ms, 10ms], (10ms, 100ms], (100ms, 1s], (1s, 10s], (10s, 100s],
   >100s

alua

如果為某部裝置 (alua exclusive_pref_bit) 設定了 exclusive_pref_bit,那麼設定了 preferred path 的路徑將永遠在其自身的路徑群組中。

多重路徑屬性

多重路徑屬性用於控制裝置的多重路徑 I/O 行為。您可以將屬性指定為所有多重路徑裝置的預設值。此外,還可以指定僅套用至指定多重路徑裝置的屬性,方法是在多重路徑組態檔案的 multipaths 區段中為該裝置建立一個項目。

user_friendly_names

指定是使用全球 ID (WWID) 還是使用 /var/lib/multipath/bindings 檔案為多重路徑裝置指定格式為 /dev/mapper/mpathN、永久且唯一的別名。

此選項可以在 devices 區段和 multipaths 區段中使用。

描述

no

(預設) 使用 /dev/disk/by-id/ 位置中所顯示的 WWID。

yes

自動產生易記名稱做為多重路徑裝置的別名來取代實際的 ID。

failback

指定是否監控失敗路徑的復原狀況,並指出失敗路徑恢復使用後群組進行錯誤回復所花的時間。

失敗路徑復原後,系統會依據此設定將該路徑重新新增到啟用了多重路徑的路徑清單中。多重路徑會評估優先程度群組,並在主要路徑的優先程度高於次要群組時,變更主動優先程度群組。

描述

manual

(預設) 不監控失敗路徑的復原狀況。管理員會執行 multipath 指令來更新已啟用的路徑與優先程度群組。

followover

僅當路徑群組的第一個路徑處於使用中狀態時,才執行自動錯誤回復。這可以防止某個節點在另一個節點已要求容錯移轉時自動錯誤回復。

immediate

某路徑復原後,立即啟用該路徑。

N

某路徑復原後,等待 N 秒後再啟用此路徑。指定一個大於 0 的整數值。

對於叢集環境中的多重路徑,建議將錯誤回復設為 manual,以防止多重路徑容錯移轉發生乒乓效應。

failback "manual"
重要
重要:確認

請務必向儲存系統廠商確認錯誤回復設定。不同的儲存系統可能需要不同的設定。

no_path_retry

指定路徑失敗時要採取的行為。

描述

N

指定在 multipath 停止佇列且使路徑失敗之前的重試次數。指定一個大於 0 的整數值。

在叢集中,您可以指定值「0」來防止排入佇列,並允許資源進行容錯移轉。

fail

指定立即失敗 (不排入佇列)。

queue

永不停止佇列 (在路徑恢復正常之前始終排入佇列)。

在叢集中作業時,建議在 /etc/multipath.conf 檔案中將重試設定設為 fail0。這會導致儲存連接中斷時,讓資源進行容錯移轉。否則,該訊息會排入佇列,而不會發生資源容錯移轉。

no_path_retry "fail"
no_path_retry "0"
重要
重要:確認

請務必向儲存系統廠商確認重試設定。不同的儲存系統可能需要不同的設定。

path_checker

決定路徑的狀態。

描述

directio

讀取具有直接 I/O 的第一個磁區,這對於 DASD 裝置非常有用。在 systemd 記錄中記錄失敗訊息 (請參閱第 15 章 「journalctl︰查詢 systemd 日誌)。

tur

將 SCSI 測試單元就緒指令發送至裝置。這是較佳設定 (若 LUN 支援)。若指令失敗,將不會在 systemd 記錄日誌中填入訊息。

CUSTOM_VENDOR_VALUE

有些 SAN 廠商會提供自訂 path_checker 選項︰

  • cciss_tur 檢查 HP 智慧型儲存陣列的路徑狀態。

  • emc_clariion 查詢 EMC Clariion EVPD 的 0xC0 頁以決定路徑狀態。

  • hp_sw 檢查包含主動/待命韌體之 HP 儲存陣列的路徑狀態 (Up、Down 或 Ghost)。

  • rdac 檢查 LSI/Engenio RDAC 儲存控制器的路徑狀態。

path_grouping_policy

指定由指定控制器代管之多重路徑裝置的路徑分組規則。

描述

failover

(預設) 每個優先程度群組指定一個路徑,以便每次只使用一個路徑。

multibus

所有有效的路徑均屬於一個優先程度群組。流量透過群組中的所有主動路徑來保持負載平衡。

group_by_prio

每個路徑優先程度值對應一個優先程度群組。優先程度相同的路徑位於同一個優先程度群組中。優先程度由外部程式指定。

group_by_serial

路徑根據 SCSI 目標序號 (控制器節點 WWN) 來分組。

group_by_node_name

每個目標節點名稱指定一個優先程度群組。目標節點名稱取自 /sys/class/fc_transport/target*/node_name 中。

path_selector

指定用於負載平衡的 path-selector 演算法。

描述

round-robin 0

用於平衡優先程度群組中所有主動路徑之間的流量的負載平衡演算法。

queue-length 0

與 least-pending 選項類似,是一個可平衡多個路徑上進行中的 I/O 數量的動態負載平衡器。

service-time 0

(預設值) 可根據延遲情況來平衡多個路徑上之 I/O 的服務時間導向型負載平衡器。

pg_timeout

指定路徑群組逾時處理。不能指定任何值,已設定了內部預設值。

polling_interval

指定一個路徑檢查週期結束與下一個路徑檢查週期開始之間的時間 (以秒為單位)。

指定一個大於 0 的整數值。預設值為 5。請務必向儲存系統廠商確認 polling_interval 設定。不同的儲存系統可能需要不同的設定。

rr_min_io_rq

在切換至目前路徑群組中的下一個路徑之前,使用基於申請的 device-mapper-multipath 指定路由至某個路徑之 I/O 申請的數量。

指定一個大於 0 的整數值。預設值為 1。

rr_min_io_rq "1"
rr_weight

指定用於計算路徑權重的方式。

描述

uniform

(預設) 所有路徑都擁有相同的輪替權數。

priorities

每個路徑的權重由路徑的優先程度乘以 rr_min_io_rq 設定來確定。

uid_attribute

提供唯一路徑識別碼的 udev 屬性。預設值為 ID_SERIAL

17.10.2.2 設定輪替式負載平衡

所有路徑都處於主動狀態。I/O 設定為在移至序列中的下一個開啟路徑之前需經過秒數的時間或數個 I/O 異動。

17.10.2.3 設定單一路徑容錯移轉

優先程度最高 (設定值最低) 的單一路徑對流量而言是主動路徑。其他路徑可用於容錯移轉,但只有在發生容錯移轉時才會使用。

17.10.2.4 將 I/O 路徑分組以使用輪替式負載平衡

具有相同優先程度的多個路徑都歸入主動群組。該群組中的所有路徑都失敗時,裝置會容錯移轉至優先程度次高的群組。群組中的所有路徑以輪替式負載平衡方式共享流量負載。

17.10.3 報告目標路徑群組

使用 SCSI 報告目標連接埠群組 (sg_rtpg(8)) 指令。如需資訊,請參閱 sg_rtpg(8) 的線上文件。

17.11 設定根裝置的多重路徑 I/O

SUSE Linux Enterprise Server 中的 /boot/root 可以使用並支援裝置對應程式多重路徑 I/O (DM-MPIO)。此外,YaST 安裝程式中的 YaST 磁碟分割程式支援在安裝期間啟用多重路徑。

17.11.1 安裝時啟用多重路徑 I/O

若要在多重路徑裝置上安裝作業系統,在安裝時必須執行多重路徑軟體。在系統安裝過程中,multipathd 精靈不會自動啟動。您可以使用 YaST 磁碟分割程式中的設定多重路徑選項來啟動。

17.11.1.1 在主動/主動多重路徑儲存 LUN 上安裝時啟用多重路徑 I/O

  1. 安裝期間,在建議的分割方式螢幕上選擇進階磁碟分割程式

  2. 選取硬碟主圖示,按一下設定按鈕,然後選取設定多重路徑

  3. 啟動多重路徑。

    YaST 即會開始重新掃描磁碟,然後顯示可用的多重路徑裝置 (例如 /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65)。之後所有的處理步驟都應使用此裝置。

  4. 下一步繼續安裝。

17.11.1.2 在主動/被動多重路徑儲存 LUN 上安裝時啟用多重路徑 I/O

在系統安裝過程中,multipathd 精靈不會自動啟動。您可以使用 YaST 磁碟分割程式中的設定多重路徑選項來啟動。

若要在主動/被動多重路徑儲存 LUN 上安裝時啟用多重路徑 I/O︰

  1. 安裝期間,在建議的分割方式螢幕上選擇進階磁碟分割程式

  2. 選取硬碟主圖示,按一下設定按鈕,然後選取設定多重路徑

  3. 啟動多重路徑。

    YaST 即會開始重新掃描磁碟,然後顯示可用的多重路徑裝置 (例如 /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65)。之後所有的處理步驟都應使用此裝置。記下裝置路徑與 UUID,稍後會用到。

  4. 下一步繼續安裝。

  5. 所有設定都設好且安裝完成後,YaST 即會開始寫入開機載入程式資訊,並顯示重新啟動系統的倒數計時。請按一下停止按鈕停止倒數計時,然後按 CtrlAltF5 存取主控台。

  6. 使用主控台確定是否在 /boot/grub/device.map 檔案中為 hd0 項目輸入了被動路徑。

    執行此動作非常必要,因為安裝程序無法區分主動路徑與被動路徑。

    1. 輸入以下指令,將根裝置掛接至 /mnt

      mount /dev/disk/by-id/UUID;_part2 /mnt

      例如,輸入︰

      mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt
    2. 輸入以下指令,將開機裝置掛接至 /mnt/boot

      mount /dev/disk/by-id/UUID_part1 /mnt/boot

      例如,輸入︰

      mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
    3. /mnt/boot/grub/device.map 檔案中,確定 hd0 項目是否指向被動路徑,然後執行下列其中一項動作︰

      • 主動路徑: 不需要執行任何動作。跳過所有剩餘的步驟,按 CtrlAltF7 返回 YaST 圖形環境,然後繼續安裝。

      • 被動路徑: 必須變更組態並重新安裝開機載入程式。

  7. 如果 hd0 項目指向被動路徑,請變更組態並重新安裝開機載入程式︰

    1. 在主控台提示符處輸入以下指令︰

                mount -o bind /dev /mnt/dev
                mount -o bind /sys /mnt/sys
                mount -o bind /proc /mnt/proc
                chroot /mnt
    2. 在主控台中執行 multipath -ll,然後檢查輸出以尋找主動路徑。

      被動路徑會有 ghost 標記。

    3. /boot/grub/device.map 檔案中,將 hd0 項目變更為主動路徑並儲存變更,然後關閉檔案。

    4. 輸入以下指令,重新安裝開機載入程式︰

                grub-install /dev/disk/by-id/UUID_part1 /mnt/boot

      例如,輸入︰

      grub-install /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
    5. 輸入下列指令︰

      exit
      umount /mnt/*
      umount /mnt
  8. CtrlAltF7 返回 YaST 圖形環境。

  9. 按一下確定繼續執行安裝的重新開機作業。

17.11.2 對現有根裝置啟用多重路徑 I/O

  1. 將 Linux 安裝為僅有單個路徑處於主動狀態,最好是磁碟分割程式中列出了 by-id 符號連結的路徑。

  2. 使用安裝期間所用的 /dev/disk/by-id 路徑來掛接裝置。

  3. 開啟或建立 /etc/dracut.conf.d/10-mp.conf 並新增以下行 (請注意前置空格):

    force_drivers+=" dm-multipath"
  4. 對於 IBM Z,在執行 dracut 之前先編輯 /etc/zipl.conf 檔案,以 /etc/fstab 中使用的相同 by-id 資訊變更 zipl.conf 中的 by-path 資訊。

  5. 執行 dracut -f 以更新 initrd 影像。

  6. 對於 IBM Z,在執行 dracut 之後執行 zipl

  7. 重新載入伺服器。

17.11.3 在根裝置上停用多重路徑 I/O

multipath=off 新增至核心指令行。這可以透過 YaST 開機載入程式模組來完成。開啟開機載入程式安裝 › 核心參數,並將參數新增至兩個指令行。

這只會影響根裝置,而不會影響所有其他裝置。

17.12 設定現有軟體 RAID 的多重路徑 I/O

理想狀況下,您應該先設定裝置的多重路徑,然後再將它們當成軟體 RAID 裝置的元件使用。如果您在建立任何軟體 RAID 裝置後再新增多重路徑,則系統重新開機時可能會先啟動 multipath 服務,然後再啟動 DM-MPIO 服務,導致 RAID 可能會無法使用多重路徑。您可以使用本節所述的程序,讓多重路徑針對多先前存在的軟體 RAID 執行。

例如,在下列情況中,您可能需要設定軟體 RAID 中裝置的多重路徑︰

  • 如果在執行全新安裝或升級期間建立新的軟體 RAID,將其做為磁碟分割設定的一部分。

  • 如果將軟體 RAID 中的裝置當成成員裝置或備品之前未設定裝置以進行多重路徑。

  • 如果透過將新的 HBA 配接器新增至伺服器,或擴充 SAN 中的儲存子系統來擴展您的系統。

注意
注意:假設條件

下列指示假設軟體 RAID 裝置為 /dev/mapper/mpath0,這是核心可辨識的裝置名稱。它會假設您已依照第 17.9 節 「設定使用者易記的名稱或別名」所述在 /etc/multipath.conf 檔案中啟用了使用者易記的名稱。

請務必修改適用於軟體 RAID 的設備名稱的指示。

  1. 開啟終端機主控台。

    請在下列步驟中使用此主控台輸入指令,除非導向到其他位置。

  2. 如果目前已掛接或正在執行任何軟體 RAID 裝置,請對每個裝置輸入以下指令來卸載並停止裝置。

    sudo umount /dev/mapper/mpath0
    sudo mdadm --misc --stop /dev/mapper/mpath0
  3. 輸入以下指令停止 md 服務︰

    sudo systemctl stop mdmonitor
  4. 輸入以下指令啟動 multipathd 精靈︰

    systemctl start multipathd
  5. 啟動多重路徑服務之後,驗證軟體 RAID 的元件裝置是否列在 /dev/disk/by-id 目錄中。請執行下列其中一個步驟︰

    • 裝置已列出: 裝置名稱現在應該有連至裝置對應程式多重路徑裝置名稱的符號連結,如 /dev/dm-1

    • 裝置未列出: 輸入以下指令來衝洗和重新探查裝置,強制多重路徑服務辨識裝置︰

      sudo multipath -F
      sudo multipath -v0

      裝置現在應該列於 /dev/disk/by-id 中,並擁有連至其裝置對應程式多重路徑裝置名稱的符號連結。例如︰

      lrwxrwxrwx 1 root root 10 2011-01-06 11:42 dm-uuid-mpath-36006016088d014007e0d0d2213ecdf11 -> ../../dm-1
  6. 輸入以下指令重新啟動 mdmonitor 服務和 RAID 裝置︰

    systemctl start mdmonitor
  7. 輸入以下指令檢查軟體 RAID 的狀態︰

    mdadm --detail /dev/mapper/mpath0

    RAID 的元件裝置應與其裝置對應程式多重路徑裝置名稱相符,這些裝置名稱在 /dev/disk/by-id 目錄中列為裝置的符號連結。

  8. 如果根 (/) 裝置或其任何部分 (例如 /var/etc/log) 位於 SAN 上,並且需要使用多重路徑開機,請重建 initrd

    dracut -f --add-multipath
  9. 重新開機伺服器以套用變更。

  10. 檢查 RAID 狀態,以驗證軟體 RAID 陣列是否正確地顯示在多重路徑裝置頂部。輸入

    mdadm --detail /dev/mapper/mpath0

    例如︰

    Number Major Minor RaidDevice State
    0 253 0 0 active sync /dev/dm-0
    1 253 1 1 active sync /dev/dm-1
    2 253 2 2 active sync /dev/dm-2
注意
注意:將 mdadm 用於多重路徑裝置

mdadm 工具要求以 ID 而非裝置節點路徑存取裝置。如需詳細資訊,請參閱第 17.4.3 節 「對多重路徑裝置使用 MDADM」

17.13 在多重路徑裝置上使用 LVM2

使用多重路徑時,資源的所有路徑都顯示為裝置樹狀結構中的裝置。依預設,LVM 會檢查裝置樹狀結構中任何裝置的頂層是否存在多重路徑裝置。如果 LVM 在頂層找到了多重路徑裝置,它會假設該裝置是多重路徑元件,並忽略 (基礎) 裝置。這很可能是您期望的行為,但也可以在 /etc/lvm/lvm.conf 中變更此行為。如果將 multipath_component_detection 設定為 0,LVM 會掃描多重路徑元件裝置。lvm.conf 中的預設項目是︰

    # By default, LVM2 will ignore devices used as component paths
    # of device-mapper multipath devices.
    # 1 enables; 0 disables.
    multipath_component_detection = 1

17.14 最佳實務

17.14.1 掃描新裝置而不重新開機

如果您的系統已經設定多重路徑,而您稍後需要將更多儲存體新增到 SAN,則可以使用 rescan-scsi-bus.sh 程序檔掃描新的裝置。依預設,此程序檔會掃描所有 HBA 的一般 LUN 範圍。該指令的一般語法如下所示︰

rescan-scsi-bus.sh [options] [host [host ...]]

對於大多數儲存子系統,該程序檔都可在不使用任何選項的情況下成功執行。不過,在某些特殊情況下,可能需要使用一或多個選項。如需詳細資料,請執行 rescan-scsi-bus.sh --help

警告
警告:EMC PowerPath 環境

在 EMC PowerPath 環境中,請勿使用作業系統隨附的 rescan-scsi-bus.sh 公用程式或 HBA 廠商程序檔來掃描 SCSI 匯流排。為了避免潛在的檔案系統損毀,EMC 要求您遵循 EMC PowerPath for Linux 的廠商文件中提供的程序來操作。

使用以下程序掃描裝置,以便在不將系統重新開機的情況下使這些裝置適用於多重路徑。

  1. 在儲存子系統中,使用廠商的工具來配置裝置並更新其存取控制設定,以允許 Linux 系統存取新的儲存。如需詳細資料,請參閱廠商提供的文件。

  2. 掃描主機的所有目標,以使 Linux 核心的 SCSI 子系統的中間層級可辨識其新裝置。在終端機主控台提示符處輸入

    sudo rescan-scsi-bus.sh

    根據您的設定,您可能需要搭配選用參數執行 rescan-scsi-bus.sh。如需詳細資料,請參閱 rescan-scsi-bus.sh --help

  3. 請在 systemd 記錄中檢查掃描進度 (如需詳細資料,請參閱第 15 章 「journalctl︰查詢 systemd 日誌)。在終端機主控台提示符處輸入︰

    sudo journalctl -r

    此指令會顯示記錄的最後幾行。例如︰

    tux > sudo journalctl -r
    Feb 14 01:03 kernel: SCSI device sde: 81920000
    Feb 14 01:03 kernel: SCSI device sdf: 81920000
    Feb 14 01:03 multipathd: sde: path checker registered
    Feb 14 01:03 multipathd: sdf: path checker registered
    Feb 14 01:03 multipathd: mpath4: event checker started
    Feb 14 01:03 multipathd: mpath5: event checker started
    Feb 14 01:03:multipathd: mpath4: remaining active paths: 1
    Feb 14 01:03 multipathd: mpath5: remaining active paths: 1
    [...]
  4. 重複上述步驟,以新增通過 Linux 系統中連接至新裝置的其他 HBA 配接器的路徑。

  5. 執行 multipath 指令辨識可設定 DM-MPIO 組態的裝置。在終端機主控台提示符處輸入

    sudo multipath

    您現在可以設定新裝置以進行多重路徑了。

17.14.2 掃描新分割的裝置而不重新開機

使用本節中的範例,可以在不重新開機的情況下偵測新增的多重路徑 LUN。

警告
警告:EMC PowerPath 環境

在 EMC PowerPath 環境中,請勿使用作業系統隨附的 rescan-scsi-bus.sh 公用程式或 HBA 廠商程序檔來掃描 SCSI 匯流排。為了避免潛在的檔案系統損毀,EMC 要求您遵循 EMC PowerPath for Linux 的廠商文件中提供的程序來操作。

  1. 開啟終端機主控台。

  2. 掃描主機的所有目標,以使 Linux 核心的 SCSI 子系統的中間層級可辨識其新裝置。在終端機主控台提示符處輸入

    rescan-scsi-bus.sh

    根據您的設定,您可能需要搭配選用參數執行 rescan-scsi-bus.sh。如需詳細資料,請參閱 rescan-scsi-bus.sh --help

  3. 輸入以下指令驗證裝置是否已探查到 (例如連結是否具有一個新的時戳)︰

    ls -lrt /dev/dm-*

    也可以輸入以下指令在 /dev/disk/by-id 中驗證裝置︰

    ls -l /dev/disk/by-id/
  4. 輸入以下指令驗證新裝置是否顯示在記錄中︰

    sudo journalctl -r
  5. 使用文字編輯器在 /etc/multipath.conf 檔案中新增裝置的新別名定義,如 data_vol3

    例如,如果 UUID 為 36006016088d014006e98a7a94a85db11,請進行下列變更︰

    defaults {
         user_friendly_names   yes
      }
    multipaths {
         multipath {
              wwid    36006016088d014006e98a7a94a85db11
              alias  data_vol3
              }
      }
  6. 輸入以下指令建立裝置的分割區表︰

    fdisk /dev/disk/by-id/dm-uuid-mpath-<UUID>

    以裝置 WWID 取代 UUID,例如 36006016088d014006e98a7a94a85db11

  7. 輸入以下指令觸發 udev︰

    sudo echo 'add' > /sys/block/DM_DEVICE/uevent

    例如,若要為 dm-8 上的分割區產生裝置對應程式裝置,請輸入︰

    sudo echo 'add' > /sys/block/dm-8/uevent
  8. 在裝置 /dev/disk/by-id/dm-uuid-mpath-UUID_partN 上建立檔案系統。根據您選擇的檔案系統,您可以使用下列指令之一實現此目的︰mkfs.btrfs mkfs.ext3mkfs.ext4mkfs.xfs。如需詳細資料,請參閱相應的 man 頁面。以實際 UUID 和分割區編號取代 UUID_partN,例如 36006016088d014006e98a7a94a85db11_part1。

  9. 輸入以下指令為新分割區建立標籤︰

    sudo tune2fs -L LABELNAME /dev/disk/by-id/dm-uuid-UUID_partN

    以實際 UUID 和分割區編號取代 UUID_partN,例如 36006016088d014006e98a7a94a85db11_part1。以您選擇的標籤取代 LABELNAME

  10. 輸入以下指令以重新設定 DM-MPIO,使其讀取別名︰

    sudo multipathd -k'reconfigure'
  11. 輸入以下指令驗證 multipathd 是否可辨識裝置︰

    sudo multipath -ll
  12. 使用文字編輯器在 /etc/fstab 檔案中新增掛接項目。

    此時,您在上一步中建立的別名在 /dev/disk/by-label 目錄中尚不存在。為 /dev/dm-9 路徑新增一個掛接項目,然後在下次重新開機到以下項目之前變更該項目

    LABEL=LABELNAME
  13. 建立要做為掛接點的目錄,然後掛接裝置。

17.14.3 檢視多重路徑 I/O 狀態

查詢多重路徑 I/O 狀態會輸出多重路徑對應的目前狀態。

multipath -l 選項會顯示上次執行路徑檢查程式後目前的路徑狀態。該選項不會執行路徑檢查程式。

multipath -ll 選項會執行路徑檢查程式,更新路徑資訊,然後顯示目前的狀態資訊。此指令永遠都會顯示路徑狀態的最新資訊。

tux > sudo multipath -ll
3600601607cf30e00184589a37a31d911
[size=127 GB][features="0"][hwhandler="1 emc"]

\_ round-robin 0 [active][first]
  \_ 1:0:1:2 sdav 66:240  [ready ][active]
  \_ 0:0:1:2 sdr  65:16   [ready ][active]

\_ round-robin 0 [enabled]
  \_ 1:0:0:2 sdag 66:0    [ready ][active]
  \_ 0:0:0:2 sdc  8:32    [ready ][active]

它會針對每個裝置顯示裝置的 ID、大小、功能和硬體處理器。

在探查裝置時,裝置的路徑會自動分到不同的優先程度群組。每次只有一個優先程度群組處於主動狀態。對於主動/主動組態,所有路徑都屬於同一個群組。對於主動/被動組態,被動路徑位於另外的優先程度群組中。

指令會顯示每個群組的下列資訊︰

  • 用於平衡群組內 I/O 的排程規則,如輪替式

  • 該群組是處於主動、已停用還是已啟用狀態

  • 該群組是否為第一個 (優先程度最高) 群組

  • 群組內包含的路徑

指令會顯示每個路徑的下列資訊︰

  • 實體位址,格式為 HOST:BUS:TARGET:LUN,例如 1:0:1:2

  • 裝置節點名稱,如 sda

  • Major:minor 號碼

  • 裝置的狀態

17.14.4 在出錯狀況下管理 I/O

如果所有路徑同時失敗,您可能需要啟用 queue_if_no_path 設定多重路徑,以將 I/O 排入佇列。如果不啟用,I/O 便會在所有路徑都失敗時立即失敗。在驅動程式、HBA 或光纖出現假性錯誤,且這類錯誤會導致所有路徑遺失的特定情況下,應將 DM-MPIO 設定為將所有 I/O 排入佇列,且永不向上傳播錯誤。

在叢集中使用多重路徑裝置時,您可以選擇停用 queue_if_no_path。如此,系統就不會將 I/O 排入佇列,而是自動使路徑失效,並會將 I/O 錯誤升級,產生叢集資源容錯移轉。

啟用 queue_if_no_path 會導致 I/O 在有路徑重新啟用之前無限期地排入佇列,因此請確定 multipathd 正在執行,且對您的情況有效。否則,在重新開機或手動返回到容錯移轉以取代佇列之前,I/O 可能會無限期地擱置於受影響的多重路徑裝置中。

若要測試案例,請執行下列步驟︰

  1. 開啟終端機主控台。

  2. 輸入以下指令啟動裝置 I/O 的佇列功能而非容錯移轉︰

    sudo dmsetup message DEVICE_ID 0 queue_if_no_path

    以裝置的 ID 取代 DEVICE_ID。0 值代表磁區,當不需要磁區資訊時使用。

    例如,輸入︰

    sudo dmsetup message 3600601607cf30e00184589a37a31d911 0 queue_if_no_path
  3. 輸入以下指令返回到裝置 I/O 的容錯移轉︰

    sudo dmsetup message DEVICE_ID 0 fail_if_no_path

    此指令會立即使所有排入佇列的 I/O 失敗。

    以裝置的 ID 取代 DEVICE_ID。例如,輸入︰

    sudo dmsetup message 3600601607cf30e00184589a37a31d911 0 fail_if_no_path

若要對所有路徑都失敗的情況設定佇列 I/O,請執行下列步驟︰

  1. 開啟終端機主控台。

  2. 在文字編輯器中開啟 /etc/multipath.conf 檔案。

  3. 取消預設區段及其結束括號的註解,然後新增 default_features 設定,如下所示︰

    defaults {
      default_features "1 queue_if_no_path"
    }
  4. 修改 /etc/multipath.conf 檔案後,您必須執行 dracut -f 在系統中重新建立 initrd,然後重新開機以使變更生效。

  5. 當您準備好返回到裝置 I/O 的容錯移轉時,請輸入︰

    sudo dmsetup message MAPNAME 0 fail_if_no_path

    以裝置對應的別名或裝置 ID 取代 MAPNAME。0 值代表磁區,當不需要磁區資訊時使用。

    此指令會立即使所有排入佇列的 I/O 失敗,並將錯誤傳播到呼叫應用程式。

17.14.5 解決擱置的 I/O

如果所有路徑同時失敗,且 I/O 雖已排入佇列卻被擱置時,請執行下列步驟︰

  1. 在終端機主控台提示符處輸入以下指令︰

    sudo dmsetup message MAPNAME 0 fail_if_no_path

    以裝置的正確裝置 ID 或對應的別名取代 MAPNAME。0 值代表磁區,當不需要磁區資訊時使用。

    此指令會立即使所有排入佇列的 I/O 失敗,並將錯誤傳播到呼叫應用程式。

  2. 輸入下列指令重新啟動佇列︰

    sudo dmsetup message MAPNAME 0 queue_if_no_path

17.14.6 組態 IBM Z 裝置的預設設定

對具有多重路徑功能的 IBM Z 裝置進行的測試表明,應將 dev_loss_tmo 參數設定為無限 (2147483647),將 fast_io_fail_tmo 參數設定為 5 秒。如果您使用的是 IBM Z 裝置,請修改 /etc/multipath.conf 檔案,以指定如下值:

defaults {
       dev_loss_tmo 2147483647
       fast_io_fail_tmo 5
}

dev_loss_tmo 參數設定將某個多重路徑連結標記為失敗之前需等待的秒數。若該路徑失敗,則目前在該路徑上的所有 I/O 都會失敗。預設值會因所用的裝置驅動程式而有所不同。若要使用驅動程式的內部逾時,請將值設定為零 (0)。也可以將其設定為「infinity」或 2147483647,如此會將其設定為最大值 2147483647 秒 (68 年)。

fast_io_fail_tmo 參數設定偵測到連結問題後將 I/O 確定為失敗之前需等待的時間。到達該驅動程式的 I/O 都會失敗。如果 I/O 排在擁堵的佇列中,則未到 dev_loss_tmo 時間且佇列未疏通之前 I/O 不會失敗。

如果您修改了 /etc/multipath.conf 檔案,只有在您更新多重路徑對應或 multipathd 精靈 (systemctl restart multipathd) 重新啟動後,變更才會套用。

17.14.7 將多重路徑用於 NetApp 裝置

將多重路徑用於 NetApp 裝置時,建議在 /etc/multipath.conf 檔案中進行如下設定︰

  • 為 NetApp 裝置全域設定下列參數的預設值︰

    max_fds max
    queue_without_daemon no
  • 在硬體表中為 NetApp 裝置設定下列參數的預設值︰

    dev_loss_tmo infinity
    fast_io_fail_tmo 5
    features "3 queue_if_no_path pg_init_retries 50"

17.14.8 將 --noflush 用於多重路徑裝置

在多重路徑裝置上執行時,應始終使用 --noflush 選項。

例如,在執行表格重新載入的程序檔中,應使用 --noflush 選項進行恢復,以確保所有重要 I/O 不會被衝洗,因為您需要多重路徑拓樸資訊。

load
resume --noflush

17.14.9 根裝置為多重路徑裝置時的 SAN 逾時設定

所有路徑都已失敗並已從系統移除時,多重路徑裝置上包含根目錄 (/) 的系統可能會停止,因為系統會收到儲存子系統 (例如光纖通道儲存陣列) 發出的 dev_loss_tmo 逾時通知。

如果系統裝置設定了多個路徑,且多重路徑 no_path_retry 設定處於啟用狀態,您應相應地修改儲存子系統的 dev_loss_tmo 設定,以確保在所有路徑失效的情況下不會移除任何裝置。強烈建議您將 dev_loss_tmo 的值設為等於或大於多重路徑中 no_path_retry 設定的值。

建議按如下方式設定儲存子系統的 dev_los_tmo

<dev_loss_tmo> = <no_path_retry> * <polling_interval>

其中,以下定義適用於多重路徑值︰

  • no_path_retry 定義多重路徑 I/O 嘗試多少次後路徑視為遺失並停止將 I/O 排入佇列。

  • polling_interval 是執行路徑檢查的時間間隔 (以秒為單位)。

每個多重路徑值都應在 /etc/multipath.conf 組態檔案中設定。如需更多資訊,請參閱第 17.6 節 「建立或修改 /etc/multipath.conf 檔案」

17.15 MPIO 疑難排解

本節說明 MPIO 的一些已知問題和可能的解決方案。

17.15.1 啟用多重路徑時系統在開機過程中退出到緊急外圍程序

在開機過程中,系統退出到緊急外圍程序,並顯示類似如下的訊息︰

[  OK  ] Listening on multipathd control socket.
         Starting Device-Mapper Multipath Device Controller...
[  OK  ] Listening on Device-mapper event daemon FIFOs.
         Starting Device-mapper event daemon...
         Expecting device dev-disk-by\x2duuid-34be48b2\x2dc21...32dd9.device...
         Expecting device dev-sda2.device...
[  OK  ] Listening on udev Kernel Socket.
[  OK  ] Listening on udev Control Socket.
         Starting udev Coldplug all Devices...
         Expecting device dev-disk-by\x2duuid-1172afe0\x2d63c...5d0a7.device...
         Expecting device dev-disk-by\x2duuid-c4a3d1de\x2d4dc...ef77d.device...
[  OK  ] Started Create list of required static device nodes ...current kernel.
         Starting Create static device nodes in /dev...
[  OK  ] Started Collect Read-Ahead Data.
[  OK  ] Started Device-mapper event daemon.
[  OK  ] Started udev Coldplug all Devices.
         Starting udev Wait for Complete Device Initialization...
[  OK  ] Started Replay Read-Ahead Data.
         Starting Load Kernel Modules...
         Starting Remount Root and Kernel File Systems...
[  OK  ] Started Create static devices
[   13.682489] floppy0: no floppy controllers found
[*     ] (1 of 4) A start job is running for dev-disk-by\x2du...(7s / 1min 30s)
[*     ] (1 of 4) A start job is running for dev-disk-by\x2du...(7s / 1min 30s)

...

Timed out waiting for device dev-disk-by\x2duuid-c4a...cfef77d.device.
[DEPEND] Dependency failed for /opt.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Postfix Mail Transport Agent.
Welcome to emergency shell
Give root password for maintenance
(or press Control-D to continue):

在下列情況下,可能會發生此問題︰

程序 17.1︰ 應急外圍程序︰將檔案系統加入黑名單

如果根檔案系統不在多重路徑上,卻啟用了多重路徑,則需要此修復。在此類設定中,多重路徑會嘗試為未列入黑名單的所有裝置設定其路徑。由於具有根檔案系統的裝置已掛接,它對於多重路徑而言是無法存取的,因而會導致路徑設定失敗。您可以在 /etc/multipath.conf 中將根裝置列入黑名單來正確設定多重路徑,從而修復此問題。

  1. 在緊急外圍程序中執行 multipath -v2,並確定根檔案系統的裝置。指令將產生類似如下的輸出︰

    root # multipath -v2
    Dec 18 10:10:03 | 3600508b1001030343841423043300400: ignoring map

    | : 之間的字串是列入黑名單所需的 WWID。

  2. 開啟 /etc/multipath.conf 並新增以下內容︰

    blacklist {
      wwid "WWWID"
    }

    以您在上一步中擷取的 ID 取代 WWWID。如需詳細資訊,請參閱第 17.8 節 「將非多重路徑裝置列入黑名單」

  3. CtrlD 離開緊急外圍程序並將伺服器重新開機。

程序 17.2︰ 應急外圍程序︰重建 initrd

如果 initrd 與系統之間的多重路徑狀態 (已啟用或已停用) 不相同,則需要執行此修復程序。若要修復此問題,請重建 initrd

  1. 如果已在系統中啟用多重路徑,請透過以下指令重建支援多重路徑的 initrd︰

    dracut --force --add multipath

    如果已在系統中停用多重路徑,請透過以下指令重建支援多重路徑的 initrd︰

    dracut --force -o multipath
  2. CtrlD 離開緊急外圍程序並將伺服器重新開機。

程序 17.3︰ 應急外圍程序︰重建 initrd

如果 initrd 不包含用於存取網路連接儲存的驅動程式,則需要此修復。例如,如果系統是在沒有多重路徑的情況下安裝的,或者當新增或更換相應硬體時,就可能需要執行此修復程序。

  1. 將所需的驅動程式新增至檔案 /etc/dracut.conf.d/01-dist.conf 中的變數 force_drivers。例如,如果系統包含由 hpsa 驅動程式存取的 RAID 控制器,且多重路徑裝置連接至 qla23xx 驅動程式所存取的 QLogic 控制器,則此項目應為︰

    force_drivers+="hpsa qla23xx"
  2. 使用以下指令重建 initrd

    dracut -f --add-multipath
  3. 為了防止在連接網路儲存失敗時系統開機進入應急模式,建議將掛接選項 _netdev 新增到 /etc/fstab 中的相應項目。

  4. CtrlD 離開緊急外圍程序並將伺服器重新開機。

17.15.2 升級到多重路徑 0.4.9 或更高版本後個別裝置的 PRIO 設定失敗

從版本 0.4.9 開始,多重路徑工具使用 /etc/multipath.conf 檔案中 defaults{}devices{} 區段內的 prio 設定。當關鍵字 prio 是為 multipaths{) 區段中的個別 multipath 定義而指定時,它會無訊息式地忽略該關鍵字。

多重路徑工具 0.4.8 允許 multipaths{) 區段內個別 multipath 定義中的 prio 設定置換 defaults{}devices{} 區段內的 prio 設定。

17.15.3 升級到 multipath-tools-0.4.9 或更高版本後使用引數的 PRIO 設定失敗

multipath-tools-0.4.8 升級到 multipath-tools-0.4.9 後,/etc/multipath.conf 檔案中的 prio 設定對於需要引數的優先程度排序器將會損壞。在 multipath-tools-0.4.9 中,prio 關鍵字用於指定優先程度排序器,prio_args 關鍵字則用於為需要引數的優先程度排序器指定引數。以前,優先程度排序器及其引數都在同一 prio 行上指定。

例如,在 multipath-tools-0.4.8 中,下行用於指定優先程度排序器,並且在同一行中指定其引數。

prio "weightedpath hbtl [1,3]:.:.+:.+ 260 [0,2]:.:.+:.+ 20"

升級到 multipath-tools-0.4.9 或更高版本後,該指令會導致錯誤。訊息類似下方所列︰

<Month day hh:mm:ss> | Prioritizer 'weightedpath hbtl [1,3]:.:.+:.+ 260
[0,2]:.:.+:.+ 20' not found in /lib64/multipath

若要解決此問題,請使用文字編輯器修改 /etc/multipath.conf 檔案中的 prio 行。建立兩行,在 prio 行上指定優先程度排序器,並在其下的 prio_args 行上指定優先程度排序器引數︰

prio "weightedpath"
prio_args "hbtl [1,3]:.:.+:.+ 260 [0,2]:.:.+:.+ 20"

執行 sudo systemctl restart multipathd 重新啟動 multipathd 精靈以使變更生效。

17.15.4 技術資訊文件

如需有關在 SUSE Linux Enterprise Server 上對多重路徑 I/O 問題進行疑難排解的資訊,請參閱 SUSE 知識庫中的下列技術資訊文件 (TID)︰