Rocky9-ISCSI块存储
一、存储类型概述
- 块存储:直接将存储块进行网络共享,支持客户端进行分区、格式化、挂载操作。
- NAS:通过 NFS 或 SMB 协议以及iscsi协议实现共享。
- SAN:块级存储网络,通常通过光纤通道(FC)或 iSCSI 实现。
- iSCSI:基于 TCP/IP 的 SAN 实现途径,灵活且成本较低。
二、分区表类型
MBR分区表
MBR的起始扇区和结束扇区只能用4个字节表示00 00 00 00-FF FF FF FF,支持的最多的扇区数量是2^32个,那么所支持的最大磁盘大小为:2^32 x 512 ≈ 2TB
突破MBR 2TB限制方案:
修改磁盘的扇区大小,由原来的512byte修改为4KB,那么理论上可以突破到2TB x 8 = 16TB。
GPT分区表
GPT的起始扇区和结束扇区能够使用8个字节表示00 00 00 00 00 00 00 00 – FF FF FF FF FF FF FF FF,支持的最多的扇区数量是2^64个,那么GPT所支持的最大磁盘大小为:2^64 x 512 ≈ 9.44ZB ≈ 8ZiB
三、文件系统类型
四、ISCSI块存储实验
1.准备环境和工具安装
准备两台虚拟机,一台做服务器(4.150),一台做客户端(4.160)
2.创建逻辑卷
#创建物理卷
[root@localhost ~]# pvcreate /dev/nvme0n1Physical volume "/dev/nvme0n1" successfully created.Creating devices file /etc/lvm/devices/system.devices
#创建卷组
[root@localhost ~]# vgcreate sql_vg /dev/nvme0n1 Physical volume "/dev/nvme0n1" successfully created.Volume group "sql_vg" successfully created
#创建逻辑卷
[root@localhost ~]# lvcreate -L 19G -n sql_lv sql_vgLogical volume "sql_lv" created.
#查看物理卷
[root@localhost ~]# pvsPV VG Fmt Attr PSize PFree /dev/nvme0n1 lvm2 --- 20.00g 20.00g/dev/nvme0n2 sql_vg lvm2 a-- <20.00g 1020.00m
#查看卷组
[root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree sql_vg 1 1 0 wz--n- <20.00g 1020.00m
#查看逻辑卷
[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertsql_lv sql_vg -wi-a----- 19.00g
注:因为要共享给客户端的是存储块,所以不需要继续进行格式化与挂载的操作
3.构建块存储共享
[root@localhost ~]# dnf -y install targetcli
#将共享设备绑定到共享标识符上
[root@localhost ~]# targetcli
targetcli shell version 2.1.57
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
#创建块型后端存储
/> /backstores/block create nvme0n1_disk /dev/sql_vg/sql_lv
Created block storage object nvme0n1_disk using /dev/sql_vg/sql_lv.
#创建唯一标识符
/> /iscsi create iqn.2025-10.com.xxhf:sql
Created target iqn.2025-10.com.xxhf:sql.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260. #创建监听ip和监听端口
#绑定
/> /iscsi/iqn.2025-10.com.xxhf:sql/tpg1/luns create /backstores/block/nvme0n1_disk
Created LUN 0.
#之后的三条命令都是非必须的,只是设置了一些参数# 禁用认证(测试用),authentication=0: 无认证
/> /iscsi/iqn.2025-10.com.xxhf:sql/tpg1 set attribute authentication=0
Parameter authentication is now '0'.
# 允许写入,demo_mode_write_protect=0: 关闭写保护
/> /iscsi/iqn.2025-10.com.xxhf:sql/tpg1 set attribute demo_mode_write_protect=0
Parameter demo_mode_write_protect is now '0'.
# 自动生成访问控制,generate_node_acls=1: 简化权限
/> /iscsi/iqn.2025-10.com.xxhf:sql/tpg1 set attribute generate_node_acls=1
Parameter generate_node_acls is now '1'.
/> saveconfig # 保存配置
Configuration saved to /etc/target/saveconfig.json
/> exit # 退出 targetcli
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
#设为开机自启动
[root@localhost ~]# systemctl enable --now target
4.客户端安装共享软件
[root@localhost ~]# dnf -y install iscsi-initiator-utils#扫描服务器共享
[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 192.168.4.150
192.168.4.150:3260,1 iqn.2025-10.com.xxhf:sql #通过标签连接
#连接服务器共享
[root@localhost ~]# iscsiadm -m node -T iqn.2025-10.com.xxhf:sql --login
Logging in to [iface: default, target: iqn.2025-10.com.xxhf:sql, portal: 192.168.4.150,3260]
Login to [iface: default, target: iqn.2025-10.com.xxhf:sql, portal: 192.168.4.150,3260] successful.
共享前:
共享后:
5.对磁盘进行分区格式化挂载
# 分区——全部默认
[root@localhost ~]# gdisk /dev/sdb
# 格式化
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1245119 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=4980475, imaxpct=25= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 挂载
[root@localhost ~]# mkdir /mysql
[root@localhost ~]# mount /dev/sdb1 /mysql/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 871M 0 871M 0% /dev/shm
tmpfs 349M 5.2M 344M 2% /run
/dev/sda3 17G 1.5G 16G 9% /
/dev/sda1 960M 269M 692M 28% /boot
tmpfs 175M 0 175M 0% /run/user/0
/dev/sr0 11G 11G 0 100% /media
/dev/sdb1 19G 168M 19G 1% /mysql
6.对块存储共享扩容
(1)先卸载,再断开连接
[root@localhost ~]# umount /mysql/
[root@localhost ~]# iscsiadm -m node -T iqn.2025-10.com.xxhf:sql --logout
(2)服务器端扩容逻辑卷
[root@localhost ~]# vgextend sql_vg /dev/nvme0n2
[root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree sql_vg 2 1 0 wz--n- 39.99g 20.99g
[root@localhost ~]# lvresize -L +20G /dev/sql_vg/sql_lv
(3)客户端连接共享服务
[root@localhost ~]# iscsiadm -m node -T iqn.2025-10.com.xxhf:sql --login
(4)客户端扩容
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.5
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p #查看
Warning: Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra
41943040 blocks) or continue with the current setting?
Fix/Ignore? Fix #修复
Model: LIO-ORG nvme0n1_disk (scsi)
Disk /dev/sdb: 41.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name Flags1 1049kB 20.4GB 20.4GB xfs Linux filesystem(parted) resizepart 1
End? [20.4GB]? 41.9GB #扩容
(parted) p
Model: LIO-ORG nvme0n1_disk (scsi)
Disk /dev/sdb: 41.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name Flags1 1049kB 41.9GB 41.9GB xfs Linux filesystem(parted) q #退出
Information: You may need to update /etc/fstab.[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17G 0 part /
sdb 8:16 0 39G 0 disk
└─sdb1 8:17 0 39G 0 part #成功扩容
sr0 11:0 1 10.2G 0 rom /media
(5)重新格式化文件系统
[root@localhost ~]# mount /dev/sdb1 /mysql/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 871M 0 871M 0% /dev/shm
tmpfs 349M 5.2M 344M 2% /run
/dev/sda3 17G 1.5G 16G 9% /
/dev/sda1 960M 269M 692M 28% /boot
tmpfs 175M 0 175M 0% /run/user/0
/dev/sr0 11G 11G 0 100% /media
/dev/sdb1 19G 168M 19G 1% /mysql
#重新格式化
[root@localhost ~]# xfs_growfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1245119 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=4980475, imaxpct=25= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4980475 to 10223355
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 871M 0 871M 0% /dev/shm
tmpfs 349M 5.2M 344M 2% /run
/dev/sda3 17G 1.5G 16G 9% /
/dev/sda1 960M 269M 692M 28% /boot
tmpfs 175M 0 175M 0% /run/user/0
/dev/sr0 11G 11G 0 100% /media
/dev/sdb1 39G 311M 39G 1% /mysql