iSCSI 服务器摘要本文全面介绍了 iSCSIInternet Small Computer System Interface技术的原理、架构与实战配置。主要内容包括iSCSI 服务介绍解释了 iSCSI 作为 IP SAN 技术的基本概念将 SCSI 协议封装在 TCP/IP 上实现网络存储传输。iSCSI 架构详细说明了 C/S 架构中的关键组件包括 Initiator客户端、Target服务器、IQN唯一标识符、Portal、LUN、ACL 和 TPG 等核心概念。配置 iSCSI Targets通过 targetcli 工具逐步演示如何创建 backstore 对象、配置 Target IQN、设置 ACL 访问控制、创建 LUN 以及管理 Portal涵盖交互式和非交互式两种配置方式。访问 iSCSI 存储指导客户端如何安装 iscsi-initiator-utils、发现目标、登录、格式化设备、持久化挂载以及安全断开连接。故障处理提供常见登录失败问题的排查方法特别是 IQN 不匹配导致的授权失败解决方案。本文适用于需要在 Linux 环境下部署和管理 iSCSI 存储系统的系统管理员和运维人员提供了从理论到实践的完整操作指南。一、iSCSI 服务介绍SCSISmall Computer System Interface小型计算机系统接口一种用于计算机和智能设备之间硬盘、软驱、光驱、打印机、扫描仪等连接标准。iSCSIInternet Small Computer System InterfaceInternet 小型计算机系统接口)又称为IP-SAN是IBM公司研究开发的IP SAN技术该技术是将现有SCSI接口与以太网络(Ethernet)技术结合基于TCP/IP的协议连接iSCSI服务端Target和客户端(Initiator)使得封装后的SCSI数据包可以在互联网传输最终实现iSCSI服务端提供存储给客户端。通常iSCSI使用专用的10 Gb以太网或更好的网络以最大程度地提高性能。从物理服务器到存储的电缆通常封闭在数据中心内并且理想情况下不直接连接到LAN网络所以SAN流量通常不加密以最大程度地提高性能。 为了实现WAN安全iSCSI管理员可以使用IPsec加密流量。二、iSCSI 架构iSCSI服务是C/S架构。访问的iSCSI目标在客户端系统上显示为本地且未格式化的SCSI快设备等同于通过SCSI布线、FC直连或FC交换光线连接的设备。InitiatoriSCSI客户端通常以软件方式部署也可以使用iSCSI Host Bus Adapters (HBAs) HBA硬件。 Initiator必须具有唯一的名称请参见IQN。• TargetiSCSI服务器上的iSCSI存储资源。 Target必须具有唯一的名称请参见IQN。 每个目标都提供一个或多个块设备或逻辑单元LUN-logical units。 在大多数情况下Target只提供一个设备但一台服务器可以提供多个目标。• IQNiSCSI Qualified Name全球唯一的名称用于标识发起者和目标。 IQN具有以下格式bash iqn.YYYY-MM.com.reversed.domain:name_string• YYYY-MM年和月。示例2020年6月为2020-06。该日期有助于确保IQN唯一性。• com.reversed.domain反向域名。 例如storage.redhat.fun的反向域名为cloud.laoma.www。• name_string用于标识您管理的特定目标。 如果服务器只具有一个目标则有时会省略此名称。• Portal指定服务器监听的地址和端口例如172.25.250.50:3260。• LUNLogical Unit Number代表Target提供的块设备。 每个目标可以提供一个或多个LUN。• ACLAccess Control List使用Initiator的IQN限制客户端访问Target。• TPGTarget Portal Group是目标的完整配置包括PortalLUN和ACL。 几乎所有目标都使用一个TPG但是高级配置有时可能会定义多个TPG。• discovery查询服务器上有Target列表。• login向Target验证验证通过后即可以使用Target服务器提供的块设备。三、配置 iSCSI Targets配置 iSCSI Targets需要安装以下软件• targetd服务端软件。• targetclitargetd服务配置工具。# 安装软件[rootserver ~11:09:52]# yum install -y targetd targetcli# 启用并启动服务[rootserver ~11:27:47]# systemctl enable targetd --now# 配置防火墙#配置防火墙[rootserver ~12:30:11]# systemctl status firewalld.service● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded(/usr/lib/systemd/system/firewalld.service;disabled;vendor preset: enabled)Active: inactive(dead)Docs: man:firewalld(1)#如果防火墙启动了可以执行下方命令# firewall-cmd --permanent --add-serviceiscsi-target# firewall-cmd --reload当您不带任何选项运行targetcli时该命令将进入交互模式。在以下示例中使用ls命令显示当前布局。[rootserver ~11:28:32]# targetclitargetcli shell version2.1.53 Copyright2011-2013 by Datera, Inc and others. Forhelpon commands,typehelp./lso- /...............................................................................[...]o- backstores....................................................................[...]|o- block........................................................[Storage Objects:0]|o- fileio.......................................................[Storage Objects:0]|o- pscsi........................................................[Storage Objects:0]|o- ramdisk......................................................[Storage Objects:0]o- iscsi..................................................................[Targets:0]o- loopback...............................................................[Targets:0]/1.配置backstore 对象backstore类型• block服务器中的块设备例如磁盘驱动器磁盘分区或逻辑卷。• fileio本地文件系统中的常规文件。targetcli将该文件用作磁盘映像。• pscsi物理SCSI设备。 这种类型的存储允许客户端通过网络访问服务器上的物理SCSI设备。• ramdisk内存中的磁盘设备。 这种类型的存储不会持久存储数据。 服务器重新启动后数据将丢失。要使用targetcli创建后备存储请使用其create命令。 该命令的行为取决于您在配置树中的当前位置。示例//backstores/block create webapp /dev/sdb1 Created block storage object webapp using /dev/sdb1. /ls/backstores/block/ o- block............................................................[Storage Objects:1]o- webapp.................................[/dev/sdb1(49.5GiB)write-thru deactivated]o- alua.............................................................[ALUA Groups:1]o- default_tg_pt_gp.................................[ALUA state: Active/optimized]2.配置 Target IQN在/iscsi伪目录中创建IQN将您选择的IQN名称作为其第一个参数。//iscsi create iqn.2026-05.cloud.lz.server.x8664:webapp Created target iqn.2026-05.cloud.lz.server.x8664:webapp. Created TPG1. Global prefauto_add_default_portaltrue Created default portal listening on all IPs(0.0.0.0), port3260. /ls/iscsi/ o- iscsi....................................................................[Targets:1]o- iqn.2026-05.cloud.lz.server.x8664:webapp..................................[TPGs:1]o- tpg1.......................................................[no-gen-acls, no-auth]o- acls..................................................................[ACLs:0]o- luns..................................................................[LUNs:0]o- portals............................................................[Portals:1]o-0.0.0.0:3260.............................................................[OK]3.配置ACL和 LUN创建ACL以允许客户端启动程序访问目标。在Red Hat Enterprise Linux上启动器的IQN存储在/etc/iscsi/initiatorname.iscsi文件中。/cd/iscsi/iqn.2026-05.cloud.lz.server.x8664:webapp/tpg1/ /iscsi/iqn.20...4:webapp/tpg1acls/ create iqn.2026-05.cloud.lz.server.x8664:client-1 Created Node ACLforiqn.2026-05.cloud.lz.server.x8664:client-1 /iscsi/iqn.20...4:webapp/tpg1luns/ create /backstores/block/webapp Created LUN0. Created LUN0-0mappinginnodeACL iqn.2026-05.cloud.lz.server.x8664:client-14.配置 Portalo- portals........................................[Portals:1]o-0.0.0.0:3260...............................................[OK]这表示你已经配置了一个 iSCSI 服务端口监听地址为 0.0.0.0即服务器所有网卡接口端口 3260状态显示为 [OK]说明端口服务已正常启用 补充说明0.0.0.0:3260 的含义0.0.0.0表示监听服务器上所有可用的 IP 地址客户端只要能访问这台服务器的任意 IP都能连接到这个 iSCSI 目标。3260是 iSCSI 协议的标准服务端口配置正确。#如果想要配置/cd/iscsi/iqn.2026-05.cloud.lz.server.x8664:webapp/tpg1/portals/ /iscsi/iqn.20.../tpg1/portalsdelete0.0.0.03260Deleted network portal0.0.0.0:3260 /iscsi/iqn.20.../tpg1/portalscreate10.1.8.103260Using default IP port3260Created network portal10.1.8.10:3260.5.保存配置退出targetcli shell时该命令将配置保存在/etc/target/saveconfig.json文件中。/iscsi/iqn.20...4:webapp/tpg1exitGlobal prefauto_save_on_exittrue Configuration saved to /etc/target/saveconfig.json四、非交互式管理 Targets# targetcli /backstores/block create myblock1 /dev/sdb# targetcli /iscsi create iqn.2026-05.cloud.lz.server.x8664:webapp# targetcli /iscsi/iqn.2026-05.cloud.lz.server.x8664:webapp/tpg1/luns \create /backstores/block/myblock1# targetcli /iscsi/iqn.2026-05.cloud.lz.server.x8664:webapp/tpg1/acls \create iqn.2026-05.cloud.lz.server.x8664:client-1# targetcli /iscsi/iqn.2026-05.cloud.lz.server.x8664:webapp/tpg1/portals \delete0.0.0.03260# targetcli /iscsi/iqn.2026-05.cloud.lz.server.x8664:webapp/tpg1/portals \create10.1.8.103260# targetcli saveconfig提示与交互式使用targetcli不同命令行模式必须显式运行saveconfig子命令以保存配置。五、访问 iSCSI 存储iSCSI 启动器通常以软件方式实现。 使用基于软件的iSCSI启动器需要连接到具有足够带宽的现有以太网网络以承载存储流量。您也可以使用硬件启动器-主机总线适配器HBA从而减轻了其他系统资源的负担。1.准备系统配置iSCSI客户端启动程序需要安装iscsi-initiator-utils软件包该软件包包括iscsi和iscsid服务以及/etc/iscsi/iscsid.conf和/etc/iscsi/initiatorname.iscsi配置文件。[rootclient ~11:07:08]# yum install -y iscsi-initiator-utils作为iSCSI启动器客户端需要其自己的唯一iSCSI合格名称IQN。在安装iscsi-initiator-utils的过程中该软件包生成唯一的IQN并存储到/etc/iscsi/initiatorname.iscsi文件中。 管理员通常需要更改该名称。[rootclient ~13:44:46]# vi /etc/iscsi/initiatorname.iscsiInitiatorNameiqn.2026-05.cloud.lz.server.x8664:client-1/etc/iscsi/iscsid.conf文件包含您连接的目标的默认设置。 这些设置包括iSCSI超时重试以及用于身份验证的用户名和密码参数。软件包安装会自动配置iscsid服务以便启动器在系统启动时自动重新连接到任何已发现的目标。 每当您修改启动程序的配置文件时请重新启动iscsid服务。2.连接 iSCSI 目标在使用远程设备之前首先需要发现目标。 发现过程使用/etc/iscsi/iscsid.conf中的配置将目标信息和设置存储在/var/lib/iscsi/nodes/目录中。您可以使用以下命令执行远程目标的发现# iscsiadm -m discovery -t st -p portal_ip[:port]参数说明• portal_ip参数是目标门户的IP地址。• 如果未指定port参数它将使用默认端口3260。示例[rootclient ~13:49:33]# iscsiadm -m discovery -t st -p server10.1.8.10:3260,1 iqn.2026-05.cloud.lz.server.x8664:webapp要使用列出的目标之一请使用以下命令登录到该目标# iscsiadm -m node -T Target -p portal_ip[:port] -l示例[rootclient ~13:53:47]# iscsiadm -m node -T iqn.2026-05.cloud.lz.server.x8664:webapp -p server -lLogginginto[iface: default, target: iqn.2026-05.cloud.lz.server.x8664:webapp, portal:10.1.8.10,3260](multiple)Login to[iface: default, target: iqn.2026-05.cloud.lz.server.x8664:webapp, portal:10.1.8.10,3260]successful.此时系统将检测到新的SCSI块设备就好像它是本地连接的硬盘驱动器一样。 您可以使用以下命令查看新设备该命令以打印级别3显示有关当前iSCSI登录会话的信息。# iscsiadm -m session -P 3,或者您可以查看dmesgtail /var/log/messages或ls -l /dev/disk/by-path/*iscsi*命令的输出。 该登录过程在重新启动后将保持不变。 因此启动后块设备将自动可用。3.格式化 iSCSI 设备如果发现的块设备已经具有分区文件系统或LVM卷则可以使用常规命令如mount访问该数据。 您可以使用lsblk --fs命令检查设备。[rootclient ~15:30:22]# lsblk -fs多个启动程序同时从同一目标安装同一文件系统会导致文件系统损坏或尝试读取数据时出现不一致。本地文件系统例如ext4或XFS不支持从多个系统并发安装。如果需要允许从多个系统同时访问基于iSCSI的块设备请使用群集文件系统例如GFS2。如果磁盘为空则可以对其进行格式化创建分区或将其用作LVM物理卷。# 假设客户端发现的设备名称是/dev/sdb[rootclient ~14:17:28]# mkfs.xfs -f /dev/sdb4.持久化挂载在/etc/fstab中的iSCSI目标上持久地挂载文件系统时请确保遵循以下建议• 使用文件系统UUID挂载。 不要使用设备名称/dev/sd*。 设备的名称取决于 iSCSI 设备通过网络响应的顺序因此设备名称可能会在引导之后更改。如果在 /etc/fstab 中使用设备名称则系统可能会将设备挂载在错误的挂载点下。• 在/etc/fstab中使用 _netdev 挂载选项。 因为iSCSI依赖网络访问远程设备所以此选项可确保在网络和启动器启动之前系统不会尝试挂载文件系统。示例/dev/sdb /var/www/html xfs defaults,_netdev00还需要确保服务iscsi开机自动启动该服务默认是开机自动启动的。# systemctl enable iscsi5.断开目标连接要停止使用iSCSI目标请执行以下步骤• 确保没有使用目标提供的任何设备。 例如卸载文件系统。• 从/etc/fstab等位置删除对目标的所有持久引用。• 从iSCSI目标注销。[rootclient ~14:37:59]# iscsiadm -m node -T iqn.2026-05.cloud.lz.server.x8664:webapp -p server -uLogging out of session[sid:1, target: iqn.2026-05.cloud.lz.server.x8664:webapp, portal:10.1.8.10,3260]Logout of[sid:1, target: iqn.2026-05.cloud.lz.server.x8664:webapp, portal:10.1.8.10,3260]successful.[rootclient ~14:38:42]# lsblk /dev/sdblsblk: /dev/sdb不是一个块设备[rootclient ~14:38:51]# iscsiadm -m node -T iqn.2026-05.cloud.lz.server.x8664:webapp -p server -o delete[rootclient ~14:39:07]# reboot六、故障处理如果发现成功但是启动器登录到发现的目标时遇到问题则该问题很可能与访问控制或身份验证有关。客户端上的IQN与服务器上的IQN不匹配会导致目标登录失败。可能是客户端上的启动器IQN不正确引起的请在客户端的/etc/iscsi/initiatorname.iscsi文件中修复IQN然后重新启动iscsid服务以使更改生效。#执行远程目标的发现[rootclient ~16:53:12]# iscsiadm -m discovery -t st -p server10.1.8.10:3260,1 iqn.2026-05.cloud.lz.server.x8664:webapp#连接iSCSI目标[rootclient ~16:53:24]# iscsiadm -m node -T iqn.2026-05.cloud.lz.server.x8664:webapp -lLogginginto[iface: default, target: iqn.2026-05.cloud.lz.server.x8664:webapp, portal:10.1.8.10,3260](multiple)iscsiadm: Could not login to[iface: default, target: iqn.2026-05.cloud.lz.server.x8664:webapp, portal:10.1.8.10,3260]. iscsiadm: initiator reported error(24- iSCSI login failed due to authorization failure)iscsiadm: Could not log into all portals#更正[rootclient ~16:53:30]# vi /etc/iscsi/initiatorname.iscsi# 重启 iscsid 服务释放之前客户端扫描时使用的IQN。[rootclient ~16:53:57]# systemctl restart iscsid#重新登录[rootclient ~16:54:20]# iscsiadm -m node -T iqn.2026-05.cloud.lz.server.x8664:webapp -lLogginginto[iface: default, target: iqn.2026-05.cloud.lz.server.x8664:webapp, portal:10.1.8.10,3260](multiple)Login to[iface: default, target: iqn.2026-05.cloud.lz.server.x8664:webapp, portal:10.1.8.10,3260]successful.