RHEL 7.9 通过 FC 直连 Dell EMC Unity 400:多路径、磁盘扫描与空间配置指南

本文介绍 Red Hat Enterprise Linux 7.9 服务器通过 Fibre Channel(FC)直连 Dell EMC Unity 400 后,如何完成主机注册、LUN 映射、FC HBA 检查、DM-Multipath 配置、磁盘扫描、LVM/XFS 创建,以及 LUN 在线扩容。

适用范围:RHEL 7.9 数据盘、Dell EMC Unity 400、FC 直连、Linux Native DM-Multipath,非 SAN Boot。

高风险提醒pvcreatemkfswipefs 等命令会改写磁盘。执行前务必根据 WWID、容量、Unity LUN 名称 三项交叉确认目标盘。文件系统和 LVM 只能创建在 /dev/mapper/mpath* 或 WWID 对应的多路径设备上,不能直接使用 /dev/sdX

一、规划 FC 直连拓扑

1. 两路径拓扑

RHEL HBA Port 0 ───── Unity SPA FC Port
RHEL HBA Port 1 ───── Unity SPB FC Port

每个 LUN 通常能看到两条路径:一条到 SPA,另一条到 SPB。Unity 使用 ALUA,LUN 所属 SP 的路径一般为 optimized,另一 SP 的路径为 non-optimized。

2. 四路径拓扑

FC 直连是一对一连接。如果需要四条路径,主机通常需要四个 HBA 端口:

HBA Port 0 ───── SPA FC0
HBA Port 1 ───── SPB FC0
HBA Port 2 ───── SPA FC1
HBA Port 3 ───── SPB FC1

这样在任一 SP 成为 LUN owner 时,可拥有两条 optimized 路径,并保留另一 SP 的故障切换路径。

二、在 Unity 上配置主机和 LUN

在 Unity Unisphere 中完成以下操作:

  1. 确认 SPA、SPB 的 FC 前端端口均正常。
  2. 获取 RHEL 主机所有 FC HBA 端口的 WWPN。
  3. 创建 Host,操作系统类型选择 Linux,并添加所有 FC Initiator WWPN。
  4. 创建或选择 Storage Pool。
  5. 创建 LUN。
  6. 将 LUN 分配给该 Host,配置 Host Access。
  7. 确保同一台 Linux 主机的所有 WWPN 都属于同一个 Unity Host 对象。
  8. 检查 Initiator 状态,确认已登录、已注册。

FC 直连不需要交换机 zoning,但 Unity 侧的主机注册和 LUN masking 仍然必须配置。

三、检查 RHEL FC HBA

1. 安装所需工具

yum install -y device-mapper-multipath sg3_utils lsscsi sysfsutils

查看 HBA 型号和驱动:

lspci -nn | egrep -i 'fibre|fiber|fc'
lsmod | egrep 'qla2xxx|lpfc'

常见驱动:

  • QLogic:qla2xxx
  • Broadcom/Emulex:lpfc

2. 查看 FC 端口、WWPN 和链路状态

for h in /sys/class/fc_host/host*; do
    echo "===== $h ====="
    printf "WWPN:  "; cat "$h/port_name"
    printf "State: "; cat "$h/port_state"
    printf "Type:  "; cat "$h/port_type"
    printf "Speed: "; cat "$h/speed"
    printf "Supported: "; cat "$h/supported_speeds"
done

正常情况下应看到类似:

WWPN:  0x100000109bxxxxxx
State: Online
Type:  Point-To-Point
Speed: 16 Gbit

也可以查看详细信息:

systool -c fc_host -v

如果 port_state 不是 Online,优先检查光纤线、模块、HBA/Unity 端口速率、Unity FC 端口状态,以及 HBA 固件和驱动兼容性。

四、配置 DM-Multipath

1. 启用 multipathd

mpathconf --enable --with_multipathd y
systemctl enable multipathd
systemctl restart multipathd
systemctl status multipathd

2. 优先使用 RHEL 内置设备规则

RHEL 7.9 的 device-mapper-multipath 通常已经包含 Dell EMC/DGC 的设备规则。建议先使用最小 /etc/multipath.conf

defaults {
    user_friendly_names yes
    find_multipaths yes
    polling_interval 5
}

加载配置:

multipathd reconfigure
multipath -r

查看系统最终展开的配置:

multipath -t

重点确认输出中是否存在适用于 vendor "DGC"、Unity VRAID 的设备规则。不要在没有验证的情况下覆盖系统内置配置。

3. 内置规则未正确识别时的参考配置

只有在 multipath -t 缺少相应规则,或实际路径未按 ALUA 正确分组时,才考虑增加以下设备段。正式使用前应对照当前 Unity Host Connectivity Guide 和 Red Hat 支持矩阵核验:

devices {
    device {
        vendor                       "DGC"
        product                      ".*"
        product_blacklist            "LUNZ"
        path_grouping_policy         group_by_prio
        path_selector                "round-robin 0"
        path_checker                 emc_clariion
        hardware_handler             "1 alua"
        prio                         alua
        failback                     immediate
        rr_weight                    uniform
        no_path_retry                60
        retain_attached_hw_handler   yes
        detect_prio                  yes
    }
}

重新加载并检查:

multipathd reconfigure
multipath -r
multipath -ll
不要配置 blacklist { devnode "^sd.*" },否则可能把 Unity 的所有底层路径一起屏蔽。若需排除本地系统盘,最好使用本地盘的精确 WWID,而不是不稳定的 /dev/sda 名称。

五、扫描 Unity 新 LUN

Unity 完成 LUN 分配后,在 RHEL 上执行以下操作。

1. 扫描全部 SCSI Host

for h in /sys/class/scsi_host/host*; do
    echo "- - -" > "$h/scan"
done

udevadm settle

也可以使用:

rescan-scsi-bus.sh -a

生产环境中不要随意使用带删除行为的全量扫描参数,除非已经明确核对被移除的 LUN。

2. 重新加载多路径

multipathd reconfigure
multipath -r
udevadm settle

3. 查看扫描结果

lsscsi -t -g
lsblk -o NAME,TYPE,SIZE,VENDOR,MODEL,HCTL,WWN,MOUNTPOINT
multipath -ll

Unity LUN 的输出通常类似:

360060160xxxxxxxxxxxxxxxxxxxx dm-2 DGC,VRAID
size=500G hwhandler='1 alua' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| `- 2:0:0:1 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
  `- 3:0:0:1 sdc 8:32 active ready running

检查要点:

  • 同一个 LUN 只生成一个 multipath map 和一个 WWID。
  • 所有 /dev/sdX 路径都归入同一个 WWID。
  • 路径状态为 active ready running
  • 至少有一组 optimized 高优先级路径。
  • SPA、SPB 两侧路径都存在。
  • 路径数量与物理连接数量一致。

一组 prio=50、另一组 prio=10 通常是 Unity ALUA 的正常表现,不表示低优先级路径发生故障。

六、使用 LVM 和 XFS 创建数据空间

以下示例假设新 LUN 的多路径设备为 /dev/mapper/mpatha。实际环境也可能直接显示为 /dev/mapper/360060160...

1. 确认目标盘没有数据

multipath -ll mpatha
lsblk -f /dev/mapper/mpatha
wipefs -n /dev/mapper/mpatha

wipefs -n 只检查签名,不删除数据。

2. 推荐整块 LUN 直接创建 LVM PV

SAN LUN 用于 LVM 时通常无需额外分区:

pvcreate /dev/mapper/mpatha
vgcreate vg_unity /dev/mapper/mpatha
lvcreate -n lv_data -l 100%FREE vg_unity

创建 XFS:

mkfs.xfs /dev/vg_unity/lv_data

挂载:

mkdir -p /data
mount /dev/vg_unity/lv_data /data

验证:

findmnt /data
df -hT /data
pvs -o+devices
vgs
lvs

pvs -o+devices 应显示 PV 位于 multipath 设备上,而不是某一条 /dev/sdb 路径。

3. 配置开机挂载

获取文件系统 UUID:

blkid /dev/vg_unity/lv_data

/etc/fstab 中添加:

UUID=<文件系统UUID>  /data  xfs  defaults,_netdev  0 0

测试配置:

umount /data
mount -a
findmnt /data
df -hT /data

对于非关键数据盘,如果不希望 SAN 暂时不可用导致系统启动长时间等待,可以结合实际启动策略考虑:

UUID=<文件系统UUID>  /data  xfs  defaults,_netdev,nofail,x-systemd.device-timeout=120  0 0

关键业务磁盘不要盲目添加 nofail,否则存储未挂载时业务可能继续启动,并误将数据写入本地空目录。

七、Unity LUN 在线扩容

假设:

  • multipath 名称:mpatha
  • VG:vg_unity
  • LV:lv_data
  • 挂载点:/data
  • PV 直接创建在整块 multipath LUN 上,没有分区

1. 在 Unity 上扩展 LUN

例如将 LUN 从 500 GB 扩展到 1 TB。

2. 重新扫描该 map 的所有底层路径

MAP=mpatha
DMDEV=$(basename "$(readlink -f /dev/mapper/$MAP)")

for p in /sys/class/block/$DMDEV/slaves/*; do
    echo 1 > "$p/device/rescan"
done

udevadm settle

查看该 map 的底层路径:

ls -l /sys/class/block/$DMDEV/slaves/

3. 扩展 multipath map

multipathd resize map mpatha
multipath -r
multipath -ll mpatha

确认新容量:

blockdev --getsize64 /dev/mapper/mpatha
lsblk /dev/mapper/mpatha

4. 扩展 LVM PV 和 LV

pvresize /dev/mapper/mpatha
pvs
vgs

使用 VG 全部剩余空间:

lvextend -l +100%FREE /dev/vg_unity/lv_data

或者仅增加指定容量:

lvextend -L +200G /dev/vg_unity/lv_data

5. 扩展文件系统

XFS:

xfs_growfs /data

EXT4:

resize2fs /dev/vg_unity/lv_data

最终验证:

df -hT /data
pvs
vgs
lvs
multipath -ll mpatha

如果 PV 位于分区(如 /dev/mapper/mpatha1)上,LUN 扩容后还需先扩展 GPT/分区和 multipath 分区映射,再执行 pvresize。这也是 SAN LUN 用于 LVM 时通常推荐整盘创建 PV 的原因。

八、增加新 LUN 扩展现有 VG

除了扩大原 LUN,还可以在 Unity 新建 LUN,再加入现有 VG:

pvcreate /dev/mapper/mpathb
vgextend vg_unity /dev/mapper/mpathb
lvextend -l +100%FREE /dev/vg_unity/lv_data
xfs_growfs /data

验证:

pvs -o+devices
vgs
lvs
df -hT /data

九、常见问题排查

1. FC 端口不是 Online

for h in /sys/class/fc_host/host*; do
    echo "$h"
    cat "$h/port_state"
    cat "$h/port_type"
    cat "$h/speed"
done

检查光纤模块和跳线、HBA 与 Unity 端口速率、Unity FC 端口是否启用,以及 HBA 驱动和固件。

issue_lip 会重新初始化 FC 链路,可能影响该 HBA 上的所有业务 LUN,不要在生产环境随意执行:

echo 1 > /sys/class/fc_host/hostX/issue_lip

通常应先执行普通 SCSI scan。

2. HBA Online,但看不到 LUN

依次检查:

  1. Unity 是否添加了正确的 WWPN。
  2. 所有 WWPN 是否属于同一个 Host 对象。
  3. LUN 是否已经授予该 Host Access。
  4. Unity Initiator 是否显示已登录。
  5. 是否扫描了全部 SCSI Host。
  6. 系统日志中是否存在 FC、SCSI、ALUA 或 multipath 错误。
dmesg -T | egrep -i 'scsi|fc|qla|lpfc|multipath|dgc|alua'
lsscsi -t -g
multipathd show paths

3. 只有一条路径

常见原因:

  • 只连接了一个 HBA 端口。
  • 只连接了 SPA 或 SPB。
  • 某条 FC 链路未 Online。
  • Unity 仅注册了部分 WWPN。
  • LUN 没有分配给包含全部 Initiator 的 Host。
  • 第二条路径尚未扫描。

4. 能看到多个 /dev/sdX,但没有 mpath 设备

multipath -v3
multipathd show paths
multipathd reconfigure
multipath -r
multipath -ll

检查各路径 WWID:

/usr/lib/udev/scsi_id --whitelisted --device=/dev/sdb
/usr/lib/udev/scsi_id --whitelisted --device=/dev/sdc

同一个 Unity LUN 的所有路径必须返回同一个 WWID。如果启用了 find_multipaths yes 且目前只有一条路径,LUN 可能暂时不会自动建立 multipath map。应先修复第二条路径,不要直接在单路径 /dev/sdX 上创建文件系统。

5. LVM 报 Duplicate PV

pvs -o pv_name,pv_uuid,vg_name,devices
multipath -ll

检查 PV 是否误建在 /dev/sdX 上。不要直接照搬“拒绝全部 /dev/sd*”的 LVM filter,因为本地系统盘也可能是 /dev/sda。应根据本机系统盘、SAN WWID 和现有 LVM 布局定制 /etc/lvm/lvm.conf

十、生产环境建议

  1. 使用两块独立 HBA,降低单 HBA 故障风险。
  2. 至少分别连接 Unity SPA 和 SPB。
  3. 使用文件系统 UUID 配置挂载。
  4. LVM 只使用 multipath map,绝不使用任意 /dev/sdX 路径。
  5. 不要只依靠 mpatha 名称识别业务盘;应记录 Unity LUN 名称、WWID、容量、VG 和挂载点的对应关系。
  6. 新建 LUN 前检查 Unity Pool 物理容量,并为快照、复制保留空间。
  7. Thin LUN 需要同时监控 Linux df、LVM pvs/vgs/lvs 和 Unity Pool 使用率。
  8. 生产接入前分别进行 SPA、SPB 路径故障切换测试,并确认业务 I/O 持续。
  9. 核对 Dell E-Lab/Unity Host Connectivity Guide 中 Unity OE、HBA 固件、驱动和 RHEL 7.9 的兼容矩阵。
  10. RHEL 7.9 已进入扩展支持阶段,生产系统应确认 Red Hat ELS、安全补丁和升级策略。

总结

Unity FC 直连场景的关键顺序是:物理链路 Online → Unity 注册全部 WWPN → LUN 授权 → RHEL 扫描 SCSI → multipath 聚合 → 只在 multipath 设备上创建 LVM/文件系统。只要坚持以 WWID 为准、避免直接操作 /dev/sdX,并在投产前完成路径故障测试,就能建立稳定且可维护的存储访问环境。