3. 块存储协议基础与iSCSI接入

在 Pure Storage FlashArray 的接入体系中,块存储协议负责把主机操作系统的读写请求封装成可在以太网或光纤网络上传输的 SCSI 命令。iSCSI 是其中部署门槛最低、最常被用于 Linux 与 Windows 主机接入的一种方式:它把 SCSI 命令封装进 TCP/IP 报文,使主机无需专用 FC HBA 即可通过标准以太网卡访问 FlashArray 卷。理解 iSCSI 的关键,不是记住某个菜单路径,而是看清“主机侧发起者—网络—阵列侧目标”这条链路上各层如何协作,以及 IQN、发现、CHAP 三个要素分别解决什么问题。

iSCSI 协议栈与端到端路径

iSCSI 的协议栈自下而上可以这样理解:最底层是以太网与 IP 层,负责寻址和路由;其上是 TCP 层,提供可靠、有序的字节流;再往上是 iSCSI 层,它把 SCSI CDB(命令描述块)、数据与状态封装成 iSCSI PDU,并管理登录、会话与命令队列;最上层才是 SCSI 命令集本身,例如 READ(10)、WRITE(10)、INQUIRY。主机侧由 iSCSI initiator(发起者)实现这套栈,FlashArray 侧由 iSCSI target(目标)实现。一次读请求的典型路径是:应用发起读 → 文件系统/卷管理器生成 SCSI 读命令 → iSCSI initiator 封装为 PDU → TCP/IP 封装 → 以太网传输 → FlashArray 目标端口解封装 → 阵列定位到对应卷并返回数据。这条链路上任何一层配置错误,都会表现为主机看不到盘、盘容量异常或 I/O 超时。

iSCSI 端到端协议栈与接入路径 主机侧 Initiator 应用 / 文件系统 生成 SCSI 读写请求 SCSI 命令层 READ(10) / WRITE(10) iSCSI Initiator 封装 PDU / 会话管理 TCP / IP 端口 3260 / 可靠传输 以太网 NIC 10/25 GbE 以太网 交换机 / VLAN MTU 1500/9000 TCP 3260 FlashArray 侧 Target iSCSI 目标端口 IQN: ...:ct0.eth2 iSCSI 目标端口 IQN: ...:ct1.eth3 主机组 Host Group(CHAP 策略 / LUN 映射) 按 IQN 识别主机,按组统一授权 卷 Volume LUN 0 / 容量 卷 Volume LUN 1 / 容量 Purity 卷映射与访问控制 仅允许已授权 IQN 访问对应 LUN 未授权主机登录成功但看不到卷 PDU 解封装

IQN 命名:主机的唯一身份

iSCSI 用 IQN(iSCSI Qualified Name)标识发起者和目标。标准格式为 iqn.<日期>.<反向域名>:<自定义标识>,例如 iqn.2024-06.com.example:linux-db01。日期是域名注册的年份和月份,反向域名保证全球唯一,冒号后的部分由组织自行分配。FlashArray 的目标 IQN 通常形如 iqn.2010-06.com.purestorage:flasharray.<序列号>,每个 iSCSI 端口有独立 IQN。主机侧 IQN 必须唯一,否则两台主机同时登录会互相干扰。在 Linux 上,/etc/iscsi/initiatorname.iscsi 保存发起者名称;在 Windows 上,由 iSCSI 发起程序在“配置”页显示。规划时应把 IQN 与主机名、用途对应起来,例如 iqn.2024-06.com.example:win-app01,便于在阵列主机组中识别。

发现机制:主机如何找到目标

发现(Discovery)解决“主机怎么知道阵列有哪些目标门户”的问题。常用方式是 SendTargets:主机向阵列 iSCSI 端口的 IP 和 3260 端口发起发现会话,阵列返回可登录的目标 IQN 与门户列表。Linux 使用 iscsiadm -m discovery -t sendtargets -p <阵列IP>:3260,Windows 在“发现”页添加目标门户。发现完成后,主机侧会记录目标记录,再执行登录(login)建立会话。需要注意:发现只负责“看到目标”,不等于“能访问卷”;能否看到卷取决于后续的主机组与卷映射。若发现成功但登录后无盘,应优先检查映射关系,而不是反复排查网络。

CHAP 认证:双向身份校验

CHAP(Challenge Handshake Authentication Protocol)用于在 iSCSI 登录阶段校验身份,防止未授权主机接入。它分单向和双向:单向 CHAP 由阵列校验主机;双向 CHAP 则双方互相校验。配置时需要在阵列主机对象上设置 CHAP 用户名与密码,并在主机侧发起程序中填入相同凭据。CHAP 密码通常要求 12~16 位、包含大小写与数字。若主机侧未配置 CHAP 而阵列要求,登录会失败并提示认证错误;若密码不一致,同样无法建立会话。生产环境建议对主机启用 CHAP,尤其是跨网段或共享以太网场景。

FlashArray 上的主机组、卷映射与主机接入

在 FlashArray 的 Purity 界面中,接入流程围绕“主机—主机组—卷—映射”四个对象展开。典型操作如下:先在 Storage → Hosts 创建主机,填入主机 IQN;再创建主机组(Host Group),把同业务、同权限的主机加入同一组;随后创建卷(Volume)并设置容量;最后把卷映射给主机组,指定 LUN。映射完成后,主机侧重新扫描即可看到新磁盘。

下面给出一组教学示例参数(非实测结果,仅用于说明配置关系):阵列管理 IP 为 10.20.30.40,iSCSI 端口 IP 为 10.20.31.11 与 10.20.31.12;Linux 主机 IQN 为 iqn.2024-06.com.example:linux-db01,Windows 主机 IQN 为 iqn.2024-06.com.example:win-app01;创建主机组 hg-prod,卷 vol-db-01 容量 500G,映射 LUN 0。Linux 侧关键命令如下:

# 发现目标
iscsiadm -m discovery -t sendtargets -p 10.20.31.11:3260

# 登录目标
iscsiadm -m node -T iqn.2010-06.com.purestorage:flasharray.xxxx -p 10.20.31.11:3260 -l

# 查看会话与磁盘
iscsiadm -m session
lsblk

Windows 侧则在“iSCSI 发起程序”中输入目标门户 IP,发现后登录目标,再在“磁盘管理”中联机并初始化新磁盘。判断接入是否成功,可观察三个信号:iscsiadm -m session 显示已登录会话;lsblk 或磁盘管理出现对应容量磁盘;阵列界面中该主机的连接状态为已连接。若会话已建立但无磁盘,检查卷是否映射到该主机所在主机组、LUN 是否冲突;若登录失败,检查 CHAP 凭据与网络连通性。完成接入后,建议在主机侧对多路径、队列深度和文件系统做进一步配置,以匹配业务负载。

IQN 是主机在阵列中的身份,主机组是权限边界,卷映射是访问入口,CHAP 是登录门禁。四者缺一,接入链路就不完整。