目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキー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 (Fibre Channel)環境または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 Fileの作成または修正」を参照してください。

次の点に留意してください。

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ファミリアレイ用ハンドラが1つ、既に提供されています。

重要
重要: その他の情報

ハードウェアベンダのマニュアルを参照して、そのハードウェアハンドラをデバイスマッパーマルチパス用にインストールする必要があるかどうか判別してください。

multipath -tコマンドは、特定のハードウェアハンドラで特別な処理を必要とするストレージアレイの内部テーブルを表示します。ただし、表示されるリストは、サポートされているアレイの包括的なリストではありません。特別な処理を必要とし、multipath-toolsの開発者がツールの開発中にアクセスしたアレイだけがリストされます。

重要
重要: [Exceptions (例外)]

真のアクティブ/アクティブマルチパスサポートをもつアレイは、特別な処理を必要としないので、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(Device Mapper Multipath: デバイスマッパーマルチパス)モジュールによるそれら変更の自動的な検出や反映は行われません。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 (Distributed Replicated Block Device)高可用性ソリューションは、マルチパス処理をベースとして実行されます。複数のI/Oパスを持ち、DRDBソリューションで使用予定のデバイスごとに、マルチパス処理用デバイスを設定してから、DRBDを設定する必要があります。

17.3.5 initrdとシステム設定との同期を常に維持する

マルチパスを使用する際に最も重要な要件の1つは、ルートファイルシステムと、システムをブートするために必要な他のファイルシステムすべてについて、initrdとインストール済みシステムの動作が同じになるようにすることです。システムでマルチパスが有効になっている場合はinitrdでも有効にする必要があり、その逆も同様です。詳細については、17.5.1項 「マルチパスI/Oサービスの有効化、無効化、起動、および停止」を参照してください。

initrdとシステムが同期されていない場合、システムは正しくブートせず、起動手順を実行すると緊急シェルが起動します。このようなシナリオを回避または修復する方法については、17.15.1項 「マルチパスが有効な場合、ブート時にシステムが終了して緊急シェルが起動する」を参照してください。

17.4 マルチパス管理ツール

SUSE Linux Enterprise Serverのマルチパス処理のサポートは、Linuxカーネルのデバイスマッパーマルチパスモジュールとmultipath-toolsユーザスペースパッケージに基づいています。MDADM (Multiple Devices Administration)ユーティリティ(multipath)を使用すると、マルチパスデバイスの状態を表示できます。

17.4.1 デバイスマッパーマルチパスモジュール

デバイスマッパーマルチパス(DM-MP)モジュールは、Linuxにマルチパス処理機能を提供します。DM-MPIOは、SUSE Linux Enterprise Serverでのマルチパス処理の推奨ソリューションです。DM-MPIOは、SUSEによって完全にサポートされている製品に付属する唯一のマルチパス処理オプションです。

DM-MPIOは、多様なセットアップでマルチパス処理サブシステムを自動設定します。デバイスごとに最大8個のパスの設定がサポートされています。アクティブ/パッシブ(1つのパスがアクティブで、他のパスがパッシブ)またはアクティブ/アクティブ(ラウンドロビン方式の負荷分散で全パスがアクティブ)の構成がサポートされています。

DM-MPIOフレームワークは、2つの方法で拡張できます。

DM-MPIOのユーザスペースコンポーネントにより、自動的なパスの検出とグループ化のほか、自動的なパスの再テストが実行されるので、障害が発生したパスは、正常に戻ると自動的に復帰します。これにより、管理者の手間を最低限に抑えることができます。

DM-MPIOは、デバイス自体の障害ではなく、デバイスへのパスの障害からシステムを保護します。アクティブなパスの1つが失われると(たとえば、ネットワークアダプタが破損する、光ファイバケーブルが外れるなど)、残りのパスにI/Oをリダイレクトします。アクティブ/パッシブ構成の場合は、パスがパッシブパスの1つにフェールオーバーします。ラウンドロビン式負荷分散構成を使用している場合は、トラフィックの負荷が残りの正常なパス全体に分散されます。すべてのアクティブパスに障害が起きた場合は、アクティブでないセカンダリパスが有効になり、約30秒の遅延でフェールオーバーが開始されます。

ディスクアレイに複数のストレージプロセッサがある場合は、アクセスしたいLUNを所有するストレージプロセッサにSANスイッチが接続していることを必ず確認してください。ほとんどのディスクアレイでは、すべてのLUNが両方のストレージプロセッサに属しているので、両方の接続がアクティブです。

注記
注記: ストレージプロセッサ

一部のディスクアレイでは、ストレージアレイがストレージプロセッサを介してトラフィックを管理するので、一度に1つのストレージプロセッサだけが提示されます。1つのプロセッサがアクティブとなり、もう1つのプロセッサは障害が発生するまでパッシブとなります。間違ったストレージプロセッサ(パッシブなパスをもつプロセッサ)に接続している場合は、予期されたLUNが表示されなかったり、それらのLUNが表示されてもアクセスしようとするとエラーが発生することがあります。

表 17.1: ストレージアレイのマルチパスI/O機能

ストレージアレイの機能

説明

アクティブ/パッシブコントローラ

1つのコントローラはアクティブで、すべてのLUNに対応します。2つ目のコントローラは、スタンバイとして機能します。2つ目のコントローラは、オペレーティングシステムが冗長なパスを認識するように、マルチパスコンポーネントに対するLUNの提示も行います。プライマリコントローラに障害が発生した場合は、セカンダリコントローラが引き継ぎ、すべてのLUNに対応します。

一部のアレイでは、LUNをさまざまなコントローラに割り当てることができます。所定のLUNは、そのアクティブコントローラとなる1つのコントローラに割り当てられます。一度に1つのコントローラがあらゆるLUNのディスクI/Oを処理し、2つ目のコントローラがそのLUNのスタンバイコントローラとなります。2つ目のコントローラは、パスの提示もしますが、ディスクI/Oは行えません。そのLUNを使用するサーバは、LUNの割り当て先のコントローラに接続します。LUNのセットに対するプライマリコントローラに障害が発生すると、セカンダリコントローラが引き継ぎ、すべてのLUNに対応します。

アクティブ/パッシブコントローラ

両方のコントローラが、すべてのLUNの負荷を共有し、あらゆるLUNのディスクI/Oを処理できます。1つのコントローラに障害が発生すると、2つ目のコントローラが自動的にすべてのトラフィックを処理します。

負荷分散

デバイスマッパーマルチパスドライバは、自動的に、すべてのアクティブパス全体にトラフィックの負荷を分散します。

コントローラのフェールオーバー

アクティブなコントローラがパッシブなコントローラにフェールオーバーすると、デバイスマッパーマルチパスドライバがホスト/スタンバイ間のパスを自動的に有効にし、それらをプライマリパスにします。

ブート/ルートデバイスのサポート

マルチパス処理は、SUSE Linux Enterprise Server 10以降のルート(/)デバイスに対してサポートされます。ホストサーバは、ブートデバイス用の、現在アクティブなコントローラおよびストレージプロセッサに接続する必要があります。

マルチパス処理は、SUSE Linux Enterprise Server 11以降の/bootデバイスに対してサポートされています。

デバイスマッパーマルチパスは、マルチパスデバイスの各パスを個別のSCSIデバイスとして検出します。SCSIデバイス名は、/dev/sdNの形式をとります。ここで、Nは、デバイスに対して自動生成される文字であり、aで始まり、デバイスの生成に応じてシーケンシャルに発行されます(/dev/sda/dev/sdbなど)。デバイス数が26を超えると、文字が2つ使用され、/dev/sdzの次のデバイスは/dev/sdaa、その次は、その次は/dev/sdabと続きます。

複数のパスが自動的に検出されない場合は、それらを/etc/multipath.confファイルで手動設定できます。multipath.confファイルは、システム管理者によって作成および設定されるまで存在しません。詳細については、17.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。

17.4.2 マルチパスI/O管理ツール

パッケージmultipath-toolsおよびkpartxでは、自動パス検出とグループ化を扱うツールが提供されています。これらのパッケージは、自動的にパスの定期テストを行うので、障害が発生したパスは、正常に戻ると、自動的に復帰します。これにより、管理者の手間を最低限に抑えることができます。

表 17.2: multipath-toolsパッケージに含まれるツール

ツール

説明

multipath

システムをスキャンしてマルチパスデバイスを検出し、アセンブルします。

multipathd

mapsイベントを待機し、multipathを実行します。

kpartx

マルチパスデバイス上のパーティションにリニアdevmapをマップします。これにより、デバイス上のパーティションのマルチパスモニタリングを作成することが可能になります。

mpathpersist

デバイスマッパーマルチパスのデバイスでSCSIの永続的な予約を管理します。

17.4.3 マルチパスデバイスへのMDADMの使用

デフォルトのデバイスハンドラはUdevであり、デバイスは、デバイスノード名ではなく、Worldwide IDによって、システムに自動的に認識されます。これによって、環境設定ファイル(mdadm.conflvm.conf)がマルチパスデバイスを正しく認識しないという、MDADMおよびLVMの旧リリースにあった問題が解決します。

LVM2の場合のようにmdadmでは、デバイスノードパスではなく、IDによってデバイスをアクセスする必要があります。したがって、/etc/mdadm.conf内のDEVICEエントリを次のように設定してください。

DEVICE /dev/disk/by-id/*

ユーザフレンドリな名前を使用している場合は、次のようにパスを指定し、マルチパス処理の設定後に、デバイスマッパー名だけがスキャンされるようにします。

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

17.4.4 multipathコマンド

マルチパスデバイスを設定し、管理するには、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

特定のマルチパスデバイスを設定します。

DEVICENAMEを、/dev/sdb (udevにより$DEVNAME変数で表示)またはmajor:minor形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。

multipath -f

マルチパスマップとそのデバイスにマップされたパーティションを選択的に抑制します。

multipath -d

ドライ実行。可能性のあるマルチパスデバイスを表示しますが、デバイスの作成やデバイスマップの更新は行いません。

multipath -v2 -d

ドライ実行で可能性のあるマルチパスデバイスのマルチパスマップ情報を表示します。-v2オプションを使用すると、ローカルディスクのみが表示されます。この冗長レベルでは、kpartxなどの他のツールへのフィード用としてのみ、作成または更新したマルチパスの名前をプリントします。

デバイスがすでに存在し、変更がない場合には、出力はありません。設定されているマルチパスデバイスのステータスを見るには、multipath -llを使用します。

multipath -v2 DEVICENAME

特定の可能性のあるマルチパスデバイスを設定し、そのマルチパスマップ情報を表示します。この冗長レベルでは、kpartxなどの他のツールへのフィード用として、作成または更新したマルチパスの名前だけをプリントします。

デバイスがすでに存在し、変更がない場合には、出力はありません。設定されているマルチパスデバイスのステータスを見るには、multipath -llを使用します。

DEVICENAMEを、/dev/sdb (udevにより$DEVNAME変数で表示)またはmajor:minor形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。

multipath -v3

可能性のあるマルチパスデバイスを設定し、それらのマルチパスマップ情報を表示します。この冗長レベルでは、すべての検出されたパス、マルチパス、およびデバイスマップがプリントされます。WWIDおよびdevnodeの両方でブラックリスト化されたデバイスが表示されます。

multipath -v3 DEVICENAME

特定の可能性のあるマルチパスデバイスを設定し、それらの情報を表示します。-v3オプションを使用すると、フルパスリストが表示されます。この冗長レベルでは、すべての検出されたパス、マルチパス、およびデバイスマップがプリントされます。WWIDおよびdevnodeの両方でブラックリスト化されたデバイスが表示されます。

DEVICENAMEを、/dev/sdb (udevにより$DEVNAME変数で表示)またはmajor:minor形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。

multipath -ll

すべてのマルチパスデバイスの状態を表示します。

multipath -ll DEVICENAME

指定されたマルチパスデバイスのステータスを表示します。

DEVICENAMEを、/dev/sdb (udevにより$DEVNAME変数で表示)またはmajor:minor形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。

multipath -F

すべての未使用のマルチパスデバイスマップをフラッシュします。これによって、マルチパスが解消したり、デバイスが削除されることはありません。

multipath -F DEVICENAME

指定されたマルチパスデバイスの未使用のマルチパスデバイスマップをフラッシュします。これによって、マルチパスが解消したり、デバイスが削除されることはありません。

DEVICENAMEを、/dev/sdb (udevにより$DEVNAME変数で表示)またはmajor:minor形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。

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

次の表に説明されているグループポリシーオプションの1つを指定することにより、グループポリシーを設定します。

表 17.3: multipath -pコマンドのグループポリシーオプション

ポリシーオプション

説明

failover (フェールオーバー)

(デフォルト)優先度グループごとに1つのパス一度に使用できるスパスは1つだけです。

multibus

1つの優先度グループ内にすべてのパス

group_by_serial

検出されたSCSIシリアル番号(コントローラノードの全世界規模の番号)ごとに1つの優先度グループ

group_by_prio

パス優先度値ごとに1つの優先度グループ同じ優先度のパスは同じ優先度グループに属します。優先度は、コールアウトプログラムで決定されます。それらのプログラムは、グローバル、コントローラごと、またはマルチパスごとのオプションとして/etc/multipath.conf環境設定ファイルで指定されます。

group_by_node_name

ターゲットノード名ごとに1つの優先度グループターゲットノード名は、/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デバイスを検出します。それらのSANデバイスは、以降の設定のため、ホストに提示されます。

    注記
    注記: ネイティブのマルチパス処理を有効化しない

    ご使用のHBAドライバのネイティブマルチパス処理が有効化していないことを確認してください。

    詳細については、ベンダの特定マニュアルを参照してください。

  • ドライバモジュールがロードされたら、特定アレイのLUNまたはパーティションに割り当てられたデバイスノードを検出します。

  • SANデバイスがサーバ上でルートデバイスとして使用される場合は、17.14.9項 「ルートデバイスがマルチパスの場合のSANタイムアウト設定」に示されているように、デバイスのタイムアウト設定を変更します。

HBAドライバがLUNを認識しない場合は、lsscsiを使用して、SCSIデバイスがオペレーティングシステムによって正しく認識されているかどうかチェックできます。LUNがHBAドライバによって認識されない場合は、SANのゾーン化セットアップをチェックします。特に、LUNのマスキングがアクティブであるかどうか、LUNがサーバに正しく割り当てられているかどうかをチェックしてください。

LUNがHBAドライバによって認識されても、対応するブロックデバイスが存在しない場合は、カーネルパラメータを追加して、SCSIデバイスのスキャン動作を変更する必要があります(LUNが連続的に番号付けされていないことを示すなど)。詳細については、SUSEナレッジベース(https://www.suse.com/support/kb/doc.php?id=3955167)にあるTID 3955167: Troubleshooting SCSI (LUN) Scanning Issuesを参照してください。

17.5.3 マルチパスデバイスのパーティショニング

複数のパスをもつパーティショニングデバイスは、推奨できませんが、サポートされています。kpartxツールを使用すると、再起動なしでマルチパスデバイスにパーティションを作成できます。マルチパス処理の設定前に、YaSTのパーティショナ機能またはサードパーティーのパーティショニングツールの使用により、デバイスをパーティショニングすることもできます。

マルチパスデバイスはデバイスマッパーデバイスです。コマンドラインツール(parted、kpartx、fdiskなど)を使用してデバイスマッパーデバイスを変更することはできますが、他の層を更新するために必要なudevイベントが生成されるとは限りません。デバイスマッパーデバイスをパーティション化した後、マルチパスマップをチェックして、デバイスマッパーデバイスがマップされていることを確認する必要があります。デバイスが見つからない場合は、マルチパスデバイスを再マップするかサーバを再起動すると、マルチパスマップにある新しいパーティションをすべて検出できます。

マルチパスデバイス上にあるパーティションのデバイスマッパーデバイスは、独立したデバイスと同じではありません。デバイス全体を使用するLVM論理ボリュームを作成する場合、パーティションが含まれないデバイスを指定する必要があります。マルチパスパーティションをLVM論理ボリュームのターゲットデバイスとして設定すると、LVMは、ベースを成す物理デバイスがパーティション化されていると認識し、作成に失敗します。SANデバイスを再分割する必要がある場合、SANデバイス上のLUNを分割し、各LUNを別個のマルチパスデバイスとしてサーバに認識させることができます。

17.6 /etc/multipath.conf Fileの作成または修正

/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/0の全般的デフォルト設定。これらの値は、適切なデバイスセクションまたはマルチパスセクションで値が指定されていない場合に使用されます。詳細については、17.7項 「ポーリング、待ち行列、およびフェールバック用のデフォルトポリシーの設定」を参照してください。

blacklist

マルチパスの候補ではないとして破棄するデバイス名の一覧。デバイスは、そのデバイスノード名(devnode)、そのWWID (wwid)、またはそのベンダまたは製品文字列(device)によって識別できます。通常、非マルチパスデバイス(hpsafdhdmddmsrscdstramrawloopなど)は無視できます。詳細と使用例については、17.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。

blacklist_exceptions

ブラックリストに記載されている場合でもマルチパスの候補として扱うデバイスのデバイス名の一覧。デバイスは、そのデバイスノード名(devnode)、そのWWID (wwid)、またはそのベンダまたは製品文字列(device)によって識別できます。対象のデバイスを指定するには、ブラックリストで使用したのと同じキーワードを使用する必要があります。たとえば、ブラックリスト内のデバイスにdevnodeキーワードを使用した場合は、devnodeキーワードを使用して、ブラックリスト例外にあるデバイスの一部を除外します。devnodeキーワードを使用し、それらの一部のデバイスをwwidキーワードを使用して除外することで、デバイスをブラックリストに入れることはできません。詳細と使用例については、17.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。

multipaths

個々のマルチパスデバイスの設定を指定します。個別設定をサポートしていない設定を除き、これらの値により、設定ファイルのdefaultsおよびdevicesセクションで指定された値が上書きされます。

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 ]

パスは、優先度グループでグループ化されます。一度に1つの優先度グループだけがアクティブに使用されます。アクティブ/アクティブ構成をモデル化するには、すべてのパスを同じグループにします。アクティブ/パッシブ構成をモデル化する場合は、並行してアクティブにしないパスを複数の別の優先度グループに振り分けます。これは、通常、デバイス検出時に自動的に行われます。

出力として、順序、グループ内でのI/O負荷の分散に使用されるスケジュールポリシー、および各優先度グループのパスが表示されます。また、各パスに対して、その物理アドレス(ホスト:バス:ターゲット:LUN)、デバイスノード名、メジャー:マイナー番号、および状態が表示されます。

ドライ実行で冗長レベルの-v3を使用することによって、すべての検出されたパス、マルチパス、およびデバイスマップを表示できます。WWIDおよびデバイスノードの両方でブラックリスト化されたデバイスが表示されます。

2つの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ファイルの変更を適用したマルチパスマップの更新

/etc/multipath.confファイルに対する変更は、multipathdの実行中は有効になりません。変更を行ったら、ファイルを保存して閉じ、次のように、変更内容を適用してマルチパスマップを更新してください。

  1. multipathdサービスを停止します。

    sudo systemctl stop multipathd
  2. 次のコマンドの入力で、古いmultipathバインディングをクリアします。

    sudo /sbin/multipath -F
  3. 次のコマンドの入力で、新しいmultipathバインディングを作成します。

    sudo /sbin/multipath -v2 -l
  4. multipathdサービスを再起動します。

    sudo systemctl start multipathd
  5. dracut -fを実行し、システム上にinitrdイメージを再作成してから、再起動して変更内容を有効にします。

17.6.5 WWIDの生成

異なるパス上のデバイスを識別するため、マルチパスは、各デバイスに対してWorld Wide Identification (WWID)を使用します。2つのデバイスパスの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エラー(ハートビート許容値の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ドライバからローカルデバイスとすべてのアレイを、multipathによる管理から外してブラックリストに載せるには、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]*]"
}

特定のデバイスタイプをブラックリスト化するには、ブラックリストにdeviceセクションを追加して、キーワードvendorおよびproductを使用します。

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が、パスが1つだけのデバイスにマルチパスマップを設定しないようにします(詳細については、man 5 multipath.confを参照してください)。特定の設定では、これによって、管理者がローカルSATAディスクなどのブラックリストエントリを作成する手間を省くことができます。

find_multipathsオプションを使用すると一見便利そうですが、欠点もあります。まず、システムのブートが複雑化して低速になります。見つかったすべてのデバイスについて、そのデバイスに2つ目のパスが存在するかどうかを確認するため、すべてのデバイスが検出されるまでブートロジックが待機しなければならないからです。さらに、ブート時に一部のパスがダウンしていたり、他の理由で不可視になっていたりすると、問題が発生する可能性もあります。つまり、デバイスがシングルパスデバイスとして誤検出されてアクティブ化され、後で他のパスを追加できなくなる可能性があります。

find_multipathsは、WWIDが一致すれば、/etc/multipath/wwidsに一覧にされたデバイスをすべてマルチパスデバイスとみなします。これは、find_multipathsを初めて有効にする場合に重要です。wwidsファイルには既存のすべてのマルチパスマップ(シングルパスマップを含む)が一覧にされているため、/etc/multipath/wwidsを削除または編集しない限り、このオプションを有効にしても効果はありません。マルチパスルートファイルシステムを持つSANブートシステムでは、初期RAMディスクとファイルシステムとの間で/etc/multipath/wwidsの同期が維持されるようにしてください。

まとめると、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 (Worldwide Identifier)は、グローバルに固有または非変更であることを保証されたマルチパスデバイスの識別子です。マルチパス処理で使用されるデフォルト名は、/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_nameを使用している場合は、別名をmpathN形式に設定しないでください。mpathN形式にすると、自動的に割り当てられたユーザフレンドリ名と競合し、デバイスノードが正しくなくなる可能性があります。

/etc/multipath.confファイルのグローバルマルチパスオプションuser_friendly_namesは、マルチパスデバイスのユーザフレンドリ名の使用を有効または無効にするために使用されます。このオプションがno (デフォルト)に設定されている場合、マルチパスはデバイス名としてWWIDを使用します。このオプションがyesに設定されている場合は、/var/lib/multipath/bindingsファイルが使用されて、mpath<N>形式の永続的で固有の名前が、/dev/mapperディレクトリ内でデバイスに割り当てられます。/etc/multipath.confファイルのbindings fileオプションを使用すると、bindingsファイルに代替の場所を指定できます。

/etc/multipath.confファイルのグローバルマルチパスオプションaliasは、デバイスに名前を明示的に割り当てるために使用されます。別名がマルチパスデバイスに設定されている場合は、WWIDまたはユーザフレンドリ名の代わりにその別名が使用されます。

user_friendly_namesオプションの使用は、以下の状況では問題を引き起こす可能性があります。

ルートデバイスでマルチパスを使用している場合:

システムルートデバイスでマルチパスを使用中に、user_friendly_namesオプションを使用する場合は、 option, the user-friendly settings in the /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.multipathおよびmultipathdによって、マルチパス処理を有効にすることができます。

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オプションを非コメント化し、次に、その値をNoからYesに変更します。

      次に例を示します。

      ## Use user-friendly names, instead of using WWIDs as names.
      defaults {
        user_friendly_names yes
      }
  4. (オプション)aliasオプション(multipathセクションにある)を使用して、独自のデバイス名を指定します。

    次に例を示します。

    ## 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は使用しないようにしてください。WWNは、デバイスIDの最初の文字を0xで置き換えます(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/ディレクトリにコピーします。

  • マルチパスがマップされたデバイスを使用する場合は、dm-uuid*名または別名を/dev/disk/by-idディレクトリ内で指定し、デバイスの固定パスインスタンスは指定しないようにします。詳細については、17.9項 「ユーザフレンドリ名または別名の設定」を参照してください。

  • user_friendly_names構成オプションを、無効にしないよう設定します。ユーザフレンドリ名はノードに固有ですが、クラスタ内のすべてのノードにおいてデバイスに同じユーザフレンドリ名が割り当てられてはいない可能性があります。

注記
注記: ユーザフレンドリ名

実際にユーザフレンドリ名を使用する必要がある場合は、以下の操作により、システム定義のユーザフレンドリ名を、クラスタ内のすべてのノードについて同一にすることができます。

  1. 1つのノード上の/etc/multipath.confファイル内で、

    1. user_friendly_names構成オプションをyesに設定して有効にします。

      マルチパスは、/var/lib/multipath/bindingsファイルを使用して、/dev/mapperディレクトリ内でmpath<N>の形式で、デバイスに永続的かつ固有の名前を割り当てます。

    2. (オプション) bindingsファイルに対して別の場所を指定するには、/etc/multipath.confファイルのdefaultsセクションにある、bindings_fileオプションを設定します。

      デフォルトの場所は、/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ホスト内で、ストレージコントローラへのパスが複数ある場合は、各パスが別個のブロックデバイスとして表示され、その結果、1つのLUNに複数のブロックデバイスが存在することになります。デバイスマッパーマルチパスサービスは、同じLUN IDをもつ複数のパスワードを検出し、そのIDで新しいマルチパスデバイスを作成します。たとえば、1つの非ゾーン化されたファイバチャネルのスイッチを介して2つのポートでストレージコントローラに接続した2つのHBAをもつホストは、4つのブロックデバイスを認識します(/dev/sda/dev/sdb/dev/sdc/dev/sdd)。デバイスマッパーマルチパスサービスは、1つのブロックデバイス/dev/mpath/mpath1を作成します。このデバイスは、既に示した4つのブロックデバイスを介してI/Oを再経路指定します。

本項では、フェールオーバーのポリシーを指定し、パスの優先順位を設定する方法について説明します。/etc/multipath.confファイルの変更後、dracut -fを実行してシステム上にinitrdを再作成してから、サーバを再起動して変更内容を有効にする必要があることに注意してください。詳細については、17.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」を参照してください。

17.10.1 パスのフェールオーバーポリシーの設定

multipathコマンドを-pオプション付きで使用して、パスフェールオーバーポリシーを設定します。

sudo multipath DEVICENAME -p POLICY

次のポリシーオプションの1つで、POLICYを置き換えます。

表 17.5: multipath -pコマンドのグループポリシーオプション

ポリシーオプション

説明

failover (フェールオーバー)

(デフォルト)優先度グループごとに1つのパス

multibus

1つの優先度グループ内にすべてのパス

group_by_serial

検出されたシリアル番号ごとに1つの優先度グループ

group_by_prio

パス優先度値ごとに1つの優先度グループ優先度は、コールアウトプログラムで決定されます。それらのプログラムは、グローバル、コントローラごと、またはマルチパスごとのオプションとして/etc/multipath.conf環境設定ファイルで指定されます。

group_by_node_name

ターゲットノード名ごとに1つの優先度グループターゲットノード 名は、 /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{}セクションで使用します。multipath{)セクションの個別のmultipaths定義に指定されている場合は、暗黙のうちに無視されます。prio行で、Prioritizerが指定されます。Prioritizerが引数を必要とする場合、その引数は2行目のprio_argsキーワードで指定します。

デフォルトセクションまたはデバイスセクションのprio設定

prio

パス優先度の値を取得するために呼び出すPrioritizerプログラムを指定します。加重は、障害の発生時に使用する次のパスグループを決定するため、それぞれのパスグループに対して合計されます。

指定したPrioritizerで引数が必要な場合は、prio_argsキーワードを使用して、引数を指定します。

prioキーワードを指定しない場合は、すべてのパスが同等になりますデフォルトの設定はconstで、prio_argsの設定には値がありません。

prio "const"
prio_args ""

Prioritizerのプログラム例には、以下のものがあります。

Prioritizerプログラム

説明

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

引数を必要とする指定したPrioritizerプログラムに対する引数を指定します。ほとんどのprioプログラムでは、引数は不要です。

デフォルト値はありません。値は、prioの設定と、Prioritizerが引数を必要とするかどうかによります。

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

シリアル

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

exclusive_pref_bitがデバイスに対して設定される場合(alua exclusive_pref_bit)、preferred pathビットセットを持つパスは常に独自のパスグループ内になります。

マルチパス属性

デバイスに対するマルチパスI/Oの動作を制御するには、マルチパス属性を使用します。すべてのマルチパスデバイスに対して、デフォルトとして属性を指定できます。また、あるマルチパスデバイスにのみ適用する属性を、そのデバイス用のエントリを、マルチパス設定ファイルのmultipathsセクションで作成することで、指定することもできます。

user_friendly_names

WWID(world-wide ID)を使用するか、または/var/lib/multipath/bindingsファイルを使用して永続的で固有な別名を/dev/mapper/mpathN形式のマルチパスデバイスに割り当てるか指定します。

このオプションは、devicesセクションおよびmultipathsセクションで使用できます。

説明

×

(デフォルト) /dev/disk/by-id/に示されたWWIDを使用します。

yes

実際のIDの代わりに、マルチパスデバイスのエイリアスとして、ユーザフレンドリな名前を自動生成します。

failback (フェールバック)

エラーになったパスの回復を監視するかどうか指定し、パスサービス回復後のグループのフェールバックのタイミングを示します。

エラーになったパスは、回復すると、この設定に基づいてマルチパス対応パスのリストに戻されます。multipathは、優先度グループを評価し、プライマリパスの優先度がセカンダリパスのそれを超えると、アクティブな優先度グループを変更します。

説明

manual

デフォルト。エラーになったパスの回復は監視されません。管理者がmultipathコマンドを実行して、有効なパスと優先度グループを更新します。

followover

パスグループの最初のパスがアクティブになるときにのみ自動フェールバックを実行します。これにより、別のノードがフェールオーバーを要求したときに、ノードが自動的にフェールバックされないようにします。

immediate

パスが回復したら、ただちにパスを有効にします。

N

パスが回復したら、N秒後にパスを有効にします。0より大きい整数値を指定してください。

クラスタ環境内のマルチパスに対するフェールバックの設定は、マルチパスのフェールオーバーのピンポンを避けるため、manualにすることを推奨します。

failback "manual"
重要
重要: 検証

フェールバックの設定については、ストレージシステムのベンダに確認するようにしてください。ストレージシステムが異なれば、必要な設定も異なります。

no_path_retry

パスの障害時に使用する動作を指定します。

説明

N

multipathコマンドで待ち行列が停止し、パスがエラーになるまでの再試行数を指定します。0より大きい整数値を指定してください。

クラスタでは、「0」を指定して、待ち行列を回避し、リソースのフェールオーバーを許可することができます。

fail

即時失敗(待ち行列なし)を指定します。

queue

待ち行列を停止しません(パスが復帰するまで永久に待機します)。

クラスタでの作業では、/etc/multipath.confファイルの再試行設定を、failまたは0にすることを推奨します。これにより、ストレージへの接続が失われた場合に、リソースのフェールオーバーが起こります。そうしないと、メッセージの待ち行列とリソースのフェールオーバーが行えません。

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 Smart Storage Arrayへのパスの状態をチェックします。

  • emc_clariion: EMC ClariionのEVPDページ0xC0をクエリしてパスの状態を判別します。

  • hp_sw: Active/StandbyファームウェアをもつHPストレージアレイのパスの状態(アップ、ダウン、またはゴースト)をチェックします。

  • rdac: LSI/Engenio RDACストレージコントローラのパスmp状態をチェックします。

path_grouping_policy

所定のコントローラがホストとなるマルチパスデバイスのパスグループ化ポリシーを指定します。

説明

フェールオーバー

(デフォルト)一度に1つのパスだけ使用されるように、優先度グループごとに1つのパスが割り当てられます。

multibus

すべての有効なパスが1つの優先度グループに含まれます。トラフィックが、グループ内のアクティブなパスすべてに渡って負荷分散されます。

group_by_prio

パス優先度値ごとに、1つの優先度グループが存在します。同じ優先度のパスは同じ優先度グループに属します。優先度は外部プログラムによって割り当てられます。

group_by_serial

パスがSCSIターゲットシリアル番号(コントローラノードのWWN)でグループ化されます。

group_by_node_name

ターゲットノード名ごとに1つの優先度グループが割り当てられます。ターゲットノード名は/sys/class/fc_transport/target*/node_nameにフェッチされます。

path_selector

負荷分散に使用するパスセレクタアルゴリズムを指定します。

説明

round-robin 0

優先度グループ内のすべてのアクティブパスに渡るトラフィックの分散に使用される負荷分散アルゴリズム。

queue-length 0

least-pendingオプションと同様に、パス上で実行中のI/Oの数に基づく、動的負荷分散装置。

service-time 0

(デフォルト)遅延に従って、パス上のI/Oを調整するサービス時間に基づく負荷分散装置。

pg_timeout

パスグループのタイムアウト処理を指定します。値を指定することはできません。内部のデフォルトが設定されています。

polling_interval

1つのパスチェックサイクルの終了から次回のパスチェックサイクルの開始までの時間を、秒単位で指定します。

0より大きい整数値を指定してください。デフォルト値は5です。polling_intervalの設定については、ストレージシステムのベンダに確認するようにしてください。ストレージシステムが異なれば、必要な設定も異なります。

rr_min_io_rq

現在のパスグループ内の次のパスに切り替える前に、リクエストベースのデバイス-マッパー-マルチパスを使用して、あるパスへルートする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では、DM-MPIO (デバイスマッパーマルチパスI/O)が使用可能であり、/boot/rootに対してサポートされています。また、YaSTインストーラ内のYaSTパーティショナは、インストール中のマルチパスの有効化をサポートします。

17.11.1 インストール時にマルチパスI/Oを有効にする

オペレーティングシステムをマルチパスデバイスにインストールするには、マルチパスソフトウェアがインストール時に実行されている必要があります。multipathdデーモンは、システムのインストール時に自動的にアクティブになりません。このデーモンは、YaSTパーティショナのマルチパスの設定オプションを使用することによって起動できます。

17.11.1.1 アクティブ/アクティブマルチパスストレージLUNでインストール時にマルチパスI/Oを有効にする

  1. インストール時に推奨されたパーティション分割画面でエキスパートパーティショナを選択します。

  2. ハードディスクメインアイコンを選択し、設定ボタンをクリックし、最後に、マルチパスの設定を選択します。

  3. multipathを起動します。

    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. multipathを起動します。

    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. OKをクリックして、インストールを再起動します。

17.11.2 既存ルートデバイス用マルチパスI/Oの有効化

  1. Linuxをインストールし、1つだけパスをアクティブにします。このパスは、パーティショナでby-idシンボリックリンクがリストされるパスがお勧めです。

  2. インストール時に使用した/disk//disk/by-idパスを使用してデバイスをマウントします。

  3. /etc/dracut.conf.d/10-mp.confを開くか作成して、次の行を追加します(先立つ空白に注意してください)。

    force_drivers+=" dm-multipath"
  4. IBM Zの場合、dracutの実行前に、/etc/zipl.confファイルを編集してzipl.conf内のby-path情報を、/etc/fstabで使用されたby-id情報に変更します。

  5. dracut -fを実行して、initrdイメージを更新します。

  6. IBM Zの場合は、dracutの実行後、ziplを実行します。

  7. サーバを再起動します。

17.11.3 ルートデバイスのマルチパスI/Oの無効化

multipath=offをカーネルコマンドラインに追加します。この変更はYaSTのブートローダモジュールで行うことができます。ブートローダのインストール › Kernel Parameters (カーネルパラメータ)の順に開き、両方のコマンドラインにパラメータを追加します。

これは、ルートデバイスだけに影響します。他のすべてのデバイスは影響されません。

17.12 既存ソフトウェアRAID用マルチパスI/Oの設定

理想的には、デバイスのマルチパス処理を設定してから、それらのデバイスをソフトウェアRAIDデバイスのコンポーネントとして使用してください。ソフトウェアRAIDデバイスの作成後にマルチパス処理を追加した場合は、再起動時にmultipathサービスの後でDM-MPIOサービスが開始することがあります。その場合は、マルチパス処理がRAIDに使用できないように見えます。本項の手順を使用すると、すでに存在しているソフトウェアRAIDに対してマルチパス処理を実行できます。

たとえば、次のような場合は、ソフトウェアRAID内のデバイスにマルチパス処理を設定する必要があることがあります。

  • 新規インストールまたはアップグレード時にパーティショニング設定の一部として、新しいソフトウェアRAIDを作成する場合

  • マルチパス処理用に設定しなかったデバイスをメンバーデバイスまたはスペアとしてソフトウェアRAIDで使用する場合

  • 新しいHBAアダプタをサーバに追加するか、またはSAN内でストレージサブシステムを拡張することで、システムを大きくする場合

注記
注記: 前提

以降の説明では、ソフトウェアRAIDデバイスを/dev/mapper/mpath0(カーネルによって認識されるデバイス名)と想定しています。/etc/multipath.confファイルで、ユーザフレンドリ名を有効にしている(17.9項 「ユーザフレンドリ名または別名の設定」に記載)ことを想定しています。

ソフトウェア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スクリプトを使用して新しいデバイスをスキャンすることができます。デフォルトでは、このスクリプトは典型的なLUN範囲ですべてのHBAをスキャンします。このコマンドの一般的な構文は、次のようになります。

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

ほとんどのストレージサブシステムでは、このスクリプトはオプションを指定しなくても正常に実行されます。ただし、特殊な場合は、次のオプションを1つ以上使用する必要があります。詳細については、rescan-scsi-bus.sh --helpを実行してください。

警告
警告: EMC PowerPath環境

EMC PowerPath環境では、SCSIバスをスキャンする場合に、オペレーティングシステムに付属するrescan-scsi-bus.shユーティリティまたはHBAベンダスクリプトを使用しないでください。ファイルシステムが破損する可能性を避けるため、EMCでは、Linux用EMC PowerPathのベンダマニュアルに記載されている手順に従うよう求めています。

次のプロシージャを使用して、システムを再起動せずに、デバイスをスキャンして、マルチパス処理に使用できるようにします。

  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環境では、SCSIバスをスキャンする場合に、オペレーティングシステムに付属するrescan-scsi-bus.shユーティリティまたはHBAベンダスクリプトを使用しないでください。ファイルシステムが破損する可能性を避けるため、EMCでは、Linux用EMC PowerPathのベンダマニュアルに記載されている手順に従うよう求めています。

  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>

    UUIDをデバイスのWWID(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.ext4、またはmkfs.xfsのいずれかのコマンドを使用できます。詳細については、それぞれのマニュアルページを参照してください。UUID_partNを、実際のUUIDおよびパーティション番号(36006016088d014006e98a7a94a85db11_part1など)で置き換えます。

  9. 次のコマンドを入力して、新しいパーティションのラベルを作成します。

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

    UUID_partNを、実際のUUIDおよびパーティション番号(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、サイズ、機能、およびハードウェアハンドラが表示されます。

デバイスへのパスは、自動的に、デバイス検出時に優先度グループとしてグループ化されます。一度に1つの優先度グループだけがアクティブになります。アクティブ/アクティブ構成の場合、すべてのパスが同じグループに属します。アクティブ/パッシブ構成の場合、パッシブパスは別個の優先度グループに属します。

グループごとに、次の情報が表示されます。

  • ラウンドロビン方式など、グループ内でのI/O負荷の分散に使用されるスケジューリングポリシー

  • グループがアクティブか、無効か、または有効か

  • 最初の(優先度の最も高い)グループかどうか

  • グループ内に含まれるパス

パスごとに、次の情報が表示されます。

  • HOST:BUS:TARGET:LUNとしての物理アドレス(1:0:1:2など)

  • デバイスノード 名(sdaなど)

  • メジャー/マイナー番号

  • デバイスのステータス

17.14.4 エラーになったI/Oの管理

queue_if_no_pathを有効にすることで、すべてのパスで同時に障害が発生した場合は、I/Oをキューに登録するように、マルチパス処理を設定する必要があるかもしれません。設定しておかないと、すべてのパスに障害が発生するとI/Oもすぐに失敗してしまいます。ドライバ、HBA、またはファブリックにスプリアスエラーが発生したというシナリオでは、それらのエラーですべてのパスが失われるI/Oをすべて待ち行列に入れ、エラーを上方にプロパゲートしないように、DM-MPIOを設定してください。

マルチパスデバイスをクラスタで使用する場合は、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

    DEVICE_IDを実際のデバイスの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がエラーになります。

    DEVICE_IDを実際のデバイスのIDに置き換えます。例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。

    sudo dmsetup message 3600601607cf30e00184589a37a31d911 0 fail_if_no_path

待ち行列内のI/Oをすべてのパスがエラーになるシナリオ用に設定するには:

  1. 端末コンソールを開きます。

  2. /etc/multipath.confファイルをテキストエディタで開きます。

  3. defaultsセクションとその閉じ括弧を非コメント化した後、次のように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

    MAPNAMEを該当デバイスのマップされたエイリアス名またはデバイスIDに置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。

    このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。

17.14.5 停止したI/Oの解決

すべてパスが同時にエラーとなり、I/Oが待ち行列に入って停止している場合は、次のプロシージャを実行します。

  1. 端末コンソールのプロンプトで、次のコマンドを入力します。

    sudo dmsetup message MAPNAME 0 fail_if_no_path

    MAPNAMEをデバイスの正しいデバイスIDまたはマップされたエイリアス名で置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。

    このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。

  2. 次のコマンドを入力して、待ち行列を再びアクティブにします。

    sudo dmsetup message MAPNAME 0 queue_if_no_path

17.14.6 IBM Zデバイスのデフォルト設定

IBM Zデバイスのマルチパス処理に関するテストを実施した結果、dev_loss_tmoパラメータをinfinity (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がある場合は、I/Oはdev_loss_tmoで指定された時間が経過するまでは失敗せず、キューのブロックが解除されます。

/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は、パスが失われたとみなされて入出力のキューイングが停止されるまでのマルチパス入出力の再試行数です。

  • polling_intervalは、パッチチェックの間隔(秒単位)です。

これらの各マルチパス値は、/etc/multipath.conf環境設定ファイルから設定する必要があります。詳細については、17.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。

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「緊急シェル: ファイルシステムのブラックリスト化」を参照してください

  • マルチパスルートファイルシステムを持つシステムで、initrdを再構築せずにマルチパスを有効/無効にした場合。詳細については、手順17.2「緊急シェル: initrdの再構築」を参照してください。

  • Network Attached Storageとマルチパスが有効なシステムで、initrdにネットワークストレージドライバがない場合。

手順 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"
    }

    WWWIDは、前の手順で取得したIDに置き換えます。詳細については、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にNetwork Attached Storageアクセス用のドライバが含まれていない場合に必要です。たとえば、マルチパスを設定せずにシステムをインストールした場合や、各ハードウェアを追加または交換する場合などが該当します。

  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. ネットワークストレージの接続に失敗した場合にシステムが緊急モードでブートしないようにするため、/etc/fstabの各エントリにマウントオプション_netdevを追加することをお勧めします。

  4. CtrlD>を押し、緊急シェルを終了してサーバを再起動します。

17.15.2 マルチパス0.4.9以降への更新後に、個別デバイスのprio設定が失敗する

バージョン 0.4.9以降のマルチパスツールでは、/etc/multipath.confファイルのdefaults{}セクションまたはdevices{}セクションのprio設定を使用します。キーワードprioが、multipath{)セクションの個別のmultipaths定義に指定された場合は、暗黙のうちに無視されます。

マルチパスツール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に更新すると、引数を必要とするPrioritizerの場合、/etc/multipath.confファイル内のprio設定が壊れます。multipath-tools-0.4.9では、Prioritizerの指定にはprioキーワードが使われ、引数を必要とするPrioritizerの指定には、prio_argsキーワードが使われます。これまでは、Prioritizerとその引数はいずれも、同じprio行で指定していました。

たとえば、multipath-tools-0.4.8では、次の行を使用してPrioritizerとその引数を同じ行で指定していました。

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行を変更します。2つの行を作成して、prio行にPrioritizerを指定し、その下のprio_args行にPrioritizerの引数を指定します。

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 (技術情報ドキュメント)を参照してください。