必须先验证nvme设备是否被内核正确识别:检查/sys/block/nvme*/device/wwid和queue/logical_block_size是否存在,运行blockdev --getsz /dev/nvme0n1确认扇区数;若卡在nvme reset或busy,需临时卸载nvme-rdma等占用模块。

用 targetcli 导出 NVMe 块设备前,先确认内核是否认得它们
不是所有 NVMe 设备都能直接被 LIO 当作 block backend 使用——尤其是带 NVMe-oF 控制器、或启用了 SR-IOV 的盘,lsblk 能看到,但 /backstores/block create 会报 Device or resource busy 或静默失败。必须先验证:ls -l /sys/block/nvme* 确保每个设备下有 device/wwid 和 queue/logical_block_size;再运行 blockdev --getsz /dev/nvme0n1 看是否返回有效扇区数。若卡在 nvme reset 或 busy,大概率是驱动未释放或被 nvme-rdma 占用,需临时卸载相关模块。
/backstores/block create 导出单块 NVMe 盘时的关键参数和陷阱
NVMe 盘默认启用多队列和 DIF/DIX,而 LIO 的 block backstore 不处理校验头,直接挂载会导致 I/O 错误或 initiator 拒绝连接。必须显式禁用校验并锁定队列行为:
- 导出命令必须带
readonly=false(即使你打算只读,也要显式写,否则某些 initiator 会 fallback 到 read-only mode) - 添加
wwn=参数,值取自/sys/block/nvme0n1/device/wwid,不能手写;不填则 initiator 可能无法稳定识别 LUN - 避免使用
nvme0n1p1这类分区路径——LIO 对 NVMe 分区支持不稳定,应导出整盘(/dev/nvme0n1),由 initiator 上的文件系统或 LVM 管理分区 - 执行后检查
/backstores/block/nvme0n1/attributes下的emulate_pr是否为 1(多客户端必需),默认是 0
导出多块 NVMe 盘时,TPG 和 ACL 配置不能共用同一 IQN
一个 iqn 下的 tpg1 只能绑定一组 LUN,但你可以让多个 NVMe 盘作为不同 LUN 挂在同一 TPG 下——这没问题。真正容易错的是 ACL:如果多个 initiator(比如两台数据库服务器)都要访问全部 NVMe LUN,必须为每个 initiator 的 IQN 单独执行 acls create,不能只配一个。否则只有第一个 initiator 能连上,其余全被拒绝,错误日志里会出现 Rejecting PDU: ISCSI_LOGIN_STATUS_TGT_NOT_FOUND。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
实操建议:
- 每块 NVMe 盘创建独立 storage object:
/backstores/block create name=nvme0 /dev/nvme0n1、name=nvme1 /dev/nvme1n1 - 在同一个
tpg1下依次create lun=0 storage_object=/backstores/block/nvme0、lun=1 ... - 对每个客户端 initiator name(如
iqn.2026-10.com.db1:primary)都执行一次/iscsi/iqn.xxx/tpg1/acls create - 务必
saveconfig,否则重启target服务后配置丢失
客户端挂载后发现 I/O 延迟高或超时,大概率是没关 NVMe 的自动节能
LIO 不干预底层设备电源策略,而 NVMe 盘默认启用 auto PS(Power State),空闲几秒就切到 PS3,唤醒延迟达 100ms+,iSCSI 层会判定为链路中断。这不是 targetcli 配置问题,而是硬件层缺失:
- 在服务端运行:
sudo nvme set-feature -f 0x02 -v 0x00 /dev/nvme0n1(关闭 ASPM) - 再执行:
echo 'none' | sudo tee /sys/block/nvme0n1/device/power/control(禁用 runtime PM) - 加到
/etc/rc.local或 systemd service 中,确保每次启动生效 - 若用的是企业级 NVMe(如 Intel D7-P5510),还需检查
nvme get-feature -f 0x0d /dev/nvme0n1中的Autonomous Power State Transition是否为 0
这些操作不在 targetcli 界面内,但跳过就会导致“配置全对,就是性能差”的典型故障。










