Centos 7服务器无法看到磁盘arrays磁盘

上下文

我有一个新的服务器与CentOS 7,通过光纤通道连接到磁盘arrays。

我想在服务器的文件系统上安装磁盘arrays的磁盘,然后在其上设置一个NFS服务器,使这个存储可用于群集中的所有节点(服务器和磁盘arrays都是一个小群集的一部分,pipe理)。

服务器:公牛R423

磁盘arrays: DDN S2A6620(DirectDatanetworking)

我只使用磁盘arrays的两个控制器之一。

以下是命令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) 

所以我认为我的服务器能很好的检测到FC HBA(光纤通道主机总线适配器),它似乎来自于Emulex品牌。

磁盘arrays与红帽5&6服务器兼容,所以我不确定它是否可以与CentOS 7服务器一起工作,但我决定尝试一下。

我已经按照磁盘arrays的用户指南,我已经能够从服务器远程连接到它,并且我已经完成了所有必要的configuration(创build2个磁盘的RAID 1存储池,创build一个虚拟磁盘该池将磁盘呈现给服务器,使用LUN号将虚拟磁盘呈现给主机…)。 但是用户指南并没有提到服务器端的任何信息。


磁盘arraysconfiguration

有关如何在磁盘arrays一侧执行configuration的一些详细信息。

磁盘arrays操作系统是SFA OS v1.3.0.8。 我find的最近的手册是这个 (v1.4.0)。 基本上这是我遵循的步骤(对应于文档的第3.6.5节,以及以下):

  1. 清理磁盘arrays

$ application delete presentation * $ application delete host * $ delete virtual_disk * $ delete pool *

  1. 创build一个存储池

$ create pool raid_level=raid1 number=2

number代表池的磁盘数量。 创build的池有ID 7。

  1. 根据该池创build一个虚拟磁盘

$ create virtual_disk capacity=max pool=7

虚拟磁盘基于我刚刚创build的池,并使用其所有存储容量。

  1. 创build一个对应于我的服务器的主机对象:

$ 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 $ app show discovered * | Initiator Identifier | | Index | Type | ID | node | port | Ctrl 0 | Ctrl 1 | 00003 FC 0x000001 0x20000000c99de40f 0x10000000c99de40f 1 Total FC Initiators: 1只有一个发现的启动器,ID为3.它对应于我的一台服务器的光纤通道主机:

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

它与磁盘arrays的控制器1相关联,而磁盘arrays实际上是我使用的唯一控制器。

$ application import discovered_initiator 3 host 3

  1. 向主机呈现虚拟磁盘

$ application create presentation virtual_disk 7 host 3

(我创build的虚拟磁盘的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/class/fc_host/host10/的一个链接,所以我想这给了我一些巴士的“身份证”。

但是这里是目录/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*符号链接,这对应于我的服务器本地磁盘。

正如比利的build议,我跑了

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

但它没有输出任何内容,而且还没有出现任何新的/dev/sd*


问题

我假设成功的磁盘应该显示为一些/dev/sd*/ 。 真的吗? 如果不是,这些磁盘应该在哪里出现?

最后,我如何让这些磁盘出现在我的服务器的angular度?


编辑

遵循billyw的build议,我运行echo 1 > /sys/class/fc_host/hostX/issue_lip 。 这里是日志 。

显然FLOGI错误是不相关的,因为我在一个循环拓扑,而不是结构拓扑。 不过,没有出现在/dev磁盘。

现在在这个线程之后 ,我重新启动了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消息中Link Up Event npiv not supported in loop topology 。 我重新启动lpfc ,这次禁用npiv (我认为npiv在我的情况下是无用的):

 $ modprobe -r lpfc $ modprobe lpfc lpfc_enable_npiv=0 

日志是相同的,但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. 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* ,解决scheme是重新启动光纤通道HBA驱动程序, 如此答案中所述 。 就我而言,这是lpfc

停止lpfc驱动程序:

 $ modprobe -r lpfc 

启动lpfc驱动程序:

 $ modprobe lpfc 

然后,我的设备出现在/dev/sdb 。 之后,如GregL所述,我需要对设备进行分区,然后使用给定的文件系统进行格式化。

之后的线程 :

  1. 我使用parted mklabel的命令在磁盘上创build了一个GPT分区表。

$ parted /dev/sdb mklabel gpt

  1. 然后,我使用parted mkpart的命令创build了占用该设备上所有空间的主分区(从0%到100%),并进行了最佳alignment:

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

这给了我一个分区/dev/sb1

  1. 之后,我用文件系统xfs格式化分区(我已经使用该文件系统为我的其他分区):

$ mkfs.xfs /dev/sdb1

  1. 最后我装了分区:

mount /dev/sdb1 /mnt/disk_array/

现在一切工作正常:)

我正在根据你的产品的这个文件回答这个问题 ,特别是第3.12节。 我不拥有你的产品,所以比你信任我更信任文档。

您需要configurationDDN存储arrays,以便服务器有权访问它。 在您的情况下,术语“ 启动器”是指服务器上的光纤通道HBA,术语“ 目标”是指将呈现LUN的DDN存储arrays上的端口。

总结步骤:

  • 显示存储arrays检测到的启动器,使用APPLICATION SHOW DISCOVERED_INITIATOR *
  • 使用APPLICATION CREATE HOST INDEX=<index> NAME=<host name> OSTYPE=<ostype>创build一个主机(这似乎只是一种标签forms)
  • 使用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(将Xreplace为HBA编号):

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

如果您打算在未来更多地使用光纤通道,而不想生活在狂野西部,我还build议您了解分区。