Debian iSCSI Target 与 open-iscsi:LVM 后端、ACL 与客户端验证
1. 服务介绍
iSCSI 通过 TCP/IP 网络提供块级存储。存储端创建 Target,客户端使用 open-iscsi 作为 Initiator 登录后,系统会把远端 LUN 识别为本地块设备,可以继续分区、格式化或交给 LVM 使用。
本文整理 Debian 上的 iSCSI 实训流程:使用额外磁盘创建 LVM 逻辑卷,把逻辑卷发布为 Target 后端;配置 IQN、LUN、网络门户和 ACL;最后在 RouterSrv 客户端发现并登录目标,使用客户端命令确认远端磁盘已经出现。
2. 准备运行环境
• 操作系统:Debian Linux,使用 systemd 管理服务。
• 权限:Target 端和 Initiator 端都需要 root 或 sudo 权限。
• 角色:TargetSrv 提供存储,RouterSrv 作为指定客户端;不要把两端命令混用。
• 存储:TargetSrv 准备一块空闲实验磁盘,例如 /dev/sdg;执行前用 lsblk 确认,不能照抄设备名。
• 网络:两端 IP 可达;iSCSI Target 监听 TCP 3260。
• 参数:使用 TARGET_IP、TARGET_IQN、INITIATOR_IQN 替换现场值;ACL 中的 Initiator IQN 必须和客户端 /etc/iscsi/initiatorname.iscsi 完全一致。
• 数据风险:LVM、Target 后端和客户端文件系统都可能写入真实数据;先确认空闲设备和备份。
• 认证边界:本文按实训要求关闭 TPG 认证,仅用 ACL 限制客户端;生产环境应评估 CHAP、网络隔离和多路径。
3. 相关知识与注意点
• Target 是服务端发布的存储目标,Initiator 是客户端连接方,LUN 是 Target 内部映射出的块设备。
• IQN 用于唯一标识 Target 和 Initiator。ACL 只允许指定 Initiator IQN 连接,不能用普通主机名代替。
• Portal 由 IP 和 TCP 端口组成,默认端口为 3260。服务端防火墙、路由和监听地址必须一致。
• targetcli 使用 LIO 内核目标框架,常见目录依次是 backstores、iscsi、TPG、luns、portals 和 acls。
• 后端可以是 LVM 逻辑卷、整块磁盘或文件。使用 LVM 逻辑卷时,后端路径必须指向正确的 /dev/VG/LV。
• 同一个 LUN 不要被多个普通客户端同时读写,除非使用支持集群锁的文件系统;否则可能导致文件系统损坏。
• 客户端登录后先查看 lsblk、session 和 by-path,再决定是否格式化。不要看到新磁盘就直接 mkfs。
• Target 配置修改后要保存 targetcli 配置,并检查系统启动后目标是否自动恢复。
4. 实验步骤
4.1 确认 Target 端磁盘
在 TargetSrv 上查看磁盘、分区和挂载状态:
bash
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,UUID
blkid
ip -br addr
确认 /dev/sdg 是空闲实验盘后再继续:

4.2 创建 LVM 后端
安装 targetcli 和 LVM 工具:
bash
apt update
apt install -y targetcli-fb lvm2
创建物理卷、卷组和 5G 逻辑卷:
bash
pvcreate /dev/sdg
vgcreate iscsivg /dev/sdg
lvcreate -L 5G -n iscsistore iscsivg
pvs
vgs
lvs -o+devices
逻辑卷路径应为 /dev/iscsivg/iscsistore。不要在 Target 端对它执行 mkfs,后续由客户端决定是否创建文件系统。
4.3 创建 Target、LUN 和 Portal
启动 targetcli:
bash
targetcli
在 targetcli 交互界面中执行。示例 IQN 使用占位值,实际环境按题目或规划替换:
text
cd /backstores/block
create serverc.iscsistore /dev/iscsivg/iscsistore
cd /iscsi
create TARGET_IQN
cd TARGET_IQN/tpg1/luns
create /backstores/block/serverc.iscsistore
cd ../portals
create TARGET_IP 3260
配置完成后查看对象树:
text
cd /
ls
4.4 配置 ACL,只允许指定客户端
先在 RouterSrv 上读取 Initiator IQN:
bash
apt install -y open-iscsi
cat /etc/iscsi/initiatorname.iscsi

回到 TargetSrv,在 targetcli 中创建 ACL。INITIATOR_IQN 必须替换为 RouterSrv 实际读取到的值:
text
cd /iscsi/TARGET_IQN/tpg1/acls
create INITIATOR_IQN
检查 ACL 和 LUN 映射:
text
cd /iscsi/TARGET_IQN/tpg1
ls
Target 端示例配置和 ACL 结果:


4.5 按实验要求关闭认证并保存配置
如果实验明确要求关闭 TPG 认证,在 TargetSrv 执行:
text
cd /iscsi/TARGET_IQN/tpg1
set attribute authentication=0
saveconfig
ls
exit
关闭认证不等于取消 ACL。仍保留 INITIATOR_IQN ACL,只允许指定客户端连接:

检查配置文件和服务状态:
bash
test -f /etc/rtslib-fb-target/saveconfig.json
systemctl status rtslib-fb-targetctl --no-pager
ss -lntp | grep ':3260'
不同 Debian 版本服务单元名称可能不同;以 systemctl list-unit-files | grep -E 'target|rtslib' 为准。
5. Initiator 客户端连接
5.1 安装并设置 open-iscsi
在 RouterSrv 上安装客户端:
bash
apt update
apt install -y open-iscsi
systemctl enable --now iscsid
systemctl enable --now open-iscsi
cat /etc/iscsi/initiatorname.iscsi
确认客户端 IQN 唯一且与 Target ACL 一致:


5.2 发现 Target 并登录
使用服务端实际地址发现目标:
bash
iscsiadm -m discovery -t sendtargets -p TARGET_IP:3260
iscsiadm -m session
登录发现到的 Target:
bash
iscsiadm -m node --login
iscsiadm -m session
如果环境要求显式设置认证关闭,可在确认 Target 端策略后使用对应 node 参数;本文不在命令行写入密码或 CHAP 密钥。
5.3 查看远端块设备
连接成功后检查:
bash
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
iscsiadm -m session -P 3
ls -l /dev/disk/by-path/ | grep -i iscsi
dmesg | tail -n 50
客户端应出现约 5G 的新块设备。首次使用前只确认设备路径,不要在未确认设备的情况下格式化系统盘:

如需在客户端创建文件系统和挂载,先确认设备:
bash
lsblk -f
mkfs.ext4 /dev/ISCSI_DEVICE
mkdir -p /mnt/iscsi
mount /dev/ISCSI_DEVICE /mnt/iscsi
findmnt /mnt/iscsi
格式化会清除远端 LUN 内容;生产环境应先确认业务用途和备份。
5.4 连接结果示例


6. 验证与排错
6.1 Target 端检查
bash
pvs
vgs
lvs -o+devices
targetcli ls
ss -lntp | grep ':3260'
journalctl -b --no-pager | grep -Ei 'iscsi|target|lio' | tail -n 80
6.2 Initiator 端检查
bash
systemctl is-active iscsid
systemctl is-active open-iscsi
iscsiadm -m session
iscsiadm -m session -P 3
lsblk -f
findmnt /mnt/iscsi
journalctl -u open-iscsi -n 50 --no-pager
6.3 故障定位
• discovery 无结果:检查 TARGET_IP、TCP 3260、防火墙和 Target portal。
• discovery 有结果但 login 失败:检查 INITIATOR_IQN 是否与 ACL 完全一致。
• login 成功但无磁盘:检查 LUN 是否关联 backstore、LVM 逻辑卷是否存在、内核日志是否报错。
• Target 重启后配置丢失:检查 saveconfig.json 和 targetctl 服务单元。
• 客户端识别设备但挂载失败:先检查文件系统类型、UUID 和是否被其他主机占用。
• 多客户端同时写同一普通文件系统:停止继续写入,避免文件系统损坏;需要共享写入时使用集群文件系统和锁管理。
7. 小结
iSCSI 配置链路是:空闲磁盘、LVM 逻辑卷、Target backstore、Target IQN、LUN、portal、ACL、Initiator discovery/login、客户端块设备识别。每一层都要用对应命令验证,不能只看 targetcli 配置成功或客户端出现登录会话。
实验中可以按要求关闭认证,但仍需保留 ACL。生产环境应增加 CHAP、网络隔离、最小权限、多路径和监控;真实 IP、IQN 和设备名使用现场参数替换。