课后作业-20260806-Linux iSCSI服务器

文章目录

iSCSI服务器

iSCSI服务介绍

SCSI(Small Computer System Interface,小型计算机系统接口),一种用于计算机和智能设备之间 (硬盘、软驱、光驱、打印机、扫描仪等)连接标准。

iSCSI(Internet Small Computer System Interface,Internet 小型计算机系统接口),又称为IP SAN, 是IBM公司研究开发的IP SAN技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,基于 TCP/IP的协议连接iSCSI服务端(Target)和客户端(Initiator),使得封装后的SCSI数据包可以在互联网传 输,最终实现iSCSI服务端提供存储给客户端。

从物理服务器到存储的电缆通常封闭在数据中心内,并且理想情况下不直接连接到LAN网络,所以SAN流 量通常不加密,以最大程度地提高性能。 为了实现WAN安全,iSCSI管理员可以使用IPsec加密流量。

iSCSI架构

iSCSI服务是C/S架构。访问的iSCSI目标在客户端系统上显示为本地且未格式化的SCSI快设备,等同于通 过SCSI布线、FC直连或FC交换光线连接的设备。

  • Initiator ,iSCSI客户端,通常以软件方式部署,也可以使用iSCSI Host Bus Adapters (HBAs) (HBA)硬件。Initiator必须具有唯一的名称(请参见IQN)。

  • Target,iSCSI服务器上的iSCSI存储资源。 Target必须具有唯一的名称(请参见IQN)。 每个目标 都提供一个或多个块设备或逻辑单元(LUN-logical units)。 在大多数情况下,Target只提供一个 设备,但一台服务器可以提供多个目标。

  • IQN(iSCSI Qualified Name)全球唯一的名称,用于标识发起者和目标。 IQN具有以下格式:

    bash 复制代码
    iqn.YYYY-MM.com.reversed.domain:name_string
    • YYYY-MM ,年和月。示例,2020年6月为2020-06。该日期有助于确保IQN唯一性。
    • com.reversed.domain,反向域名。 例如, storage.laogao.cloud 的反向域名为 cloud.laogao.storage 。
    • name_string,用于标识您管理的特定目标。 如果服务器只具有一个目标,则有时会省略此 名称。
  • Portal,指定服务器监听的地址和端口,例如,172.25.250.50:3260。

  • LUN (Logical Unit Number),代表Target 提供的块设备。 每个目标可以提供一个或多个LUN

  • ACL (Access Control List),使用InitiatorIQN限制客户端访问Target。

  • TPG (Target Portal Group),是目标的完整配置,包括PortalLUN和ACL 。 几乎所有目标都使 用一个TPG ,但是高级配置有时可能会定义多个TPG

  • discovery ,查询服务器上有Target列表。

  • login ,向Target 验证,验证通过后即可以使用Target服务器提供的块设备。

配置iSCSI Targets

节点规划

节点名称 节点 IP 作用
iscsi-server(增加 2 块 20G SCSI 磁盘) 10.1.8.10/24 iSCSI Target(存储服务端)
iscsi-client 10.1.8.11/24 iSCSI Initiator(存储客户端)

使用centos7模板克隆出iscsi-server,iscsi-client

iscsi-server:

bash 复制代码
[cyw@server ~ 13:59:30]$ sudo -i 
[sudo] cyw 的密码:
[root@server ~ 13:59:42]# hostnamectl set-hostname iscsi-server
[root@server ~ 14:00:24]# bash
[root@iscsi-server ~ 14:00:26]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
[root@iscsi-server ~ 14:01:50]# nmcli connection up ens33 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@iscsi-server ~ 14:12:12]# setenforce 0

iscsi-client:

bash 复制代码
[cyw@server ~ 13:59:49]$ sudo -i
[sudo] cyw 的密码:
[root@server ~ 13:59:57]# hostnamectl set-hostname iscsi-client
[root@server ~ 14:07:13]# bash
[root@iscsi-client ~ 14:07:17]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.11/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
[root@iscsi-client ~ 14:09:13]# nmcli connection up ens33 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@iscsi-client ~ 14:09:22]# setenforce 0
[root@iscsi-client ~ 14:09:39]# systemctl disable firewalld --now

配置流程

配置iscsi-server

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

  • targetd,服务端软件。
  • targetcli,targetd服务配置工具。
bash 复制代码
# 安装软件
[root@iscsi-server ~ 14:15:39]# yum install -y targetd targetcli

# 启用并启动服务
[root@iscsi-server ~ 14:17:24]# systemctl enable target --now
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.

# 配置防火墙
[root@iscsi-server ~ 14:33:59]# firewall-cmd --add-service=iscsi-target --permanent 
success
[root@iscsi-server ~ 14:34:04]# firewall-cmd --reload 
success

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

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

bash 复制代码
[root@iscsi-server ~ 14:34:20]# 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 对象

backstore类型:

  • block:服务器中的块设备,例如磁盘驱动器,磁盘分区或逻辑卷。
  • fileio:本地文件系统中的常规文件。
  • targetcli将该文件用作磁盘映像。
  • pscsi:物理SCSI设备。 这种类型的存储允许客户端通过网络访问服务器上的物理SCSI设备。
  • ramdisk:内存中的磁盘设备。 这种类型的存储不会持久存储数据。 服务器重新启动后,数据将丢 失。

要使用targetcli创建后备存储,请使用其create命令。 该命令的行为取决于您在配置树中的当前位置。示例:

先进目录,再create(最常用、最简单)

bash 复制代码
/> cd /backstores/block 
/backstores/block> create myblock1 /dev/sdb
Created block storage object myblock1 using /dev/sdb.

等同于full path写法(必须带 /)

bash 复制代码
/> /backstores/block create myblock1 /dev/sdb
Created block storage object myblock1 using /dev/sdb.

配置 Target IQN

在/iscsi伪目录中,创建IQN,将选择的IQN名称作为其第一个参数。

bash 复制代码
/backstores/block> cd /iscsi
/iscsi> create iqn.2026-08.cloud.cyw.iscsi-server:disk1
Created target iqn.2026-08.cloud.cyw.iscsi-server:disk1.
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-08.cloud.cyw.iscsi-server:disk1 .............. [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]
  1. iscsi 根目录 Targets:1

    当前一共创建了 1 个 iSCSI 目标(Target)

  2. iqn.2026-04.cloud.laogao.iscsi-server:disk1

    iSCSI Target 唯一标识(IQN 名称)

    客户端存储发现、连接时,需要填写这一串名称。

  3. tpg1(Target Portal Group,目标门户组)

    一个 Target 可以有多个 TPG 组,这里只有 tpg1。

    标记: [no-gen-acls, no-auth]

    • no-gen-acls不会自动生成 ACL 访问策略,必须手动添加客户端白名单
    • no-auth未开启 CHAP 账号密码认证
  4. acls ACLs: 0

    ACL = 客户端 IQN 白名单(访问控制列表)

    ACLs:0 → 还没有添加允许接入的客户端

    规则:默认拒绝所有客户端,不添加白名单就算客户端能连通 3260 端口也登录失败。

  5. luns LUNs: 0 【重点】

    LUN 作用:将后端磁盘 backstores 映射给这个 Target 对外共享

    LUNs:0 → 没有把硬盘 / 分区挂载进来!

    哪怕客户端成功登录 target,看不到任何共享磁盘。

    对应流程:创建 Target 之后,绑定 LUN 这一步尚未执行。

  6. portals Portals:1

    Portal = 监听地址+端口(对外访问入口)

    0.0.0.0:3260

    • 0.0.0.0:服务器本机所有网卡监听
    • 3260:iSCSI 标准端口
    • OK:监听正常,端口已就绪
  7. 当前状态总结

    ✅ Target (iqn名称)已创建

    ✅ Portal监听0.0.0.0:3260正常

  8. ❌ 缺少两大核心配置

    1.未绑定LUN: 没有关联后端硬盘

    2.未配置ACL: 没有放行客户端

配置 LUN

bash 复制代码
# 把提前做好的后端存储 myblock1(也就是/dev/sdb)绑定成LUN,对外共享
/iscsi> cd /iscsi/iqn.2026-08.cloud.cyw.iscsi-server:disk1/tpg1/luns
/iscsi/iqn.20...sk1/tpg1/luns> create /backstores/block/myblock1 
Created LUN 0.
/iscsi/iqn.20.

配置 ACL

创建ACL,以允许客户端启动程序访问目标。在Red Hat Enterprise Linux上,启动器的IQN存储 在/etc/iscsi/initiatorname.iscsi文件中。

bash 复制代码
/iscsi/iqn.20...sk1/tpg1/luns> cd /iscsi/iqn.2026-08.cloud.cyw.iscsi-server:disk1/tpg1/acls 
/iscsi/iqn.20...sk1/tpg1/acls> create iqn.2026-08.cloud.cyw.iscsi-client
Created Node ACL for iqn.2026-08.cloud.cyw.iscsi-client
Created mapped LUN 0.

配置 Portal

删除默认:0.0.0.0:3260 (随便本机哪个IP都能连)

新建指定:10.1.8.10:3260(只允许通过本机10.1.8.10这个网卡连接iscsi共享)

bash 复制代码
/iscsi/iqn.20...sk1/tpg1/acls> cd /iscsi/iqn.2026-08.cloud.cyw.iscsi-server:disk1/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.

查看

bash 复制代码
/iscsi/iqn.20.../tpg1/portals> cd /
/> ls
o- / .......................................................... [...]
  o- backstores ............................................... [...]
  | o- block ................................... [Storage Objects: 1]
  | | o- myblock1 ......... [/dev/sdb (20.0GiB) write-thru activated]
  | |   o- alua .................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ........ [ALUA state: Active/optimized]
  | o- fileio .................................. [Storage Objects: 0]
  | o- pscsi ................................... [Storage Objects: 0]
  | o- ramdisk ................................. [Storage Objects: 0]
  o- iscsi ............................................. [Targets: 1]
  | o- iqn.2026-08.cloud.cyw.iscsi-server:disk1 ........... [TPGs: 1]
  |   o- tpg1 ................................ [no-gen-acls, no-auth]
  |     o- acls ........................................... [ACLs: 1]
  |     | o- iqn.2026-08.cloud.cyw.iscsi-client .... [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ............... [lun0 block/myblock1 (rw)]
  |     o- luns ........................................... [LUNs: 1]
  |     | o- lun0 .... [block/myblock1 (/dev/sdb) (default_tg_pt_gp)]
  |     o- portals ..................................... [Portals: 1]
  |       o- 10.1.8.10:3260 .................................... [OK]
  o- loopback .......................................... [Targets: 0

保存配置

退出targetcli shell时,该命令将配置保存在/etc/target/saveconfig.json文件中。

bash 复制代码
/iscsi/iqn.20.../tpg1/portals> exit 
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

非交互式管理 Targets

bash 复制代码
# 创建块后端存储,关联磁盘/dev/sdc,命名myblock2
[root@iscsi-server ~ 15:08:48]# targetcli /backstores/block create myblock2 /dev/sdc
Created block storage object myblock2 using /dev/sdc.

# 创建iSCSI目标,定义目标IQN名称
[root@iscsi-server ~ 15:09:25]# targetcli /iscsi create iqn.2026-08.cloud.cyw.iscsi-server:disk2
Created target iqn.2026-08.cloud.cyw.iscsi-server:disk2.
Created TPG 1.
Default portal not created, TPGs within a target cannot share ip:port.

# 在TPG1中创建LUN,绑定后端块存储myblock2
[root@iscsi-server ~ 15:12:18]# targetcli /iscsi/iqn.2026-08.cloud.cyw.iscsi-server:disk2/tpg1/luns create /backstores/block/myblock2
Created LUN 0.

# 创建访问ACL,允许指定IQN的客户端接入存储
[root@iscsi-server ~ 15:17:12]# targetcli /iscsi/iqn.2026-08.cloud.cyw.iscsi-server:disk2/tpg1/acls create iqn.2026-08.cloud.cyw.iscsi-client
Created Node ACL for iqn.2026-08.cloud.cyw.iscsi-client
Created mapped LUN 0.

# 删除默认0.0.0.0:3260监听端口(此处原配置不存在,执行报错)
[root@iscsi-server ~ 15:17:58]# targetcli /iscsi/iqn.2026-08.cloud.cyw.iscsi-server:disk2/tpg1/portals delete 0.0.0.0 3260
No such NetworkPortal in configfs: /sys/kernel/config/target/iscsi/iqn.2026-08.cloud.cyw.iscsi-server:disk2/tpgt_1/np/0.0.0.0:3260

# 创建Portal,指定服务器业务IP 10.1.8.10:3260对外提供iSCSI服务
[root@iscsi-server ~ 15:19:32]# targetcli /iscsi/iqn.2026-08.cloud.cyw.iscsi-server:disk2/tpg1/portals create 10.1.8.10 3260
Using default IP port 3260
Created network portal 10.1.8.10:3260.

# 持久保存targetcli全部配置(重启生效)
[root@iscsi-server ~ 15:21:08]# targetcli saveconfig
Configuration saved to /etc/target/saveconfig.json

查看

bash 复制代码
# 进入targetcli交互式管理终端
[root@iscsi-server ~ 15:21:35]# targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

# 查看完整iSCSI后端存储与目标树形结构
/> ls
o- / ................................................. [...]
  o- backstores ...................................... [...]
  | o- block .......................... [Storage Objects: 2]
  | | o- myblock1  [/dev/sdb (20.0GiB) write-thru activated]
  | | | o- alua ........................... [ALUA Groups: 1]
  | | |   o- default_tg_pt_gp  [ALUA state: Active/optimized]
  | | o- myblock2  [/dev/sdc (20.0GiB) write-thru activated]
  | |   o- alua ........................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp  [ALUA state: Active/optimized]
  | o- fileio ......................... [Storage Objects: 0]
  | o- pscsi .......................... [Storage Objects: 0]
  | o- ramdisk ........................ [Storage Objects: 0]
  o- iscsi .................................... [Targets: 2]
  | o- iqn.2026-08.cloud.cyw.iscsi-server:disk1 .. [TPGs: 1]
  | | o- tpg1 ....................... [no-gen-acls, no-auth]
  | |   o- acls .................................. [ACLs: 1]
  | |   | o- iqn.2026-08.cloud.cyw.iscsi-client  [Mapped LUNs: 1]
  | |   |   o- mapped_lun0 ...... [lun0 block/myblock1 (rw)]
  | |   o- luns .................................. [LUNs: 1]
  | |   | o- lun0  [block/myblock1 (/dev/sdb) (default_tg_pt_gp)]
  | |   o- portals ............................ [Portals: 1]
  | |     o- 10.1.8.10:3260 ........................... [OK]
  | o- iqn.2026-08.cloud.cyw.iscsi-server:disk2 .. [TPGs: 1]
  |   o- tpg1 ....................... [no-gen-acls, no-auth]
  |     o- acls .................................. [ACLs: 1]
  |     | o- iqn.2026-08.cloud.cyw.iscsi-client  [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ...... [lun0 block/myblock2 (rw)]
  |     o- luns .................................. [LUNs: 1]
  |     | o- lun0  [block/myblock2 (/dev/sdc) (default_tg_pt_gp)]
  |     o- portals ............................ [Portals: 1]
  |       o- 10.1.8.10:3260 ........................... [OK]
  o- loopback ................................. [Targets: 0]

提示:与交互式使用targetcli不同,命令行模式必须显式运行saveconfig子命令以保存配置。

访问 iSCSI 存储

iSCSI 启动器通常以软件方式实现。 使用基于软件的iSCSI启动器需要连接到具有足够带宽的现有以太网 网络,以承载存储流量。

也可以使用硬件启动器-主机总线适配器(HBA),从而减轻了其他系统资源的负担。

准备系统

配置iSCSI客户端启动程序需要安装iscsi-initiator-utils 软件包,该软件包包括iscsiiscsid 服务以 及**/etc/iscsi/iscsid.conf/etc/iscsi/initiatorname.iscsi**配置文件。

bash 复制代码
[root@iscsi-client ~ 14:16:02]# yum install -y iscsi-initiator-utils

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

bash 复制代码
[root@iscsi-client ~ 15:25:05]# vim /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2026-08.cloud.cyw.iscsi-client

/etc/iscsi/iscsid.conf文件包含连接的目标的默认设置。 这些设置包括iSCSI超时,重试以及用于身份 验证的用户名和密码参数。

软件包安装会自动配置iscsid服务,以便启动器在系统启动时自动重新连接到任何已发现的目标。 每当 修改启动程序的配置文件时,请重新启动iscsid服务。

连接 iSCSI 目标

在使用远程设备之前,首先需要发现目标。 发现过程使用/etc/iscsi/iscsid.conf中的配置将目标信息和设 置存储在/var/lib/iscsi/nodes/目录中。

可以使用以下命令执行远程目标的发现:

bash 复制代码
# iscsiadm -m discovery -t st -p portal_ip[:port]

参数说明:

  • portal_ip参数是目标门户的IP地址。
  • 如果未指定port参数,它将使用默认端口3260。

示例:

bash 复制代码
# iSCSI客户端发现存储服务器上所有可用目标(SendTargets模式)
[root@iscsi-client ~ 15:40:00]# iscsiadm -m discovery -t st -p 10.1.8.10
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk1
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk2

#参数说明
# -m discovery:执行发现模式
#-t st:使用 SendTargets 方式发现(最常用)
# -p 10.1.8.10:iSCSI 服务端 IP(默认端口 3260 可省略)

要使用列出的目标之一,可以使用以下命令登录到该目标:

bash 复制代码
# iscsiadm -m node -T Target -p portal_ip[:port] -l

示例:

bash 复制代码
# iSCSI客户端登录指定IQN存储目标disk1
[root@iscsi-client ~ 15:41:04]# iscsiadm -m node -T iqn.2026-08.cloud.cyw.iscsi-server:disk1 -l
Logging in to [iface: default, target: iqn.2026-08.cloud.cyw.iscsi-server:disk1, portal: 10.1.8.10,3260] (multiple)
Login to [iface: default, target: iqn.2026-08.cloud.cyw.iscsi-server:disk1, portal: 10.1.8.10,3260] successful.

#参数释义
#-m node:节点操作模式
#-T:指定目标 IQN 名称
#-l:login,执行登录操作

此时,系统将检测到新的SCSI块设备,就好像它是本地连接的硬盘驱动器一样。 可以使用以下命令查 看新设备,该命令以打印级别3显示有关当前iSCSI登录会话的信息。

bash 复制代码
# 查看系统块设备,确认iSCSI远程磁盘识别情况
[root@iscsi-client ~ 15:42:34]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdb               8:16   0    20G  0 disk 
sr0              11:0    1   4.4G  0 rom  /run/media/cyw/CentOS 7 x86_64

# 查看iSCSI会话详细信息(-P 3 输出完整级别详情)
[root@iscsi-client ~ 15:43:37]# iscsiadm -m session -P 3
iSCSI Transport Class version 2.0-870
version 6.2.0.874-22
Target: iqn.2026-08.cloud.cyw.iscsi-server:disk1 (non-flash)
	Current Portal: 10.1.8.10:3260,1(当前门户地址)
	Persistent Portal: 10.1.8.10:3260,1(持久门户地址)
		**********
		Interface:(接口信息)
		**********
		Iface Name: default(网卡接口名称)
		Iface Transport: tcp(传输协议)
		Iface Initiatorname: iqn.2026-08.cloud.cyw.iscsi-client(客户端启动器IQN名称)
		Iface IPaddress: 10.1.8.11(客户端IP地址)
		Iface HWaddress: <empty>(硬件地址)
		Iface Netdev: <empty>(网络设备)
		SID: 1(会话ID)
		iSCSI Connection State: LOGGED IN(iSCSI连接状态:已登录)
		iSCSI Session State: LOGGED_IN(iSCSI会话状态:已登录)
		Internal iscsid Session State: NO CHANGE(内部守护进程会话状态:无变动)
		*********
		Timeouts:(超时参数)
		*********
		Recovery Timeout: 120(故障恢复超时时间)
		Target Reset Timeout: 30(目标重置超时时间)
		LUN Reset Timeout: 30(LUN重置超时时间)
		Abort Timeout: 15(命令终止超时时间)
		*****
		CHAP:(CHAP认证信息)
		*****
		username: <empty>(认证用户名)
		password: ********(认证密码)
		username_in: <empty>(入方向用户名)
		password_in: ********(入方向密码)
		************************
		Negotiated iSCSI params:(协商完成的iSCSI参数)
		************************
		HeaderDigest: None(头部摘要校验)
		DataDigest: None(数据摘要校验)
		MaxRecvDataSegmentLength: 262144(最大接收数据段长度)
		MaxXmitDataSegmentLength: 262144(最大发送数据段长度)
		FirstBurstLength: 65536(首次突发数据长度)
		MaxBurstLength: 262144(最大突发数据长度)
		ImmediateData: Yes(启用即时数据)
		InitialR2T: Yes(启用初始R2T机制)
		MaxOutstandingR2T: 1(最大未完成R2T数量)
		************************
		Attached SCSI devices:(已挂载SCSI设备)
		************************
		Host Number: 3	State: running(SCSI主机编号,运行状态)
		scsi3 Channel 00 Id 0 Lun: 0(通道、设备ID、LUN编号)
			Attached scsi disk sdb		State: running(映射系统磁盘/dev/sdb,运行状态)
			
#lsblk 输出:远程 iSCSI 存储映射为 sdb(20G);
#Target: iqn.2026-08.cloud.cyw.iscsi-server:disk1(连接的 iSCSI 目标 IQN);
#Current Portal:10.1.8.10:3260(存储服务端监听地址端口);
#Iface Initiatorname:iqn.2026-08.cloud.cyw.iscsi-client(客户端 IQN,服务端 ACL 放行依据);-client,客户端 IP 10.1.8.11;
#iSCSI Session State: LOGGED_IN(会话登录正常);
#Attached scsi disk sdb(远程 LUN 对应本地块设备 /dev/sdb)。

或者,可以查看dmesg,tail /var/log/messages或ls -l /dev/disk/by-path/iscsi命令的 输出。 该登录过程在重新启动后将保持不变。 因此,启动后块设备将自动可用。

格式化 iSCSI 设备

如果发现的块设备已经具有分区,文件系统或LVM卷,则可以使用常规命令(如mount)访问该数据。 可以使用lsblk --fs命令检查设备。

bash 复制代码
# 查看系统中所有块设备的UUID、文件系统类型等信息
[root@iscsi-client ~ 15:44:18]# blkid
/dev/sda1: UUID="06075201-4e8c-4b87-872a-5a3509d9800f" TYPE="xfs" 
/dev/sda2: UUID="2zipkd-x0GR-pVyH-DFwa-Adwe-2riU-910T08" TYPE="LVM2_member" 
/dev/sr0: UUID="2022-07-26-15-09-17-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/mapper/centos-root: UUID="523e8fef-2cf2-4efe-90f1-58c7c201a169" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="554ff511-fc15-4c8f-b6c2-d3f8bc76f6e6" TYPE="swap" 
/dev/mapper/centos-home: UUID="02673dc7-31b5-4fc5-8587-9a178b98f76b" TYPE="xfs" 

关键信息解读

  1. /dev/sda1:UUID="06075201-4e8c-4b87-872a-5a3509d9800f"(分区唯一标识),TYPE="xfs"(文件系统类型 xfs,系统 boot 分区)
  2. /dev/sda2:UUID="2zipkd-x0GR-pVyH-DFwa-Adwe-2riU-910T08"(分区唯一标识),TYPE="LVM2_member"(LVM 物理卷成员)
  3. /dev/sr0:UUID="2022-07-26-15-09-17-00"(光盘唯一标识),LABEL="CentOS 7 x86_64"(光盘标签),TYPE="iso9660"(光盘文件系统)
  4. /dev/mapper/centos-root:UUID="523e8fef-2cf2-4efe-90f1-58c7c201a169"(逻辑卷唯一标识),TYPE="xfs"(根分区文件系统)
  5. /dev/mapper/centos-swap:UUID="554ff511-fc15-4c8f-b6c2-d3f8bc76f6e6"(交换分区唯一标识),TYPE="swap"(交换分区)
  6. /dev/mapper/centos-home:UUID="02673dc7-31b5-4fc5-8587-9a178b98f76b"(home 逻辑卷唯一标识),TYPE="xfs"(home 分区文件系统)

现象说明:此时还未对 /dev/sdb 进行格式化,因此 blkid 没有输出 /dev/sdb 记录;执行 mkfs 格式化远程磁盘后,再次 blkid 就能看到 sdb 的 UUID。

多个启动程序同时从同一目标安装同一文件系统,会导致文件系统损坏或尝试读取数据时出现不一致。

本地文件系统(例如ext4或XFS)不支持从多个系统并发安装。如果需要允许从多个系统同时访问基于 iSCSI的块设备,请使用群集文件系统(例如GFS2)。

如果磁盘为空,则可以对其进行格式化,创建分区或将其用作LVM物理卷。

bash 复制代码
# 假设客户端发现的设备名称是/dev/sdb
[root@iscsi-client ~ 15:44:56]# 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@iscsi-client ~ 15:45:27]# blkid
/dev/sda1: UUID="06075201-4e8c-4b87-872a-5a3509d9800f" TYPE="xfs" 
/dev/sda2: UUID="2zipkd-x0GR-pVyH-DFwa-Adwe-2riU-910T08" TYPE="LVM2_member" 
/dev/sr0: UUID="2022-07-26-15-09-17-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/mapper/centos-root: UUID="523e8fef-2cf2-4efe-90f1-58c7c201a169" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="554ff511-fc15-4c8f-b6c2-d3f8bc76f6e6" TYPE="swap" 
/dev/mapper/centos-home: UUID="02673dc7-31b5-4fc5-8587-9a178b98f76b" TYPE="xfs" 
/dev/sdb: UUID="91b3fb58-26fb-4b1a-9588-9506d677cc06" TYPE="xfs" 

# 挂载测试
[root@iscsi-client ~ 15:44:56]# 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@iscsi-client ~ 15:45:27]# blkid
/dev/sda1: UUID="06075201-4e8c-4b87-872a-5a3509d9800f" TYPE="xfs" 
/dev/sda2: UUID="2zipkd-x0GR-pVyH-DFwa-Adwe-2riU-910T08" TYPE="LVM2_member" 
/dev/sr0: UUID="2022-07-26-15-09-17-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/mapper/centos-root: UUID="523e8fef-2cf2-4efe-90f1-58c7c201a169" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="554ff511-fc15-4c8f-b6c2-d3f8bc76f6e6" TYPE="swap" 
/dev/mapper/centos-home: UUID="02673dc7-31b5-4fc5-8587-9a178b98f76b" TYPE="xfs" 
/dev/sdb: UUID="91b3fb58-26fb-4b1a-9588-9506d677cc06" TYPE="xfs" 

[root@iscsi-client ~ 15:45:52]# mkdir /sdb
[root@iscsi-client ~ 15:46:18]# mount /dev/sdb /sdb
[root@iscsi-client ~ 15:46:31]# echo xixihaha > /sdb/test
[root@iscsi-client ~ 15:46:52]# cat /sdb/test
xixihaha

[root@iscsi-client ~ 15:46:58]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdb               8:16   0    20G  0 disk /sdb
sr0              11:0    1   4.4G  0 rom  /run/media/cyw/CentOS 7 x86_64

持久化挂载

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

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

示例:

bash 复制代码
[root@iscsi-client ~ 15:48:03]# vim /etc/fstab 
 UUID="91b3fb58-26fb-4b1a-9588-9506d677cc06" /sdb xfs defaults,_netdev   0 0

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

bash 复制代码
[root@iscsi-client ~ 15:49:39]# systemctl enable iscsi

重启观察现象

bash 复制代码
[root@iscsi-client ~ 15:50:21]# reboot

[root@iscsi-client ~ 15:52:41]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdb               8:16   0    20G  0 disk /sdb
sdc               8:32   0    20G  0 disk 
sr0              11:0    1   4.4G  0 rom  /run/media/cyw/CentOS 7 x86_64

断开目标连接

要停止使用iSCSI目标,请执行以下步骤:

  • 确保没有使用目标提供的任何设备。 例如,卸载文件系统。
  • 从/etc/fstab等位置删除对目标的所有持久引用。
  • 从iSCSI目标注销。
bash 复制代码
# 卸载iSCSI磁盘挂载目录
[root@iscsi-client ~ 16:04:17]# umount /sdb

# 登出iqn.2026-08.cloud.cyw.iscsi-server:disk1存储目标
[root@iscsi-client ~ 16:25:54]# iscsiadm -m node -T iqn.2026-08.cloud.cyw.iscsi-server:disk1 -p 10.1.8.10:3260 -u
Logging out of session [sid: 1, target: iqn.2026-08.cloud.cyw.iscsi-server:disk1, portal: 10.1.8.10,3260]
Logout of [sid: 1, target: iqn.2026-08.cloud.cyw.iscsi-server:disk1, portal: 10.1.8.10,3260] successful.

# 查看系统块设备,验证disk1会话登出效果
[root@iscsi-client ~ 16:30:21]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdc               8:32   0    20G  0 disk 
sr0              11:0    1   4.4G  0 rom  /run/media/cyw/CentOS 7 x86_64

# 查看当前正在运行的iSCSI会话
[root@iscsi-client ~ 16:33:12]# iscsiadm -m session
tcp: [2] 10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk2 (non-flash)

# 查看本地缓存中所有已发现的iSCSI目标记录
[root@iscsi-client ~ 16:33:29]# iscsiadm -m node
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk1
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk2

关键信息解读

  1. umount /sdb:卸载远程磁盘挂载点,登出存储前必须先卸载,防止文件损坏
  2. -u(logout):会话登出参数;sid:1(会话 ID);target: iqn.2026-08.cloud.cyw.iscsi-server:disk1(登出的目标 IQN);portal:10.1.8.10,3260(存储服务端地址端口)
  3. lsblk 结果:原先映射 disk1 的 /dev/sdb 消失,仅剩 disk2 对应的 /dev/sdc(20G),证明 disk1 会话已断开
  4. iscsiadm -m session:仅保留 tcp: 2 10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk2(当前存活会话,disk2 仍在线)
  5. iscsiadm -m node:展示本地持久缓存,包含 disk1、disk2 两个目标;登出≠删除缓存记录,缓存仍然保留,可以直接重新登录
  • 删除 iSCSI目标的本地记录,以使启动器在引导过程中不会自动登录到目标。
bash 复制代码
# 删除本地缓存中disk1对应的iSCSI目标节点记录
[root@iscsi-client ~ 16:35:47]# iscsiadm -m node -T iqn.2026-08.cloud.cyw.iscsi-server:disk1 -p 10.1.8.10:3260 -o delete

# 查询本地缓存所有iSCSI目标节点
[root@iscsi-client ~ 16:36:02]# iscsiadm -m node
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk2

关键信息解读

  1. -o delete(执行删除操作);-T iqn.2026-08.cloud.cyw.iscsi-server:disk1(指定待删除目标 IQN);-p 10.1.8.10:3260(指定存储门户地址端口)
  2. iscsiadm -m node 查询结果:仅剩余 10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk2
  3. 效果说明:disk1 节点缓存已被清除;如需再次使用 disk1,需要重新执行 iscsiadm -m discovery 发现目标。

区分要点:

-u 只是登出会话,节点缓存还在;

-o delete 彻底删除本地节点缓存

故障处理

如果发现成功,但是启动器登录到发现的目标时遇到问题,则该问题很可能与访问控制或身份验证有 关。客户端上的IQN与服务器上的IQN不匹配会导致目标登录失败。

可能是客户端上的启动器IQN不正确引起的,请在客户端的/etc/iscsi/initiatorname.iscsi文件中修复 IQN,然后重新启动iscsid服务以使更改生效。

bash 复制代码
# 重启 iscsid 服务,加载新的客户端IQN配置
[root@iscsi-client ~ 16:39:15]# systemctl restart iscsid

# SendTargets方式重新发现iSCSI服务端所有目标
[root@iscsi-client ~ 16:40:07]# iscsiadm -m discovery -t st -p 10.1.8.10
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk1
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk2

# 使用错误IQN尝试登录disk1存储目标
[root@iscsi-client ~ 16:40:47]# iscsiadm -m node -T iqn.2026-08.cloud.cyw.iscsi-server:disk1 -l
Logging in to [iface: default, target: iqn.2026-08.cloud.cyw.iscsi-server:disk1, portal: 10.1.8.10,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2026-08.cloud.cyw.iscsi-server:disk1, 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

#故障解决:恢复客户端正确IQN配置
[root@iscsi-client ~ 16:41:36]# vim /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2026-08.cloud.cyw.iscsi-client

# 重启 iscsid 服务,生效正确客户端IQN
[root@iscsi-client ~ 16:42:40]# systemctl restart iscsid

# 重新发现存储目标
[root@iscsi-client ~ 16:42:59]# iscsiadm -m discovery -t st -p 10.1.8.10
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk1
10.1.8.10:3260,1 iqn.2026-08.cloud.cyw.iscsi-server:disk2

# 使用正确IQN重新登录disk1目标
[root@iscsi-client ~ 16:44:27]#  iscsiadm -m node -T iqn.2026-08.cloud.cyw.iscsi-server:disk1 -l 
Logging in to [iface: default, target: iqn.2026-08.cloud.cyw.iscsi-server:disk1, portal: 10.1.8.10,3260] (multiple)
Login to [iface: default, target: iqn.2026-08.cloud.cyw.iscsi-server:disk1, portal: 10.1.8.10,3260] successful.

关键信息解读

  1. /etc/iscsi/initiatorname.iscsi(iSCSI 客户端 IQN 配置文件),InitiatorName(客户端启动器名称,服务端 ACL 鉴权唯一标识)
  2. systemctl restart iscsid(重启 iSCSI 客户端守护进程,刷新 IQN 配置)
  3. authorization failure(授权失败),错误代码 24:客户端 IQN 不在服务端 ACL 允许列表中,拒绝接入
  4. 现象区分:发现目标可以成功,登录被拦截;iSCSI 发现不需要鉴权,建立会话才校验 ACL
  5. 原理:服务端 ACL 只放行 iqn.2026-08.cloud.cyw.iscsi-client,修改成其他 IQN 直接拒绝登录

总结

iSCSI ACL 基于客户端 IQN 做接入控制;客户端 IQN 必须和服务端 acls 内配置完全一致,否则登录鉴权失败。

相关推荐
风雨_831 小时前
轻量级 Nginx 日志分析和可视化平台 NginxPulse安装
运维·nginx
智购科技智能售货柜1 小时前
自动售货机商品识别YOLO模型训练实战:从6万张图片到98%识别率的完整复盘~YH
运维·服务器·数据库·人工智能·redis·物联网·yolo
SeaTunnel1 小时前
Apache SeaTunnel 提交一个任务都经过了什么?
java·大数据·服务器·apache·etl·seatunnel
.冰块.1 小时前
P-SAN 实战:CentOS7 搭建 iSCSI Target 共享块存储
linux·服务器·iscsi
X1A0RAN1 小时前
自动化流水线提效·宏观篇:5 大提效方向实战
运维·自动化
Kina_C1 小时前
Keepalived 单播模式实战:跨网络高可用的关键配置
linux·服务器·网络·keepalived
IKUN家族2 小时前
常见的依懒
java·服务器·数据库
胖大和尚2 小时前
网页访问服务器,只有粘贴板可用
运维·服务器
wWYy.2 小时前
阻塞和非阻塞
服务器·网络