当前位置: 首页 > news >正文

Linux 服务:iSCSI 存储服务配置全流程指南

Linux 服务:iSCSI 存储服务配置全流程指南

一、iscsi简介
1、概念
互联网小型计算机系统接口(Internet Small Computer System Interface,简称iSCSI)是一个基于TCP/IP的协议,用于通过IP网络仿真SCSI高性能本地存储总线,从而为远程块存储设备提供数据传输和管理。iSCSI协议的运行方式类似于客户端/服务器配置。

二、配置iscsi存储服务器–(提供iscsi目标)
1、新建分区–/dev/sda5–10G
fdisk /dev/sda
partprobe /dev/sda

2、安装targetcli软件包—在RHEL7上提供配置iscsi目标的使用程序是targetcli
yum -y install targetcli

3、使用targetcli交互模式,创建后备存储
/(根节点):整个存储目标配置的顶层目录,包含所有可配置的组件。
backstores(后端存储):
存储目标实际使用的物理或逻辑存储资源,相当于 “存储池”。包含以下类型:
block:直接使用块设备(如 /dev/sda、LVM 逻辑卷)作为后端存储。
fileio:使用普通文件作为后端存储(将文件模拟为块设备 ,使用dd命令创建的文件)。
pscsi:通过 SCSI 协议直接关联物理 SCSI 设备。通常不使用
ramdisk:使用内存中的虚拟磁盘作为后端存储类似于U盘(临时存储,重启后丢失)。
括号中的 [Storage Objects: 0] 表示当前该类型下没有配置任何存储对象(即没有关联实际的存储资源)。
iscsi:
配置 iSCSI 目标服务的节点,iSCSI 是一种通过网络(通常是以太网)将存储设备共享给其他主机的协议。[Targets: 0] 表示当前没有创建任何 iSCSI 目标(即没有共享任何存储给网络中的其他主机)。
loopback:
配置本地环回目标的节点,用于在本机内部模拟存储目标(测试用途为主)。[Targets: 0] 表示当前没有配置任何环回目标。

[root@server ~]# targetcli 
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb41
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'./> 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]#backstores:存储后端,管理可共享的存储资源(如硬盘、文件、内存盘等),初始为空。
#block:块设备存储(如物理硬盘分区)。
#fileio:文件类型存储(如普通文件模拟的存储)。
#pscsi:物理 SCSI 设备。
#ramdisk:内存虚拟磁盘。
#iscsi:iSCSI 目标配置区(当前无任何目标,后续用于定义共享给客户端的存储目标)。
#loopback:环回目标配置区(本地测试用,暂未使用)。/> cd backstores/block 
/backstores/block> ls
o- block .................................................. [Storage Objects: 0]
/backstores/block> create block1 /dev/sda5
#操作说明:create命令用于创建存储对象,格式为create <对象名> <物理设备路径>。
#此处创建名为block1的存储对象,关联到物理分区/dev/sda5(即把该分区作为可共享的存储资源)。
Created block storage object block1 using /dev/sda5.
/backstores/block> ls
o- block .................................................. [Storage Objects: 1]o- block1 ........................ [/dev/sda5 (5.0GiB) write-thru deactivated]/backstores> cd /
/> ls
o- / ..................................................................... [...]o- backstores .......................................................... [...]| o- block .............................................. [Storage Objects: 1]| | o- block1 .................... [/dev/sda5 (5.0GiB) write-thru deactivated]| o- fileio ............................................. [Storage Objects: 0]| o- pscsi .............................................. [Storage Objects: 0]| o- ramdisk ............................................ [Storage Objects: 0]o- iscsi ........................................................ [Targets: 0]o- loopback ..................................................... [Targets: 0]

4、为目标创建iqn

/> cd iscsi 
/iscsi> create iqn.2025-08.com.example:hrz
#操作说明:使用create命令创建一个 iSCSI 目标,名称遵循 IQN(iSCSI Qualified Name)格式:
#iqn:固定前缀,表示 iSCSI 合格名称。
#2025-08:创建年份和月份。
#com.example:反向域名(通常使用组织的域名)。
#hrz:自定义标识符(可用于区分不同目标)。
Created target iqn.2025-08.com.example:hrz.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260./iscsi> ls
o- iscsi .......................................................... [Targets: 1]o- iqn.2020-03.com.example:disk1 ................................... [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]

5、创建acl–在TPG中,创建ACL以控制客户端节点的访问

/iscsi> cd iqn.2025-08.com.example:hrz/tpg1/acls 
/iscsi/iqn.20...hrz/tpg1/acls> ls
o- acls ................................................................ [ACLs: 0]
/iscsi/iqn.20...hrz/tpg1/acls> create iqn.2025-08.com.example:luoqi
#使用create命令添加客户端的 IQN 到 ACL 中,允许该客户端访问目标。
#客户端 IQN 格式与目标 IQN 一致:iqn.2025-08.com.example:luoqi(luoqi为客户端标识符)。 
Created Node ACL for iqn.2025-08.com.example:luoqi
/iscsi/iqn.20...hrz/tpg1/acls> ls
o- acls ................................................................ [ACLs: 1]o- iqn.2025-08.com.example:luoqi .............................. [Mapped LUNs: 1]o- mapped_lun0 ...................................... [lun0 block/block1 (rw)]

6、创建LUN–此步骤还将激活每个后备存储。此处为block1后备存储创建LUN

/iscsi/iqn.20...hrz/tpg1/acls> cd ../luns
/iscsi/iqn.20...hrz/tpg1/luns> ls
o- luns ................................................................ [LUNs: 0]
/iscsi/iqn.20...hrz/tpg1/luns> create /backstores/block/block1
#操作说明:使用create命令将存储后端的block1对象(对应/dev/sda5)映射为该目标的 LUN。
#路径/backstores/block/block1指定了要映射的存储对象。
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2025-08.com.example:luoqi
/iscsi/iqn.20...hrz/tpg1/luns> ls
o- luns ................................................................ [LUNs: 1]o- lun0 .......................... [block/block1 (/dev/sda5) (default_tg_pt_gp)]

7、创建门户–在TPG中,创建一个门户配置侦听IP地址和端口,先把默认的门户配置删除,然后创建

/iscsi/iqn.20.../tpg1/portals> delete ip_address=0.0.0.0 ip_port=3260
Deleted network portal 0.0.0.0:3260
#操作说明:删除 TPG1 中默认的端口配置(监听所有 IP 地址的 3260 端口)。
#0.0.0.0表示监听服务器上所有可用的 IP 地址,这在生产环境中可能不够安全或不符合网络规划。
/iscsi/iqn.20.../tpg1/portals> create ip_address=192.168.100.20 ip_port=3260Using default IP port 3260
#操作说明:创建新的端口配置,指定 iSCSI 目标仅监听服务器的192.168.100.20这个 IP 地址的 3260 端口(iSCSI 默认端口)。
#这样配置后,客户端只能通过192.168.100.20:3260访问该 iSCSI 目标,增强了网络访问的可控性。
Created network portal 192.168.100.20:3260.
/iscsi/iqn.20.../tpg1/portals> ls
o- portals .......................................................... [Portals: 1]o- 192.168.100.20:3260 .................................................... [OK]

8、整体预览targetcli配置

/> ls
o- / ....................................................................... [...]o- backstores ............................................................ [...]| o- block ................................................ [Storage Objects: 1]| | o- block1 ....................... [/dev/sda5 (0 bytes) write-thru activated]| |   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: 1]| o- iqn.2025-08.com.example:hrz ..................................... [TPGs: 1]|   o- tpg1 ............................................. [no-gen-acls, no-auth]|     o- acls ........................................................ [ACLs: 1]|     | o- iqn.2025-08.com.example:luoqi ...................... [Mapped LUNs: 1]|     |   o- mapped_lun0 .............................. [lun0 block/block1 (rw)]|     o- luns ........................................................ [LUNs: 1]|     | o- lun0 .................. [block/block1 (/dev/sda5) (default_tg_pt_gp)]|     o- portals .................................................. [Portals: 1]|       o- 192.168.100.20:3260 ............................................ [OK]o- loopback ....................................................... [Targets: 0]
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json

9、重启服务,并设置下次启动生效

systemctl  restart  target
systemctl  enable   target或者使用
systemctl restart iscsi
systemctl restart iscsid
systemctl enable iscsi
systemctl enable iscsid

10、设置防火墙—由于防火墙对应的service name中没有target和iscsi,所以只需要添加端口3260即可(也可直接关闭)

firewall-cmd  --add-port=3260/tcp  --permanent
firewall-cmd  --reload

三、iscsi客户端配置
1、安装iscsi-initiator-utils

yum  -y install iscsi-initiator-utils

2、修改/etc/iscsi/initiatorname.iscsi配置文件—作为iscsi节点,客户端需要唯一的iqn,我们需要将该配置文件中的iqn改成我们之前在acl中新建的那个iqn

vim  /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2025-08.com.example:luoqi

3、重启iscsi、iscsid服务,并设置下次启动生效

systemctl restart iscsi
systemctl enable iscsi
systemctl restart iscsid
systemctl enable iscsid

4、发现目标
在iscsi客户端上连接目标之前,必须先发现目标,发现过程将目标节点信息和设置存储在/var/lib/iscsi/nodes目录中,并使用/etc/iscsi/iscsi.conf配置文件中的默认值。
在发现模式中,sendtargets请求仅返回带有为此启动器配置的访问权限的目标

iscsiadm -m discovery -t sendtargets -p 192.168.100.20:3260

5、登陆目标

iscsiadm -m node -T iqn.2025-08.com.example:hrz -p 192.168.100.20:3260 -l

6、登录成功后使用fdisk -l命令查看磁盘情况,会发现客户端多了一个块设备

fdisk  -l

7、使用iscsi块存储
对/dev/sdb设备进行分区,并格式化,规划划分分区大小为1G,格式化为xfs

parted  /dev/sdb
udevadm settle
mkfs.xfs  /dev/sdb1

8、挂载

mkdir  /iscsistorage
mount  /dev/sdb1  /iscsistorage(临时挂载)

永久挂载

blkid /dev/sdb5----把查询到的UUID复制
vim  /etc/fstab
UUID=1cef44a7-c317-4078-91fb-86b089cc9a0c /iscsistorage    xfs   defaults,_netdev   0   0mount  -a

注意:_netdev一定要加上,因为我们一旦重启了服务器,系统启动过程中是先读取/etc/fstab文件,然后再读取网卡的,由于我们iscsi存储时属于网络共享,所以如果我们没有写入_netdev这个参数的话,系统就识别不了iscsi存储共享的设备,导致系统启动失败。

四、注销目标
1、临时注销

iscsiadm  -m  node  -T  iqn.2025-08.com.example:hrz  -p 192.168.100.20:3260   -u

2、永久注销—永久注销iscsi目标前,一定先要临时注销iscsi目标。

 iscsiadm  -m  node  -T  iqn.2025-08.com.example:hrz  -p 192.168.100.20:3260   -uiscsiadm  -m  node  -T  iqn.2025-08.com.example:hrz  -p 192.168.100.20:3260  -o  delete
http://www.dtcms.com/a/336669.html

相关文章:

  • 廖雪峰-Java教程-Part02
  • C#高级语法_委托
  • 力扣第463场周赛
  • 17-线程
  • uC/OS - III 系统DEBUG时内核对象统计信息
  • 模拟实现 useEffect 功能
  • 配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~
  • clion 如何调试 redis(在 mac 上)
  • AMBA-AXI and ACE协议详解(三)
  • 期望分位数回归模型
  • 利用pypy加速pyxlsbwriter生成xlsb文件
  • 五、redis入门 之 客户端连接redis
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(3):21-30语法
  • 雷卯针对香橙派Orange Pi Kunpeng Pro开发板防雷防静电方案
  • CloudBeaver:基于浏览器的DBeaver
  • 机器学习案例——对好评和差评进行预测
  • 当AI替我“搬砖”,我的价值是什么?
  • 21.AlexNet
  • 金山办公的服务端开发工程师-25届春招部分笔试题
  • C# Newtonsoft.Json 反序列化子类数据丢失问题
  • DBeaver连接MySQL 8报错连接丢失
  • HTTP协议-3-HTTP/2是如何维持长连接的?
  • JAVA后端开发——Token自动续期机制的必要性
  • 【Linux内核】Linux信号机制
  • 【Linux】五种IO模型
  • JVM学习笔记-----StringTable
  • react 错误边界
  • Python 内置模块 collections 常用工具
  • 【撸靶笔记】第二关:GET -Error based -Intiger based
  • Spring Framework :IoC 容器的原理与实践