Linux : iscsi 存储
原理
-
SCSI 命令封装
- 将本地的 SCSI 磁盘读写命令封装成 TCP/IP 数据包
- 通过标准以太网传输(而非专用光纤通道)
-
组件角色
组件 作用 Initiator(发起端) 客户端(如服务器),向远程存储发起访问请求 Target(目标端) 服务端(如存储设备),提供虚拟磁盘资源 -
连接标识
- IQN(iSCSI Qualified Name)
唯一标识 Target 和 Initiator,格式:
iqn.年月.域名反写:自定义标识
示例:iqn.2025-08.com.example:xie
- IQN(iSCSI Qualified Name)
配置iSCSI存储服务器
安装targetcli软件包
yum install targetcli -y
新建分区
parted /dev/sda
(parted) unit Unit? [compact]? mib #更改单位
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 102400MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1.00MiB 1025MiB 1024MiB primary xfs boot
2 1025MiB 52225MiB 51200MiB primary xfs
3 52225MiB 56321MiB 4096MiB primary linux-swap(v1)
4 56330MiB 100000MiB 43670MiB extended lba
查看分区信息发现有扩展分区,因此直接创建逻辑分区
(parted) mkpart
Partition type? [logical]? l
File system type? [ext2]?
Start? 56340mib
End? 60350mib
创建4g逻辑分区
查看
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 102400MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1.00MiB 1025MiB 1024MiB primary xfs boot
2 1025MiB 52225MiB 51200MiB primary xfs
3 52225MiB 56321MiB 4096MiB primary linux-swap(v1)
4 56330MiB 100000MiB 43670MiB extended lba
5 56340MiB 60350MiB 4010MiB logical
使用targetcli交互模式,创建后备存储
targetcli
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]
/> cd backstores/block
/backstores/block> create block1 /dev/sda5 #创建后备存储
/backstores/block> cd ../..
创建iqn
/> ls
o- / ....................................... [...]
o- backstores ............................ [...]
| o- block ................ [Storage Objects: 1]
| | o- block1 [/dev/sda5 (0 bytes) write-thru deactivated]
| | 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: 0]
o- loopback ....................... [Targets: 0]
/> cd iscsi
/iscsi> ls
o- iscsi ............................ [Targets: 0]
/iscsi>
/iscsi> create iqn.2025-08.com.example:xie
创建acl控制客户节点访问
/iscsi> ls
o- iscsi ............................ [Targets: 1]
o- iqn.2025-08.com.example:xie ....... [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]
/iscsi> cd iqn.2025-08.com.example:xie/tpg1/acls
/iscsi/iqn.20...xie/tpg1/acls> create iqn.2025-08.com.example:yu
Created Node ACL for iqn.2025-08.com.example:yu
/iscsi/iqn.20...xie/tpg1/acls> ls
o- acls ................................ [ACLs: 1]
o- iqn.2025-08.com.example:yu . [Mapped LUNs: 0]
/iscsi/iqn.20...xie/tpg1/acls>
创建LUN,激活后备存储
/iscsi/iqn.20...xie/tpg1/acls> cd ../luns
/iscsi/iqn.20...xie/tpg1/luns> ls
o- luns ................................ [LUNs: 0]
/iscsi/iqn.20...xie/tpg1/luns> create /backstores/block/block1
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2025-08.com.example:yu
/iscsi/iqn.20...xie/tpg1/luns> ls
o- luns ................................ [LUNs: 1]
o- lun0 [block/block1 (/dev/sda5) (default_tg_pt_gp)]
删除默认门户配置,创建新的门户配置侦听ip地址和端口
/iscsi/iqn.20...xie/tpg1/luns> cd ../portals/
/iscsi/iqn.20.../tpg1/portals> ls
o- portals .......................... [Portals: 1]
o- 0.0.0.0:3260 ........................... [OK]
/iscsi/iqn.20.../tpg1/portals> delete ip_address=0.0.0.0 ip_port=3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20.../tpg1/portals> ls
o- portals .......................... [Portals: 0]
/iscsi/iqn.20.../tpg1/portals> create ip_address=192.168.100.10 ip_port=3260
Using default IP port 3260
Created network portal 192.168.100.10:3260.
/iscsi/iqn.20.../tpg1/portals> ls
o- portals .......................... [Portals: 1]
o- 192.168.100.10:3260 .................... [OK]
重启服务
[root@xieyuhui ~]# systemctl restart target
[root@xieyuhui ~]# systemctl enable target
客户端配置
安装iscsi-initiator-utils软件包
[root@xieyuhui2 ~]# yum install iscsi-initiator-utils -y
[root@xieyuhui2 ~]# rpm -q iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.874-10.el7.x86_64
查看是否安装
修改/etc/iscsi/initiatorname.iscsi配置文件
vim /etc/iscsi/initiatorname.iscsi
作为iscsi节点,客户端需要唯一iqn
重启服务
[root@xieyuhui2 ~]# systemctl restart iscsi
[root@xieyuhui2 ~]# systemctl enable iscsi
[root@xieyuhui2 ~]# systemctl restart iscsid
[root@xieyuhui2 ~]# systemctl enable iscsid
iscsi客户端上连接目标之前,必须先发现目标
登录
使用iscsi块存储
[root@xieyuhui2 ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of
commands.
(parted) unit
Unit? [compact]? mib
(parted) p
Error: /dev/sdb: unrecognised disk label
Model: LIO-ORG block1 (scsi)
Disk /dev/sdb: 4010MiB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(parted) mklabel
New disk label type? gpt #设置类型
创建分区
(parted) mkpart
Partition name? []?
File system type? [ext2]?
Start? 30mib
End? 530mib
Warning: The resulting partition is not properly aligned
for best performance.
Ignore/Cancel? I
(parted) p
Model: LIO-ORG block1 (scsi)
Disk /dev/sdb: 4010MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 30.0MiB 530MiB 500MiB
(parted) quit
[root@xieyuhui2 ~]# udevadm settle
格式化为xfs,创建挂载目录并且永久挂载
[root@xieyuhui2 ~]# mkfs.xfs /dev/sdb1
[root@xieyuhui2 ~]# mkdir /hui
[root@xieyuhui2 ~]# blkid #查看uuid
[root@xieyuhui2 ~]# vim /etc/fstab
[root@xieyuhui2 ~]# mount -a
[root@xieyuhui2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 50G 3.5G 47G 7% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 13M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 1014M 163M 852M 17% /boot
tmpfs 394M 4.0K 394M 1% /run/user/42
tmpfs 394M 44K 394M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /mnt
!!! defaults后面一定要加上 _netdev,这代表我们在有网络之后再读取此文件,如果不加,系统启动过程会先读取/etc/fstab文件,然后不能识别此设备,系统会一直启动失败
如何注销
临时注销,注销之前先取消挂载,然后删除/etc/fstab里面添加的配置信息
[root@xieyuhui2 ~]# umount /hui
[root@xieyuhui2 ~]# iscsiadm -m node -T iqn.2025-08.com.example:xie -p 192.168.100.10:3260 -u
Logging out of session [sid: 1, target: iqn.2025-08.com.example:xie, portal: 192.168.100.10,3260]
Logout of [sid: 1, target: iqn.2025-08.com.example:xie, portal: 192.168.100.10,3260] successful.
永久注销,永久注销之前要先临时注销iscsi目标
[root@xieyuhui2 ~]# iscsiadm -m node -T iqn.2025-08.com.example:xie -p 192.168.100.10:3260 -o delete