25.9. ストレージの相互接続をスキャンする

1 つまたは複数の相互接続のリセットやスキャンを実行できるコマンドがいくつかあり、1 回の動作で複数のデバイスを追加したり削除したりできる可能性があります。この種のスキャンは I/O 動作のタイムアウトによる遅延の原因になり、予期せぬデバイスの削除を招く恐れがあるため破壊的な影響を与える可能性があります。このため、スキャンの使用は 必要な場合のみ とすることを推奨します。さらに、ストレージの相互接続をスキャンする場合には次の制約に注意してください。
  1. 手順を実行する前に、対象となる相互接続上の I/O はすべて一時停止してフラッシュする必要があります。また、スキャン結果の確認は I/O を再開する前に行ってください。
  2. デバイスの削除と同様、システムがメモリー不足になっている状態での相互接続スキャンは推奨されません。メモリーのレベルを確認するには vmstat 1 100 コマンドを実行します。100 中 10 を超えるサンプルでメモリー空き領域が合計メモリーの 5% を下回る場合には相互接続のスキャンは推奨されません。また、swap 機能がアクティブになっている (vmstat 出力内の siso の欄がゼロ以外の値) 場合のスキャンも推奨されません。free コマンドもメモリー合計を表示することができます。
ストレージの相互接続をスキャンするには、次のコマンドを使用できます。
echo "1" > /sys/class/fc_host/host/issue_lip
Loop Initialization Protocol (LIP) を実行してから相互接続をスキャンし、現在バス上にあるデバイスを反映するよう SCSI 層を更新します。LIP は基本的にはバスのリセットであり、デバイスを追加したり削除したりすることになります。 この手順は、ファイバーチャネルの相互接続で新しい SCSI ターゲットを設定する場合に必要になります。
issue_lip は非同期の動作となることに注意してください。このコマンドはスキャン全体が終了する前に完了してしまうことがあります。/var/log/messages を監視して終了時点を確認する必要があります。
issue_lip に対応しているのは lpfc ドライバー、qla2xxx ドライバー、および bnx2fc ドライバーです。Red Hat Enterprise Linux 内の各ドライバーで対応している API 機能については、表25.1「ファイバーチャネルの API 機能」 を参照してください。
/usr/bin/rescan-scsi-bus.sh
Red Hat Enterprise Linux 5.4 よりこのスクリプトが同梱されています。デフォルトではシステム上のすべての SCSI バスがこのスクリプトによってスキャンされ、バス上の新しいデバイスを反映するよう SCSI レイヤーが更新されます。このスクリプトは、デバイスの削除や LIP の実行を可能にする追加のオプションも提供します。このスクリプトについてさらに詳しくは (既知の問題も含む) 「rescan-scsi-bus.sh による論理ユニットの追加と削除」 を参照してください。
echo "- - -" > /sys/class/scsi_host/hosth/scan
ストレージのデバイスまたはパスを追加する方法として 「ストレージデバイスまたはパスの追加」 で説明しているコマンドと同じものになります。ただし、この場合にはチャネル番号、SCSI ターゲット ID、および LUN などの値がワイルドカードになります。あらゆる識別子とワイルドカードの組み合わせが可能で、必要に応じて対象を絞り込むことも広げることも可能です。 この手順では LUN を追加しますが、その削除は行いません。
rmmod driver-name or modprobe driver-name
ドライバーによって管理されているすべての相互接続の状態を完全に再初期化します。極端な手段になりますが、特定の状況に適していると言えます。たとえば、異なるモジュールパラメーター値でドライバーを再起動する場合などに使用することができます。