虚拟机如何增加iSCSI存储连接:从零到挂载的完整操作指南
给虚拟机增加iSCSI存储连接,本质上就是两件事:先让虚拟机的网络能通到iSCSI目标服务器,再在虚拟机内部用发起端(Initiator)登录目标端(Target),把它当作一块新硬盘来分区、格式化、挂载使用。 整个过程的核心命令和配置文件并不复杂,关键在于网络连通性验证和CHAP认证参数的匹配。
无论你用的是VMware ESXi、KVM还是VirtualBox,基础逻辑都一样:虚拟机通过网卡访问iSCSI存储设备的IP地址,由操作系统内置或安装的iSCSI发起端完成身份验证后,将远程存储块设备映射为本地磁盘,下面按实操顺序拆解每一步。
虚拟机的网络前提:iSCSI走的是IP网络
iSCSI协议把SCSI命令封装在TCP/IP包里传输,所以虚拟机和iSCSI存储之间的网络必须互通,这是很多人配置失败的第一个坑。
- 确认虚拟机的网络模式:如果虚拟机用NAT模式,它在内网IP段里,但能否到达iSCSI存储的IP取决于宿主机网络配置;桥接模式最直接,虚拟机直接拿到与存储同网段的IP;仅主机模式则基本无法访问外部iSCSI目标。
- 测试连通性:在虚拟机内用
ping <iSCSI存储IP>确认基础网络可达,如果不通,先排查虚拟机网络的虚拟交换机/VLAN设置以及存储侧是否允许该网段访问。 - 端口和带宽:iSCSI默认使用3260端口,确保中间没有防火墙策略拦截,如果有条件,建议为iSCSI单独划一个网络平面,避免和生产流量抢带宽,业内专家指出,在虚拟化环境中为存储流量做网络隔离,能显著降低I/O延迟抖动。
Linux虚拟机配置iSCSI存储连接的详细步骤
以最常见的CentOS/RHEL/Ubuntu系为例,完整走一遍从安装软件包到挂载使用的流程。
环境准备与软件安装
# 安装iscsi发起端工具 # CentOS/RHEL yum install -y iscsi-initiator-utils # Ubuntu/Debian apt install -y open-iscsi # 启动并设置开机自启 systemctl enable --now iscsid systemctl enable --now iscsi
配置发起端名称与CHAP认证
iSCSI发起端有一个唯一的IQN名称,通常格式为iqn.2026-01.com.example:client01,编辑/etc/iscsi/initiatorname.iscsi文件设置它,如果存储端启用了CHAP认证,需要在/etc/iscsi/iscsid.conf中写入正确的用户名和密码:
node.session.auth.authmethod = CHAP node.session.auth.username = your_username node.session.auth.password = your_password
修改完成后重启iscsid服务:systemctl restart iscsid。
发现和登录iSCSI目标
# 发现目标 iscsiadm -m discovery -t sendtargets -p 192.168.1.100:3260 # 登录目标 iscsiadm -m node -T iqn.2026-01.com.example:storage.target01 -p 192.168.1.100:3260 -l
登录成功后,系统会多出一个块设备,通常是/dev/sdb或/dev/sdc(取决于现有磁盘数量),用lsblk确认新设备是否出现。
分区、格式化与挂载
对新磁盘进行分区和文件系统创建:
# 查看新磁盘 lsblk # 假设新磁盘为/dev/sdb,创建XFS文件系统 mkfs.xfs /dev/sdb # 创建挂载点并挂载 mkdir -p /mnt/iscsi_data mount /dev/sdb /mnt/iscsi_data
要让它开机自动挂载,在/etc/fstab里加一行,这里有个细节:iSCSI设备是网络块设备,必须配合_netdev参数,否则系统可能在网络就绪前尝试挂载导致启动失败。
/dev/sdb /mnt/iscsi_data xfs defaults,_netdev 0 0
VMware ESXi环境下虚拟机挂载iSCSI存储的差异
在ESXi中,iSCSI存储可以挂载到宿主机层面再分配给虚拟机,也可以直接在虚拟机内部作为独立存储使用,如果你想让虚拟机看到一个独立的iSCSI LUN,操作路径是:先在ESXi的“存储适配器”中添加iSCSI软件适配器,配置目标地址和CHAP凭据,发现并添加LUN到数据存储,然后在虚拟机设置里添加一块新硬盘,指向该数据存储,这种方式的优势是多个虚拟机可以共享同一个iSCSI LUN,适合需要共享存储的场景,比如运行Oracle RAC或Windows故障转移集群,行业共识认为,对于需要跨物理主机迁移或集群化部署的业务,ESXi层接入iSCSI比在每台虚拟机里独立配置发起端更利于统一管理。
iSCSI存储连接虚拟机时容易踩的坑和排查思路
配置过程中遇到问题,按下面几个方向逐一检查会快很多:
- 发现失败:确认iSCSI目标IP可达、3260端口开放,发起端IQN已在存储侧添加为允许访问的客户端。
- 登录成功但看不到磁盘:检查存储侧该IQN是否映射了LUN,以及发起端是否需要执行
iscsiadm -m session -R重新扫描会话。 - CHAP认证报错:用户名密码区分大小写,有些人会在存储端和发起端配了不同的秘密,可以用
iscsiadm -m node -T <target> -p <ip> --op update -n node.session.auth.password -v <密码>来在线修改。 - 性能异常:确认虚拟机网卡是不是千兆或更高,检查是否启用了jumbo frame,存储端和交换机侧MTU是否一致,MTU不匹配会导致分片重组开销增大,I/O延迟明显上升。
多台虚拟机共享同一iSCSI存储的注意事项
如果三台业务虚拟机挂载同一个iSCSI LUN,并且使用集群文件系统(如GFS2、OCFS2),需要保证每台虚拟机的发起端IQN都在存储侧注册,但如果是普通文件系统(ext4、XFS),同一时刻只能有一台虚拟机挂载并写入,否则数据损坏风险极高,近年来,虚拟化平台厂商普遍建议对共享块存储配合集群管理软件或分布式文件系统来使用,价格层面,iSCSI存储没有额外的授权费用,主要开销在存储设备和以太网交换机的采购或租用上,如果采用云上部署,部分云厂商的块存储也提供类iSCSI的挂载方式,按容量和IOPS计费,具体费用根据地域和可用区的存储类型差异较大,建议以当地云服务商的实际报价为准。
关于虚拟机iSCSI存储连接的常见疑问(Q&A)
虚拟机配置iSCSI存储连接需要额外安装驱动吗?
Linux主流发行版自带open-iscsi或iscsi-initiator-utils软件包,Windows Server从2008 R2起内置iSCSI发起程序,多数情况不需要额外驱动,Windows客户端在“服务器管理器”的“文件和存储服务”中可以直接找到iSCSI发起程序入口,输入目标IP和CHAP凭据即可连接,少数特殊网卡(如支持iSCSI offload的硬件TOE网卡)需要安装厂商驱动才能启用卸载功能,但普通场景用软件发起端就足够了。
虚拟机挂载的iSCSI存储突然断开,数据会丢失吗?
断开连接后已写入存储端缓存的数据通常不会丢失,但发起端内存中未确认的写入请求会丢失,恢复连接后,操作系统会重新扫描会话,文件系统层可能提示需要fsck检查,如果挂载时用了_netdev选项并配合自动重连机制(iscsiadm的node.session.timeo.replacement_timeout参数),大多数短暂断连可以自动恢复,停机中断时间决定于超时设置,存储端返回后,建议先执行iscsiadm -m session -R重新扫描,再检查dmesg中是否有I/O错误记录。
Windows虚拟机如何连接iSCSI存储?
在Windows Server或Windows 10/11中,打开“iSCSI发起程序”,在“目标”栏输入存储端的IP地址或DNS名称,点击“快速连接”,如果存储端启用了CHAP认证,需要在“配置”页签里填入发起程序名称和CHAP密码,连接成功后,在“磁盘管理”中会看到一块新磁盘处于脱机状态,先将其联机并初始化,再创建卷、格式化即可使用,整个流程在图形界面下完成的步骤比Linux命令行少,但基本逻辑完全一致。