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に対応し、次の手順に従います)。
$ application delete presentation * $ application delete Host * $ delete virtual_disk * $ delete pool *
$ create pool raid_level=raid1 number=2
number
は、プールのディスクの数を表します。作成されたプールのIDは7です。
$ create virtual_disk capacity=max pool=7
仮想ディスクは、先ほど作成したプールに基づいており、そのすべてのストレージ容量を使用します。
$ application create Host name=io1 ostype=linux
$ 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
$ 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.
です。
ディスクを/dev/sd*
の下に表示するには、 この回答 で説明されているように、解決策はファイバーチャネルHBAドライバーを再起動することでした。私の場合、それはlpfc
でした:
lpfc
ドライバーを停止します:
$ modprobe -r lpfc
lpfc
ドライバーを開始します:
$ modprobe lpfc
次に、私のデバイスは/dev/sdb
の下に表示されました。その後、GregLが述べたように、デバイスをパーティションに分割し、特定のファイルシステムでフォーマットする必要がありました。
次の そのスレッド :
parted
mklabel
のコマンドを使用して、ディスク上にGPTパーティションテーブルを作成しました。$ parted /dev/sdb mklabel gpt
parted
mkpart
のコマンドを使用して、最適な配置でそのデバイスのすべてのスペース(0%から100%)を占めるプライマリパーティションを作成しました。$ parted --align optimal /dev/sdb mkpart primary 0% 100%
それは私にパーティション/dev/sb1
を与えました。
xfs
でフォーマットしました(他のパーティションにはすでにそのファイルシステムを使用していました)。$ mkfs.xfs /dev/sdb1
mount /dev/sdb1 /mnt/disk_array/
そして今、すべてが正常に動作します:)
私の答えは あなたの製品に関するこのドキュメント 、特にセクション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
将来的にファイバーチャネルをさらに活用する予定で、西部開拓時代に住みたいと思わない場合は、ゾーニングについても学ぶことをお勧めします。