web-dev-qa-db-ja.com

Centos 7サーバーがディスクアレイディスクを認識できない

環境

CentOS 7で新たにプロビジョニングされたサーバーがあり、ファイバーチャネル接続でディスクアレイに接続されています。

ディスクアレイのディスクをサーバーのファイルシステムにマウントしてから、NFSサーバーをセットアップして、このストレージをクラスター内のすべてのノードで使用できるようにします(サーバーとディスクアレイの両方が小さなクラスターの一部です。 m管理)。

サーバー:Bull R423

ディスクアレイ:DDN S2A6620(DirectData Network)

ディスクアレイの両方のコントローラーの一方のみを使用しています。

コマンドlspci出力の抜粋を次に示します。

# lspci
85:00.0 Fibre Channel: Emulex Corporation Saturn-X: LightPulse Fibre Channel Host Adapter (rev 03)
85:00.1 Fibre Channel: Emulex Corporation Saturn-X: LightPulse Fibre Channel Host Adapter (rev 03)

私のサーバーは、Emulexブランドのように見えるFC HBA(ファイバーチャネルホストバスアダプター)をうまく検出すると思います。

ディスクアレイはRedHat 5&6サーバーと互換性があるため、CentOS 7サーバーで実際に動作するかどうかはわかりませんが、試してみることにしました。

ディスクアレイのユーザーガイドに従い、サーバーからリモートでそれに接続でき、必要なすべての構成を実行しました(2つのディスクのRAID 1ストレージプールの作成、仮想ディスクの作成そのプールはディスクをサーバーに提示し、仮想ディスクをホストにLUN番号で提示します...)。しかし、ユーザーガイドにはサーバー側については何も書かれていません。


ディスクアレイ構成

ディスクアレイ側で構成を実行する方法についての詳細。

ディスクアレイOSはSFAOSv1.3.0.8です。私が見つけた最も近いマニュアルは これ (v1.4.0)です。基本的に、私が実行した手順は次のとおりです(ドキュメントのセクション3.6.5に対応し、次の手順に従います)。

  1. ディスクアレイのクリーニング

$ application delete presentation * $ application delete Host * $ delete virtual_disk * $ delete pool *

  1. ストレージプールを作成する

$ create pool raid_level=raid1 number=2

numberは、プールのディスクの数を表します。作成されたプールのIDは7です。

  1. そのプールに基づいて仮想ディスクを作成します

$ create virtual_disk capacity=max pool=7

仮想ディスクは、先ほど作成したプールに基づいており、そのすべてのストレージ容量を使用します。

  1. サーバーに対応するHostオブジェクトを作成します。

$ application create Host name=io1 ostype=linux

  1. 検出されたイニシエーターをホストとの関係にインポートします。

$ app show discovered * | Initiator Identifier | | Index | Type | ID | node | port | Ctrl 0 | Ctrl 1 | 00003 FC 0x000001 0x20000000c99de40f 0x10000000c99de40f 1 Total FC Initiators: 1検出されたイニシエーターは1つだけで、IDは3です。これは、サーバーのファイバーチャネルホストの1つに対応します。

$ cat /sys/class/fc_Host/host10/port_name 0x10000000c99de40f

これは、実際に使用している唯一のコントローラーであるディスクアレイのコントローラー1に関連付けられています。

$ application import discovered_initiator 3 Host 3

  1. ホストに仮想ディスクを提示する

$ application create presentation virtual_disk 7 Host 3

(作成した仮想ディスクのIDは7です)

仮想ディスクとストレージプールの両方が準備完了状態にあるように見えます。


問題

私はおそらくサーバーにディスクを提示したので、そのストレージスペースをファイルシステムとしてサーバーにマウントします

/dev/ディレクトリをチェックインしようとしました。今のところ、sdaディスクのみがマウントされています(私のサーバーのハードドライブ)。 /dev/のすべてのファイルについて問い合わせたところ、ファイバーチャネルまたはScsiと関係がある可能性のあるファイルがいくつか見つかりました。

  • /dev/bsg/は、Linux SCSI汎用ドライバー専用のディレクトリであり、/dev/bsg/fc_Host9/dev/bsg/fc_Host10が含まれています。
  • /dev/lpfcmgmtはEmulexドライバー専用です。
  • /dev/tgt、SCSIターゲットによって使用されます。

sg3_utilsをインストールし、fc_Host10でスキャンを実行しました。

$ sg_scan /dev/bsg/fc_Host10
/dev/bsg/fc_Host10: scsi0 channel=0 id=0 lun=0 [em]

そのスキャンコマンドを実行した後も、追加の/dev/sd*が見つかりませんでした。

さらに、/sys/class/fc_Host/host10//sys/devices/pci0000:80/0000:80:07.0/0000:85:00.1/Host10/fc_Host/host10へのリンクなので、バスの「ID」のようなものになると思います。

ただし、ディレクトリ/dev/disk/by-pathにあるファイルのリストは次のとおりです。

$ ll /dev/disk/by-path
total 0
lrwxrwxrwx. 1 root root  9 Aug  3 22:02 pci-0000:84:00.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx. 1 root root 10 Aug  3 22:02 pci-0000:84:00.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Aug  3 22:02 pci-0000:84:00.0-scsi-0:0:0:0-part2 -> ../../sda2

IDが一致しません。いずれにしても、それらは/dev/sda*へのシンボリックリンクであり、サーバーのローカルディスクに対応しています。

ビリーが示唆したように、私は走った

echo '- - -' > /sys/class/scsi_Host/host10/scan

しかし、何も出力せず、新しい/dev/sd*はまだ表示されていませんでした。


質問

成功すると、ディスクは/dev/sd*/として表示されるはずです。本当?そうでない場合、それらのディスクはどこに表示されますか?

最後に、これらのディスクをサーバーの観点から表示するにはどうすればよいですか?


編集

ビリーのアドバイスに従って、私はecho 1 > /sys/class/fc_Host/hostX/issue_lipを走らせました。これが logs です。

どうやら、私はファブリックトポロジではなくループトポロジにいるので、FLOGIエラーはここでは関係ありません。それでも、/devに表示されるディスクはありません。

this thread に続いて、lpfcドライバーを再起動しました:

$ modprobe -r lpfc
$ modprobe lpfc

その結果、 これらのログ/var/log/messagesになりました。

今回、/dev/sdb/dev/sdcが登場しました。しかし、私はそれらをマウントできませんでした:

$ mount /dev/sdb /mnt/db
mount: /dev/sdb is write-protected, mounting read-only
mount: unknown filesystem type '(null)'

そこで、lpfcを再起動したときに生成されるログを調査しようとしました。まず、そのLink Up Event npiv not supported in loop topologyメッセージに気づきました。私はlpfcを再起動し、今回はnpivを無効にします(私の場合、npivは役に立たないと思います):

$ modprobe -r lpfc
$ modprobe lpfc lpfc_enable_npiv=0

Logs はまったく同じですが、npivメッセージが消えました。

引き続きログを調査しています。TODOリストの次のエラーはWarning! Received an indication that the LUN assignments on this target have changed. The Linux SCSI layer does not automatically remap LUN assignments.です。

4

ディスクを/dev/sd*の下に表示するには、 この回答 で説明されているように、解決策はファイバーチャネルHBAドライバーを再起動することでした。私の場合、それはlpfcでした:

lpfcドライバーを停止します:

$ modprobe -r lpfc

lpfcドライバーを開始します:

$ modprobe lpfc

次に、私のデバイスは/dev/sdbの下に表示されました。その後、GregLが述べたように、デバイスをパーティションに分割し、特定のファイルシステムでフォーマットする必要がありました。

次の そのスレッド

  1. partedmklabelのコマンドを使用して、ディスク上にGPTパーティションテーブルを作成しました。

$ parted /dev/sdb mklabel gpt

  1. 次に、partedmkpartのコマンドを使用して、最適な配置でそのデバイスのすべてのスペース(0%から100%)を占めるプライマリパーティションを作成しました。

$ parted --align optimal /dev/sdb mkpart primary 0% 100%

それは私にパーティション/dev/sb1を与えました。

  1. その後、パーティションをファイルシステムxfsでフォーマットしました(他のパーティションにはすでにそのファイルシステムを使用していました)。

$ mkfs.xfs /dev/sdb1

  1. 最後に、パーティションをマウントしました。

mount /dev/sdb1 /mnt/disk_array/

そして今、すべてが正常に動作します:)

2

私の答えは あなたの製品に関するこのドキュメント 、特にセクション3.12に基づいています。私はあなたの製品を所有していないので、あなたが私を信頼するよりもドキュメントを信頼してください。

サーバーがアクセスを許可されるように、DDNストレージアレイを構成する必要があります。あなたのケースでは、用語initiatorはサーバー上のファイバーチャネルHBAを指し、用語targetは、LUNを提供するDDNストレージアレイのポートを指します。

手順を要約すると:

  • ストレージアレイが検出したイニシエーターをAPPLICATION SHOW DISCOVERED_INITIATOR *で表示します
  • APPLICATION CREATE Host INDEX=<index> NAME=<Host name> OSTYPE=<ostype>を使用してホストを作成します(これは単なるラベルの形式のようです)。
  • APPLICATION IMPORT DISCOVERED_INITIATOR=<initiator_id> Host=<Host-id>を使用して、ホストをイニシエーターにマップします
  • APPLICATION SHOW INITIATOR *を使用して、マッピングが正しいことを確認します
  • APPLICATION CREATE PRESENTATION INDEX=<index> Host=<Host> VIRTUAL_DISK=<vd-id> LUN=<lun-id>を使用して、仮想ディスクをホストに提示する
  • (仮想ディスクをすべてのホストポートに提示するための代替無差別モードがありますが、警告が付属しています)
  • APPLICATION SHOW PRESENTATION *を使用して、プレゼンテーションが正しいことを確認します

サーバー側では、次の方法でLUNを再スキャンできるはずです(XをHBA番号に置き換えます)。

echo '- - -' > /sys/class/scsi_Host/hostX/scan

将来的にファイバーチャネルをさらに活用する予定で、西部開拓時代に住みたいと思わない場合は、ゾーニングについても学ぶことをお勧めします。

0
billyw