Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 SUSE Linux Enterprise Server 11 SP4

7 デバイスのマルチパスI/Oの管理

このセクションでは、サーバ/ブロックストレージデバイス間のマルチパスのフェールオーバーおよびパスの負荷分散を管理する方法について説明します。

7.1 マルチパスI/Oの理解

マルチパス処理とは、サーバのホストバスアダプタおよびデバイスのストレージコントローラ間で、複数の物理パスをまたいで、同じ物理または論理ブロックストレージデバイスと通信するサーバの機能です。これは、通常、FC (Fibre Channel)環境またはiSCSI SAN環境で行われます。複数のチャネルが使用可能な際には、内蔵ストレージとのマルチ接続も可能です。

Linuxマルチ処理は、接続に耐障害性を与え、アクティブな接続全体.に負荷を分散します。マルチパス処理が設定および実行されていると、自動的に、デバイス接続の障害が特定され、I/Oが代替の接続に再経路指定されます。

接続に関しては、多くのトラブルが欠陥のあるアダプタ、ケーブル、またはコントローラが原因で発生します。デバイスにマルチパスI/Oを設定すると、マルチパスドライバがデバイス間のアクティブな接続を監視します。マルチパスドライバは、アクティブなパスのI/Oエラーを検出すると、トラフィックをデバイスの指定セカンダリパスにフェールオーバーします。該当するパスが正常に戻ると、そのパスに制御を戻すことができます。

7.2 マルチパス処理のプラニング

7.2.1 マルチパス処理のガイドライン

マルチパスI/Oソリューションのプラニング時には、このセクションのガイドラインに従ってください。

7.2.1.1 前提条件

  • マルチパス処理は、デバイスレベルで管理されます。

  • マルチパス処理対象のデバイスに使用するストレージアレイで、マルチパス処理がサポートされている必要があります。詳細については、7.2.11項 「マルチパス処理用にサポートされているストレージアレイ」を参照してください。

  • サーバのホストバスアダプタおよびブロックストレージデバイスのバスコントローラ間に複数の物理パスが存在している場合のみ、マルチパス処理を設定する必要があります。論理デバイスのマルチパスは、サーバの見地から設定します。

7.2.1.2 ベンダ提供のマルチパスソリューション

一部のストレージアレイについては、アレイの物理および論理デバイスのマルチパス処理を管理するための独自のマルチパス処理ソフトウェアがベンダから提供されます。この場合は、ベンダの指示に従って、それらのデバイスのマルチ処理を設定してください。

7.2.1.3 ディスク管理タスク

マルチパスをもつ物理デバイスまたは論理デバイスのマルチパス処理を設定する前に、まず、次のようにディスク管理タスクを実行してください。

  • サードパーティーツールで、物理ディスクを小さな論理ディスクに切り分けます。

  • サードパーティーツールで、物理ディスクまたは論理ディスクをパーティションに分割します。稼働中のシステムでパーティションを変更した場合は、DM-MP(Device Mapper Multipath: デバイスマッパーマルチパス)モジュールによるそれら変更の自動的な検出や反映は行われません。DM-MPIOは再初期化する必要があり、それには、通常、再起動が必要です。

  • サードパーティーのSANアレイ管理ツールを使用して、ハードウェアRAIDデバイスを作成および設定します。

  • サードパーティーのSANアレイ管理ツールを使用して、LUNなどの論理デバイスを作成します。所定のアレイにサポートされている論理デバイスタイプは、アレイベンダによって異なります。

7.2.1.4 ソフトウェアRAID

LinuxのソフトウェアRAIDの管理ソフトウェアは、マルチパス処理の上で実行されます。複数のI/Oパスを持ち、ソフトウェアRAIDで使用予定の各デバイスは、まず、マルチパス処理用に設定してから、ソフトウェアRAIDデバイスとして作成する必要があります。マルチパスデバイスは自動検出できません。ソフトウェアRAIDは、その下で実行されているマルチパス処理管理を認識しません。

既存のソフトウェアRAID用のマルチパス処理の設定については、7.13項 「既存ソフトウェアRAID用マルチパスI/Oの設定」を参照してください。

7.2.1.5 高可用性ソリューション

ストレージリソースのクラスタリング用の高可用性ソリューションは、各ノード上でマルチパス処理サービスをベースとして実行されます。各ノード上の/etc/multipath.confファイル内の構成設定が、クラスタ全体で同一であるようにしてください。

以下を行って、マルチパスデバイスがすべてのデバイス間で同じ名前であるようにしてください。

  • UUIDと別名を使用して、マルチパスデバイスの名前が、クラスタ内のすべてのノードで同一となるようにします。別名は、すべてのノードにわたって一意である必要があります。/etc/multipath.conf ファイルを、ノードからクラスタ内の他のすべてのノードの/etc/ディレクトリにコピーします。

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

  • 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パスにコピーします。

LAN上のデバイスをミラーリングするDRBD (Distributed Replicated Block Device)高可用性ソリューションは、マルチパス処理をベースとして実行されます。複数のI/Oパスを持ち、DRDBソリューションで使用予定のデバイスごとに、マルチパス処理用デバイスを設定してから、DRBDを設定する必要があります。

7.2.1.6 ボリュームマネージャ

LVM2やクラスタ化したLVM2などのボリュームマネージャは、マルチパス処理をベースとして実行されます。LVM2またはcLVM2を使用してセグメントマネージャおよびそのファイルシステムを作成するには、その前に、デバイスのマルチパス処理を設定する必要があります。詳細については、7.2.4項 「マルチパスデバイスでのLVM2の使用」を参照してください。

7.2.1.7 仮想化環境

仮想化環境でマルチパス処理を使用する場合、マルチパス処理は、ホストサーバ環境で制御されます。デバイスのマルチパス処理を設定してから、デバイスを仮想ゲストマシンに割り当ててください。

7.2.2 multipath-tools-0.4.9におけるPRIO設定

SLES 11 SP2では、マルチパスツールを0.4.8から0.4.9にアップグレードしています。PRIO構文が一部変更されているため、/etc/multipath.confファイルを適宜マニュアルで修正して、新たな構文に準拠するようにする必要があります。

/etc/multipath.confファイル内のprioキーワードが、multipath-tools-0.4.9では変更されています。prio行で、Prioritizerが指定されます。Prioritizerが引数を必要とする場合、その引数は2行目のprio_argsキーワードで指定します。これまでは、Prioritizerとその引数は、prio行に含まれていました。

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

7.2.3 マルチパスデバイスでのWWID、ユーザフレンドリ名、および別名の使用

マルチパスデバイスは、そのWWID、ユーザフレンドリ名、またはそれに割り当てた別名で一意に識別されます。/dev/sdnおよび/dev/dm-nの形式のデバイスノード名は、再起動の際に変わる可能性があり、毎回異なるデバイスに割り当てられることになります。デバイスのWWID、ユーザフレンドリ名、および別名は、再起動の際にも変わることなく、デバイスの識別には望ましい方法です。

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-のデバイス名は、そのデバイスへの物理的パスを表します。

重要
重要

マルチパスがマップされたデバイスを使用する場合は、dm-uuid*名または別名を/dev/disk/by-idディレクトリ内で指定し、デバイスの固定パスインスタンスは指定しないようにします。

/etc/multipath.confファイル内でデバイスの別名を定義する場合は、必ず各デバイスのWWID (3600508e0000000009e6baa6f609e7908など)を使用し、そのWWNは使用しないようにしてください。WWNは、デバイスIDの最初の文字を0xで置き換えます(0x600508e0000000009e6baa6f609e7908など)。

マルチパスデバイスでのユーザフレンドリ名および別名の使用の詳細については、7.9項 「ユーザフレンドリ名または別名の設定」を参照してください。

7.2.4 マルチパスデバイスでのLVM2の使用

lvm.conf用の設定ファイルが、固定のパス名ではなく、必ずマルチパスデバイス名をポイントするようにします。これは、boot.multipathが有効になっていて、boot.lvm以前にロードされていれば、自動的に行われます。

7.2.4.1 /etc/lvm/lvm.confファイルでのマルチパスデバイスフィルタの追加

LVM2は、デフォルトでは、マルチパスデバイスを認識しません。LVM2が物理ボリュームとしてマルチパスデバイスを認識するようにするには、/etc/lvm/lvm.confを修正して、マルチパスのI/O階層でマルチパスデバイスをスキャンするようにする必要があります。

マルチパスフィルタを追加すると、LVMは、SAN (/dev/sd*)への個別パスを表す生デバイスノードへの物理的パスをスキャンして使用することができません。マルチパス処理の設定後、必ず、LVMが、デバイス(/dev/disk/by-id/dm-uuid-.*-mpath-)のデバイスマッパー名だけをスキャンするようにフィルタパスを指定します。

/etc/lvm/lvm.confを変更してマルチパスを使用するには次の手順に従います。

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

    /etc/lvm/lvm.confが存在しない場合は、次のコマンドを端末コンソールのプロンプトで入力することによって、現在のLVM設定に基づいた設定ファイルを作成できます。

    lvm dumpconfig > /etc/lvm/lvm.conf
  2. /etc/lvm/lvm.confにあるfilterエントリとtypesエントリを、次のように変更します。

    filter = [ "a|/dev/disk/by-id/.*|", "r|.*|" ]
    types = [ "device-mapper", 1 ]

    このように設定すると、LVM2はby-idパスだけをスキャンし、それ以外のすべてのパスを拒否します。

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

    filter = [ "a|/dev/disk/by-id/dm-uuid-.*-mpath-.*|", "r|.*|" ]

    デバイスマッパー名に対して生ディスクとパーティションの両方を許容する場合は、mpathの前にハイフン(-)を付けずに、次のように指定します。

    filter = [ "a|/dev/disk/by-id/dm-uuid-.*mpath-.*|", "r|.*|" ]
  3. 非マルチパスデバイスでもLVM2を使用する場合は、filterエントリとtypesエントリに必要な調整を加えて、ご使用の設定に合わせます。さもないと、lvm.confファイルをマルチパス向けに変更後、pvscanで他のLVMデバイスが認識できなくなります。

    LVMを使用して設定されたデバイスだけをLVMキャッシュに含めるので、filterでどの非マルチパスデバイスを含めるかについて詳細に指定できる必要があります。

    たとえば、ローカルディスクが/dev/sda、すべてのSANデバイスが/dev/sdbとそれ以上の場合、次のようにfilterでローカルパスとマルチパスを指定します。

    filter = [ "a|/dev/sda.*|", "a|/dev/disk/by-id/.*|", "r|.*|" ]
    types = [ "device-mapper", 253 ]
  4. ファイルを保存します。

  5. dm-multipathを/etc/sysconfig/kernel:INITRD_MODULESに追加します。

  6. 新しいinitrdを作成して、デバイスマッパーマルチパスのサービスが変更後の設定でロードされるようにします。mkinitrdの実行が必要なのは、ルート(/)デバイスまたはその一部(/var/etc/logなど)がSAN上にあり、マルチパスのブートが必要な場合のみです。

    端末コンソールのプロンプトで、次のように入力します。

    mkinitrd -f multipath
  7. サーバを再起動して、変更内容を適用します。

7.2.4.2 boot.multipathの有効化

マルチパスのマップが正しく構築されるよう、マルチパスは、LVMの前にロードされる必要があります。 LVMの後にマルチパスをロードすると、マルチパスデバイスに対するデバイスマップが不完全になる可能性があります。なぜなら、LVMによりデバイスがロックされ、 MPIOが正しくマップを作成できないからです。

システムデバイスがMPIOやLVMを使用しないローカルなデバイスである場合は、boot.multipathboot.lvmの両方を無効にできます。サーバの起動後、LVMを起動する前にマニュアルでマルチパスを起動し、pvscanコマンドを実行してLVMオブジェクトを認識することができます。

7.2.4.3 LVMデバイスに対するMPIOマッピングのトラブルシューティング

LVMプロセスを開始するには、タイミングが重要です。MPIOのマッピングを行う前にLVMを起動した場合、LVMは、そのマルチパスではなくデバイスに対する固定パスを使用する可能性があります。デバイスは機能するため、その固定パスが失敗となるまで、デバイスのMPIOマップが不完全であることに気が付かないかもしれません。この問題は、boot.multipathを有効にして、7.2.4.1項 「/etc/lvm/lvm.confファイルでのマルチパスデバイスフィルタの追加」に記載する指示に従うことで、防ぐことができます。

マッピングの問題に関するトラブルシューティングを行うには、dmsetupを使用して、それぞれのマルチパスデバイスに、予定数のパスが存在するかどうかチェックすることができます。rootユーザとして、コマンドプロンプトに次のように入力します。

dmsetup ls --tree

以下のサンプルの応答では、最初のデバイスに4つのパスがあります。2番目のデバイスでは、パスは1つだけです。3番目のデバイスには、2つのパスがあります。アクティブなパスとパッシブなパスの区別は、このツールでは報告されません。

  vg910-lv00 (253:23)
    └─ 360a980006465576657346d4b6c593362 (253:10)
      |- (65:96)
      |- (8:128)
      |- (8:240)
      └─ (8:16)
  vg00-lv08 (253:9)
    └─ (8:3)
  system_vg-data_lv (253:1)
    └─36006016088d014007e0d0d2213ecdf11 (253:0)
      ├─ (8:32)
      └─ (8:48)

不完全なマッピングの場合は通常、返されるパスの数が非常に少なく、メジャー番号の253が表示されません。たとえば、3番目のデバイスでマッピングが不完全な場合を、下に示します。

  system_vg-data_lv (8:31)
     └─ (8:32)

7.2.5 マルチパスデバイスでのmdadmの使用

mdadmツールでは、デバイスのノードパスではなく、IDでデバイスにアクセスする必要があります。したがって、/etc/mdadm.confファイル内のDEVICEを次のように設定して、マルチパスの設定後に、デバイスマッパー名のみがスキャンされるようにする必要があります。

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

ユーザフレンドリ名またはマルチパスの別名を使用している場合は、次のようにパスを指定します。

DEVICE /dev/disk/by-id/dm-name-.*

7.2.6 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"

7.2.7 マルチパスデバイスでの--noflushの使用

マルチパスデバイス上で実行する場合は、オプション--noflushを必ず使用する必要があります。

たとえば、テーブルのリロードを行うスクリプトでは、マルチパストポロジ情報が必要なので、再開時に--noflushオプションを使用して、残っているI/Oがフラッシュされないようにします。

load
resume --noflush

7.2.8 ルートデバイスがマルチパスの場合の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環境設定ファイルから設定する必要があります。詳細については、7.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。

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

アップグレード中は、マルチパスデバイスのパーティション方法の動作変更によって、設定に影響を及ぼすことがあります。

7.2.9.1 SUSE Linux Enterprise Server 11

SUSE Linux Enterprise Server 11では、デフォルトのマルチパスセットアップはudevを使用して、マルチパス処理の開始時に/dev/disk/by-idディレクトリ内の既存のシンボリックリンクを上書きします。マルチパス処理開始前のシンボリックリンクは、SCSIデバイスをそのscsi-xxx名でポイントします。マルチパス処理実行中のシンボリックリンクは、SCSIデバイスをそのdm-uuid-xxx名でポイントします。これによって、マルチパス処理が開始したかどうかに関わりなく、/dev/disk/by-idパス内のシンボリックリンクは、継続的に同じデバイスをポイントします。

lvm.confおよびmd.confに対する環境設定ファイルが、必ずマルチパスデバイスの名前をポイントするようにします。これは、boot.multipathが有効になっていて、boot.lvmおよびboot.md以前にロードされていれば、自動的に行われます。そうなっていない場合は、LVMおよびMDの環境設定ファイルにマルチパスデバイスに対する固定パスが含まれている可能性があり、マルチパスデバイス名を使用するためにこれらを修正する必要があります。LVM2およびcLVMについては、7.2.4項 「マルチパスデバイスでのLVM2の使用」を参照してください。ソフトウェアRAIDについては、7.13項 「既存ソフトウェアRAID用マルチパスI/Oの設定」を参照してください。

7.2.9.2 SUSE Linux Enterprise Server 10

SUSE Linux Enterprise Server 10では、kpartxソフトウェアを/etc/init.d/boot.multipathで使用することで、再起動なしで、任意の新しく作成されたパーティションの環境設定ファイルmultipath.conf/dev/dm-*行にシンボリックリンクが追加されます。これにより、udevdがトリガされて、/dev/disk/by-*にシンボリックリンクを書き込みます。主なメリットは、サーバの再起動なしで、新しいパラメータでkpartxを呼び出せることです。

7.2.9.3 SUSE Linux Enterprise Server 9

SUSE Linux Enterprise Server 9では、マルチパスI/Oデバイス自体をパーティショニングすることはできません。ベースになる物理デバイスが既にパーティショニングされている場合、マルチパスI/Oデバイスはそれらのパーティションを反映し、レイヤが/dev/disk/by-id/<name>p1 ... pNデバイスを提供するので、マルチパスI/Oレイヤを介してパーティションにアクセスできます。結果として、マルチパスI/Oの有効化の前にデバイスをパーティション分割する必要があります。実行中のシステムのパーティション分割を変更した場合、これらの変更は、DM-MPIOでは自動的な検出および反映はされません。デバイスは、再初期化する必要があり、その際には、通常、再起動が必要です。

7.2.10 マルチパスI/O用にサポートされているアーキテクチャ

マルチパス処理のドライバおよびツールは、サポートされている7つのプロセッサアーキテクチャ(IA32、AMD64/EM64T、IPF/IA64、32ビットと64ビットのp-Series、31ビットと64ビットのz-Series)をすべてサポートします。

7.2.11 マルチパス処理用にサポートされているストレージアレイ

マルチパス処理のドライバおよび ツールは、大半のストレージアレイをサポートします。マルチパスデバイスを格納するストレージアレイは、マルチパス処理用のドライバとツールを使用するために、マルチパス処理をサポートする必要があります。一部のストレージアレイベンダは、独自のマルチパス処理管理ツールを提供しています。ベンダのハードウェアマニュアルを参照して、どのような設定が必要か判別してください。

7.2.11.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ファイルを作成および設定する必要があります。詳細については、7.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。

IBM zSeriesデバイスをマルチパス処理でテストした結果、dev_loss_tmoパラメータを90秒に、fast_io_fail_tmoパラメータを5秒に設定する必要があることがわかりました。zSeriesデバイスをご使用の場合は、手動で/etc/multipath.confファイルの作成と設定を行い、値を指定する必要があります。詳細については、7.10項 「zSeriesデバイスのデフォルト設定の設定」を参照してください。

自動検出されないハードウェアについては、/etc/multipath.confファイルのdevicesセクションに環境設定の適切なエントリが必要です。この場合は、手動で、環境設定ファイルを作成し、設定する必要があります。詳細については、7.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。

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

7.2.11.2 マルチパス処理サポートについてテスト済みのストレージアレイ

次のストレージアレイは、SUSE Linux Enterprise Serverでテスト済みです。:

EMC
Hitachi
Hewlett-Packard/Compaq
IBM
NetApp
SGI

他のベンダのストレージアレイもほとんど機能するはずです。該当するベンダのマニュアルを参照してください。multipath-toolsパッケージによって認識されるデフォルトストレージアレイのリストについては、7.2.11.1項 「マルチパス処理用に自動検出されるストレージアレイ」を参照してください。

7.2.11.3 特定のハードウェアハンドラを必要とするストレージアレイ

あるパスから他のパスにフェイルオーバーするには特別なコマンドが必要なストレージアレイ、または非標準の特別なエラー処理が必要なストレージアレイには、より拡張されたサポートが必要なことがあります。したがって、デバイスマッパーマルチパスサービスには、ハードウェアハンドラ用フックがあります。たとえば、そのようなEMC CLARiiON CXファミリアレイ用ハンドラが1つ、既に提供されています。

重要
重要

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

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

重要
重要

真のアクティブ/アクティブマルチパスサポートをもつアレイは、特別な処理を必要としないので、multipath -tコマンドでは表示されません。

また、multipath -tテーブルでリストされている場合でも、必ずしも、その特定ハードウェアでSUSE Linux Enterprise Serverがテスト済みということではありません。テスト済みのストレージアレイのリストについては、7.2.11.2項 「マルチパス処理サポートについてテスト済みのストレージアレイ」を参照してください。

7.3 マルチパス管理ツール

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

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

デバイスマッパーマルチパス(DM-MP)モジュールは、Linuxにマルチパス処理機能を提供します。DM-MPIOは、SUSE Linux Enterprise Server 11でのマルチパス処理の推奨ソリューションです。DM-MPIOは、Novellおよび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が表示されてもアクセスしようとするとエラーが発生することがあります。

表 7.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ファイルは、システム管理者によって作成および設定されるまで存在しません。詳細については、7.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。

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

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

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

ツール

説明

multipath

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

multipathd

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

devmap-name

デバイスマップ(devmap)のためのudevに意味のあるデバイス名を与えます。

kpartx

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

mpathpersist

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

パッケージのファイルリストは、サーバのアーキテクチャによって異なることがあります。multipath-toolsパッケージに含まれたファイルのリストについては、SUSE Linux Enterprise Server Technical Specifications」>「Package Descriptions 」Webページにアクセスし、目的のアーキテクチャを見つけ、パッケージを名前でソートを選択し、次に、multipath-toolsで検索して、そのアーキテクチャのパッケージリストを見つけます。

コマンドオプションrpm -qlまたはrpm -qplを使用してパッケージ自体をクエリすることによって、RPMファイルのファイルリストを判別することもできます。

  • インストールしたパッケージをクエリするには、次のコマンドを入力します。

    rpm -ql <package_name>
  • インストールしていないパッケージをクエリするには、次のコマンドを入力します。

    rpm -qpl <URL_or_path_to_package>

multipath-toolsパッケージがインストールされているかどうか確認するには、次の操作を行います。

  • 端末コンソールのプロンプトで、次のように入力します。

    rpm -q multipath-tools

    パッケージがインストールされている場合は、パッケージ名を繰り返し、バージョン情報を示す応答メッセージが表示されます。

    multipath-tools-04.7-34.23

    パッケージがインストールされていない場合は、次の応答メッセージが表示されます。

    package multipath-tools is not installed

7.3.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-.*

MDADMのインストールを確認するには、次を行います。

  • 端末コンソールのプロンプトで、次のコマンドを入力し、mdadmパッケージがインストールされているかどうか確認します。

    rpm -q mdadm

    パッケージがインストールされている場合は、パッケージ名を繰り返し、バージョン情報を示す応答メッセージが表示されます。次に例を示します。

    mdadm-2.6-0.11

    パッケージがインストールされていない場合は、次の応答メッセージが表示されます。

    package mdadm is not installed

/etc/lvm/lvm.conf ファイルの変更方法については、7.2.4項 「マルチパスデバイスでのLVM2の使用」を参照してください。

7.3.4 Linux multipath(8)コマンド

マルチパスデバイスを設定し、管理するには、multipath(8)コマンドを使用します。

multipath(8)コマンドの一般構文:

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

オプション

-v verbosity_level

すべてのパスとマルチパスをプリントします。

0

出力はありません。

1

作成または更新したマルチパスの名前のみをプリントします。kpartxなどの他のツールへのフィード用として使用されます。

2+

検出したパス、マルチパス、デバイスマップなど、すべての情報をプリントします。

-h

使用テキストをプリントします。

-d

ドライ実行。デバイスマップの作成や更新は行いません。

-l

sysfsやデバイスマッパーからフェッチした情報に基づいて、現在のマルチパストポロジを表示します。

-ll

すべての使用可能な情報(sysfs、デバイスマッパー、パスチェッカなど)から現在のマルチパストポロジを表示します。

-f

未使用の場合、パラメータとして指定したマルチパスデバイスマップをフラッシュします。

-F

未使用のマルチパスデバイスのマップをすべてフラッシュします。

-t

内部のハードウェアテーブルをstdoutにプリントします。

-r

デバイスマップの再ロードを強制します。

-B

バインディングファイルを読み込み専用として処理します。

-b bindings_file

user_friendly_namesバインディングファイルの場所を設定します。デフォルトは/etc/multipath/bindingsです。

-c

ブロックデバイスをマルチパスデバイスのパスにする必要があるかどうかをチェックします。

-q

multipathdが実行中でない場合、queue_if_no_pathを指定したデバイステーブルを許可します。

-w

WWIDファイルから、指定したデバイスのWWIDを削除します。

-W

現在のマルチパスデバイスのみを含めるようにWWIDファイルをリセットします。

-p policy

新しいマップでの指定したポリシーの使用を強制します。既存のマップは変更されません。

failover (フェールオーバー)

優先度グループごとに1つのパス

multibus

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

group_by_serial

シリアルごとに1つの優先度グループ。

group_by_prio

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

group_by_node_name

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

device_name

指定したデバイスのデバイスマップのみを更新します。/dev/sdbなどのデバイスパス、major:minorフォーマット、またはマルチパスマップ名として名前を指定します。

一般的な例

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およびデバイスノードの両方でブラックリスト化されたデバイスが表示されます。

multipath -v3 devicename

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

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 ]

表7.3「multipath -pコマンドのグループポリシーオプション」に説明されているグループポリシーオプションの1つを指定することにより、グループポリシーを設定します。

表 7.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にフェッチされます。

7.3.5 Linux mpathpersist(8)ユーティリティ

mpathpersist(8)ユーティリティを使用して、デバイスマッパーマルチパスのデバイスでSCSIの永続的な予約を管理できます。

mpathpersist(8)コマンドの一般構文:

mpathpersist [options] [device]

このユーティリティを/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デーモンを再起動します。設定後、mpathpersistコマンドで予約キーを指定できます。

オプション

-h, --help

コマンドの使用情報を出力して終了します。

-d <device>, --device=<device>

デバイスをクエリまたは変更します。

-H, --hex

出力応答を16進数で表示します。

-X <tids>, --transportID=<tids>

トランスポートIDは、さまざまな形式で記述できます。

-v <level>, --verbose <level>

詳細レベルを指定します。

0

重要なメッセージおよびエラーメッセージ

1

警告メッセージ。

2

情報メッセージ。

3

トレースが有効化された情報メッセージ

PR Inのオプション

-i, --での

PR Inコマンドを要求します。

-k, --read-keys

PR In:キーを読み込みます。

-s, --read-status

PR In:完全ステータスを読み込みます。

-r, --read-reservation

PR In:予約を読み込みます。

-c, --report-capabilities

PR In:機能を報告します。

PR Outのオプション

-o, --out

PR Outコマンドを要求します。

-c, --クリア

PR Out:消去します。

-Z, --param-aptpl

PR OutパラメータAPTPL

-S SARK, --param-sark=SARK

16進数のPR Outパラメータであるサービスアクション予約キー(SARK)。

-P, --preempt

PR Out:強制排除します。

-A, --preempt-abort

PR Out:強制排除して中止します。

-T <type>, --prout-type=<type>

PR Outコマンドタイプ。

-G, --登録

PR Out:登録します。

-I, --register-ignore

PR Out:登録して無視します。

-L, --release

PR Out:解放します。

-R, --予約

PR Out:予約します。

/dev/mapper/mpath9デバイスのサービスアクション予約キーを登録します。

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

/dev/mapper/mpath9デバイスのサービスアクション予約キーを読み込みます。

mpathpersisst -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

7.4 マルチパス処理用システムの設定

7.4.1 マルチパス処理用SANデバイスの準備

SANデバイスのマルチパスI/Oを設定する前に、必要に応じて、次のようにSANデバイスを準備してください。

  • ベンダのツールで、SANデバイスを設定し、ゾーン化します。

  • ベンダのツールで、ストレージアレイ上のホストLUNのパーミッションを設定します。

  • Linux HBAドライバモジュールをインストールします。モジュールがインストールされると、ドライバがHBAを自動的にスキャンして、ホスト用のパーミッションをもつSANデバイスを検出します。それらのSANデバイスは、以降の設定のため、ホストに提示されます。

    注記
    注記

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

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

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

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

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

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

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

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

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

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

7.4.3 initrdでデバイスドライバをマルチパス処理用に設定する

initrdで、マルチパスI/Oデバイスの接続先コントローラのデバイスドライバを自動的にロードするには、サーバを手動で設定する必要があります。それには、必要なドライバモジュールを変数INITRD_MODULES(/etc/sysconfig/kernelファイル内)に追加する必要があります。

たとえば、システムにccissドライバでアクセスされるRAIDコントローラがあり、qla2xxxドライバでアクセスされるQlogicコントローラにマルチパスデバイスが接続されている場合は、次のようなエントリになります。

   INITRD_MODULES="cciss"

QLogicドライバは、起動時に自動的にはロードされないので、ここで追加します。

   INITRD_MODULES="cciss qla23xx"

/etc/sysconfig/kernelの変更後は、システム上でINITRDを再作成し(mkinitrdコマンド使用)、次に、再起動して変更内容を有効にする必要があります。

ブートマネージャとしてLILOを使う場合は、/sbin/liloコマンドでLILOを再インストールします。GRUBを使っている場合は、何も操作する必要はありません。

SUSE Linux Enterprise Server 11 SP3以降、DMマルチパスで使用できる、次の4つのSCSIハードウェアハンドラがSCSI層に追加されました。

scsi_dh_alua
scsi_dh_rdac
scsi_dh_hp_sw
scsi_dh_emc

これらのモジュールをinitrdイメージに追加してから、/etc/multipath.confファイルでハードウェアハンドラタイプaluardachp_sw、およびemcとして指定します。たとえば、デバイス定義に対して次のいずれかの行を追加します。

hardware_handler "1 alua"

hardware_handler "1 rdac"

hardware_handler "1 hp_sw"

hardware_handler "1 emc"

initrdイメージにモジュールを組み込むには:

  1. これらのデバイスハンドラモジュールを/etc/sysconfig/kernelのINITRD_MODULES変数に追加します。

  2. 新しいinitrdを作成します。

    mkinitrd -k /boot/vmlinux-<flavour> \
    -i /boot/initrd-<flavour>-scsi-dh \
    -M /boot/System.map-<flavour>
  3. ブート環境設定ファイル(grub.conflilo.confyaboot.conf)を新しく作成したinitrdで更新します。

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

7.4.4 ブートシーケンスへのmultipathdの追加

このセクションに示すどちらかの方法を使用して、マルチパスI/Oサービス(multipathd)をブートシーケンスに追加します。

7.4.4.1 YaSTを使用してmultipathdを追加する

  1. YaSTで内で、システムシステムサービス(ランレベル)簡易モードの順にクリックします。

  2. multipathdを選択してから、Enable(有効)をクリックします。

  3. OKをクリックして、サービスの開始メッセージを確認します。

  4. 完了をクリックしてから、はいをクリックします。

    変更内容は、サーバが再起動するまで有効にはなりません。

7.4.4.2 コマンドラインを使用してmultipathdを追加する

  1. 端末コンソールを開いて、rootユーザまたは同等の権限でログインします。

  2. 端末コンソールのプロンプトで、次のように入力します。

    insserv multipathd

7.5 マルチパスI/Oサービスの有効化と機動

マルチパスサービスを有効にし、再起動時に起動するには:

  1. 端末コンソールを開いて、rootユーザまたは同等の権限でログインします。

  2. 端末コンソールのプロンプトで、次のように入力します。

    chkconfig multipathd on
    chkconfig boot.multipath on

boot.multipathサービスがシステムブートで自動的に開始しない場合は、次の手順に従って、手動でサービスを開始します。

  1. 端末コンソールを開いて、rootユーザまたは同等の権限でログインします。

  2. <Enter>

    /etc/init.d/boot.multipath start
    /etc/init.d/multipathd start

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

/etc/multipath.confファイルは、作成しない限り、存在しません。マルチパスの設定ファイルを作成して設定をパーソナライズしない限り、multipathdデーモンの実行時にデフォルトのマルチパスデバイス設定が自動的に適用されます。/usr/share/doc/packages/multipath-tools/multipath.conf.syntheticファイルには、マルチパス設定の指針となるサンプルファイル /etc/multipath.confが含まれています。

/etc/multipath.confファイルの作成または修正を行った場合、ファイルを保存する際に変更が自動的には適用されません。これにより、変更をコミットする前に、それを検証するためのドライ実行を行う時間がとれます。修正した設定で問題なければ、実行中のマルチパスのデーモンに対するマルチパスマップを更新して使用するか、システムの再起動時など、multipathdデーモンの次回起動時に、変更が適用されます。

7.6.1 /etc/multipath.confファイルの作成

/etc/multipath.confファイルが存在しない場合は、次のように、例をコピーしてファイルを作成していください。

  1. 端末コンソールで、rootユーザとしてログインします。

  2. 次のコマンドを入力して(すべて1行で)、テンプレートをコピーします。

    cp /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic /etc/multipath.conf
  3. /usr/share/doc/packages/multipath-tools/multipath.conf.annotatedファイルを、システムのマルチパス処理の設定方法を決定する参考として使用します。

  4. SAN用の適切なdeviceエントリがあることを確認します。大半のベンダは、deviceセクションの正しいセットアップに関するマニュアルを提供しています。

    /etc/multipath.confファイルでは、異なるSANには異なるdeviceセクションが必要です。自動的に検出されるストレージサブシステムを使用する場合(7.2.11.2項 「マルチパス処理サポートについてテスト済みのストレージアレイ」参照)、そのデバイスのデフォルトエントリを使用できます。/etc/multipath.confファイルをさらに設定する必要はありません。

  5. ファイルを保存します。

7.6.2 /etc/multipath.confファイルのセクション

/etc/multipath.confファイルは、以下のセクションで構成されています。属性とそれらのオプションに関する詳しいコメントの付いたテンプレートについては、/usr/share/doc/packages/multipath-tools/multipath.conf.annotatedを参照してください。

defaults

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

blacklist

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

通常、非マルチパスデバイス(ccissfdhdmddmsrscdstramrawloopなど)は無視します。

値: 

例については、7.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。

blacklist_exceptions

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

値: 

例として、7.8項 「非マルチパスデバイスのブラックリスト化」および/usr/share/doc/packages/multipath-tools/multipath.conf.annotatedファイルを参照してください。

multipaths

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

devices

個々のストレージコントローラの設定を指定します。これらの値により、設定ファイル内のdefaultsセクションで指定された値が上書きされます。デフォルトではサポートされていないストレージアレイを使用している場合は、devicesサブセクションを作成して、そのデフォルト設定を指定することができます。これらの値は、個々のマルチパスデバイスの設定により上書きが可能です(キーワードでそれが許可されていれば)。

詳細については、次のリンクを参照してください。

7.6.3 etc/multipath.confファイルでのマルチパスセットアップの確認

/etc/multipath.confファイルの作成または修正を行った場合、ファイルを保存する際に変更が自動的には適用されません。セットアップのドライ実行を行って、マルチパスのマップを更新する前に、マルチパスセットアップを確認することができます。

サーバのコマンドプロンプトで、次のように入力します。

multipath -v2 -d

このコマンドによりデバイスがスキャンされ、変更をコミットしたときにセットアップがどのようになるかが表示されます。/etc/multipath.confファイルを修正してドライ実行を行う際に、変更前の(またはデフォルトの)マルチパス設定で、multipathdデーモンがすでに実行されていることを前提とします。変更内容に問題がなければ、7.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」に進みます。

出力の例を以下に示します。

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およびデバイスノードの両方でブラックリスト化されたデバイスが表示されます。

multipath -v3 d

2つのQlogic HBAをXiotech Magnitude 3000 SANに接続した64ビットSLES 11 SP2サーバでの-v3出力の例を、次に示します。例を短くするため、複数エントリの一部は省略されています。

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
< content omitted >
ram15: device node name blacklisted
< content omitted >
===== 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
< content omitted >

7.6.4 /etc/multipath.confファイルの変更を適用したマルチパスマップの更新

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

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

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

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

    /sbin/multipath -v2 -l
  4. multipathdサービスを開始します。

  5. mkinitrdを実行して、システム上にinitrdイメージを再作成し、再起動して変更内容を有効にします。

7.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          "directio"
  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"
  }

ポーリング、待ち行列、およびフェールバックの詳細については、7.11項 「パスフェールオーバーのポリシーと優先度の設定」に記載のパラメータを参照してください。

defaultsセクションで設定を変更した場合、その変更内容は、マルチパスマップを更新するまで、またはmultipathdデーモンを再起動するまで(システムの再起動など)適用されません。

7.8 非マルチパスデバイスのブラックリスト化

/etc/multipath.confファイルには、blacklistセクションがあり、このセクションにすべての非マルチパスデバイスがリストされます。WWID (wwidキーワード)、デバイス名(devnodeキーワード)、またはデバイスタイプ(deviceセクション)を使用してデバイスをブラックリスト化できます。blacklist_exceptionsセクションを使って、blacklistセクションで使用している正規表現によってブラックリスト化された特定のデバイスに対してマルチパスを有効にすることもできます。

通常、非マルチパスデバイス(ccissfdhdmddmsrscdstramrawloopなど)は無視します。たとえば、ローカルのIDEハードドライブやフロッピードライブには通常、複数のパスはありません。multipathで単一パスデバイスを無視する場合は、それらのデバイスをblacklistセクションに記述します。

注記
注記

キーワードdevnode_blacklistは廃止され、キーワードblacklistに代わりました。

たとえば、ccissドライバからローカルデバイスとすべてのアレイを、multipathによる管理から外してブラックリストに載せるには、blacklistセクションを次のように指定します。

blacklist {
      wwid "26353900f02796769"
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*"
      devnode "^hd[a-z][0-9]*"
      devnode "^cciss.c[0-9]d[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ファイルの変更後、mkinitrdを実行してシステム上にINITRDを作成し、次に、サーバを再起動して変更内容を有効にします。

その後は、multipath -llコマンドの発行時に、ローカルデバイスがマルチパスマップに一覧されなくなります。

7.9 ユーザフレンドリ名または別名の設定

マルチパスデバイスは、そのWWID、ユーザフレンドリな名前、またはそれに割り当てた別名で識別されます。始める前に、「7.2.3項 「マルチパスデバイスでのWWID、ユーザフレンドリ名、および別名の使用」」の要件をレビューしてください。

重要
重要

/dev/sdnおよび/dev/dm-n形式のデバイスノード名は、再起動時に変更される可能性があるので、マルチパスデバイスは、そのWWIDで参照することを推奨します。また、WWIDにマップされたユーザフレンドリ名または別名を、再起動時においてもデバイスを一意に識別するために使用することもできます。

表7.4「マルチパスデバイス名のタイプの比較」では、 /etc/multipath.confファイル内のデバイスに使用できるデバイス名のタイプについて説明しています。multipath.conf設定の例については、/usr/share/doc/packages/multipath-tools/multipath.conf.syntheticファイルを参照してください。

表 7.4: マルチパスデバイス名のタイプの比較

名前のタイプ

説明

WWID (デフォルト)

シリアルWWID (Worldwide Identifier)は、グローバルに固有または非変更であることを保証されたマルチパスデバイスの識別子です。マルチパス処理で使用されるデフォルト名は、/dev/disk/by-idディレクトリにある論理ユニットのIDです。たとえば、WWIDが3600508e0000000009e6baa6f609e7908のデバイスは、/dev/disk/by-id/scsi-3600508e0000000009e6baa6f609e7908と記載されています。

ユーザフレンドリ

/dev/mapperディレクトリ内のデバイスマッパーマルチパスのデバイス名は、論理ユニットのIDも参照します。これらのマルチパスデバイス名は、/dev/mapper/mpath<n>形式を使用するユーザフレンドリな名前です(たとえば、/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によって、マルチパス処理をアクティブにすることができます。

ユーザフレンドリな名前を有効にするか、別名を指定する場合:

  1. 端末コンソールで、rootユーザとしてログインします。

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

  3. (オプション)/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"
      }
  4. (オプション、非推奨)ユーザフレンドリ名の有効にする:

    1. defaultsセクションとその閉じ括弧を非コメント化します。

    2. user_friendly_namesオプションを非コメント化し、次に、その値をNoからYesに変更します。

      次に例を示します。

      ## Use user friendly names, instead of using WWIDs as names.
      defaults {
        user_friendly_names yes
      }
  5. (オプション)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
           }
    }
  6. 変更内容を保存し、ファイルを閉じます。

    変更内容は、マルチパスマップを更新するまで、またはmultipathdデーモンの再起動時(システムの再起動時など)まで、適用されません。

7.10 zSeriesデバイスのデフォルト設定の設定

IBM zSeriesデバイスをマルチパス処理でテストした結果、dev_loss_tmoパラメータを90秒に、fast_io_fail_tmoパラメータを5秒に設定する必要があることわかりました。zSeriesデバイスをご使用の場合は、/etc/multipath.confファイルを変更して、値を次のように指定します。

defaults {
       dev_loss_tmo 90
       fast_io_fail_tmo 5
}

dev_loss_tmoパラメータは、マルチパスリンクに不良のマーキングがされるまでの秒数を設定します。パスに障害が発生したら、そのパスの現在のI/Oが失敗します。デフォルト値は使用するデバイスドライバによって異なります。0~600秒の値の範囲が有効です。ドライバの内部タイムアウトを使用するには、ゼロ(0)または600より大きい値に設定します。

fast_io_fail_tmoパラメータは、リンク障害を検出した場合に、I/Oが失敗するまでの待機時間を設定します。ドライバに到達したI/Oは失敗します。ブロックしたキューにI/Oがある場合は、I/Oはdev_loss_tmoで指定された時間が経過するまでは失敗せず、キューのブロックが解除されます。

/etc/multipath.confファイルを変更した場合、その変更内容は、マルチパスマップを更新するまで、またはmultipathdデーモンを再起動するまで(システムの再起動など)適用されません。

7.11 パスフェールオーバーのポリシーと優先度の設定

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を再経路指定します。

このセクションでは、フェールオーバーのポリシーを指定し、パスの優先順位を設定する方法について説明します。

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

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

multipath devicename -p policy

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

表 7.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にフェッチされます。

7.11.2 フェールオーバーポリシーの設定

デバイスのフェールオーバーポリシーは、手動で、/etc/multipath.confファイルに入力する必要があります。すべての設定とオプションの例は、/usr/share/doc/packages/multipath-tools/multipath.conf.annotatedファイルにあります。

/etc/multipath.confファイルを修正した場合、ファイルを保存する際に変更が自動的には適用されません。詳細については、7.6.3項 「etc/multipath.confファイルでのマルチパスセットアップの確認」および7.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」を参照してください。

7.11.2.1 優先度グループと属性の理解

優先度グループは、同じ物理LUNに属するパスのコレクションです。デフォルトでは、I/Oは、グループ内のすべてのパス全体にラウンドロビン方式で配分されます。multipathコマンドは、SANのpath_grouping_policy設定に基づいてそのSANの各LUNごとに、自動的に優先度グループを作成します。multipathコマンドは、グループ内のパス数にグループの優先度を掛け合わせて、どのグループがプライマリか決定します。計算された値が最も高いグループがプライマリグループです。プライマリグループ内のすべてのパスが失敗すると、次に値の高い優先度グループがアクティブになります。

パス優先度は、パスに割り当てられた整数値です。優先度は、値が高いほど高くなります。パスごとに優先度を割り当てるには、外部プログラムが使用されます。所定のデバイスに関して、同じ優先度のパスが同じ優先度グループに属します。

SLES 11 SP2用マルチパスツール 2以降では、/etc/multipath.confファイルのdefaults{}またはdevices{}セクションのprio設定を使用します。キーワードprioが、multipath{)セクションの個別のmultipaths定義に指定された場合は、暗黙のうちに無視されます。SLES 11 SP1用のマルチパスツール0.4.8以前では、multipath{)セクションの個別のmultipaths定義内のprio設定で、defaults{}またはdevices{}セクションのprio設定を上書きすることができました。

/etc/multipath.confファイル内のprioキーワードが、multipath-tools-0.4.9では変更されています。prio行で、Prioritizerが指定されます。Prioritizerが引数を必要とする場合、その引数は2行目のprio_argsキーワードで指定します。これまでは、Prioritizerとその引数は、prio行に含まれていました。

デフォルトセクションまたはデバイスセクションの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に対する引数内で指定した加重値に基づいて、パス優先度を生成します。たとえば

<hbtl|devname> <regex1> <prio1> <regex2> <prio2>...

hbtl regexの引数形式では、SCSI H:B:T:L表記法(1:0:.:. および*:0:0:.など)を、加重値とともに使用します。ここで、H、B、T、Lはそれぞれ、デバイスのホスト、バス、ターゲット、およびLUN IDを示します。たとえば、

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

devname regexの引数形式では、デバイスノード名を、各ノードに対する加重値とともに使用します。たとえば、

prio "weightedpath"
prio_args "devname sda 50 sde 10 sdc 50 sdf 10"
prio_args

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

値: 

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

prio      "const"
prio_args ""

マルチパス属性

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

user_friendly_names

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

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

値: 

説明

no

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

yes

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

failback (フェールバック)

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

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

値: 

説明

manual

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

immediate

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

n

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

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

failback "manual"
重要
重要

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

getuid_callout

固有のパス識別子を取得するためのコールのデフォルトプログラムと引数を指定します。場所を、絶対Linuxパスで指定します。

この属性はSLES 11 SP3で廃止予定なので、uid_attribute (uid_attribute)に置き換えられました。

値: 

デフォルトの場所と引数は、

/lib/udev/scsi_id -g -u -s

例:

getuid_callout "/lib/udev/scsi_id -g -u -d /dev/%n"

getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
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

(multipath-toolsバージョン0.4.8以降でのデフォルト)。直接I/Oをもつ最初のセクタを読み込みます。DASDデバイスの場合、有用です。/var/log/messagesに障害メッセージをログ記録します。

readsector0

(multipath-toolsバージョン0.4.7以前でのデフォルト。廃止予定なのでdirectioに置き換えられました)。デバイスの最初のセクタを読み込みます。/var/log/messagesに障害メッセージをログ記録します。

tur

デバイスに対するSCSIテストユニットレディコマンドを発行します。これはLUNによってサポートされている場合の推奨設定です。このコマンドは、障害時に、/var/log/messagesにメッセージを出力しません。

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

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

値: 

説明

failover (フェールオーバー)

(デフォルト)一度に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

(SLES 11 SP2以前でのデフォルト)優先度グループ内のすべてのアクティブパスに渡るトラフィックの分散に使用される負荷分散アルゴリズム。

queue-length 0

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

service-time 0

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

pg_timeout

パスグループのタイムアウト処理を指定します。

値: 

なし(内部デフォルト)

polling_interval

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

値: 

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

prio_callout

マルチパスマップのレイアウトを決定するプログラムと引数を指定します。

マルチパスのprio_calloutsプログラムは、/lib/libmultipath/lib*内の共有ライブラリ内にあります。共有ライブラリを使用することで、デーモンの起動時、コールアウトプログラムがメモリにロードされます。

multipathコマンドでクエリされると、指定のmpath_prio_*コールアウトプログラムがマルチパスレイアウト全体との関係で所定のパスの優先度を返します。

この属性がgroup_by_prioのpath_grouping_policyとともに使用されると、同じ優先度をもつすべてのパスが1つのマルチパスグループにグループ化されます。総計の優先度が最も高いグループがアクティブグループになります。

グループ内のすべてのパスが失敗すると、総計の優先度が次に高いグループがアクティブになります。さらに、フェールオーバーコマンド(ハードウェアハンドラにより決定)がターゲットに送信されることもあります。

mpath_prio_*プログラムとして、指定のセットアップ用にベンダまたは管理者が作成したカスタムスクリプトを使用することも可能です。

  • コマンドライン内の%nは、/devディレクトリ内のデバイス名に展開します。

  • コマンドライン内の%bは、/devディレクトリ内のmajor:minor形式のデバイス番号に展開します。

  • コマンドライン内の%dは、/dev/disk/by-idディレクトリ内のデバイスIDに展開します。

デバイスがホットプラグ可能な場合は、%nの代わりに%dフラグを使用してください。これにより、デバイスが利用可能になった時点とudevがデバイスノード を作成した時点の間に短い時間間隔があるという問題が解決されます。

値: 

説明

(値なし)

prio_callout属性を使用しない場合は、すべてのパスが同等になりますこれがデフォルトの設定です。

/bin/true

group_by_prioを使用しない場合は、これを指定します。

prioritizerプログラムは、multipathコマンドによってクエリされると、パス優先度を生成します。プログラム名は、mpath_prio_で開始し、後に使用するデバイスタイプまたは負荷分散の方法が続きます。現在の優先度プログラムには、次のものがあります。

Prioritizerプログラム

説明

mpath_prio_alua %n

SCSI-3 ALUA設定に基づいてパス優先度を生成します。

mpath_prio_balance_units

すべてのパスに同じ優先度を生成します。

mpath_prio_emc %n

EMCアレイのパス優先度を生成します。

mpath_prio_hds_modular %b

Hitachi HDS Modularストレージアレイのパス優先度を生成します。

mpath_prio_hp_sw %n

アクティブ/スタンバイモードのCompaq/HPコントローラのパス優先度を生成します。

mpath_prio_netapp %n

NetAppアレイのパス優先度を生成します。

mpath_prio_random %n

パスごとにランダムな優先度を生成します。

mpath_prio_rdac %n

LSI/Engenio RDACコントローラのパスの優先度を生成します。

mpath_prio_tpc %n

オプションとして、ベンダまたは管理者が作成したスクリプトを使用できます。このスクリプトは、各パスの優先度を指定するファイルから優先度を取得します。

mpath_prio_spec.sh %n

ユーザ作成スクリプトのパスを提供します。このスクリプトにより、2つ目のデータファイルに含まれた情報に基づくマルチパス処理の優先度が生成されます。(このパスとファイル名は、例として提供されています。ご使用のスクリプトの場所を指定してください)。このスクリプトは、ベンダまたは管理者が作成できます。スクリプトのターゲットファイルは、すべてのマルチパスデバイスの各パスを識別し、パスごとに優先度を指定します。例については、7.11.3項 「スクリプトの使用によるパス優先度の設定」を参照してください。

rr_min_io

path_selector設定の指定のアルゴリズムで決定される同じパスグループ内の次のパスに切り替わる前に、パスに経路指定されるI/Oトランザクションの数を指定します。

rr_min_io属性は、カーネル2.6.31以前でのみ使用します。SLES 11 SP2では廃止になり、rr_min_io_rq属性に置き換えられました。

値: 

0より大きい整数値を指定してください。デフォルト値は「1000」です。

rr_min_io "1000"
rr_min_io_rq

現在のパスグループ内の次のパスに切り替える前に、リクエストベースのデバイス-マッパー-マルチパスを使用して、あるパスへルートするI/Oリクエストの回数を指定します。

この属性は、SLES 11 SP2以降を実行しているシステムで利用できます。rr_min_io属性に代わるものです。

値: 

0より大きい整数値を指定してください。デフォルト値は「1」です。

rr_min_io_rq "1"
rr_weight

パスの重み付けの方法を指定します。

値: 

説明

uniform

(デフォルト)すべてのパスが同じラウンドロビン方式の重み付けを持ちます。

priorities

各パスの重み付けが、rr_min_io_rqの設定(またはカーネル2.6.31以降ではrr_min_io設定)によって決まります。

uid_attribute

固有のパス識別子を提供するudev属性。デフォルト値はID_SERIALです。

7.11.2.2 ラウンドロビン式負荷分散の設定

すべてのパスがアクティブです。一定の秒数または一定数のI/Oトランザクションの後で、シーケンスの次のオープンパスに移動するように、I/Oを設定します。

7.11.2.3 単一パスフェールオーバーの設定

優先度が最も高い(最も低い値の)単一パスがトランザクションに対してアクティブになります。他のパスは、フェールオーバーに使用できますが、フェールオーバーの発生までは使用されません。

7.11.2.4 ラウンドロビン式負荷分散用I/Oパスのグループ化

同じ優先度をもつ複数のパスがアクティブグループを形成します。そのグループのすべてのパスがエラーになると、デバイスが優先度の次に高いグループにフェールオーバーします。グループのすべてのパスが、ラウンドロビン方式の負荷分散で、トラフィックロードを共有します。

7.11.3 スクリプトの使用によるパス優先度の設定

デバイスマッパーマルチパス(DM-MPIO)と対話することにより、prio_callout設定のリソースとしての設定時にLUNへのパスの優先度を提供するスクリプトを作成できます。

まず、各デバイスの情報と各パスに割り当てたい優先度値をリストするテキストファイルを設定します。たとえば、ファイルを/usr/local/etc/primary-pathsと指定します。次の形式で、パスごとに1行入力します。

host_wwpn target_wwpn scsi_id priority_value

デバイス上の各パスの優先度を返します。変数FILE_PRIMARY_PATHSが各デバイスの適切なデータ(host wwpn、target wwpn、scsi_id、priority value)を含む実際のファイルに解決するようにします。

1つのLUNに8つのパスが対応する場合、primary-pathsファイルの内容が、次のようになることがあります。

0x10000000c95ebeb4 0x200200a0b8122c6e 2:0:0:0 sdb 3600a0b8000122c6d00000000453174fc 50
0x10000000c95ebeb4 0x200200a0b8122c6e 2:0:0:1 sdc 3600a0b80000fd6320000000045317563 2
0x10000000c95ebeb4 0x200200a0b8122c6e 2:0:0:2 sdd 3600a0b8000122c6d0000000345317524 50
0x10000000c95ebeb4 0x200200a0b8122c6e 2:0:0:3 sde 3600a0b80000fd6320000000245317593 2
0x10000000c95ebeb4 0x200300a0b8122c6e 2:0:1:0 sdi 3600a0b8000122c6d00000000453174fc 5
0x10000000c95ebeb4 0x200300a0b8122c6e 2:0:1:1 sdj 3600a0b80000fd6320000000045317563 51
0x10000000c95ebeb4 0x200300a0b8122c6e 2:0:1:2 sdk 3600a0b8000122c6d0000000345317524 5
0x10000000c95ebeb4 0x200300a0b8122c6e 2:0:1:3 sdl 3600a0b80000fd6320000000245317593 51

prio_calloutに示された例を続行するには、/usr/local/sbin/path_prio.shという名前のスクリプトを作成します。パスとファイル名は任意に指定できます。スクリプトは、次の処理を実行します。

  • multipathからのクエリ時に、/usr/local/etc/primary-pathsファイルからデバイスとそのパスをグレップ検索します。

  • multipathに戻り、ファイル内のそのエントリの最後のカラムにある優先度値を使用します。

7.11.4 ALUAの設定 (mpath_prio_alua)

mpath_prio_alua(8)コマンドは、Linux multipath(8)コマンドの優先度コールアウトとして使用されます。このコマンドが返す番号をDM-MPIOが使用して、同じ優先度をもつSCSIデバイスをグループ化します。このパス優先度ツールは、ALUA (Asynchronous Logical Unit Access)をベースとしています。

7.11.4.1 構文

mpath_prio_alua [-d directory] [-h] [-v] [-V] device [device...]

7.11.4.2 必要条件

SCSIデバイス.

7.11.4.3 オプション

-dディレクトリ

デバイスノード名の一覧を見つけることのできるLinuxディレクトリパスを指定します。デフォルトディレクトリは、/devです。このオプションを使用する際には、管理するデバイスのデバイスノード名(sdaなど)だけを指定します。

-h

このコマンドのヘルプを表示して、終了します。

-v

詳細出力をオンにして、読みやすい形式でステータスを表示します。指定のデバッガーが属するポートグループやその現在の状態に関する情報が表示されます。

-V

このツールのバージョン情報を表示して、終了します。

device [device...]

管理するSCSIデバイス(または複数のデバイス)を指定します。ターゲットポートグループの報告コマンド(sg_rtpg(8))をサポートするSCSIデバイスを指定してください。デバイスノード名には、次の形式の1つを使用します。

  • 完全なLinuxディレクトリパス(/dev/sdaなど)-dオプションとは併用しないでください。

  • デバイスノード名のみ(sdaなど)。-dオプションの使用で、ディレクトリパスを指定します。

  • スペース無しでコロンで区切ったデバイスのメジャーおよびマイナー番号(8:0など)この形式を使用すると、/devディレクトリに、tmpdev-<major>:<minor>-<pid>形式の名前で、一時デバイスノードが作成されます。(たとえば、/dev/tmpdev-8:0-<pid>)。

7.11.4.4 戻り値

成功すると、0値とグループの優先度値が返ります。表7.6「デバイスマッパーマルチパスのALUA優先度」は、mpath_prio_aluaコマンドが返す優先度値を示しています。

表 7.6: デバイスマッパーマルチパスのALUA優先度

優先度値

説明

50

デバイスはアクティブで最適化されたグループに属します。

10

デバイスは、アクティブだが最適化されていないグループに属します。

1

デバイスはスタンバイグループに属します。

0

他のすべてのグループ。

multipathコマンドでの処理方法により、値の間隔は大きくとられています。multipathコマンドは、グループ内のパス数とグループの優先度の値を掛け合わせた結果の値が最も高いグループを選択します。たとえば、非最適化パスグループが6つのパスをもち(6 x 10 = 60)、最適化パスグループが1つのパスをもつ(1 x 50 = 50)場合は、非最適化グループが一番高い値をもつので、multipathは、非最適化グループを選択します。デバイスに対するトラフィックは、グループ内の6つのパスすべてを、ラウンドロビン方式で使用します。

エラーが発生すると、コマンドの失敗原因を示す、1〜5の値が返ります。詳細については、mpath_prio_aluaのマニュアルページを参照してください。

7.11.5 ターゲットパスグループの報告

SCSIターゲットポートグループの報告(sg_rtpg(8))コマンドを使用します。詳細については、sg_rtpg(8)のマニュアルページを参照してください。

7.12 ルートデバイスのマルチパスI/Oの設定

SUSE Linux Enterprise Server 11では、DM-MPIO (デバイスマッパーマルチパスI/O)が使用可能であり、/boot/rootに対してサポートされています。また、YaSTインストーラ内のYaSTパーティショナは、インストール中のマルチパスの有効化をサポートします。

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

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

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

  1. YaSTインストール設定ページでのインストール時に、パーティション分割をクリックして、YaSTパーティショナを開きます。

  2. カスタムパーティション - エキスパート用を選択します。

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

  4. multipathを起動します。

    YaSTがディスクの再スキャンを開始し、利用可能なマルチパスデバイスを表示します(/dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65など)。これが、以降の処理すべての対象デバイスになります。

  5. 次へをクリックして、インストールを続行します。

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

multipathdデーモンは、システムのインストール時に自動的にアクティブになりません。このデーモンは、YaSTパーティショナのマルチパスの設定オプションを使用することによって起動できます。

アクティブ/パッシブマルチパスストレージLUNに対するインストール時にマルチパスI/Oを有効にするには:

  1. YaSTインストール設定ページでのインストール時に、パーティション分割をクリックして、YaSTパーティショナを開きます。

  2. カスタムパーティション - エキスパート用を選択します。

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

  4. multipathを起動します。

    YaSTがディスクの再スキャンを開始し、利用可能なマルチパスデバイスを表示します(/dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65など)。これが、以降の処理すべての対象デバイスになります。デバイスのパスとUUIDを書き留めてください。後で必要になります。

  5. 次へをクリックして、インストールを続行します。

  6. すべての設定が完了し、インストールが終了すると、YaSTは、ブートローダ情報の書き込みを開始し、システム再起動のカウントダウンを表示します。中止をクリックしてカウンタを中止し、<CTRL> + <ALT> + <F5>を押してコンソールにアクセスします。

  7. コンソールを使用して、/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ファイルを開きます。

      less /mnt/boot/grub/device.map
    4. /mnt/boot/grub/device.mapファイルでhd0エントリがパッシブパスをポイントしているかどうか判別し、次のいずれかを実行します。

      • アクティブパス: アクションは不要です。ステップ 8をスキップして、ステップ 9に進みます。

      • パッシブパス: 設定を変更し、ブートローダを再インストールする必要があります。ステップ 8に進みます。

  8. hd0エントリがパッシブパスをポイントする場合は、設定を変更し、ブートローダを再インストールします。

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

      mount -o bind /dev /mnt/dev
      
      mount -o bind /sys /mnt/sys
      
      mount -o bind /proc /mnt/proc
      
      chroot
    2. コンソールで、multipath -llを実行し、その出力をチェックして、アクティブパスを見つけます。

      パッシブパスにはghostフラグが付いています。

    3. /mnt/boot/grub/device.mapファイルでhd0エントリをアクティブパスに変更し、変更内容を保存し、ファイルを閉じます。

    4. MBRからのブートが選択されていた場合、/etc/grub.confは次のようになります。

      setup --stage2=/boot/grub/stage2 (hd0) (hd0,0)
      quit
    5. 次のコマンドを入力して、ブートローダを再インストールします。

      grub < /etc/grub.conf
    6. 次のコマンドを入力します。

      exit
      
      umount /mnt/*
      
      umount /mnt
  9. <CTRL> + <ALT> + <F7>を押して、YaSTグラフィック環境に戻ります。

  10. OKをクリックして、インストールを再起動します。

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

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

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

  3. インストール後、dm-multipath/etc/sysconfig/kernel:INITRD_MODULESに追加します。

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

  5. /sbin/mkinitrdを再実行して、initrdイメージを更新します。

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

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

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

  • multipath=offをカーネルコマンドラインに追加します。

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

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

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

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

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

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

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

注記
注記

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

ソフトウェアRAIDのデバイス名の指定は、必ず変更してください。

  1. 端末コンソールを開いて、rootユーザまたは同等の権限でログインします。

    特に指示のない限り、この端末を使用して、以降のステップでコマンドを入力します。

  2. ソフトウェアRAIDデバイスが現在マウントされているか、または実行中の場合、デバイスごとに次のコマンドを入力して、デバイスをマウント解除し、停止します。

    umount /dev/mapper/mpath0
    mdadm --misc --stop /dev/mapper/mpath0
  3. 次のように入力して、boot.mdサービスを停止します。

    /etc/init.d/boot.md stop
  4. 以降のコマンドで、boot.multipathサービスおよびmultipathdサービスを開始します。

    /etc/init.d/boot.multipath start
    /etc/init.s/multipathd start
  5. マルチパス処理サービスの開始後、ソフトウェアRAIDのコンポーネントデバイスが/dev/disk/by-idディレクトリにリストされているかどうか確認します。次のいずれかの操作を行います。

    • デバイスがリストされている: デバイス名に、デバイスマッパーマルチパスのデバイス名(/dev/dm-1など)へのシンボリックリンクがあるはずです。

    • デバイスがリストされていない: デバイスをフラッシュし、再検出することで、マルチパスサービスにデバイスを認識させます。

      この操作を行うには、次のコマンドを入力します。

      multipath -F
      multipath -v0

      これで、デバイスが/dev/disk/by-id内にリストされ、デバイスマッパーマルチパスのデバイス名へのシンボリックリンクを持ちます。次に例を示します。

      lrwxrwxrwx 1 root root 10 2011-01-06 11:42 dm-uuid-mpath-36006016088d014007e0d0d2213ecdf11 -> ../../dm-1
  6. 次のように入力して、boot.mdサービスとRAIDデバイスを再起動します。

    /etc/init.d/boot.md start
  7. 次のように入力して、ソフトウェアRAIDの状態をチェックします。

    mdadm --detail /dev/mapper/mpath0

    RAIDのコンポーネントデバイスは、そのデバイスマッパーマルチパスのデバイス名(/dev/disk/by-idディレクトリにデバイスのシンボリックリンクとしてリストされている)と一致する必要があります。

  8. 新しいinitrdを作成して、デバイスマッパーマルチパスのサービスが再起動時にRAIDサービスの前にロードされるようにしてください。mkinitrdの実行が必要なのは、ルート(/)デバイスまたはその一部(/var/etc/logなど)がSAN上にあり、マルチパスのブートが必要な場合のみです。

    以下を入力してください。

    mkinitrd -f 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

7.14 新規デバイスのスキャン(再起動なし)

ご使用のシステムがマルチパス処理用に設定されており、後からSANにストレージを追加する必要がある場合は、rescan-scsi-bus.shスクリプトを使用して新しいデバイスをスキャンすることができます。デフォルトでは、このスクリプトは典型的なLUN範囲ですべてのHBAをスキャンします。

警告
警告

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

構文

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

コマンドラインでホストを指定するか(廃止予定)、--hosts=LISTオプション(推奨)を使用することができます。

オプション

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

オプション

説明

-l

LUN 0~7のスキャンを起動。[デフォルト: 0]

-L NUM

LUN 0~NUMのスキャンを起動。[デフォルト: 0]

-w

ターゲットデバイスIDが0~15をスキャンします。[デフォルト: 0~7]

-c

チャネル0または1のスキャンを有効にします。[デフォルト: 0]

-r
--remove

デバイスの削除を有効にします。[デフォルト:無効]

-i
--issueLip

ファイバチャネルLIPのリセットを発行します。[デフォルト:無効]

--forcerescan

既存デバイスを再度スキャンします。

--forceremove

各デバイスを削除し、再度追加します。

警告
警告

このオプションは危険なので、注意して使用してください。

--nooptscan

0が検出できない場合は、LUNの検索を中止しないでください。

--color

色付きのプレフィクス、OLD/NEW/DELを使用します。

--hosts=LIST

LIST内のホストだけをスキャンします。ここでLISTは、単一の値と範囲をカンマで区切ったリストです。スペースは使用できません。

--hosts=A[-B][,C[-D]]
--channels=LIST

LIST内のチャネルだけをスキャンします。ここでLISTは、単一の値と範囲をカンマで区切ったリストです。スペースは使用できません。 

--channels=A[-B][,C[-D]]
--ids=LIST

LIST内のターゲットIDだけをスキャンします。ここでLISTは、単一の値と範囲をカンマで区切ったリストです。スペースは使用できません。 

--ids=A[-B][,C[-D]]
--luns=LIST

LIST内のLUNだけをスキャンします。ここでLISTは、単一の値と範囲をカンマで区切ったリストです。スペースは使用できません。

--luns=A[-B][,C[-D]]

手順

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

  1. ストレージサブシステムで、ベンダのツールを使用してデバイスを割り当て、そのアクセス制御設定を更新して、Linuxシステムが新しいストレージをアクセスできるようにします。詳細については、ベンダのマニュアルを参照してください。

  2. すべてのターゲットをスキャンしてホストの有無を調べ、LinuxカーネルのSCSIサブシステムのミドルレイヤに新しいデバイスを認識させます。端末コンソールのプロンプトで、次のように入力します。

    rescan-scsi-bus.sh [options]
  3. システムログ/var/log/messagesファイル)をチェックしてスキャニングの進行状況を調べます。端末コンソールのプロンプトで、次のように入力します。

    tail -30 /var/log/messages

    このコマンドは、ログの最後の30行を表示します。次に例を示します。

    # tail -30 /var/log/messages
    . . .
    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. ステップ 2からステップ 3まで繰り返し、新しいデバイスに接続しているLinuxシステム上の他のHBAアダプタを介して、パスを追加します。

  5. multipathコマンドを実行して、DM-MPIO設定用のデバイスを認識します。端末コンソールのプロンプトで、次のように入力します。

    multipath

    これで、新しいデバイスをマルチパス処理用に設定できます。

7.15 パーティショニングされた新規デバイスのスキャン(再起動なし)

本項の例を使用して、新たに追加したマルチパスLUNを再起動なしで検出します。

警告
警告

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

  1. 端末コンソールを開き、rootユーザとしてログインします。

  2. すべてのターゲットをスキャンしてホストの有無を調べ、LinuxカーネルのSCSIサブシステムのミドルレイヤに新しいデバイスを認識させます。端末コンソールのプロンプトで、次のように入力します。

    rescan-scsi-bus.sh [options]

    rescan-scsi-bus-shスクリプトの構文とオプション情報の詳細については、7.14項 「新規デバイスのスキャン(再起動なし)」を参照してください。

  3. 次のように入力して、デバイスが認識されていること(リンクに新しいタイムスタンプが付いているかどうかなど)を確認します。

    ls -lrt /dev/dm-*

    次のように入力して、/dev/disk/by-id内のデバイスを確認することもできます。

    ls -l /dev/disk/by-id/
  4. 次のように入力して、新しいデバイスがログに表示されることを確認します。

    tail -33 /var/log/messages
  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をトリガします。

    echo 'add' > /sys/block/<dm_device>/uevent

    たとえば、dm-8上のパーティションに対して、デバイスマッパーデバイスを生成するには、次のように入力します。

    echo 'add' > /sys/block/dm-8/uevent
  8. 次のコマンドを入力して、新しいパーティションのファイルシステムおよびラベルを作成します。

    mke2fs -j /dev/disk/by-id/dm-uuid-mpath-<UUID_partN>
    tune2fs -L data_vol3 /dev/disk/by-id/dm-uuid-<UUID_partN>

    UUID_part1を、実際のUUIDおよびパーティション番号(36006016088d014006e98a7a94a85db11_part1など)で置き換えます。

  9. 次の入力で、DM-MPIOを再起動して、エイリアスを読み込ませます。

    /etc/init.d/multipathd restart
  10. 次の入力で、デバイスがmultipathdによって認識されていることを確認します。

    multipath -ll
  11. テキストエディタで、/etc/fstabファイルにマウントエントリを追加します。

    この時点では、ステップ 5で作成したエイリアスは、まだ、/dev/disk/by-labelディレクトリにあります。マウントエントリを/dev/dm-9パスに追加した後、次回の再起動の前に、マウントエントリを次のように変更します。

    LABEL=data_vol3
  12. 次のように入力して、マウントポイントとして使用するディレクトリを作成し、デバイスをマウントします。

    md /data_vol3
    mount /data_vol3

7.16 マルチパスI/Oステータスの表示

マルチパスI/Oのステータスをクエリすると、マルチパスマップの現在のステータスが出力されます。

multipath -lオプションを使用すると、パスチェッカが最後に実行された時点での現行パスステータスが表示されます。ただし、パスチェッカは実行されません。

multipath -llオプションを使用すると、パスチェッカが実行され、パス情報が更新され、最後に、現在のステータス情報が表示されます。このオプションは、常に、パスステータスの最新情報を表示します。

  • 端末コンソールのプロンプトで、次のように入力します。

    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など)

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

  • デバイスのステータス

7.17 エラーになった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. 端末コンソールで、rootユーザとしてログインします。

  2. 次の入力で、デバイスI/Oに関して、フェールオーバーの代わりに待ち行列処理をアクティブにします。

    dmsetup message device_ID 0 queue_if_no_path

    device_IDを実際のデバイスのIDに置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。

    たとえば、次のように入力します。

    dmsetup message 3600601607cf30e00184589a37a31d911 0 queue_if_no_path
  3. 次の入力で、デバイスI/Oのフェールオーバーに戻ります。

    dmsetup message device_ID 0 fail_if_no_path

    このコマンドにより、ただちに、待ち行列に入ったすべてのI/Oがエラーになります。

    device_IDを実際のデバイスのIDに置き換えます。たとえば、次のように入力します。

    dmsetup message 3600601607cf30e00184589a37a31d911 0 fail_if_no_path

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

  1. 端末コンソールで、rootユーザとしてログインします。

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

  3. defaultsセクションとその閉じ括弧を非コメント化した後、次のようにdefault_features設定を追加します。

    defaults {
      default_features "1 queue_if_no_path"
    }
  4. /etc/multipath.confファイルの変更後、mkinitrdを実行してシステム上にINITRDを作成し、次に、再起動で変更内容を有効にします。

  5. デバイスI/Oのフェールオーバーに戻る準備ができたら、次のように入力します。

    dmsetup message mapname 0 fail_if_no_path

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

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

7.18 停止したI/Oの解決

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

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

    dmsetup message mapname 0 fail_if_no_path

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

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

  2. 端末コンソールのプロンプトで、次のコマンドを入力して、待ち行列を再度アクティブにします。

    dmsetup message mapname 0 queue_if_no_path

7.19 MPIOのトラブルシューティング

本項では、MPIOに関するいくつかの既知の問題と、考えられる解決手段について説明します。

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

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

SLES 11 SP1用のマルチパスツール0.4.8以前では、multipath{)セクションの個別のmultipaths定義内のprio設定で、defaults{}またはdevices{}セクションのprio設定を上書きすることができました。

7.19.2 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"

7.19.3 技術情報ドキュメント

SUSE Linux Enterprise ServerのマルチパスI/Oの問題のトラブルシューティングについては、Novellサポートナレッジベースにある、次のTID (技術情報ドキュメント)を参照してください。

7.20 次に行う作業

ソフトウェアRAIDを使用したい場合は、デバイス上でファイルシステムを作成してから、ソフトウェアRAIDの作成と設定をしてください。詳細については、次のリンクを参照してください。

このページを印刷