技术文章2026 年 2 月 14 日约 2.5 分钟

iSCSI Target 配置:用 targetcli 发布块设备

使用 targetcli 创建 iSCSI Target、LUN 和访问控制,并给出持久化与验证步骤。

在 Linux 上做 iSCSI Target,最常用的就是 LIO + targetcli。targetcli 的配置是树状的,刚上手容易懵,但理解它的层级之后,配起来很快:backstores(盘)→ iSCSI Target(门面)→ LUN(窗口)→ ACL(谁可以进)。

#第一步:准备背存储

backstore 是「底层盘」的抽象,LIO 支持的 backstore 类型有 block(块设备)、fileio(文件)、ramdisk(内存盘)等。生产环境用 block:

bash
sudo dnf install -y targetcli
# 找一个空闲盘,比如 /dev/sdb
sudo lsblk -o NAME,SIZE,TYPE

sudo targetcli <<'EOF'
backstores/block create name=disk01 dev=/dev/sdb
EOF

注意:targetcli 会把 /dev/sdb 直接交给 LIO,盘上的数据会被覆盖式使用,操作前确认这是你要发布的那块盘。

#第二步:创建 Target 和 LUN

bash
sudo targetcli <<'EOF'
/iscsi create iqn.2026-08.com.example:storage01
/iscsi/iqn.2026-08.com.example:storage01/tpg1/luns create /backstores/block/disk01
EOF

IQN(iSCSI Qualified Name)格式是 iqn.<年份>-<月份>.<反向域名>:<标识>,命名要规范,因为客户端、监控、排障都靠这个名字区分存储。tpg1 是 Target Portal Group,简单场景只有一个 portal(监听地址:端口)。

查看当前配置:

bash
sudo targetcli ls

#第三步:ACL 决定谁能访问

LIO 默认拒绝一切连接(generate_node_acls 默认关闭)。要给某台服务器授权,先拿到它的 Initiator IQN(在客户端机器上执行 cat /etc/iscsi/initiatorname.iscsi),然后在 Target 侧添加:

bash
sudo targetcli <<'EOF'
/iscsi/iqn.2026-08.com.example:storage01/tpg1/acls create iqn.2026-08.com.client:web01
/iscsi/iqn.2026-08.com.example:storage01/tpg1/acls/iqn.2026-08.com.client:web01 set auth userid=storage_user password=strong-pass-123
/iscsi/iqn.2026-08.com.example:storage01/tpg1/acls/iqn.2026-08.com.client:web01 set auth mutual_userid=storage_user mutual_password=strong-pass-123
EOF

set auth 配的是双向 CHAP:不仅客户端要证明自己,Target 也要向客户端证明身份,防止中间人。双向 CHAP 的密码别和系统密码混用,单独生成一组。

#第四步:持久化

targetcli 的改动默认只存在内存里(/sys/kernel/config),重启就没了。必须保存:

bash
sudo targetcli saveconfig

这会写入 /etc/target/saveconfig.json,并且 target 服务重启时自动加载。确认服务开机自启:

bash
sudo systemctl enable --now target
sudo systemctl is-active target

#验证:从客户端视角检查

在客户端上:

bash
sudo iscsiadm -m discovery -t sendtargets -p <target-ip>
sudo iscsiadm -m node -T iqn.2026-08.com.example:storage01 -p <target-ip> --login
lsblk -S           # 应该看到新盘
sudo iscsiadm -m session

登录成功说明 ACL、CHAP、portal 全部打通。最后在 Target 侧复查:

bash
sudo targetcli ls
# 确认 LUN、ACL、认证状态
sudo systemctl status target

#经验:配置变更先备份

改 ACL 或 LUN 之前,先 sudo targetcli saveconfig 留一份当前配置;改完再存一次。targetcli 没有「撤销」按钮,回滚全靠配置文件。另外,给生产存储换盘(比如 sdb 换掉)时,backstore 的 name 不要变,否则客户端那边的设备路径会变,挂载表全要改。

写于 2026 年 2 月 14 日

栏目
技术文章
约
2.5 分钟
字数
2.1K
阅读
133

本文为原创记录,转载请注明出处。如果这篇替你省了时间,欢迎留言说说你踩到的坑。

同题 · related

留言 · remarks

00 条

还没有留言,来说点什么吧。

iSCSI Target 配置:用 targetcli 发布块设备 · LXH·BLOG