iSCSI 服务器

一、基础概念

1. SCSI

小型计算机系统接口,是计算机与硬盘、光驱、打印机等智能设备的硬件连接标准

2. iSCSI

全称 Internet 小型计算机系统接口,也叫 IP-SAN,由 IBM 研发。

  • 核心:将 SCSI 指令封装在 TCP/IP 数据包中,依托以太网传输;
  • 作用:通过网络把服务端存储资源共享给客户端,实现网络存储。

3. 网络与安全

  1. 性能:优先使用万兆及以上以太网保障传输效率;
  2. 内网场景:数据中心内 SAN 流量一般不加密,追求高性能;
  3. 广域网场景:跨外网传输时,可搭配 IPsec 加密保障安全。

二、整体架构

iSCSI 采用 ** 客户端 / 服务端(C/S)** 架构,服务端共享的存储,在客户端会识别为本地未格式化的 SCSI 块设备。

核心角色

  1. Initiator(发起端 / 客户端)

    负责连接访问远端存储,可软件部署,也可使用 iSCSI HBA 硬件;拥有全局唯一标识。

  2. Target(目标端 / 服务端)

    服务端对外提供的存储资源,一台服务器可配置多个 Target;每个 Target 可挂载一个或多个存储单元。

三、关键术语详解

  1. IQN

    iSCSI 限定名称,全局唯一,用于区分 Initiator 和 Target。

    • 格式:iqn.年-月.反向域名:自定义标识
    • 组成:
      • 年 - 月:创建日期,用于保证唯一性;
      • 反向域名:域名倒写;
      • 自定义标识:区分同域名下不同设备 / 目标。
  2. Portal

    Target 监听的IP + 端口,iSCSI 默认端口:3260

  3. LUN(逻辑单元号)

    Target 对外提供的实际块存储设备,一个 Target 可包含多个 LUN。

  4. ACL(访问控制列表)

    基于客户端 IQN 做权限管控,限制指定客户端访问 Target。

  5. TPG(目标门户组)

    Target 的完整配置集合,包含 Portal、LUN、ACL;常规环境单 TPG 即可,复杂场景可配置多组。

四、核心操作流程

  1. discovery(发现):客户端查询服务端可用的 Target 列表;
  2. login(登录):客户端完成身份验证,认证通过后即可正常使用远端存储设备。

五、iSCSI实验

配置 iSCSI Targets

配置 iSCSI Targets需要安装以下软件:

  • targetd,服务端软件。
  • targetcli,targetd服务配置工具。
[root@sever ~ 16:59:50]# yum install -y targetd targetcli


[root@sever ~ 17:03:07]# systemctl enable target
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.

#配置防火墙
root@sever ~ 17:03:14]#  firewall-cmd --permanent --add-service=iscsi-target
[root@sever ~ 17:03:22]# firewall-cmd --reload

不带任何选项运行targetcli时,该命令将进入交互模式。

在以下示例中,使用ls命令显示当前布局。

[root@sever ~ 17:03:27]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> ls'
o- / ............................................................................................................. [...]
  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

一、backstore 后备存储(服务端真实磁盘 / 文件)

作用

给 iSCSI 提供真实的存储来源,相当于 “共享的硬盘本体”。

backstore 类型

  • block:块设备(磁盘、分区、LV)→ 生产首选,性能最高
  • fileio:普通文件模拟成磁盘 → 测试用
  • pscsi:物理 SCSI 设备直通
  • ramdisk:内存盘,重启数据丢失
[root@sever ~ 18:34:25]# targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> ls
o- / ............................................................................................................. [...]
  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]
/> cd /backstores/block 
/backstores/block> create webapp /dev/sdb
Created block storage object webapp using /dev/sdb.
/backstores/block> 

等同于

/> /backstores/block create webapp /dev/sdb
Created block storage object webapp using /dev/sdb.
  • **webapp **:给存储起的名字
  • /dev/sdb:真实磁盘 / 分区

二、配置 Target IQN(iSCSI 共享磁盘的 “唯一名称”)

作用

客户端用来找到这个共享磁盘的唯一标识

相当于:共享磁盘的门牌号

命令

/iscsi> create iqn.2026-05.org.linux-iscsi.sever.x8664:webapp
Created target iqn.2026-05.org.linux-iscsi.sever.x8664:webapp.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.


/iscsi> ls
o- iscsi .................................................................................................. [Targets: 1]
  o- iqn.2026-05.org.linux-iscsi.sever.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]
/iscsi> 

  • TPG 1:一个配置组

  • 默认监听 0.0.0.0:3260

三、配置 LUN(把 backstore 映射给 Target)

作用

把真实存储(backstore)挂到共享磁盘(Target)上

相当于:把硬盘放进共享柜

命令

/iscsi> cd iqn.2026-05.org.linux-iscsi.sever.x8664:webapp/tpg1/luns
/iscsi/iqn.20...app/tpg1/luns> create /backstores/block/webapp 
Created LUN 0.

四、配置 ACL(关键:允许哪个客户端访问)

作用

客户端身份白名单

只有客户端的 IQN 和这里一致,才能连接。

重点区别(必懂)

  • Target IQN:共享磁盘的名字(服务端)
  • ACL IQN:客户端的名字(客户端本机 IQN)

命令

/iscsi/iqn.20...app/tpg1/luns>  cd /iscsi/iqn.2026-05.org.linux-iscsi.sever.x8664:webapp/tpg1/acls
/iscsi/iqn.20...app/tpg1/acls> create iqn.2026-05.cloud.bgy.clent
Created Node ACL for iqn.2026-05.cloud.bgy.clent
Created mapped LUN 0.

五、配置 Portal(服务端监听 IP: 端口)

作用

指定 iSCSI 服务监听哪个 IP,供客户端连接。

命令

/iscsi/iqn.20...app/tpg1/acls> cd /iscsi/iqn.2026-05.org.linux-iscsi.sever.x8664:webapp/tpg1/portals
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20.../tpg1/portals> create 10.1.8.10 3260
Using default IP port 3260
Created network portal 10.1.8.10:3260.

六、保存配置

exit直接退出就行,自动保存

七、客户端访问测试

[root@client ~ 18:50:09]# yum install -y iscsi-initiator-utils

#作为iSCSI启动器,客户端需要其自己的唯一iSCSI合格名称(IQN)。在安装iscsi-initiator-utils的过程中,该软件包生成唯一的IQN,并存储到/etc/iscsi/initiatorname.iscsi文件中。 管理员通常需要更改该名称。

#iqn填写acl配置的允许iqn
[root@client ~ 18:50:19]# vim /etc/iscsi/initiatorname.iscsi
#修改完重启服务
systemctl restart iscsid 



#-m = --mode,指定运行模式      discovery = 发现模式
#-t = --type,发现类型      st = sendtargets(最常用、标准 iSCSI 发现方式)
#  作用:主动向 iSCSI 服务器发送查询,获取共享 Target 列表 第一次使用
[root@client ~ 18:52:26]# iscsiadm -m discovery -t st -p 10.1.8.10 3206
10.1.8.10:3260,1 iqn.2026-05.org.linux-iscsi.sever.x8664:webapp


#登录 ,由于只有一个,暂时不指定
#如需指定 -T iqn名称
[root@client ~ 18:56:17]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2026-05.org.linux-iscsi.sever.x8664:webapp, portal: 10.1.8.10,3260] (multiple)
Login to [iface: default, target: iqn.2026-05.org.linux-iscsi.sever.x8664:webapp, portal: 10.1.8.10,3260] successful.


#查看iSCSCI设备  (sdb为多出来的一个)
[root@client ~ 18:57:27]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   59G  0 part 
  ├─centos-root 253:0    0 38.3G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0 18.7G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
sr0              11:0    1  4.4G  0 rom  

#打印级别3显示有关当前iSCSI登录会话的信息。
[root@client ~ 18:56:26]# iscsiadm -m session -P 3
#关注下面字段
Target: iqn.2026-05.org.linux-iscsi.sever.x8664:webapp (non-flash)
	Current Portal: 10.1.8.10:3260,1
	Persistent Portal: 10.1.8.10:3260,1

	Iface Name: default
		Iface Transport: tcp
		Iface Initiatorname: iqn.2026-05.cloud.bgy.clent
		Iface IPaddress: 10.1.8.11


iSCSI Connection State: LOGGED IN
		iSCSI Session State: LOGGED_IN


Host Number: 3	State: running
		scsi3 Channel 00 Id 0 Lun: 0
			Attached scsi disk sdb		State: running


#格式化并挂载
[root@client ~ 18:57:35]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@client ~ 19:01:11]# mount /dev/sdb /var/www/html/
[root@client ~ 19:04:12]# df -h /var/www/html
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb         20G   33M   20G    1% /var/www/html


[root@client ~ 19:04:15]# echo hello hahahha > /var/www/html/index.html


#服务端测试
[root@sever ~ 19:05:36]# curl http://10.1.8.11
hello hahahha

持久化挂载

在/etc/fstab中的iSCSI目标上持久地挂载文件系统时,请确保遵循以下建议:

  • 使用文件系统UUID挂载。 不要使用设备名称(/dev/sd*)。 设备的名称取决于 iSCSI 设备通过网络响应的顺序,因此设备名称可能会在引导之后更改。如果在 /etc/fstab 中使用设备名称,则系统可能会将设备挂载在错误的挂载点下。
  • 在/etc/fstab中使用 _netdev 挂载选项。 因为iSCSI依赖网络访问远程设备,所以此选项可确保在网络和启动器启动之前,系统不会尝试挂载文件系统。

还需要确保服务iscsi开机自动启动,该服务默认是开机自动启动的。

断开目标连接

#确保没有使用目标提供的任何设备。 例如,卸载文件系统。
[root@client ~ 19:05:57]# umount /var/www/html/

#/etc/fstab等位置删除对目标的所有持久引用。
[root@client ~ 19:10:46]# vim /etc/fstab

#从iSCSI目标注销。
[root@client ~ 19:10:52]# iscsiadm -m node -u
Logging out of session [sid: 1, target: iqn.2026-05.org.linux-iscsi.sever.x8664:webapp, portal: 10.1.8.10,3260]
Logout of [sid: 1, target: iqn.2026-05.org.linux-iscsi.sever.x8664:webapp, portal: 10.1.8.10,3260] successful.
[root@client ~ 19:11:20]# iscsiadm -m node -o delete



#验证,再重启设备验证一下
[root@client ~ 19:11:29]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   59G  0 part 
  ├─centos-root 253:0    0 38.3G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0 18.7G  0 lvm  /home
sr0              11:0    1  4.4G  0 rom  
[root@client ~ 19:11:38]# df -h /var/www/html/
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   39G  1.6G   37G    5% /


[root@client ~ 19:11:46]# reboot
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(root@10.1.8.11) at 19:12:15.

Type `help' to learn how to use Xshell prompt.
[C:\~]$ 

Connecting to 10.1.8.11:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Wed May 27 16:57:00 2026 from 10.1.8.1
[root@client ~ 19:12:46]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   59G  0 part 
  ├─centos-root 253:0    0 38.3G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0 18.7G  0 lvm  /home
sr0              11:0    1  4.4G  0 rom  
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐