Centos 7 服务器无法看到磁盘阵列磁盘

Centos 7 服务器无法看到磁盘阵列磁盘

语境

我有一台新配置了 CentOS 7 的服务器,通过光纤通道连接连接到磁盘阵列。

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

服务器 :公牛R423

磁盘阵列:DDN S2A6620(直接数据网络)

我仅使用磁盘阵列的两个控制器中的一个。

以下是命令输出的摘录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 品牌。

该磁盘阵列与 Red Hat 5 和 6 服务器兼容,所以我不确定它是否真的可以与 CentOS 7 服务器一起使用,但我决定尝试一下。

我已遵循磁盘阵列的用户指南,能够从服务器远程连接到它,并且已完成所有必要的配置(创建 2 个磁盘的 Raid 1 存储池,从该池创建虚拟磁盘以将磁盘呈现给服务器,使用 LUN 编号将虚拟磁盘呈现给主机,...)。但是用户指南没有提到服务器端的任何内容。


磁盘阵列配置

关于我在磁盘阵列端如何执行配置的一些细节。

磁盘阵列操作系统是 SFA OS v1.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. 创建与我的服务器对应的主机对象:

$ 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 仅发现一个启动器,其 ID 为 3。它对应于我的服务器的一台光纤通道主机:

$ 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*,对应于我的服务器本地磁盘。

按照 billyw 的建议,我跑了

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

但它没有输出任何东西,而且仍然没有任何新的东西/dev/sd*出现。


问题

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

最后,如何才能使这些磁盘出现在我的服务器视角上?


编辑

根据 billyw 的建议,我跑了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消息。我重新启动了lpfcnpiv这次禁用了它(我认为npiv在我的情况下是没用的):

$ modprobe -r lpfc
$ modprobe lpfc lpfc_enable_npiv=0

日志完全相同,但是npiv消息消失了。

我仍在调查日志,我的待办事项列表中的下一个错误是Warning! Received an indication that the LUN assignments on this target have changed. The Linux SCSI layer does not automatically remap LUN assignments.

答案1

要使磁盘出现在 下/dev/sd*,解决方案是重新启动光纤通道 HBA 驱动程序,如这个答案就我而言,情况是lpfc

阻止lpfc司机:

$ modprobe -r lpfc

启动lpfc驱动程序:

$ modprobe lpfc

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

下列的那条线

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

$ parted /dev/sdb mklabel gpt

  1. parted mkpart然后我使用命令创建了一个主分区,占据该设备上的所有空间(从 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 存储阵列,以便服务器有权访问它。在您的案例中,术语发起者指服务器上的光纤通道 HBA,术语目标指DDN存储阵列上将呈现LUN的端口。

总结一下步骤:

  • 显示存储阵列检测到的启动器,使用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

如果您计划将来更多地使用光纤通道,并且不想生活在狂野的西部,我还建议您学习分区。

相关内容