18 デバイスのマルチパスI/Oの管理 #
本項では、マルチパスI/O (MPIO)を使用して、サーバ/ブロックストレージデバイス間のマルチパスのフェールオーバーおよびパスの負荷分散を管理する方法について説明します。
18.1 マルチパスI/Oの理解 #
マルチパス処理とは、サーバのホストバスアダプタおよびデバイスのストレージコントローラ間で、複数の物理パスをまたいで、同じ物理または論理ブロックストレージデバイスと通信するサーバの機能です。これは、通常、FC (Fibre Channel)環境またはiSCSI SAN環境で行われます。
Linuxマルチ処理は、接続に耐障害性を与え、アクティブな接続全体.に負荷を分散します。マルチパス処理が設定および実行されていると、自動的に、デバイス接続の障害が特定され、I/Oが代替の接続に再経路指定されます。
マルチパス処理は、接続の障害に対して耐障害性を提供しますが、ストレージデバイス自体の障害に対する耐障害性は提供しません。後者は、ミラーリングのような補完テクニックによって提供されます。
18.1.1 マルチパスの用語 #
- ストレージアレイ
- SANストレージをクライアントに提供する多数のディスクおよび複数のファブリック接続(コントローラ)を備えたハードウェアデバイス。ストレージアレイは通常、RAIDとフェールオーバー機能を備えており、マルチパス処理をサポートしています。これまで、アクティブ/パッシブ(フェールオーバー)とアクティブ/アクティブ(負荷分散)のストレージアレイ設定は区別されていました。これらの概念は今でも存在しますが、最新のハードウェアでサポートされるパスグループとアクセス状態の概念の特殊なケースにすぎません。 
- ホスト、ホストシステム
- ストレージアレイのクライアントシステムとして動作するSUSE Linux Enterprise Serverを実行しているコンピュータ。 
- マルチパスマップ、マルチパスデバイス
- 一連のパスデバイスです。ストレージアレイ上のストレージボリュームを表し、ホストシステムからは単一のブロックデバイスと認識されます。 
- パスデバイス
- マルチパスマップのメンバー(通常はSCSIデバイス)です。各パスデバイスは、ホストコンピュータと実際のストレージボリューム(iSCSIセッションの論理ユニットなど)との間の固有の接続を表します。 
- WWID
- 「World Wide Identifier」です。 - multipath-toolsではWWIDを使用して、マルチパスマップにアセンブルする必要がある低レベルデバイスを判断します。WWIDは、設定可能なマップ名と区別する必要があります(18.12項 「マルチパスデバイス名とWWID」を参照)。
- uevent、udevイベント
- カーネルによってユーザスペースに送信され、 - udevサブシステムによって処理されるイベント。デバイスの追加や削除、またはプロパティの変更を行うと、ueventが生成されます。
- デバイスマッパー
- 仮想ブロックデバイスを作成するためのLinuxカーネルのフレームワークです。マップデバイスに対するI/O操作は基礎となるブロックデバイスにリダイレクトされます。デバイスマッピングはスタックされる場合があります。デバイスマッパーでは独自のイベントシグナル処理を実装します。これは「デバイスマッパーイベント」または「dmイベント」とも呼ばれます。 
- initramfs
- 初期RAMファイルシステムは、これまでの経緯もあって、「初期RAMディスク」(initrd)とも呼ばれます(16.1項 「用語集」を参照)。 
- ALUA
- 「Asymmetric Logical Unit Access」です。これはSCSI標準のSCSI-3で導入された概念です。ストレージボリュームには、さまざまな状態(アクティブ、スタンバイなど)でポートグループに編成されている複数のポートからアクセスできます。ALUAは、ポートグループとその状態を問い合わせ、ポートグループの状態を変更するためのSCSIコマンドを定義します。SCSIをサポートする最新のストレージアレイは通常ALUAもサポートします。 
18.2 ハードウェアサポート #
マルチパスドライバとツールは、SUSE Linux Enterprise Serverでサポートされているすべてのアーキテクチャで利用できます。プロトコルを区別しない汎用ドライバは、市販のほとんどのマルチパス対応ストレージハードウェアで動作します。一部のストレージアレイベンダは、独自のマルチパス処理管理ツールを提供しています。ベンダのハードウェアマニュアルを参照して、どのような設定が必要か判別してください。
18.2.1 マルチパスの実装: デバイスマッパーとNVMe #
Linuxにおけるマルチパス処理で従来の一般的な実装では、デバイスマッパーフレームワークを使用します。SCSIデバイスなどのほとんどのデバイスタイプでは、デバイスマッパーのマルチパス処理が唯一使用可能な実装です。デバイスマッパーのマルチパスは、高度に設定可能で、柔軟性に優れています。
Linux NVM Express (NVMe)カーネルサブシステムでは、カーネルでマルチパス処理をネイティブに実装します。通常高速で遅延が非常に小さいNVMeデバイスの演算オーバーヘッドが、この実装で軽減されています。ネイティブNVMeマルチパス処理ではユーザスペースコンポーネントは不要です。SLE 15以降、ネイティブマルチパス処理がNVMeマルチパスデバイスのデフォルトになっています。詳細については、17.2.4項 「マルチパス処理」を参照してください。
    この章では、デバイスマッパーマルチパスおよびそのユーザスペースコンポーネントmultipath-toolsについて説明します。multipath-toolsは、ネイティブのNVMeマルチパス処理も限定的にサポートしています(18.13項 「その他のオプション」を参照)。
   
18.2.2 マルチパス処理のストレージアレイ自動検出 #
デバイスマッパーのマルチパスは一般的な技術です。マルチパスデバイスの検出で必要なことは、低レベルデバイス(SCSIなど)がカーネルによって検出されることと、デバイスのプロパティが複数の低レベルデバイスを(実際に異なるデバイスではなく)同じボリュームへの異なる「パス」として確実に識別することのみです。
multipath-toolsパッケージは、ベンダと製品名によってストレージアレイを検出します。これには、広範なストレージ製品に対してデフォルト設定が組み込まれています。ご使用のストレージアレイのハードウェアドキュメントを参照してください。Linuxのマルチパス処理設定に対して独自の推奨事項を提示しているベンダもあります。
   
使用しているストレージアレイの組み込み設定に変更を適用する必要がある場合、18.8項 「マルチパス設定」を参照してください。
multipath-toolsには、多くのストレージアレイ用の事前設定が組み込まれています。あるストレージ製品用にこのような事前設定が存在することは、そのストレージ製品のベンダがdm-multipathで製品をテストしたことを意味しませんし、ベンダがその製品でdm-multipathの使用に関して保証やサポートを行うことも意味しません。サポート関連の質問については、ベンダのドキュメントを必ず参照してください。
    
18.2.3 特定のハードウェアハンドラを必要とするストレージアレイ #
あるパスから別のパスにフェールオーバーするための特殊なコマンドや標準と異なるエラー処理方法が必要なストレージアレイもあります。これらの特殊なコマンドと方法は、Linuxカーネルのハードウェアハンドラによって実装されています。最新のSCSIストレージアレイは、SCSI標準で定義されている「Asymmetric Logical Unit Access」(ALUA)ハードウェアハンドラをサポートしています。ALUAの他に、SLEカーネルには、Netapp E-Series (RDAC)、Dell/EMC CLARiiON CXアレイファミリ、およびHPのレガシアレイ用のハードウェアハンドラが含まれています。
    Linuxカーネル4.4以降では、ほとんどのアレイ(ALUAをサポートするすべてのアレイを含む)のハードウェアハンドラをLinuxカーネルで自動検出します。要件は、それぞれのデバイスが検出されるときにデバイスハンドラモジュールがロードされることだけです。この要件は、multipath-toolsパッケージが適切な設定ファイルをインストールすることによって実現します。デバイスハンドラは、特定のデバイスにアタッチされると、変更できなくなります。
   
18.3 マルチパス処理のプラニング #
マルチパスI/Oソリューションのプラニング時には、本項のガイドラインに従ってください。
18.3.1 前提条件 #
- マルチパス処理対象のデバイスに使用するストレージアレイで、マルチパス処理がサポートされている必要があります。詳細については、18.2項 「ハードウェアサポート」を参照してください。 
- サーバのホストバスアダプタおよびブロックストレージデバイスのバスコントローラ間に複数の物理パスが存在している場合のみ、マルチパス処理を設定する必要があります。 
- 一部のストレージアレイについては、アレイの物理および論理デバイスのマルチパス処理を管理するための独自のマルチパス処理ソフトウェアがベンダから提供されます。この場合は、ベンダの指示に従って、それらのデバイスのマルチ処理を設定してください。 
- 仮想化環境でマルチパス処理を使用する場合、マルチパス処理は、ホストサーバ環境で制御されます。デバイスのマルチパス処理を設定してから、デバイスを仮想ゲストマシンに割り当ててください。 
18.3.2 マルチパスのインストールタイプ #
インストールタイプは、ルートデバイスを処理する方法で区別されます。18.4項 「マルチパスシステムでのSUSE Linux Enterprise Serverのインストール」では、インストール中およびインストール後にさまざまなセットアップを作成する方法について説明しています。
18.3.2.1 マルチパスのルートファイルシステム(SANブート) #
ルートファイルシステムはマルチパスデバイス上にあります。これは通常、ディスクのないサーバでSANストレージのみを使用する場合です。このようなシステムでは、起動にマルチパスのサポートが必要であり、initramfsでマルチパス処理を有効にする必要があります。
18.3.2.2 ローカルディスクのルートファイルシステム #
ルートファイルシステム(および場合によっては他のファイルシステム)は、ローカルストレージ(直接アタッチされたSATAディスクやローカルRAIDなど)上にありますが、このシステムではさらにマルチパスのSANストレージのファイルシステムを使用します。このシステムタイプは次の3つの方法で設定できます。
- ローカルディスク用のマルチパスセットアップ
- すべてのブロックデバイスはローカルディスクを含むマルチパスマップの一部です。ルートデバイスは、パスが1つしかないディグレードマルチパスマップとして表示されます。YaSTによる初期システムインストール中にマルチパス処理が有効になると、この設定が作成されます。 
- ローカルディスクをマルチパスから除外する
- この設定では、マルチパス処理はinitramfsで有効になっていますが、ルートデバイスはマルチパスから明示的に除外されます(18.11.1項 「 - multipath.confの- blacklistセクション」を参照)。手順18.1「インストール後にルートディスクのマルチパス処理を無効にする」では、この設定のセットアップ方法を説明しています。
- initramfsでマルチパスを無効にする
- YaSTによる初期システムインストール中にマルチパス処理が有効になっていないと、このセットアップが作成されます。この設定はかなり脆弱です。代わりに、他のオプションのいずれかを使用することを検討してください。 
18.3.3 ディスク管理タスク #
サードパーティSANアレイ管理ツールやご使用のストレージアレイのユーザインタフェースを使用して、論理デバイスを作成し、それらをホストに割り当てます。両側でホストの資格情報を正しく設定してください。
実行中のホストにボリュームを追加したり、削除したりできますが、変更を検出するには、SCSIターゲットを再スキャンし、ホスト上でマルチパス処理を再設定する必要がある場合があります。18.14.6項 「新規デバイスのスキャン(再起動なし)」を参照してください。
一部のディスクアレイでは、ストレージアレイがストレージプロセッサを使用してトラフィックを管理します。1つのプロセッサがアクティブとなり、もう1つのプロセッサは障害が発生するまでパッシブとなります。パッシブストレージプロセッサに接続している場合、目的のLUNが表示されないか、表示はされるがアクセスしようとするとI/Oエラーが発生する場合があります。
ディスクアレイに複数のストレージプロセッサがある場合は、アクセスしたいLUNを所有するアクティブなストレージプロセッサにSANスイッチが接続していることを必ず確認してください。
18.3.4 ソフトウェアRAIDと複雑なストレージスタック #
マルチパス処理は、SCSIデバイスなどの基本的なストレージデバイスの上にセットアップされます。マルチレイヤのストレージスタックでは、マルチパス処理は常に最下位レイヤです。ソフトウェアRAID、論理ボリューム管理、ブロックデバイスの暗号化などのその他のレイヤは、マルチパス処理の上に重ねられます。したがって、複数のI/Oパスを持ち、ソフトウェアRAIDで使用予定の各デバイスは、まず、マルチパス処理用に設定してから、ソフトウェアRAIDデバイスとして作成する必要があります。
18.3.5 高可用性ソリューション #
    ストレージリソースのクラスタリング用の高可用性ソリューションは、各ノード上でマルチパス処理サービスをベースとして実行されます。各ノード上の/etc/multipath.confファイル内の構成設定が、クラスタ全体で同一であるようにしてください。
   
マルチパスデバイスがすべてのデバイス間で同じ名前であるようにしてください。詳細については、18.12項 「マルチパスデバイス名とWWID」を参照してください。
LAN上のデバイスをミラーリングするDRBD (Distributed Replicated Block Device)高可用性ソリューションは、マルチパス処理をベースとして実行されます。複数のI/Oパスを持ち、DRDBソリューションで使用予定のデバイスごとに、マルチパス処理用デバイスを設定してから、DRBDを設定する必要があります。
pacemakerとsbdなどフェンシングに共有ストレージを使用するクラスタリングソフトウェアと共にマルチパス処理を使用する場合、特別な注意が必要です。詳細については18.9.2項 「クラスタ化されたサーバでのキューポリシー」を参照してください。
   
18.4 マルチパスシステムでのSUSE Linux Enterprise Serverのインストール #
マルチパスハードウェアを含むシステムでSUSE Linux Enterprise Serverをインストールするために必要な特別なインストールパラメータはありません。
18.4.1 接続されているマルチパスデバイスを使用しないインストール #
    後で、システムにマルチパスSANデバイスを追加する目的で、最初にFabricとストレージを設定せずに、ローカルディスク上でインストールを実行したい場合があります。この場合、インストールは、非マルチパスシステム上でのインストールのように続行します。インストール後、multipath-toolsがインストールされますが、systemdサービス(multipathd.service)は無効になります。システムは、18.3.2.2項 「ローカルディスクのルートファイルシステム」のinitramfsでマルチパスを無効にするで説明しているように設定されます。SANハードウェアを追加する前に、multipathd.serviceを有効にし、開始する必要があります。ルートデバイス用に/etc/multipath.confにblacklistエントリを作成することをお勧めします(18.11.1項 「multipath.confのblacklistセクション」を参照)。
   
18.4.2 接続されているマルチパスデバイスによるインストール #
マルチパスデバイスが、インストール時にシステムに接続される場合、YaSTはそれらを検出し、パーティショニングステージに入る前にマルチパスを有効にするかどうかを尋ねるポップアップウィンドウを表示します。
このプロンプトで「いいえ」を選択すると(非推奨)、インストールは18.4.1項 「接続されているマルチパスデバイスを使用しないインストール」のように続行します。パーティショニングステージでは、後でマルチパスマップの一部になるデバイスを使用/編集しないでください。
    マルチパスのプロンプトで「はい」を選択すると、インストール中にmultipathdが実行されます。/etc/multipath.confのblacklistセクションにはデバイスは追加されないため、パーティショニングダイアログでは、ローカルディスクを含むすべてのSCSIデバイスとDASDデバイスがマルチパスデバイスとして表示されます。インストール後、18.3.2.1項 「マルチパスのルートファイルシステム(SANブート)」で説明されているように、すべてのSCSIデバイスとDASDデバイスがマルチパスデバイスになります。
   
この手順は、ローカルディスクにインストールし、インストール中にマルチパス処理を有効にしていることを前提としているため、ルートデバイスがマルチパス上にありますが、18.3.2.2項 「ローカルディスクのルートファイルシステム」のローカルディスクをマルチパスから除外するで説明されているように、システムを設定したいと考えています。
- システムをチェックしてローカルルートデバイスへの - /dev/mapper/...参照を探し、それらをデバイスがマルチパスマップでない場合にも機能する参照で置き換えます(18.12.4項 「マルチパスマップの参照」を参照)。次のコマンドを実行しても参照が見つからない場合、変更を適用する必要はありません。- >- sudogrep -rl /dev/mapper/ /etc
- dracutの- by-uuid永続デバイスポリシーに切り替えます(18.7.4.2項 「initramfsの永続的なデバイス名」を参照)。- >echo 'persistent_policy="by-uuid"' | \ sudo tee /etc/dracut.conf.d/10-persistent-policy.conf
- ルートデバイスのWWIDを決定します。 - >multipathd show paths format "%i %d %w %s" 0:2:0:0 sda 3600605b009e7ed501f0e45370aaeb77f IBM,ServeRAID M5210 ...- このコマンドは、すべてのパスデバイスとそのWWID、およびベンダ/製品情報を出力します。ルートデバイス(ここでは、ServeRAIDデバイス)を識別し、WWIDをメモすることができます。 
- 決定したWWIDを使用して - /etc/multipath.conf(18.11.1項 「- multipath.confの- blacklistセクション」を参照)にブラックリストエントリを作成します(まだこれらの設定を適用しないでください)。- blacklist { wwid 3600605b009e7ed501f0e45370aaeb77f }
- initramfsを再構築します。 - >- sudodracut -f
- 再起動します。非マルチパスルートディスクを使用してシステムが起動します。 
18.5 マルチパスシステムでのSLEの更新 #
システムをオンラインで更新する場合、第5章 「オンラインでのアップグレード」の説明に従って続行できます。
   システムのオフライン更新は、18.4項 「マルチパスシステムでのSUSE Linux Enterprise Serverのインストール」で説明されている新規インストールと似ています。blacklistがないため、ユーザがマルチパスを有効にすると、ルートデバイスがマルチパスデバイスとして表示されます(これがマルチパスデバイスでない場合も同様)。更新手順中にdracutがinitramfsを構築するとき、ブートシステムに表示されるストレージスタックとは異なるストレージスタックが表示されます。18.7.4.2項 「initramfsの永続的なデバイス名」および18.12.4項 「マルチパスマップの参照」を参照してください。
  
18.6 マルチパス管理ツール #
SUSE Linux Enterprise Serverのマルチパス処理のサポートは、Linuxカーネルのデバイスマッパーマルチパスモジュールとmultipath-toolsユーザスペースパッケージに基づいています。
  
一般的なマルチパス処理機能は、デバイスマッパーのマルチパス(DM-MP)モジュールによって処理されます。詳細については、18.6.1項 「デバイスマッパーマルチパスモジュール」を参照してください。
multipath-toolsおよびkpartxパッケージは、自動パス検出とグループ化を処理するツールを提供します。ツールを次に示します。
  
- multipathd
- マルチパスマップを設定および監視するデーモン、およびデーモンプロセスと通信するコマンドラインクライアント。18.6.2項 「 - multipathdデーモン」を参照してください。
- multipath
- マルチパス操作用のコマンドラインツール。18.6.3項 「 - multipathコマンド」を参照してください。
- kpartx
- マルチパスデバイスの「パーティション」を管理するためのコマンドラインツール。18.7.3項 「マルチパスデバイスのパーティションと - kpartx」を参照してください。
- mpathpersist
- SCSIの永続的な予約を管理するためのコマンドラインツール。18.6.4項 「SCSIの永続的な予約と - mpathpersist」を参照してください。
18.6.1 デバイスマッパーマルチパスモジュール #
    デバイスマッパーマルチパス(DM-MP)モジュール(dm-multipath.ko)は、Linuxに一般的なマルチパス処理機能を提供します。DM-MPIOは、SCSIおよびDASDデバイスに対してSUSE Linux Enterprise Serverでマルチパス処理を行う際に推奨されるソリューションであり、NVMeデバイスにも使用できます。
   
SUSE Linux Enterprise Server 15以降、ネイティブNVMeマルチパス処理(18.2.1項 「マルチパスの実装: デバイスマッパーとNVMe」を参照)がNVMeに推奨され、デフォルトで使用されています。ネイティブNVMeマルチパス処理を無効にし、代わりにデバイスマッパーマルチパスを使用するには(非推奨)、カーネルパラメータnvme-core.multipath=0を指定してブートします。
    
デバイスマッパーマルチパスモジュールは次のタスクを処理します。
- アクティブパスグループ内の複数のパスに負荷を分散する。 
- パスデバイスのI/Oエラーを通知し、これらを障害とマークして、I/Oがこれらに送信されないようにする。 
- アクティブパスグループのすべてのパスで障害が発生したときにパスグループを切り替える。 
- すべてのパスで障害が発生した場合、設定に応じてマルチパスデバイスのI/Oを失敗させるまたはI/Oをキューに入れる。 
    次のタスクは、デバイスマッパーのマルチパスモジュールではなく、multipath-toolsパッケージのユーザスペースコンポーネントによって処理されます。
   
- 同じストレージデバイスへのさまざまなパスを表すデバイスを検出し、それらからマルチパスマップをアセンブルする。 
- 似ているプロパティを持つパスデバイスをパスグループに収集する。 
- パスデバイスをアクティブに監視して、障害または再インスタンス化を探す。 
- パスデバイスの追加と削除を監視する。 
- デバイスマッパーマルチパスモジュールは、セットアップと設定に使用しやすいユーザインタフェースを提供しません。 
multipath-toolsパッケージのコンポーネントの詳細については、18.6.2項 「multipathdデーモン」を参照してください。
   
DM-MPIOは、メディアエラーなどのデバイス自体の障害ではなく、デバイスへのパスの障害からシステムを保護します。デバイス自体の障害は、レプリケーションなど別の方法で防ぐ必要があります。
18.6.2 multipathdデーモン #
multipathdは、最新Linuxデバイスマッパーのマルチパスにおけるセットアップの最重要部分です。これは通常、systemdサービスmultipathd.serviceを通じて開始されます(18.7.1項 「マルチパスサービスの有効化、起動、および停止」を参照)。
   
multipathdは次のタスクを実行します(設定によって異なるものもあります)。
   
- 起動時に、パスデバイスを検出し、検出されたデバイスからマルチパスマップを設定します。 
- ueventとデバイスマッパーイベントを監視し、必要に応じてマルチパスマップでパスマッピングの追加や削除を行い、フェールオーバーまたはフェールバック操作を開始します。 
- 新しいパスデバイスが検出されるとすぐに新しいマップをセットアップします。 
- パスデバイスを定期的にチェックして障害を検出し、障害が発生したパスをテストして、正常に戻ったら復帰させます。 
- すべてのパスで障害が発生した場合、 - multipathdはそのマップを無効にするか、またはマップデバイスを指定時間でキュー待ちモードに切り替えます。
- パスの状態の変更を処理し、必要に応じて、パスグループを切り替えたり、パスを再グループ化したりします。 
- パスが「ぎりぎりの」状態(すなわち、動作状態と非動作状態の間でパスの状態が切り替わる不安定なファブリック状態)であるかどうかをテストします。 
- 設定されている場合、パスデバイスでSCSIの永続的な予約キーを処理します。18.6.4項 「SCSIの永続的な予約と - mpathpersist」を参照してください。
multipathdでは、コマンドラインのクライアントとしても動作し、インタラクティブコマンドを実行デーモンに送信することでコマンドを処理します。デーモンにコマンドを送信する一般的な構文は次のとおりです。
   
>sudomultipathd COMMAND
または
>sudomultipathd -k'COMMAND'
複数の後続のコマンドを送信できる対話的モードもあります。
>sudomultipathd -k
     多くのmultipathdのコマンドには、multipathの同等コマンドがあります。たとえば、multipathd
     show topologyの動作はmultipath
     -llの動作と同じです。顕著な違いは、multipathdコマンドは実行中のmultipathdデーモンの内部状態を問い合わせるのに対して、multipathはカーネルおよびI/O操作から直接情報を取得することです。
    
     マルチパスデーモンが実行中である場合、multipathdコマンドを使用してシステムを変更することをお勧めします。このようにしないと、デーモンが設定の変更に気づき、変更に反応する場合があります。場合によっては、適用された変更をデーモンで元に戻そうとします。multipathは、実行中のデーモンが検出された場合、マップの破棄やフラッシュなどの特定の危険性のあるコマンドをmultipathdに自動的に委任します。
    
    下記のリストでは、使用頻度が高いmultipathdコマンドについて説明します。
   
- show topology
- 現在のマップトポロジとプロパティを表示します。18.14.2項 「マルチパスI/Oステータスの解釈」を参照してください。 
- show paths
- 現在既知のパスデバイスを表示します。 
- show paths format "FORMAT STRING"
- フォーマット文字列を使用して現在既知のパスデバイスを表示します。サポートされているフォーマット指定子のリストを表示するには、 - show wildcardsを使用します。
- show maps
- 現在設定されているマップデバイスを表示します。 
- show maps format FORMAT STRING
- フォーマット文字列を使用して、現在設定されているマップデバイスを表示します。サポートされているフォーマット指定子のリストを表示するには、 - show wildcardsを使用します。
- show config local
- multipathdが使用している現在の設定を表示します。 
- reconfigure
- 設定ファイルを再読み込みし、デバイスを再スキャンして、マップを再度セットアップします。これは - multipathdの再起動と基本的に同じです。いくつかのオプションは再起動しないと変更できません。これらについてはマニュアルページの- multipath.conf(5)で説明します。- reconfigureコマンドを実行すると、何らかの方法で変更されたマップデバイスのみが再ロードされます。すべてのマップデバイスの再ロードを強制実行するには、- reconfigure allを使用します(SUSE Linux Enterprise Server 15 SP4以降で使用できます。以前のバージョンでは- reconfigureを使用してすべてのマップを再ロードしていました)。
- del map MAP DEVICE NAME
- 指定されたマップデバイスとそのパーティションを設定解除し、削除します。MAP DEVICE NAMEには、 - dm-0などのデバイスノード名、WWID、またはマップ名を使用できます。このコマンドは、デバイスを使用中には失敗します。
- switchgroup map MAP DEVICE NAME group N
- 指定の数値インデックスを持つパスグループに切り替えます(先頭は1)。これは、手動フェールバックを使用するマップに対して有用です(18.9項 「フェールオーバー、キュー格納、およびフェールバックのポリシーの設定」を参照)。 
    パス状態の変更、キューの有効化または無効化などを実行できるコマンドも利用できます。詳細についてはmultipathd(8)を参照してください。
   
18.6.3 multipathコマンド #
    マルチパスのセットアップはほとんど自動化されており、multipathdで処理されますが、multipathも一部の管理タスクで依然として役立ちます。このコマンドの使用例を次に示します。
   
- multipath
- パスデバイスを検出し、検出したすべてのマルチパスマップを設定します。 
- multipath -d
- multipathに似ていますが、マップをセットアップしません(試行動作)。
- multipath DEVICENAME
- 特定のマルチパスデバイスを設定します。DEVICENAMEは、デバイスノード名( - /dev/sdb)またはデバイス番号(- major:minorフォーマット)でメンバーパスデバイスを示すことができます。または、WWIDやマルチパスマップの名前も使用できます。
- multipath -f DEVICENAME
- マルチパスマップとそのパーティションマッピングを設定解除(「フラッシュ」)します。そのパーティションのいずれかまたはマップが使用中の場合、このコマンドは失敗します。DEVICENAMEで使用できる値については上記を参照してください。 
- multipath -F
- すべてのマルチパスマップとそのパーティションマッピングを設定解除(「フラッシュ」)します。マップを使用中の場合、このコマンドは失敗します。 
- multipath -ll
- 現在設定されているすべてのマルチパスデバイスのステータスとトポロジを表示します。18.14.2項 「マルチパスI/Oステータスの解釈」を参照してください。 
- multipath -ll DEVICENAME
- 指定されたマルチパスデバイスのステータスを表示します。DEVICENAMEで使用できる値については上記を参照してください。 
- multipath -t
- マルチパスの内部ハードウェアテーブルとアクティブな設定を表示します。設定パラメータの詳細については、 - multipath.conf(5)を参照してください。
- multipath -T
- multipath -tコマンドの機能と似ていますが、ホストで検出されたハードウェアと一致するハードウェアエントリのみを表示します。
-vオプションによって、出力の詳細レベルが制御されます。指定した値によって、/etc/multipath.confのverbosityオプションが上書きされます。18.13項 「その他のオプション」を参照してください。
   
18.6.4 SCSIの永続的な予約とmpathpersist #
mpathpersistユーティリティを使用して、デバイスマッパーマルチパスのデバイスでSCSIの永続的な予約を管理します。永続的な予約を行うと、SCSIの論理ユニットへのアクセスが特定のSCSIイニシエータに制限されます。マルチパス設定では、指定ボリュームですべてのI_T関連付け(パス)に同じ予約キーを使用することが重要です。そのようにしないと、あるパスデバイスで予約を作成すると別のパスでI/Oエラーが発生する場合があります。
   
    このユーティリティを/etc/multipath.confファイルのreservation_key属性と共に使用して、SCSIデバイスの永続的な予約を設定します。このオプションが設定されている場合(のみ)、multipathdデーモンは新しく検出したパスまたは復帰したパスの永続的な予約をチェックします。
   
    この属性は、multipath.confのdefaultsセクションまたはmultipathsセクションに追加できます。次に例を示します。
   
multipaths {
    multipath {
        wwid             3600140508dbcf02acb448188d73ec97d
        alias            yellow
        reservation_key  0x123abc
    }
}
    永続的な管理に適用可能なすべてのmpathデバイスに対してreservation_keyパラメータを設定した後、multipathd reconfigureを使用して設定を再ロードします。
   
reservation_key file”
     特別な値であるreservation_key fileがmultipath.confのdefaultsセクションで使用される場合、mpathpersistを使用して/etc/multipath/prkeysファイルで予約キーを動的に管理できます。
    
これは、マルチパスマップで永続的な予約を処理する際のお勧めの方法です。この方法はSUSE Linux Enterprise Server 12 SP4から使用できます。
mpathpersistコマンドを使用して、SCSIデバイスで構成されるマルチパスマップの永続的な予約を問い合わせて、設定します。詳細については、mpathpersist(8)のマニュアルページを参照してください。このコマンドラインオプションは、sg3_utilsパッケージのsg_persistのオプションと同じです。sg_persist(8)のマニュアルページでは、このオプションの意味を詳細に説明しています。
   
    次の例では、DEVICEは/dev/mapper/mpathaなど、デバイスマッパーのマルチパスデバイスを示しています。下記のコマンドは、読みやすくするために長いオプションと共にリストしています。すべてのオプションには、mpathpersist -oGS 123abc
    DEVICEのように1文字の置換文字が含まれています。
   
- mpathpersist --in --read-keys DEVICE
- デバイスに登録されている予約キーを読み取ります。 
- mpathpersist --in --read-reservation DEVICE
- デバイスの既存の予約を表示します。 
- mpathpersist --out --register --param-sark=123abc DEVICE
- デバイスの予約キーを登録します。これにより、ホストですべてのI_T関連付け(パスデバイス)の予約キーが追加されます。 
- mpathpersist --out --reserve --param-rk=123abc --prout-type=5 DEVICE
- 以前登録したキーを使用して、デバイスのタイプ5(登録者のみの排他書き込み)の予約を作成します。 
- mpathpersist --out --release --param-rk=123abc --prout-type=5 DEVICE
- デバイスのタイプ5の予約を解放します。 
- mpathpersist --out --register-ignore --param-sark=0 DEVICE
- 以前存在していた予約キーをデバイスから削除します。 
18.7 マルチパス処理用システムの設定 #
18.7.1 マルチパスサービスの有効化、起動、および停止 #
マルチパスサービスを有効にしてブート時に起動するには、次のコマンドを実行します。
>sudosystemctl enable multipathd
実行中のシステムでサービスを手動で開始するには、次のように入力します。
>sudosystemctl start multipathd
サービスを再開するには、次のように入力します。
>sudosystemctl restart multipathd
    ほとんどの状況で、サービスの再開は不要です。単にmultipathdに設定を再ロードさせるには、次のコマンドを実行します。
   
>sudosystemctl reload multipathd
サービスのステータスを確認するには、次のように入力します。
>sudosystemctl status multipathd
現行セッションのマルチパスサービスを停止するには、次のコマンドを実行します。
>sudosystemctl stop multipathd multipathd.socket
サービスを停止しても既存のマルチパスマップは削除されません。未使用マップを削除するには、次のコマンドを実行します。
>sudomultipath -F
multipathd.serviceを常に有効にしておいてください
     マルチパスハードウェアを備えたシステムでは、multipathd.serviceを常に有効にして実行しておくことを強くお勧めします。このサービスは、systemdのソケットアクティベーションメカニズムをサポートしていますが、このメカニズムに依存することはお勧めしません。このサービスが無効になっていると、マルチパスマップは起動時にセットアップされません。
    
上記の警告にもかかわらずマルチパスを無効にする必要がある場合(サードパーティのマルチパス処理ソフトウェアを導入するなど)、次のように進めます。マルチパスデバイスへのハードコード化された参照をシステムで使用していないことを確認します(18.15.2項 「デバイス参照の問題の理解」を参照)。
1回のシステムブートに対してのみマルチパス処理を無効にするには、カーネルパラメータのmultipath=offを使用します。これはブートシステムとinitramfsの両方に影響します。この場合はinitramfsを再構築する必要はありません。
    
multipathdサービスを恒久的に無効にして、今後のシステムブートでこのサービスが開始されないようにするには、次のコマンドを実行します。
>sudosystemctl disable multipathd multipathd.socket>sudodracut --force --omit multipath
     (マルチパスサービスを無効または有効にするときには必ずinitramfsを再構築してください。詳細については、18.7.4項 「initramfsの同期状態の維持」を参照してください。)
    
multipathを手動で実行するときにもマルチパスデバイスが設定されないようにする場合は、initramfsを再構築する前に、/etc/multipath.confの最後に次の行を追加します。
    
blacklist {
    wwid .*
}18.7.2 マルチパス処理用SANデバイスの準備 #
SANデバイスのマルチパスI/Oを設定する前に、必要に応じて、次のようにSANデバイスを準備してください。
- ベンダのツールで、SANデバイスを設定し、ゾーン化します。 
- ベンダのツールで、ストレージアレイ上のホストLUNのパーミッションを設定します。 
- SUSE Linux Enterprise Serverでホストバスアダプタ(HBA)用ドライバが同梱されていない場合、HBAベンダからLinuxドライバをインストールします。詳細については、ベンダの特定マニュアルを参照してください。 
    マルチパスデバイスが検出され、multipathd.serviceが有効になっている場合、マルチパスマップは自動的に作成されるはずです。作成されない場合、18.15.3項 「緊急モードでのトラブルシューティング手順」に、状況の調査に使用できるシェルコマンドのリストが表示されます。LUNがHBAドライバによって認識されない場合は、SANのゾーン化セットアップをチェックします。特に、LUNのマスキングがアクティブであるかどうか、LUNがサーバに正しく割り当てられているかどうかをチェックしてください。
   
LUNがHBAドライバによって認識できるが、対応するブロックデバイスが作成されない場合は、追加のカーネルパラメータが必要な場合があります。SUSE KnowledgeのTID 3955167: Troubleshooting SCSI (LUN) Scanning Issues (https://www.suse.com/support/kb/doc.php?id=3955167)を参照してください。
18.7.3 マルチパスデバイスのパーティションとkpartx #
    マルチパスマップには、そのパスデバイスのようなパーティションを設けることができます。パーティションテーブルのスキャンとパーティションのデバイスノードの作成は、ユーザスペースでkpartxツールによって実行されます。kpartxは、udevルールによって自動的に起動します。通常、手動での実行は不要です。マルチパスのパーティションを参照する方法については、18.12.4項 「マルチパスマップの参照」を参照してください。
   
kpartxの起動の無効化
/etc/multipath.confのskip_kpartxオプションを使用して、選択したマルチパスマップでのkpartxの起動を無効にできます。たとえば、これは仮想化ホストで有用である場合があります。
    
    マルチパスデバイス上のパーティションテーブルとパーティションは、YaSTまたはfdiskやpartedなどのツールを使用して、通常どおり操作できます。パーティションテーブルに適用する変更は、パーティション処理ツールが終了するとシステムによって記録されます。これが動作しない場合(デバイスがビジーであることが原因であることが多い)、multipathd
    reconfigureを試すか、またはシステムを再起動してください。
   
18.7.4 initramfsの同期状態の維持 #
初期RAMファイルシステム(initramfs)とブートシステムが、すべてのブロックデバイスのマルチパス処理の使用に関して一貫した動作をしていることを確認します。マルチパス設定の変更を適用した後にinitramfsを再構築します。
    システムでマルチパス処理が有効になっている場合はinitramfsでも有効にする必要があり、その逆も同様です。このルールの唯一の例外は18.3.2.2項 「ローカルディスクのルートファイルシステム」のオプションinitramfsでマルチパスを無効にするです。
   
    マルチパス設定は、ブートシステムとinitramfsの間で同期する必要があります。したがって、/etc/multipath.conf、/etc/multipath/wwids、/etc/multipath/bindingsのいずれかのファイル、その他の設定ファイル、またはデバイスの識別に関係のあるudevルールを変更した場合、次のコマンドを使用してinitramfsを再構築します。
   
>sudodracut -f
initramfsとシステムが同期されていない場合、システムは正しくブートせず、起動手順を実行すると緊急シェルが起動する可能性があります。このようなシナリオを回避または修復する方法については、18.15項 「MPIOのトラブルシューティング」を参照してください。
   
18.7.4.1 initramfsでのマルチパス処理の有効化または無効化 #
     initramfsが非標準的な状況で再構築される場合(カーネルパラメータのmultipath=offを使用してブートした後やレスキューシステムからなど)、特別な注意が必要です。dracutは、initramfsの構築中に、ルートファイルシステムがマルチパスデバイス上にあることを検出した場合にのみinitramfsにマルチパス処理サポートを自動的に組み込みます。このような場合、マルチパス処理を明示的に有効または無効にする必要があります。
    
initramfsでマルチパスのサポートを有効にするには、次のコマンドを実行します。
    
>sudodracut --force --add multipath
initramfsでマルチパスのサポートを無効にするには、次のコマンドを実行します。
    
>sudodracut --force --omit multipath
18.7.4.2 initramfsの永続的なデバイス名 #
dracutがinitramfsを生成する際には、システムが確実に正しくブートするように、永続的な方法でマウントされるディスクとパーティションを参照する必要があります。dracutでマルチパスデバイスを検出すると、この目的で、次のようなDM-MPデバイス名が使用されます。
    
/dev/mapper/3600a098000aad73f00000a3f5a275dc8-part1
     これがデフォルトの動作です。これは、システムが常にマルチパスモードで実行されている場合には適切です。ただし、18.7.4.1項 「initramfsでのマルチパス処理の有効化または無効化」で説明しているようにマルチパス処理なしでシステムを起動した場合、/dev/mapperデバイスが存在しないため、このようなinitramfsによる起動は失敗します。別の起こりうる問題シナリオと背景情報については、18.12.4項 「マルチパスマップの参照」を参照してください。
    
     この問題が起こらないようにするには、--persistent-policyオプションを使用して、dracutの永続的なデバイス命名ポリシーを変更します。by-uuid使用ポリシーを設定することをお勧めします。
    
>sudodracut --force --omit multipath --persistent-policy=by-uuid
手順18.1「インストール後にルートディスクのマルチパス処理を無効にする」および18.15.2項 「デバイス参照の問題の理解」も参照してください。
18.8 マルチパス設定 #
   組み込みのmultipath-toolsは、ほとんどのセットアップでデフォルトで正しく動作します。カスタマイズが必要な場合、設定ファイルを作成する必要があります。主要設定ファイルは/etc/multipath.confです。また、/etc/multipath/conf.d/のファイルを考慮に入れます。詳細については、18.8.2.1項 「追加の設定ファイルと優先ルール」を参照してください。
  
一部のストレージベンダは、マルチパスオプションの推奨値をマニュアルで公開しています。これらの値は多くの場合、ベンダが自社の環境内でテストし、ストレージ製品に最適であると判断した値を表しています。18.2.2項 「マルチパス処理のストレージアレイ自動検出」の免責事項を参照してください。
multipath-toolsには、公開されたベンダ推奨値から抽出した多くのストレージアレイ用の組み込みのデフォルトがあります。multipath -Tを実行して、ご使用のデバイスの現在の設定を確認し、これをベンダの推奨値と比較します。
   
18.8.1 /etc/multipath.confの作成 #
    変更する設定のみが含まれている最低限の/etc/multipath.confを作成することをお勧めします。多くの場合、/etc/multipath.confを作成する必要はありません。
   
考え得る設定ディレクティブすべてを含む設定テンプレートで作業したい場合、次のコマンドを実行します。
multipath -T >/etc/multipath.conf
18.14.1項 「設定のベストプラクティス」も参照してください。
18.8.2 multipath.conf 構文 #
/etc/multipath.confファイルでは、セクション、サブセクション、およびオプション/値のペアの階層を使用します。
   
- トークンは空白で区切られます。連続する空白文字は、引用符で囲まれていない限り1つの空白に圧縮されます((以下を参照)。 
- ハッシュ( - #)文字と感嘆符(- !)文字により、行の残りの部分がコメントとして破棄されます。
- セクションとサブセクションは、同一行のセクション名と開き中括弧( - {)で開始され、独自の行の閉じ中括弧(- })で終了します。
- オプションと値は1行に書き込まれます。行の継続はサポートされていません。 
- オプションとセクション名はキーワードである必要があります。使用できるキーワードについては、 - multipath.conf(5)を参照してください。
- 値は二重引用符( - ")で囲むことができます。値に空白またはコメント文字が含まれている場合、その値を引用符で囲む必要があります。値の内側にある二重引用符文字は二重引用符のペア(- "")で表されます。
- 一部のオプションの値はPOSIXの正規表現です( - regex(7)を参照)。大文字と小文字が区別され、アンカーがないので「- bar」は「- rhabarber」と一致しますが、「Barbie」とは一致しません。
構文は、次のようにします。
section {
    subsection {
        option1 value
        option2      "complex value!"
        option3    "value with ""quoted"" word"
    } ! subsection end
} # section end18.8.2.1 追加の設定ファイルと優先ルール #
/etc/multipath.confの後、ツールは、パターン/etc/multipath.conf.d/*.confと一致するファイルを読み込みます。追加のファイルは/etc/multipath.confと同じ構文ルールに従います。セクションとオプションは複数回使用できます。同じセクションの同じオプションが複数のファイルで設定されたり、同じファイルの複数の行で設定されると、最後の値が優先されます。multipath.confセクション間には個別の優先ルールが適用されます。以下を参照してください。
    
18.8.3 multipath.confセクション #
/etc/multipath.confファイルは、以下のセクションで構成されています。一部のオプションは複数のセクションで使用できます。詳細についてはmultipath.conf(5)を参照してください。
   
- defaults
- 一般的なデフォルト設定。 重要: 組み込みのデバイスプロパティの上書き- 組み込みのハードウェア固有のデバイスプロパティは - defaultsセクションの設定より優先されます。したがって、変更は、- devicesセクションまたは- overridesセクションで行う必要があります。
- blacklist
- 無視するデバイスをリストします。18.11.1項 「 - multipath.confの- blacklistセクション」を参照してください。
- blacklist_exceptions
- マルチパス処理されるデバイスをリストします(ブラックリストに含まれている場合もリストされます)。18.11.1項 「 - multipath.confの- blacklistセクション」を参照してください。
- devices
- ストレージコントローラ専用の設定。このセクションは - deviceサブセクションのコレクションです。このセクションの値は、- defaultsセクションの同じオプションの値、および- multipath-toolsの組み込み設定を上書きします。- devicesセクションの- deviceエントリは、正規表現を使用して、デバイスのベンダおよび製品と照合されます。これらのエントリは「マージ」され、デバイスに対して照合するセクションのすべてのオプションが設定されます。複数の照合する- deviceセクションで同じオプションが設定されている場合、最後のデバイスエントリが優先されます。それが前のエントリよりも「特定的」でない場合でも同様です。これは、照合するエントリが異なる設定ファイルに存在する場合でも適用されます(18.8.2.1項 「追加の設定ファイルと優先ルール」を参照)。次の例では、デバイス- SOMECORP STORAGEは- fast_io_fail_tmo 15を使用します。- devices { device { vendor SOMECORP product STOR fast_io_fail_tmo 10 } device { vendor SOMECORP product .* fast_io_fail_tmo 15 } }
- multipaths
- 個々のマルチパスデバイスの設定。このセクションは - multipathサブセクションのリストです。値は- defaultsセクションと- devicesセクションを上書きします。
- 上書き
- 他のすべてのセクションの値を上書きする設定。 
18.8.4 multipath.confの変更の適用 #
設定変更を適用するには、次のコマンドを実行します。
>sudomultipathd reconfigure
忘れずにinitramfsの設定と同期してください。18.7.4項 「initramfsの同期状態の維持」を参照してください。
multipathを使用して設定を適用しない
multipathを実行中にmultipathdコマンドを使用して新しい設定を適用しないでください。適用すると、セットアップに一貫性がなくなり、セットアップが破損する可能性があります。
    
変更した設定を適用する前にテストできます。そのためには次のコマンドを実行します。
>sudomultipath -d -v2
このコマンドは、提案されたトポロジを使用して作成される新しいマップを表示しますが、マップが削除/フラッシュされるかどうかは表示しません。より多くの情報を得るには、詳細度を上げて次のコマンドを実行します。
>sudomultipath -d -v3 2>&1 | less
18.9 フェールオーバー、キュー格納、およびフェールバックのポリシーの設定 #
マルチパスI/Oの最終目標は、ストレージシステムとサーバ間のコネクティビティ耐障害性を提供することです。望ましいデフォルトの動作は、サーバがスタンドアロンのサーバか、高可用性クラスタ内のノードかによって異なります。
   このセクションでは、耐障害性を実現するために最も重要なmultipath-tools設定パラメータについて説明します。
  
- polling_interval
- パスデバイスの正常性チェック間の間隔(秒単位)。デフォルトは5秒です。障害が発生したデバイスはこの間隔でチェックされます。デバイスが正常な場合、この間隔を最長 - max_polling_interval秒まで長くすることができます。
- detect_checker
- これが - yes(デフォルト、推奨)に設定されている場合、- multipathdは、最適なパスチェックアルゴリズムを自動的に検出します。
- path_checker
- パスの状態のチェックに使用するアルゴリズム。チェッカーを有効にする必要がある場合、次のように - detect_checkerを無効にします。- defaults { detect_checker no }- 次のリストには、最も重要なアルゴリズムのみが含まれます。完全なリストについては、 - multipath.conf(5)を参照してください。- tur
- TEST UNIT READYコマンドを送信します。これは、ALUAをサポートしているSCSIデバイスのデフォルトです。 
- directio
- 非同期I/O (aio)を使用してデバイスセクタを読み取ります。 
- rdac
- NetAPP E-Seriesおよび同様のアレイ用のデバイス固有のチェッカー。 
- none
- パスチェックは実行されません。 
 
- checker_timeout
- デバイスがパスチェッカーコマンドに一定時間応答しない場合、失敗とみなされます。デフォルトは、デバイスに対するカーネルのSCSIコマンドのタイムアウトです(通常30秒)。 
- fast_io_fail_tmo
- SCSIトランスポートレイヤのエラーが(たとえば、ファイバチャネルのリモートポートで)検出されると、カーネルトランスポートレイヤは、トランスポートが回復するまでこの時間(秒単位)待機します。この時間経過後、パスデバイスは、「トランスポートオフライン」の状態で失敗します。これは、マルチパスでは非常に有用です。マルチパスでは、頻繁に発生するクラスのエラーに対してクイックパスフェールオーバーが許可されているためです。この値は、Fabricの再設定用に一般的なタイムスケールと一致している必要があります。デフォルト値の5秒は、ファイバチャネルでは正しく動作します。iSCSIなどのその他のトランスポートでは、より長いタイムアウトが必要な場合があります。 
- dev_loss_tmo
- SCSIトランスポートエンドポイント(たとえば、ファイバチャネルのリモートポート)に到達できなくなった場合、カーネルは、SCSIデバイスノードを完全に削除してポートが再表示されるまでこの時間(秒単位)待機します。デバイスノードの削除は複雑な操作であり、競合状態やデッドロックになりやすいため、避けるのが最善です。したがって、この値を大きい値に設定することをお勧めします。特別な値 - infinityがサポートされています。デフォルトは10分です。デッドロック状態を回避するために、- multipathdは、I/Oのキュー格納(- no_path_retryを参照)を- dev_loss_tmoの期限が切れる前に停止します。
- no_path_retry
- 指定マルチパスマップのすべてのパスで障害が発生した場合における処理を決定します。次の値を使用できます。 - fail
- マルチパスマップのI/Oは失敗します。そのため、マウントされたファイルシステムなどの上位レイヤでI/Oエラーが発生します。影響を受けるファイルシステム、および場合によってはホスト全体がディグレードモードになります。 
- queue
- マルチパスマップ上のI/Oがデバイスマッパーレイヤのキューに入り、パスデバイスが再び利用可能になるとそのデバイスに送信されます。これは、データ損失を回避するための最も安全なオプションですが、パスデバイスが長時間復帰しないと悪影響を被る可能性があります。デバイスからの読み取りプロセスは中断できないスリープ( - D)状態でハングします。キューに格納されたデータでメモリが一杯になり、処理できなくなります。最終的にメモリが枯渇します。
- N
- Nは正の整数です。N秒のポーリング間隔でマップデバイスをキューモードのままにします。この時間が経過すると、マップデバイスの - multipathdは失敗します。- polling_intervalが5秒で- no_path_retryが6の場合、- multipathdはI/Oをキューに約30秒間(= 6 * 5秒)格納し、時間が経過するとそのマップデバイスのI/Oは失敗します。
 
- flush_on_last_del
- yesに設定し、マップのすべてのパスデバイスが(単に失敗するだけではなく)削除される場合、マップのすべてのI/Oが失敗してから、マップを削除します。デフォルトは- noです。
- deferred_remove
- yesに設定し、マップのすべてのパスデバイスが削除される場合、ホルダがマップデバイスのファイル記述子を閉じるのを待機してから、マップデバイスをフラッシュして削除します。最後のホルダがマップを閉じる前にパスが再表示された場合、延期された削除操作はキャンセルされます。デフォルトは- noです。
- failback
- 非アクティブパスグループの失敗したパスデバイスが回復すると、 - multipathdは、すべてのパスグループのパスグループ優先度を再評価します(18.10項 「パスのグループ化と優先度の設定」を参照)。再評価後、優先度の最も高いパスグループが、現在非アクティブのパスグループの1つになる可能性があります。このパラメータによってこの状況での動作が決まります。重要: ベンダの推奨事項に従ってください- 最適なフェールバックポリシーは、ストレージデバイスの特性によって異なります。したがって、 - failback設定をストレージベンダに確認することを強くお勧めします。- manual
- 管理者が - multipathd switchgroupを実行しない限り何も起こりません(18.6.2項 「- multipathdデーモン」を参照)。
- immediate
- 優先度の最も高いパスグループがすぐにアクティブになります。これは多くの場合(特にスタンドアロンサーバでは)パフォーマンスの観点で有利ですが、パスグループの変更が負荷の大きい操作となるアレイには使用しないでください。 
- followover
- immediateと同様ですが、アクティブになったばかりのパスのみがパスグループ内の正常なパスである場合のみフェールバックを実行します。これはクラスタ設定に役立ちます。これにより、以前に別のノードがフェールオーバーを要求したときに、ノードが自動的にフェールバックされないようにします。
- N
- Nは正の整数です。優先度の最も高いパスグループをアクティブにする前にN個のポーリング間隔待機します。この間に優先度が再度変更されると、待機期間が新たに始まります。 
 
- eh_deadline
- デバイスからの応答がなく、SCSIコマンドがエラー応答なしにタイムアウトした場合に、SCSIエラー処理に費やされる時間(秒単位)のおおよその上限を設定します。期限が経過すると、カーネルはHBAを完全にリセットします。 
/etc/multipath.confファイルを変更した後、18.8.4項 「multipath.confの変更の適用」の説明に従って設定を適用します。
  
18.9.1 スタンドアロンサーバでのキューポリシー #
    スタンドアロンサーバに対してマルチパスI/Oを設定する際は、no_path_retryで値をqueueに設定することにより、サーバのオペレーティングシステムを、I/Oエラーの受信から可能な限り保護することができます。この設定では、マルチパスのフェールオーバーが発生するまでメッセージはキューに入ります。「無限」のキューを望まない場合(上記を参照)、通常の状況下でストレージパスが回復するのに十分大きいとみなされる数値を選択します(上記を参照)。
   
18.9.2 クラスタ化されたサーバでのキューポリシー #
    高可用性クラスタ内のノードに対してマルチパスI/Oを構成するときには、マルチパスでリソースのフェールオーバーをトリガするためにI/O障害が報告されるようにして、マルチパスのフェールオーバーが解決されるのを待たなくて済むようにするとよいでしょう。クラスタ環境では、no_path_retry
    設定を、ストレージシステムへの接続が失われた場合に、クラスタノードがクラスタ検証プロセスに関連するI/Oエラー(ハートビート許容値の50%を推奨)を受信するように変更する必要があります。また、パスの障害によるリソースのピンポンを避けるため、マルチパスのfailbackをmanualまたはfollowoverに設定するとよいでしょう。
   
18.10 パスのグループ化と優先度の設定 #
   マルチパスマップのパスデバイスは、パスグループ(優先度グループとも呼ばれる)にグループ化されます。常に1つのパスグループのみがI/Oを受信します。multipathdは、優先度をパスグループに割り当てます。アクティブなパスを持つパスグループの内、優先度の最も高いグループが、マップに設定されたフェールバックポリシーに応じてアクティブになります(18.9項 「フェールオーバー、キュー格納、およびフェールバックのポリシーの設定」を参照)。パスグループの優先度は、パスグループ内のアクティブなパスデバイスの優先度の平均です。パスデバイスの優先度は、デバイスのプロパティから計算される整数値です(以下のprioオプションの説明を参照)。
  
   このセクションでは、優先度の決定とパスのグループ化に関連するmultipath.conf設定パラメータについて説明します。
  
- path_grouping_policy
- パスをグループに結合するために使用する方法を指定します。最も重要なポリシーのみがここにリストされます。使用頻度の低いその他の値については、 - multipath.conf(5)を参照してください。- failover
- パスグループごとに1つのパス。この設定は、従来の「アクティブ/パッシブ」ストレージアレイで有用です。 
- multibus
- 1つのパスグループ内のすべてのパス。これは、従来の「アクティブ/パッシブ」アレイで有用です。 
- group_by_prio
- 同じパス優先度のパスデバイスがグループ化されます。このオプションは、ALUAのように非対称アクセス状態をサポートする最新のアレイで有用です。 - aluaまたは- sysfsの優先度アルゴリズムと組み合わせて、- multipathdによってセットアップされる優先度グループは、ストレージアレイがALUA関連のSCSIコマンドを使用してレポートするプライマリターゲットポートグループと照合されます。
 - マルチパスマップのパスグループ化ポリシーは、同じポリシー名を使用して、次のコマンドで一時的に変更できます。 - >- sudomultipath -p POLICY_NAME MAP_NAME
- marginal_pathgroups
- onまたは- fpinに設定すると、「ぎりぎり」のパスデバイスは、別のパスグループに分類されます。これは、使用しているパスグループ化アルゴリズムとは無関係です。18.13.1項 「信頼性の低い(「ぎりぎりの」)パスデバイスの処理」を参照してください。
- detect_prio
- これが - yes(デフォルト、推奨)に設定されている場合、- multipathdはストレージデバイスの優先度を設定するのに最適なアルゴリズムを自動的に検出して、- prio設定を無視します。実際には、これは、ALUAのサポートが検出された場合に- sysfsprioアルゴリズムを使用することを意味します。
- prio
- パスデバイスの優先度を導出する方法を決定します。これを上書きする場合、次のように - detect_prioを無効にします。- defaults { detect_prio no }- 次のリストには、最も重要な方法のみが含まれます。他にもいくつかの方法が利用可能です。これらは主にレガシハードウェアをサポートするためのものです。完全なリストについては、 - multipath.conf(5)を参照してください。- alua
- SCSI-3 ALUAアクセス状態を使用して、パス優先値を導出します。オプションの - exclusive_pref_bit引数を使用して、ALUAの「優先プライマリターゲットポートグループ」(PREF)ビットが設定されているデバイスの動作を変更できます。- prio alua prio_args exclusive_pref_bit- このオプションを設定すると、「優先」パスは、他のアクティブ/最適化パスを上回る優先度ボーナスを獲得します。このオプションを設定しないと、すべてのアクティブ/最適化パスは、同じ優先度を割り当てられます。 
- sysfs
- aluaと似ていますが、SCSIコマンドをデバイスに送信する代わりに、- sysfsからアクセス状態を取得します。これにより、- aluaよりもI/O負荷が軽減されますが、ALUAがサポートされているすべてのストレージアレイに適しているわけではありません。
- const
- すべてのパスに定数値を使用します。 
- path_latency
- パスデバイスでI/Oレイテンシ(I/O送信から完了までの時間)を測定し、低レイテンシのデバイスに高い優先度を割り当てます。詳細については - multipath.conf(5)を参照してください。このアルゴリズムはまだ実験段階です。
- weightedpath
- 名前、シリアル番号、Host:Bus:Target:Lun ID (HBTL)、またはファイバチャネルWWNに基づいて優先度をパスに割り当てます。優先度の値は時間が経過しても変化しません。この方法では、引数 - prio_argsが必要です。詳細については、- multipath.conf(5)を参照してください。次に例を示します。- prio weightedpath prio_args "hbtl 2:.*:.*:.* 10 hbtl 3:.*:.*:.* 20 hbtl .* 1"- これは、SCSIホスト3のデバイスにSCSIホスト2のデバイスより高い優先度を割り当て、他のすべてに低い優先度を割り当てています。 
 
- prio_args
- 一部の - prioアルゴリズムは、追加の引数が必要です。これらはこのオプションで指定されます。構文はアルゴリズムによって決まります。詳細については上記の説明を参照してください。
- hardware_handler
- パスグループを切り替えるときにパスデバイスをアクティブ化するためにカーネルが使用するカーネルモジュールの名前。このオプションは、最新のカーネルでは効果がありません。最新のカーネルでは、ハードウェアハンドラが自動検出されるためです。18.2.3項 「特定のハードウェアハンドラを必要とするストレージアレイ」を参照してください。 
- path_selector
- アクティブパスグループのパス間のロードバランシングに使用するカーネルモジュールの名前。利用可能な選択肢は、カーネル設定によって決まります。過去の経緯から、 - multipath.confでは名前は常に引用符で囲み、その後に「0」を付ける必要があります。次に例を示します。- path_selector "queue-length 0" - service-time
- すべてのパスで保留中のI/Oが完了するために必要な時間を推定し、最小値のパスを選択します。これがデフォルトの設定です。 
- historical-service-time
- 過去のサービス時間(移動平均を保持する時間)、および未処理の要求数に基づいて、将来のサービス時間を推定します。すべてのパスで保留中のI/Oが完了するために必要な時間を推定し、最小値のパスを選択します。 
- queue-length
- 現在保留中のI/O要求が最も少ないパスを選択します。 
- round-robin
- ラウンドロビン方式でパスを切り替えます。次のパスに切り替わる前に、そのパスに送信される要求数は、 - rr_min_io_rqと- rr_weightオプションで調整できます。
- io-affinity
- このパスセレクタは、現時点では - multipath-toolsでは機能しません。
 
/etc/multipath.confファイルを変更した後、18.8.4項 「multipath.confの変更の適用」の説明に従って設定を適用します。
  
18.11 マルチパス処理のためのデバイスの選択 #
   マルチパスデバイスを含むシステムでは、一部のデバイス(通常はローカルディスク)でのマルチパスマップのセットアップを避けた方がよい場合があります。multipath-toolsは、どのデバイスをマルチパスのパスデバイスとみなすかを設定するためのさまざまな方法を提供します。
  
通常、ローカルディスクの上にデバイスが1つだけある「ディグレード」マルチパスマップをセットアップしても問題ありません。これは正常に動作し、追加の設定は不要です。しかし、管理者の中にはこれを分かりにくいと感じたり、一般的にこの種の不必要なマルチパス処理に反対したりする人もいます。また、マルチパスレイヤを使用すると、パフォーマンスにわずかなオーバーヘッドが生じます。18.3.2.2項 「ローカルディスクのルートファイルシステム」も参照してください。
/etc/multipath.confファイルを変更した後、18.8.4項 「multipath.confの変更の適用」の説明に従って設定を適用します。
  
18.11.1 multipath.confのblacklistセクション #
/etc/multipath.confファイルには、multipathdとmultipathで無視する必要があるすべてのデバイスを列挙するblacklistセクションを含めることができます。次の例は、デバイスを除外する考えられる方法を示しています。
   
blacklist {
    wwid 3600605b009e7ed501f0e45370aaeb77f 1
    device {  2
        vendor ATA
        product .*
    }
    protocol scsi:sas 3
    property SCSI_IDENT_LUN_T10 4
    devnode "!^dasd[a-z]*" 5
}| 
 | |
| 
       この | |
| 
 
 この形式はSLES 15 SP1およびSLES 12 SP5以降でサポートされています。 | |
| 
       この | |
| 
 
       この例では | 
    デフォルトでは、multipath-toolsは、SCSI、DASDまたはNVMeを除くすべてのデバイスを無視します。技術的には、組み込みのdevnode除外リストは、次の否定された正規表現です。
   
devnode !^(sd[a-z]|dasd[a-z]|nvme[0-9])
18.11.2 multipath.confのblacklist exceptionsセクション #
    特定のデバイスのみをマルチパス処理用に設定することが望ましい場合があります。この場合、デバイスはデフォルトで除外され、マルチパスマップの一部となるデバイスに対して例外が定義されます。この目的でblacklist_exceptionsセクションが存在します。これは通常、次の例のように使用されます。この例では、製品文字列「NETAPP」のストレージを除くすべてが除外されます。
   
blacklist {
     wwid .*
}
blacklist_exceptions {
     device {
         vendor ^NETAPP$
         product .*
     }
}
blacklist_exceptionsセクションでは、上記のblacklistセクションで説明されているすべての方法がサポートされます。
   
blacklist_exceptionsのpropertyディレクティブは必須です。なぜなら、マルチパスのパスデバイスとみなされるために、すべてのデバイスは少なくとも1つの「許可された」udevプロパティを持つ必要があるためです(プロパティの値は重要ではありません)。propertyの組み込みのデフォルトは次のとおりです。
   
property (SCSI_IDENT_|ID_WWN)
この正規表現に一致するudevプロパティを少なくとも1つ持つデバイスのみが含まれます。
18.11.3 デバイスの選択に影響するその他のオプション #
blacklistオプション以外にも、/etc/multipath.confには、どのデバイスをマルチパスのパスデバイスとみなすかに影響するその他の設定がいくつかあります。
   
- find_multipaths
- このオプションは、除外されないデバイスが最初に検出された場合の - multipathと- multipathdの動作を制御します。次の値を使用できます。- greedy
- /etc/multipath.confの- blacklistによって除外されないすべてのデバイスが含まれます。これは、SUSE Linux Enterpriseのデフォルトです。この設定がアクティブの場合、マルチパスマップへのデバイスの追加を防ぐ唯一の方法は、デバイスを除外と設定することです。
- strict
- すべてのデバイスは、 - /etc/multipath.confの- blacklistセクションに存在しなくても、そのWWIDが- /etc/multipath/wwidsファイルにリストされていない限り、除外されます。これには、WWIDファイルの手動メンテナンスが必要です(下記の注意事項を参照)。
- yes
- デバイスは、 - strictの条件を満たしている場合、または同じWWIDを持つ他のデバイスがシステム内に少なくとも1つ存在する場合に含まれます。
- smart
- 新しいWWIDを初めて検出した場合、これは、マルチパスのパスデバイスとして一時的にマークされます。 - multipathdは、同じWWIDを持つ追加のパスが現れるまでしばらく待機します。現れると、マルチパスマップは通常どおりにセットアップされます。それ以外の場合、タイムアウトになると、1つのデバイスが非マルチパスデバイスとしてシステムにリリースされます。タイムアウトは、オプション- find_multipaths_timeoutを使用して設定できます。- このオプションは、SUSE Linux Enterprise Server 15でのみ利用できる - systemd機能に依存します。
 注記:- /etc/multipath/wwidsの管理- multipath-toolsは、前にセットアップしたマルチパスマップの記録をファイル- /etc/multipath/wwids(「WWIDsファイル」)に保持します。このファイルにリストされているWWIDを持つデバイスは、マルチパスのパスデバイスとみなされます。このファイルは、- greedyを除く- find_multipathsのすべての値に対して、マルチパスデバイスの選択に重要です。- find_multipathsが- yesまたは- smartに設定されている場合、- multipathdは、新しいマップをセットアップした後にWWIDを- /etc/multipath/wwidsに追加します。これにより、今後これらのマップはより迅速に検出されるようになります。- WWIDファイルは、手動で変更できます。 - >- sudomultipath -a 3600a098000aad1e3000064e45f2c2355 1- >- sudomultipath -w /dev/sdf 2- strictモードでは、これが新しいマルチパスデバイスを追加する唯一の方法です。WWIDファイルを変更した後、- multipathd reconfigureを実行して変更を適用します。変更をWWIDファイルに適用した後にinitramfsを再構築することをお勧めします(18.7.4項 「initramfsの同期状態の維持」を参照)。
- allow_usb_devices
- このオプションが - yesに設定されている場合、USBストレージデバイスはマルチパス処理用とみなされます。デフォルトは- noです。
18.12 マルチパスデバイス名とWWID #
multipathdとmultipathは、WWIDを内部的に使用して、デバイスを識別します。WWIDは、デフォルトではマップ名としても使用されます。便宜上、multipath-toolsは、よりシンプルで簡単に覚えることができる名前のマルチパスデバイスへの割り当てをサポートしています。
  
18.12.1 WWIDとデバイスの識別 #
    マルチパス操作では、同じストレージボリュームへのパスを表すデバイス検出の信頼性が高いことが非常に重要です。multipath-toolsは、この目的でデバイスのWWID (World Wide Identification: ワールドワイドID)を使用します(これはUUID (Universally Unique ID: ユニバーサルユニークID)またはUID (Unique ID: ユニークID)と呼ばれることもあります(ユーザIDと混同しないでください))。マップデバイスのWWIDは、常にそのパスデバイスのWWIDと同じです。
   
デフォルトでは、パスデバイスのWWIDは、sysfsファイルシステムからデバイスの属性を読み取ることによって、または固有のI/Oコマンドを使用して、udevルールで決定されるデバイスのudevプロパティから推測されます。デバイスのudevプロパティを確認するには、次のコマンドを実行します。
> udevadm info /dev/sdx
    WWIDを導出するためにmultipath-toolsによって使用されるudevプロパティを次に示します。
   
- SCSIデバイスの - ID_SERIAL(これをデバイスの「シリアル番号」と混同しないでください)
- DASDデバイスの - ID_UID
- NVMeデバイスの - ID_WWN
使用中のマルチパスマップのWWIDは変更できません。設定の変更により、マップされたパスデバイスのWWIDが変更された場合は、マップを破棄し、新しいWWIDで新しいマップをセットアップする必要があります。これは、古いマップを使用中には実行できません。極端な場合、WWIDの変更によってデータが破損する可能性があります。したがって、マップのWWIDが変更される結果となる設定変更の適用は、厳格に回避する必要があります。
/etc/multipath.confでuid_attrsオプションを有効にすることは許可されています。18.13項 「その他のオプション」を参照してください。
    
18.12.2 マルチパスマップのエイリアスの設定 #
/etc/multipath.confのmultipathsセクションで、次のように任意のマップ名を設定できます。
   
multipaths {
    multipath {
        wwid 3600a098000aad1e3000064e45f2c2355
        alias postgres
    }
}エイリアスは表現力が豊かですが、各マップに個別に割り当てる必要があるため、大規模なシステムでは面倒な場合があります。
18.12.3 自動生成されるユーザフレンドリ名の使用 #
multipath-toolsは、自動生成されたエイリアス、いわゆる「ユーザフレンドリ名」もサポートしています。エイリアスの命名規則は、mpathINDEXというパターンに従います。ここでINDEXは小文字です(aで始まります)。したがって、最初に自動生成されるエイリアスはmpathaで、その後mpathb、mpathcと続き、mpathzまで続きます。その後は、mpathaa、mpathabなどが続きます。
   
    マップ名は、永続的である場合のみ有用です。multipath-toolsは、/etc/multipath/bindingsファイル(「バインディングファイル」)で割り当てられた名前を追跡します。新しいマップが作成されると、最初にこのファイルでWWIDが検索されます。WWIDが見つからない場合、最も可用性が低いユーザフレンドリ名がこれに割り当てられます。
   
18.12.2項 「マルチパスマップのエイリアスの設定」で説明されているように、明示的なエイリアスがユーザフレンドリ名よりも優先されます。
/etc/multipath.confの次のオプションは、ユーザフレンドリ名に影響します。
   
- user_friendly_names
- yesに設定すると、ユーザフレンドリ名が割り当てられ、使用されます。それ以外の場合、エイリアスが設定されていない限り、WWIDがマップ名として使用されます。
- alias_prefix
- ユーザフレンドリ名を作成するために使用するプレフィクス。デフォルトでは - mpathです。
     クラスタ操作では、クラスタ内のすべてのノードにわたってデバイス名を同じにする必要があります。multipath-toolsの設定は、ノード間で同期状態を保つ必要があります。user_friendly_namesを使用している場合、multipathdは実行時に/etc/multipath/bindingsファイルを変更する可能性があります。このような変更は、すべてのノードに対して動的に複製する必要があります。同じことが/etc/multipath/wwidsにも当てはまります(18.11.3項 「デバイスの選択に影響するその他のオプション」を参照)。
    
     実行時にマップ名を変更できます。このセクションで説明されている方法のいずれかを使用して、multipathd
     reconfigureを実行すると、システム操作を妨げることなくマップ名が変更されます。
    
18.12.4 マルチパスマップの参照 #
    技術的には、マルチパスマップは、デバイスマッパーデバイスです。これには、/dev/dm-nという形式の汎用名があります(nは整数)。これらの名前は永続的ではありません。これらは、マルチパスマップを参照するために使用しないでください。udevを実行すると、これらのデバイスへのさまざまなシンボリックリンクが作成されます。これらは、永続的な参照としてより適切です。これらのリンクは、特定の設定変更に対する不変性の点で異なります。次の一般的な例は、すべて同じデバイスを指しているさまざまなシンボリックリンクを示しています。
   
/dev/disk/by-id/dm-name-mpathb1 -> ../../dm-1 /dev/disk/by-id/dm-uuid-mpath-3600a098000aad73f00000a3f5a275dc82 -> ../../dm-1 /dev/disk/by-id/scsi-3600a098000aad73f00000a3f5a275dc83 -> ../../dm-1 /dev/disk/by-id/wwn-0x600a098000aad73f00000a3f5a275dc84 -> ../../dm-1 /dev/mapper/mpathb5 -> ../dm-1
| これら2つのリンクは、マップ名を使用してマップを参照します。したがって、マップ名が変更されるとリンクも変更されます(たとえば、ユーザフレンドリ名を有効または無効にした場合)。 | |
| 
       このリンクは、デバイスマッパーUUIDを使用します。これは、 
       デバイスマッパーUUIDは、確実にマルチパスデバイスのみが参照されるようにするために推奨される形式です。たとえば、 filter = [ "a|/dev/disk/by-id/dm-uuid-mpath-.*|", "r|.*|" ] | |
| 
       これらは、通常パスデバイスを指すリンクです。マルチパスデバイスは、udevリンクの優先度が高いため、これらを引き継ぎました( | 
kpartxツールで作成されたマルチパスマップ上のパーティションの場合、親デバイス名またはWWIDとパーティション番号から派生した同様のシンボリックリンクがあります。
   
/dev/disk/by-id/dm-name-mpatha-part2 -> ../../dm-5 /dev/disk/by-id/dm-uuid-part2-mpath-3600a098000aad1e300000b4b5a275d45 -> ../../dm-5 /dev/disk/by-id/scsi-3600a098000aad1e300000b4b5a275d45-part2 -> ../../dm-5 /dev/disk/by-id/wwn-0x600a098000aad1e300000b4b5a275d45-part2 -> ../../dm-5 /dev/disk/by-partuuid/1c2f70e0-fb91-49f5-8260-38eacaf7992b -> ../../dm-5 /dev/disk/by-uuid/f67c49e9-3cf2-4bb7-8991-63568cb840a4 -> ../../dm-5 /dev/mapper/mpatha-part2 -> ../dm-5
    パーティションにはby-uuidリンクもあることが多く、デバイス自体を参照するのではなく、デバイスに含まれているファイルシステムを参照します。多くの場合、これらのリンクが推奨されます。これらは、ファイルシステムが別のデバイスまたはパーティションにコピーされても不変です。
   
dracutは、initramfsを構築するとき、initramfsのデバイスへのハードコード化された参照を作成します。デフォルトでは、/dev/mapper/$MAP_NAME参照を使用します。これらのハードコード化された参照は、initramfsで使用されているマップ名がinitramfs構築中に使用した名前と一致しない場合、起動中には見つからず、起動エラーになります。通常、この状況にはなりません。その理由は、dracutがすべてのマルチパス設定ファイルをinitramfsに追加するためです。ただし、initramfsが異なる環境(レスキューシステム、またはオフライン更新中など)から構築されている場合、この問題が発生する可能性があります。この起動エラーが発生しないようにするには、18.7.4.2項 「initramfsの永続的なデバイス名」で説明されているように、dracutのpersistent_policy設定を変更します。
    
18.13 その他のオプション #
   このセクションでは、これまでに説明しなかった有用ないくつかのmultipath.confオプションを一覧表示します。完全なリストについては、multipath.conf(5)を参照してください。
  
- verbosity
- multipathと- multipathd両方のログ詳細度を制御します。コマンドラインオプション- -vを使用すると、両方のコマンドについてこの設定が上書きされます。この値は、0 (致命的なエラーのみ)と4 (詳細なログ記録)の間で設定できます。デフォルトは2です。
- uid_attrs
- このオプションを使用すると、udevイベントの処理を最適化できます(いわゆる「ueventマージ」)。これは、数百のパスデバイスが同時に障害を起こしたり同時に再検出されたりする環境で有用です。パスのWWIDが変更されないようにするためには(18.12.1項 「WWIDとデバイスの識別」を参照)、この値を正確に次のように設定する必要があります。 - defaults { uid_attrs "sd:ID_SERIAL dasd:ID_UID nvme:ID_WWN" }
- skip_kpartx
- マルチパスデバイスで - yesに設定する場合(デフォルトは- no)、指定したデバイスの上にパーティションデバイスを作成しないでください(18.7.3項 「マルチパスデバイスのパーティションと- kpartx」を参照)。仮想マシンによって使用されるマルチパスデバイスで有用です。以前のSUSE Linux Enterprise Serverリリースでは、同じ効果をパラメータ「- features 1 no_partitions」を使用して実現していました。
- max_sectors_kb
- マルチパスマップのすべてのパスデバイスに対して1つのI/O要求で送信される最大データ量を制限します。 
- ghost_delay
- アクティブ/パッシブアレイで、アクティブパスの前にパッシブパス(「ゴースト」状態)が検出される場合があります。マップが直ちにアクティブ化され、I/Oが送信された場合、これにより、負荷の大きいパスのアクティブ化が実行される可能性があります。このパラメータは、マップをアクティブにする前に、マップのアクティブパスが表示されるまでに待機する時間(秒単位)を指定します。デフォルトは - no(ゴースト遅延なし)です。
- recheck_wwid
- yesに設定されている場合(デフォルトは- no)、障害発生後に復元されたパスのWWIDをダブルチェックし、WWIDが変更された場合はパスを削除します。これはデータの破損を防ぐための安全対策です。
- enable_foreign
- multipath-toolsは、デバイスマッパーのマルチパス以外のマルチパス処理バックエンド用にプラグインAPIを提供します。このAPIは、- multipath -llのような標準コマンドを使用して、マルチパストポロジに関する情報の監視および表示をサポートしています。トポロジの変更はサポートされていません。- enable_foreignの値は、外部のライブラリ名と照合するための正規表現です。デフォルト値は「- NONE」です。- SUSE Linux Enterprise Serverには、ネイティブNVMeマルチパス処理のサポートを追加する - nvmeプラグインが備わっています(18.2.1項 「マルチパスの実装: デバイスマッパーとNVMe」を参照)。- nvmeプラグインを有効にするには、次のように設定します。- defaults { enable_foreign nvme }
18.13.1 信頼性の低い(「ぎりぎりの」)パスデバイスの処理 #
    Fabricの状態が不安定だと、パスデバイスの動作が不安定になる可能性があります。I/Oエラーの発生、回復、障害の再発が頻繁に起こります。このようなパスデバイスは、「ぎりぎりの」または「不安定な」パスと呼ばれることもあります。このセクションでは、この問題に対処するためにmultipath-toolsが提供するオプションをまとめています。
   
     パスデバイスで、最初の失敗が発生してからmarginal_path_double_failed_timeが経過する前に、2回目の失敗(良好→不良の移行)が発生した場合、multipathdは、監視期間marginal_path_err_sample_timeの間、1秒あたり10回の要求の速度でパスの監視を開始します。監視期間中のエラー率がmarginal_path_err_rate_thresholdを超えると、このパスはぎりぎりに分類されます。marginal_path_err_recheck_gap_time経過後、パスは、再び通常状態に移行します。
    
     このアルゴリズムは、4つの数値パラメータmarginal_path_がすべて正の値に設定されていて、marginal_pathgroupsがfpinに設定されていない場合に使用されます。これは、SUSE Linux Enterprise Server 15 SP1およびSUSE Linux Enterprise Server 12 SP5以降で利用できます。
    
- marginal_path_double_failed_time
- パス監視をトリガする2回のパスの失敗間の最大時間(秒単位)。 
- marginal_path_err_sample_time
- パス監視間隔の長さ(秒単位)。 
- marginal_path_err_rate_threshold
- 最小エラー率(I/O 1000回あたり)。 
- marginal_path_err_recheck_gap_time
- パスをぎりぎりの状態に保つ時間(秒単位)。 
- marginal_pathgroups
- このオプションは、SLES 15SP3以降使用できます。次の値を使用できます。 - off
- ぎりぎりの状態は - multipathdによって決まります(上記を参照)。ぎりぎりのパスは、ぎりぎりの状態である限り、復帰しません。これはデフォルトであり、- marginal_pathgroupsオプションが利用できなかったSUSE Linux Enterprise ServerのSP3より前のリリースにおける動作です。
- on
- offオプションと似ていますが、ぎりぎりのパスを失敗状態のままにするのではなく、別のパスグループに移動します。このグループは、他のすべてのパスグループより低い優先度を割り当てられます(18.10項 「パスのグループ化と優先度の設定」を参照)。このパスグループのパスは、他のパスグループのすべてのパスが失敗した場合のみI/Oに使用されます。
- fpin
- この設定は、SLES 15SP4以降使用できます。ぎりぎりのパス状態は、FPINイベントから導出されます(以下を参照)。ぎりぎりのパスは、 - offの説明と同様に別のパスグループに移動します。この設定では、ホスト側の追加設定は不要です。これは、FPINをサポートしているファイバチャネルファブリックでぎりぎりのパスを処理する場合に推奨される方法です。注記: FPINベースのぎりぎりのパス検出- multipathdは、FPIN (Fibre Channel Performance Impact Notifications: ファイバチャネルのパフォーマンスへの影響通知)をリスンします。パスデバイスに対してFPIN-LI (リンクの完全性)イベントを受信すると、パスは、ぎりぎりの状態になります。この状態は、RSCNまたはリンクアップイベントが、デバイスの接続先のファイバチャネルアダプタで受信されるまで継続します。
 
    パラメータsan_path_err_threshold、san_path_err_forget_rate、およびsan_path_err_recovery timeを使用したより単純なアルゴリズムも利用可能で、SUSE Linux Enterprise Server 15 (GA)で推奨されています。multipath.conf(5)の「不安定なパスの検出」セクションを参照してください。
   
18.14 ベストプラクティス #
18.14.1 設定のベストプラクティス #
設定ディレクティブの数が多いと最初は気後れします。通常、クラスタ環境で作業していない限り、空の設定で良い結果を得ることができます。
ここでは、スタンドアロンサーバの一般的な推奨事項を紹介します。これらは必須ではありません。背景情報については、前の各セクションの該当するパラメータのマニュアルを参照してください。
defaults {
    deferred_remove      yes
    find_multipaths      smart
    enable_foreign       nvme
    marginal_pathgroups  fpin    # 15.4 only, if supported by fabric
}
devices {
    # A catch-all device entry.
    device {
        vendor                .*
        product               .*
        dev_loss_tmo          infinity
        no_path_retry         60            # 5 minutes
        path_grouping_policy  group_by_prio
        path_selector         "historical-service-time 0"
        reservation_key       file          # if using SCSI persistent reservations
    }
    # Follow up with specific device entries below, they will take precedence.
}
/etc/multipath.confファイルを変更した後、18.8.4項 「multipath.confの変更の適用」の説明に従って設定を適用します。
   
18.14.2 マルチパスI/Oステータスの解釈 #
    マルチパスサブシステムの概要を簡単に確認するには、multipath
    -llまたはmultipathd show topologyを使用します。これらのコマンドの出力の形式は同じです。前のコマンドはカーネルの状態を読み取り、後のコマンドはマルチパスデーモンのステータスを出力します。通常、両方の状態は同じです。出力の一例を次に示します。
   
>sudomultipathd show topology mpatha1 (3600a098000aad1e300000b4b5a275d452) dm-03 NETAPP,INF-01-004 size=64G features='3 queue_if_no_path pg_init_retries 50'5 hwhandler='1 alua'6 wp=rw7 |-+- 8policy='historical-service-time 2'9 prio=5010 status=active11 | |-12 3:0:0:113 sdb 8:1614 active15 ready16 running17 | `- 4:0:0:1 sdf 8:80 active ready running `-+- policy='historical-service-time 2' prio=10 status=enabled `- 4:0:1:1 sdj 8:144 active ready running
| マップ名。 | |
| マップのWWID (マップ名と違う場合)。 | |
| マップデバイスのデバイスノード名。 | |
| ベンダと製品名。 | |
| パスグループ。パスグループの下のインデントされた行には、このグループに属しているパスデバイスがリストされます。 | |
| パスグループで使用されるパスセレクタアルゴリズム。「2」は無視できます。 | |
| パスグループの優先度。 | |
| 
       パスグループのステータス( | |
| パスデバイス。 | |
| デバイスのバスID(ここでは、SCSI Host:Bus:Target:Lun ID)。 | |
| デバイスノード名とパスデバイスのメジャー/マイナー番号。 | |
| 
       パスのカーネルデバイスマッパー状態( | |
| マルチパスのパスデバイスの状態(以下を参照)。 | |
| 
       カーネルのパスデバイスの状態。これはデバイスタイプ固有の値です。SCSIでは、これは | 
マルチパスのパスデバイスの状態を次に示します。
| 
 | パスは正常で、稼働しています | 
| 
 | アクティブ/パッシブアレイのパッシブパス | 
| 
 | パスがダウンしているか、到達できません | 
| 
 | チェッカーコマンドがタイムアウトしています | 
| 
 | パスチェッカーコマンドの完了を待っています | 
| 
 | 「フラッピング」を回避するためにパスの再インスタンス化が遅延しています | 
| 
 | 信頼性の低いパス(emcパスチェッカーのみ) | 
18.14.3 マルチパスデバイスでのLVM2の使用 #
    LVM2には、マルチパスデバイスを検出するためのサポートが組み込まれています。これは/etc/lvm/lvm.confでデフォルトでアクティブになっています。
   
multipath_component_detection=1
これは、デバイスのプロパティに関する情報もudevから取得するようにLVM2が設定されている場合のみ安定して動作します。
external_device_info_source="udev"
これは、SUSE Linux Enterprise 15 SP4ではデフォルトですが、以前のリリースでは違います。マルチパスデバイスを除くすべてのデバイスを無視するLVM2のフィルタ式を作成することも可能です(通常は不要です)。18.12.4項 「マルチパスマップの参照」を参照してください。
18.14.4 停止したI/Oの解決 #
すべてのパスで同時に障害が発生し、I/Oがキューに格納される場合、アプリケーションが長時間停止する可能性があります。これを解決するために、次の手順を使用できます。
- 端末のプロンプトで、次のコマンドを入力します。 - >- sudomultipathd disablequeueing map MAPNAME- MAPNAMEをデバイスの正しいWWIDまたはマップされたエイリアス名で置き換えます。- このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。ファイルシステムはI/Oエラーを監視し、読み込み専用モードに切り替わります。 
- 次のコマンドを入力して、キューを再びアクティブにします。 - >- sudomultipathd restorequeueing MAPNAME
18.14.5 マルチパスデバイスのMD RAID #
    マルチパス処理の上部でMD RAIDアレイは、システムのudevルールによって自動的にセットアップされます。/etc/mdadm.confの特別な設定は不要です。
   
18.14.6 新規デバイスのスキャン(再起動なし) #
    ご使用のシステムがマルチパス処理用に設定されており、SANにストレージを追加する必要がある場合は、rescan-scsi-bus.shスクリプトを使用して新しいデバイスをスキャンすることができます。コマンドの一般的な構文は次の例に従います。
   
>sudorescan-scsi-bus.sh [-a] [-r] --hosts=2-3,5
各オプションには次のような意味があります。
- -a
- このオプションを使用すると、すべてのSCSIターゲットがスキャンされます。使用しないと、既存のターゲットのみが新しいLUNに対してスキャンされます。 
- -r
- このオプションを使用すると、ストレージ側で削除されたデバイスを削除できます。 
- --hosts
- このオプションを使用すると、スキャンするホストバスアダプタのリストが指定されます(デフォルトはすべてスキャン)。 
    その他のオプションのヘルプを表示するには、rescan-scsi-bus.sh --helpを実行します。
   
multipathdが実行中で、新しいSANデバイスが検出される場合、18.11項 「マルチパス処理のためのデバイスの選択」で説明されている設定に従って、マルチパスマップとして自動的にセットアップされるはずです。
   
     EMC PowerPath環境では、SCSIバスをスキャンする場合に、オペレーティングシステムに付属するrescan-scsi-bus.shユーティリティまたはHBAベンダスクリプトを使用しないでください。ファイルシステムが破損する可能性を避けるため、EMCでは、Linux用EMC PowerPathのベンダマニュアルに記載されている手順に従うよう求めています。
    
18.15 MPIOのトラブルシューティング #
マルチパスを含むシステムでシステムが緊急モードになり、見つからないデバイスに関するメッセージが出力される場合、その理由はほとんどの場合、次のいずれかです。
- マルチパスデバイス選択の設定に整合性がない 
- 存在しないデバイス参照を使用している 
18.15.1 デバイス選択の問題の理解 #
    ブロックデバイスは、マルチパスマップの一部にするか、または直接使用(ファイルシステムとしてマウント、スワップとして使用、LVM物理モジュール、その他)することができます。デバイスがすでにマウントされている場合、これをmultipathdでマルチパスマップの一部にしようとすると失敗し、「デバイスまたはリソースがビジーです」(Device or resource busy)というエラーが表示されます。逆に、すでにマルチパスマップの一部になっているデバイスをsystemdがマウントしようとすると同じエラーが発生します。
   
    起動中のストレージデバイスのアクティブ化は、systemd、udev、multipathdおよび他のいくつかのツール間の複雑なやりとりで処理されます。udevルールが中心的な役割を果たします。これらは、デバイスの使用方法を他のサブシステムに指示するデバイスのプロパティを設定します。マルチパス関連のudevルールは、マルチパス処理用に選択されたデバイスに対して次のプロパティを設定します。
   
SYSTEMD_READY=0 DM_MULTIPATH_DEVICE_PATH=1
パーティションデバイスは、これらのプロパティをその親から継承します。
    これらのプロパティが正しく設定されていない場合、一部のツールがこれらのプロパティに従っていない場合、またはプロパティが設定されるのが遅すぎる場合、multipathdと他のサブシステムとの間で競合状態が発生する可能性があります。競合に勝ち残れるのは1つだけです。それ以外は、「デバイスまたはリソースがビジーです」(Device or resource busy)というエラーが表示されます。
   
このコンテキストにおける1つの問題は、LVM2スイートのツールがデフォルトではudevプロパティを評価しないことです。これらは、デバイスがマルチパスコンポーネントかどうかを判定する独自のロジックを使用しますが、このロジックは、システムの残りの部分のロジックと一致しない場合があります。この回避方法は、18.14.3項 「マルチパスデバイスでのLVM2の使用」で説明されています。
     ルートデバイスがマルチパス処理されておらず、マルチパスから除外されているデバイスがない、マルチパス処理を備えたシステムを考えてみます(18.3.2.2項 「ローカルディスクのルートファイルシステム」のinitramfsでマルチパスを無効にするを参照)。このルートファイルシステムはinitramfsにマウントされています。systemdはルートファイルシステムに切り換わり、multipathdが起動します。デバイスがすでにマウントされているため、multipathdは、そのデバイスのマルチパスマップをセットアップできません。ルートデバイスはblacklistで設定されていないため、マルチパスデバイスとみなされ、このデバイス用にSYSTEMD_READY=0が設定されます。
    
     起動プロセスの後半で、システムは、/varや/homeなどの追加のファイルシステムをマウントしようとします。通常、これらのファイルシステムはルートファイルシステムと同じデバイス上にあり、デフォルトではルートファイルシステム自体のBTRFSサブボリュームとして配置されます。ただし、systemdは、SYSTEMD_READY=0のためにこれらをマウントできません。デッドロック状態:dm-multipathデバイスを作成できず、systemdの基礎となるデバイスはブロックされます。追加のファイルシステムをマウントできず、起動に失敗します。
    
この問題の解決策はすでに存在します。multipathdはこの状況を検出し、デバイスをsystemdにリリースします。これにより、ファイルシステムのマウントを続行できます。ただし、一般的な問題を理解することが重要です。より分かりにくい形で発生する可能性もあるからです。
    
18.15.2 デバイス参照の問題の理解 #
    デバイス参照の問題の例は18.7.4.2項 「initramfsの永続的なデバイス名」で示しました。通常、1つのデバイスノードを指すシンボリックリンクは複数存在します(18.12.4項 「マルチパスマップの参照」を参照)。ただし、これらのリンクは常に存在するわけではありません。udevは、現在のudevルールに従ってリンクを作成します。たとえば、マルチパス処理をオフにすると、/dev/mapper/の下にあるマルチパスデバイス用のシンボリックリンクはなくなります。したがって、/dev/mapper/デバイスへの参照は失敗します。
   
    このような参照はさまざまな場所に(特に/etc/fstabおよび/etc/crypttab、initramfs、またはカーネルコマンドラインにも)表示されます。
   
    この問題を回避する最も安全な方法は、起動と起動の間で持続しない種類のデバイス参照またはシステム設定に依存する種類のデバイス参照の使用を避けることです。一般的に、ファイルシステム(およびスワップ領域のような類似のエンティティ)は、含む側のデバイスではなく、ファイルシステム自体のプロパティ(UUIDやラベルなど)によって参照することをお勧めします。このような参照を使用できず、たとえば、/etc/crypttabで、デバイス参照が必要な場合は、オプションを注意深く評価する必要があります。たとえば、18.12.4項 「マルチパスマップの参照」では、最良のオプションは/dev/disk/by-id/wwn-リンクかもしれません。これはmultipath=offでも機能するからです。
   
18.15.3 緊急モードでのトラブルシューティング手順 #
微妙に異なるエラー状況が多数あるため、ステップバイステップのリカバリガイドを提供することは不可能です。ただし、これまでのサブセクションから背景知識を得ていれば、マルチパス処理の問題が原因でシステムが緊急モードになった場合、その問題を理解できるはずです。デバッグを始める前に、次の質問を確認してください。
- マルチパスサービスは有効になっていますか。 
- initramfsにマルチパスdracutモジュールが含まれていますか。 
- ルートデバイスがマルチパスデバイスとして設定されていますか。設定されていない場合、18.11.1項 「 - multipath.confの- blacklistセクション」で説明されているように、ルートデバイスはマルチパスから正しく除外されていますか。または、initramfsにマルチパスモジュールがないことに依存していますか(18.3.2.2項 「ローカルディスクのルートファイルシステム」を参照)。
- システムが緊急モードになったのは、実際のルートファイルシステムに切り替わる前ですか、または切り替わった後ですか。 
最後の質問の答えがわからない場合、サンプルのdracut緊急プロンプトを次に示します。これは、ルートを切り替える前に出力されます。
Generating "/run/initramfs/rdsosreport.txt" Entering emergency mode. Exit the shell to continue. Type "journalctl" to view system logs. You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot after mounting them and attach it to a bug report. Give root password for maintenance (or press Control-D to continue):
rdsosreport.txtが記載されているということは、システムがまだinitramfsから実行されていることを明確に示しています。それでも不明な場合は、ログインして/etc/initrd-releaseファイルが存在するかチェックします。このファイルは、initramfs環境にのみ存在します。
   
    ルートを切り替えた後に緊急モードになった場合、緊急プロンプトは同じように見えますが、rdsosreport.txtは記載されません。
   
Timed out waiting for device dev-disk-by\x2duuid-c4a...cfef77d.device. [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):
- 障害の発生したsystemdユニットとジャーナルを調べて、障害が発生した原因を探ります。 - #systemctl --failed- #journalctl -b -o short-monotonic- ジャーナルを確認して、最初に障害が発生したユニットを特定します。最初の障害を見つけたら、その時点の前後のメッセージを注意深く調べます。警告またはその他の疑わしいメッセージはありますか。 - ルートスイッチ(「 - Switching root.」)、およびSCSIデバイス、デバイスマッパー、マルチパスおよびLVM2に関するメッセージに注意します。デバイスおよびファイルシステムに関する- systemdメッセージ(「- Found device...」、「- Mounting...」、「- Mounted...」)を探します。
- 既存のデバイス(低レベルのデバイスとデバイスマッパーデバイスの両方)を調べます(以下のコマンドの一部はinitramfsでは使用できない場合があることに注意してください)。 - #cat /proc/partitions- #ls -l /sys/class/block- #ls -l /dev/disk/by-id/* /dev/mapper/*- #dmsetup ls --tree- #lsblk- #lsscsi- 上記のコマンドの出力から、低レベルのデバイスが正常に検出されたかどうか、マルチパスマップおよびマルチパスパーティションがセットアップされたかどうかがわかるはずです。 
- デバイスマッパーのマルチパスセットアップが予期どおりでない場合、udevプロパティ(特に、 - SYSTEMD_READY)を調べます(上記を参照)。- #udevadm info -e
- 前の手順で予期しなかったudevプロパティが表示された場合、udevルールの処理中に不具合が発生した可能性があります。その他のプロパティ(特に、デバイスの識別に使用されたプロパティ)を確認します(18.12.1項 「WWIDとデバイスの識別」を参照)。udevプロパティが正しい場合、ジャーナルで - multipathdのメッセージを再度確認します。「- Device or resource busy」メッセージを探します。
- システムがデバイスのマウントまたはアクティブ化に失敗した場合は、このデバイスを手動でアクティブ化してみると功を奏すことがよくあります。 - #mount /var- #swapon -a- #vgchange -a y- ほとんどの場合、手動のアクティブ化は成功し、(通常は緊急シェルからログアウトするだけで)システム起動を続行し、起動したシステムでさらに状況を調べることができます。 - 手動のアクティブ化に失敗すると、多くの場合、不具合のヒントを示すエラーメッセージが表示されます。詳細度を上げてコマンドを再試行することもできます。 
- この時点で、問題は何であるかがある程度わかるはずです(そうでない場合は、SUSEサポートに連絡して、上記の質問のほとんどに回答できるように準備しておいてください)。 - いくつかのシェルコマンドで状況を修正し、緊急シェルを終了し、正常に起動できるはずです。同じ問題が今後発生しないよう、引き続き設定を調整する必要があります。 - または、レスキューシステムを起動し、デバイスを手動でセットアップして、 - chrootで実際のルートファイルシステムに変更し、前の手順で得た洞察に基づいて問題の修正を試みる必要があります。この状況では、ルートファイルシステムのストレージスタックが通常と異なっている場合があることに注意してください。セットアップに応じて、新しいinitramfsを構築するときにdracutモジュールの強制追加または省略が必要になる場合があります。18.7.4.1項 「initramfsでのマルチパス処理の有効化または無効化」も参照してください。
- 問題の発生頻度が高いまたは起動のたびに問題が発生する場合、障害の詳細情報を得るために、詳細度を上げて起動を試します。次のカーネルパラメータ、またはそれらの組み合わせが役立つことがよくあります。 - udev.log-priority=debug1 systemd.log_level=debug2 scsi_mod.scsi_logging_level=0204003 rd.debug4 - また、特定のドライバのロギングを有効にし、シリアルコンソールを設定して起動中の出力をキャプチャすることが役立つ場合があります。 
18.15.4 技術情報ドキュメント #
SUSE Linux Enterprise ServerのマルチパスI/Oの問題のトラブルシューティングの詳細については、SUSEナレッジベースにある、次のTID (技術情報ドキュメント)を参照してください。
