4.5. 設定ファイルの devices セクション

multipath.conf 設定ファイルの devices セクションでストレージデバイスごとに設定できる属性を 表4.3「devices の属性」 に示します。そのデバイスを含むパスでは、multipath.conf ファイルの multipaths セクションに指定されている属性で上書きされない限り、この属性が使用されます。この属性は、multipath.conf ファイルの defaults セクションに設定されている属性より優先されます。
マルチパスに対応しているデバイスの多くは、デフォルトでマルチパス設定に含まれています。対応デバイスなど、デフォルトの設定値については、以下のいずれかのコマンドを実行して確認してください。
# multipathd show config
# multipath -t 
おそらく、こうしたデバイスの値を修正する必要はありませんが、必要が生じた場合は、設定ファイルにエントリーを追加すればデフォルト値を上書きすることができます。multipathd show config コマンドが表示する、目的のデバイスのデフォルト値をコピーして、変更したい値に書き換えることができます。
設定ファイルのこのセクションに、デフォルトで自動的に設定されないデバイスを追加する場合は、vendorproduct のパラメーターを設定する必要があります。値は /sys/block/device_name/device/vendor/sys/block/device_name>/device/model で検索できます。device_name は、マルチパス設定対象のデバイスです。以下に例を示します。
# cat /sys/block/sda/device/vendor
WINSYS  
# cat /sys/block/sda/device/model
SF2372
追加で指定するパラメーターは、使用するデバイスによって異なります。デバイスが active/active なら通常、追加でパラメーターを設定する必要はありません。path_grouping_policymultibus に設定する必要が生じることがあるかもしれませんが、その他に設定が必要となる可能性があるパラメーターには、no_path_retryrr_min_io があります。これらについては 表4.3「devices の属性」 で説明しています。
デバイスが active/passive であるにも関わらず、I/O を持つパスが自動的に passive パスに切り替えられる場合は、チェッカーの関数を、I/O をパスに送信しない関数に変更し、それが正しく動作するか検証する必要があります (これを行わないとデバイスはフェイルオーバーし続けます)。つまり、ほとんどの場合は、path_checkertur に設定するということになります。この設定は、Test Unit Ready コマンドに対応するすべての SCSI デバイスで機能します。Test Unit Ready コマンドは大半のデバイスで対応しています。
パスの切り替えに特殊なコマンドを必要とするデバイスにマルチパスを設定するには、ハードウェアハンドラーカーネルモジュールが必要になります。現在、利用可能なハードウェアハンドラーは emc です。このハンドラーが目的のデバイスに使用できない場合、そのデバイスへのマルチパス設定はできない可能性があります。

表4.3 devices の属性

属性説明
vendor device 属性が適用されるストレージデバイスのベンダー名 (例: COMPAQ) を指定します。
product device 属性が適用されるストレージデバイスの製品名 (例: HSV110 (C)COMPAQ) を指定します。
revision ストレージデバイスの製品リビジョン識別子を指定します。
product_blacklist 製品別にデバイスをブラックリスト指定するのに使用する正規表現を指定します。
alias_prefix デフォルトの "mpath" の代わりに、このデバイスタイプに使用する user_friendly_names 接頭辞。
hardware_handler
パスグループの切り替えや I/O エラーの処理時に、ハードウェア固有の動作を行うのに使用するモジュールを指定します。使用できる値を以下に示します。
1 emc: EMC ストレージアレイ用のハードウェアハンドラーです。
1 alua: SCSI-3 ALUA アレイ用のハードウェアハンドラーです。
1 hp_sw: Compaq/HP コントローラー用のハードウェアハンドラーです。
1 rdac: LSI/Engenio RDAC コントローラー用のハードウェアハンドラーです。
path_grouping_policy
未指定のマルチパスに適用する、デフォルトのパスグルーピングポリシーを指定します。使用できる値を以下に示します。
failover = 優先グループごとに 1 つのパス
multibus = 1 つの優先グループで有効なすべてのパス
group_by_serial = 検出されたシリアル番号ごとに 1 つの優先グループ
group_by_prio = パス優先値ごとに 1 つの優先グループ
group_by_node_name = ターゲットノード名ごとに 1 つの優先グループ
path_selector
次回の I/O 動作に使用するパスを決定する、デフォルトのアルゴリズムを指定します。使用できる値を以下に示します。
round-robin 0: パスグループ内の全てのパスをループスルーし、それぞれのパスに同負荷の I/O を送ります。
queue-length 0: 未処理の I/O 要求数が最も少ないパスに、次の I/O 群を送ります。
service-time 0: 推定処理時間が最も短いパスに、次の I/O 群を送ります。推定処理時間は、各パスに対する未処理の I/O の合計サイズを、その相対スループットで割ることにより求められます。
path_checker
パスの状態を判断するのに使用するデフォルトのメソッドを指定します。使用できる値を以下に示します。
readsector0: デバイスの最初のセクターを読み取ります。
tur: デバイスに対して TEST UNIT READY を発行します。
emc_clariion: EMC Clariion 固有の EVPDページ 0xC0 の問い合わせを行い、パスを特定します。
hp_sw: Active/Standby のファームウェアを搭載した HP ストレージアレイのパスの状態をチェックします。
rdac: LSI/Engenio RDAC ストレージコントローラーのパスの状態をチェックします。
directio: 直接 I/O を使用する最初のセクターを読み取ります。
features
マルチパスデバイスの追加デフォルト機能です。形式は "number_of_features_plus_arguments feature1 ..." となります。
features に使用できる値:
queue_if_no_path: no_path_retryqueue に設定するのと同じです。この機能の使用時に発生する可能性がある問題については 「queue_if_no_path 機能に関する問題」 を参照してください。
retain_attached_hw_handler: SCSI 層によりハードウェアハンドラーがパスデバイスに接続されている状態で、このパラメーターを yes に設定した場合は、multipath.conf ファイルで指定している hardware_handler の使用をデバイスに強制しません。SCSI 層によるハードウェアハンドラーの接続が行われていない場合は、通常通り、マルチパスで設定されているハードウェアハンドラーの使用が継続されます。デフォルト値は no です。
pg_init_retries n: 失敗するまでパスグループの初期化を最高 n 回再試行します。ここで、1 <= n <= 50 です。
pg_init_delay_msecs n: パスグループの初期化の再試行を、n ミリ秒間隔で待機します。ここで、0 <= n <= 60000 です。
prio
パスの優先値を得るために呼び出すデフォルトの関数を指定します。例えば、SPC-3 の ALUA ビットは悪用可能な prio 値を提供します。使用できる値を以下に示します。
const: すべてのパスに優先度 1 を設定します。
emc: EMC アレイのパス優先度を生成します。
alua: SCSI-3 ALUA 設定に基づいてパス優先度を生成します。Red Hat Enterprise Linux 7.3 以降では、デバイス設定で prio "alua exclusive_pref_bit" を指定すると、マルチパスは pref ビットセットのパスのみを含むパスグループを作成し、このパスグループに最高の優先度を与えます。
ontap: NetApp アレイのパスの優先度を生成します。
rdac: LSI/Engenio RDAC コントローラーのパスの優先度を生成します。
hp_sw: active/standby モードにおける Compaq/HP コントローラー用パスの優先度を生成します。
hds: Hitachi HDS Modular ストレージアレイのパスの優先度を生成します。
failback
パスグループのフェイルバックを管理します。
immediate の値を設定すると、active パスを含んでいる最も優先度の高いパスグループに直ちにフェイルバックします。
manual の値を指定すると、フェイルバックはすぐに行われず、オペレーター介入がある場合のみにフェイルバックします。
followover の値を指定すると、パスグループの最初のパスが active になったときに自動フェイルバックを実行します。これにより、別のノードがフェイルオーバーを要求しているときは、ノードが自動的にフェイルバックしなくなります。
「0」以上の数値で、フェイルバックの秒単位の遅延を指定します。
rr_weight priorities に設定すると、次のパスを選択する path_selector を呼び出すまでに送信する要求数の決定に rr_min_io を使用しません。送信する要求数は、rr_min_io に、prio 関数で決定されるパスの優先度を掛けて決定します。uniform に設定すると、全てのパスの重みが等しくなります。
no_path_retry
障害の発生したパスの使用を何回試行してからキュー待ちを無効にするか、その回数を指定します。
fail を指定すると、キュー待ちはせず直ちに失敗します。
queue を指定すると、パスが修復されるまでキュー待ちは停止しません。
rr_min_io 現在のパスグループで、次のパスに切り替えるまでにルーティングする I/O 要求数を指定します。この設定は、2.6.31 より前のカーネルを実行しているシステムにのみ適用されます。2.6.31 以降のシステムには、rr_min_io_rq を使用してください。デフォルト値は 1000 です。
rr_min_io_rq 現在のパスグループで、次のパスに切り替えるまでにルーティングする I/O 要求数を指定します。要求ベースの device-mapper-multipath を使用しています。現在のカーネルを実行しているシステムで使用してください。2.6.31 より前のバージョンのカーネルを実行しているシステムの場合は rr_min_io を使用してください。デフォルト値は 1 です。
fast_io_fail_tmo FC リモートポートで問題を検出してから、そのリモートポートでデバイスへの I/O が失敗するまでの scsi 層の待機時間 (秒) です。この値は dev_loss_tmo よりも小さくすることをお勧めします。これを off に設定すると、タイムアウトが無効になります。
dev_loss_tmo FC リモートポート上で問題を検出してから、システムから削除されるまでの scsi 層の待機時間 (秒) です。この値を無制限に設定するには 2147483647 秒または 68 年に設定します。
flush_on_last_del yes に設定すると、デバイスへの最後のパスが削除された時点で、multipathd デーモンがキュー待ちを無効にします。
user_friendly_names yes に設定すると、/etc/multipath/bindings ファイルを使った永続的で固有となるエイリアスが、mpathn の形式でマルチパスに割り当てられます。no に設定すると、 WWID がマルチパスのエイリアスに使用されます。ただし、設定ファイルの multipaths セクションで指定されるデバイス固有のエイリアスの方が、ここでの設定よりも優先されることになります。デフォルト値は no です。
retain_attached_hw_handler SCSI 層で、ハードウェアハンドラーがパスデバイスに接続されている状態で、このパラメーターを yes に設定した場合は、multipath.conf ファイルで指定している hardware_handler の使用をデバイスに強制しません。SCSI 層でハードウェアハンドラーの接続が行われていない場合は、通常通り、マルチパスで設定されているハードウェアハンドラーの使用が継続されます。デフォルト値は no です。
detect_prio yes に設定すると、デバイスで ALUA に対応しているかを最初にチェックします。対応している場合は、alua prioritizer をデバイスに割り当てます。デバイスが ALUA に対応していない場合は、通常通り prioritizer の特定を行います。
uid_attribute 固有のパス識別子を与えます。
delay_watch_checks (Red Hat Enterprise Linux Release 7.2 以降) 0 よりも大きい値に設定した場合、multipathd デーモンは、指定しているチェック回数の間、有効なパスを監視します。監視されているパスが再び失敗すると、パスが次に有効になったときに、delay_wait_checks で指定した連続的なチェック回数の間保持されるまで使用されません。これにより、信用できないパスがオンラインに戻ったときにすぐに使用されることを防ぐことができます。
delay_wait_checks (Red Hat Enterprise Linux Release 7.2 以降) 0 よりも大きい値に設定すると、オンラインに戻ったデバイスが、delay_watch_checks で指定されたチェック回数内に再び失敗し、次にオンラインに戻るときに、デバイスはマークされ、遅延が発生します。デバイスは、delay_wait_checks で指定されたチェック回数が経過するまで使用されません。
deferred_removeyes に設定すると、multipathd は最終パスデバイスが削除されるときに通常の削除ではなく遅延された削除を行います。これにより、通常の削除が行われ、削除に失敗したときに multipathed デバイスが使用中である場合、デバイスは最終ユーザーがデバイスを終了したときに自動的に削除されます。
skip_kpartx(Red Hat Enterprise Linux Release 7.3 以降) yes に設定すると、kpartx は自動的にデバイスにパーティションを作成しません。これにより、デバイスにパーティションテーブルがある場合でも、パーティションを作成せずにマルチパスデバイスを作成することができます。
max_sectors_kb(Red Hat Enterprise Linux Release 7.4 以降) マルチパスデバイスの初回アクティベートの前に、max_sectors_kb デバイスキューパラメーターを、マルチパスデバイスの基本的なすべてのパスで指定されている値に設定します。マルチパスデバイスの作成時には、デバイスは、パスデバイスから max_sectors_kb 値を継承します。手動で、この値をマルチパスデバイス向けに高くしたり、パスデバイス向けに低くすると、マルチパスデバイスは、パスデバイスが許可するよりも大きな I/O 操作を作成する場合があります。max_sectors_kb パラメーターを使用すると、パスデバイス上にマルチパスデバイスを作成する前に容易にこれらの値が設定でき、無効なサイズの I/O 操作が渡されることを回避できます。ユーザーがこのパラメーターを設定しないと、パスデバイスはデバイスドライバーにこれを設定させ、マルチパスデバイスがパスデバイスからこれを継承します。
detect_path_checker(Red Hat Enterprise Linux Release 7.4 以降) yes に設定すると、マルチパスにより、デバイスが ALUA に対応しているかどうかが確認されます。対応している場合は、tur パスチェッカーが自動的に使用されます。対応していない場合は、通常通りに path_checker が選択されます。
all_devsこのパラメーターを yes に設定すると、このデバイス設定に指定されたすべてのオプションによって、他のデバイス設定すべてのオプションの値 (設定ファイルの値とデフォルトの値両方) がオーバーライドされます。
all_tg_pt(Red Hat Enterprise Linux 7.6 以上のリリース) このオプションを yes に設定すると、mpathpersist がキーを設定するときに、1 つのホストから 1 つのターゲットポートに登録されたキーを 1 つのホストからすべてのターゲットポート向けとして処理します。1 つのターゲットに 1 つのホストではなく、1 つのホストからすべてのターゲットポートで登録キーを自動的に設定および消去するアレイで mpathpersist を適切に使用するには、yes に設定する必要があります。
マルチパス設定ファイルの device エントリーの例を以下に示します。
#	}
#	device {
#		vendor			"COMPAQ  "
#		product			"MSA1000         "
#		path_grouping_policy	multibus
#		path_checker		tur
#		rr_weight		priorities
#	}
#}
以下の設定は、すべての内蔵デバイス設定に対して no_path_retryfail に設定します。
devices {
	device {
		all_devs yes
		no_path_retry fail
	}
}