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:
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
sudo targetcli <<'EOF'
/iscsi create iqn.2026-08.com.example:storage01
/iscsi/iqn.2026-08.com.example:storage01/tpg1/luns create /backstores/block/disk01
EOFIQN(iSCSI Qualified Name)格式是 iqn.<年份>-<月份>.<反向域名>:<标识>,命名要规范,因为客户端、监控、排障都靠这个名字区分存储。tpg1 是 Target Portal Group,简单场景只有一个 portal(监听地址:端口)。
查看当前配置:
sudo targetcli ls#第三步:ACL 决定谁能访问
LIO 默认拒绝一切连接(generate_node_acls 默认关闭)。要给某台服务器授权,先拿到它的 Initiator IQN(在客户端机器上执行 cat /etc/iscsi/initiatorname.iscsi),然后在 Target 侧添加:
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
EOFset auth 配的是双向 CHAP:不仅客户端要证明自己,Target 也要向客户端证明身份,防止中间人。双向 CHAP 的密码别和系统密码混用,单独生成一组。
#第四步:持久化
targetcli 的改动默认只存在内存里(/sys/kernel/config),重启就没了。必须保存:
sudo targetcli saveconfig这会写入 /etc/target/saveconfig.json,并且 target 服务重启时自动加载。确认服务开机自启:
sudo systemctl enable --now target
sudo systemctl is-active target#验证:从客户端视角检查
在客户端上:
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 侧复查:
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 条还没有留言,来说点什么吧。