NFS 与 iSCSI 服务器配置与管理实战指南

NFS 服务器

摘要

本文全面介绍了两种主流的网络存储技术:NFS(网络文件系统)和 iSCSI(Internet 小型计算机系统接口)。文章首先详细阐述了 NFS 服务的核心概念、架构、工作原理、优势与局限性,并提供了从服务部署、配置导出、客户端挂载到持久化配置的完整实战指南。随后,文章深入讲解了 iSCSI 服务的架构、核心组件(如 Target、Initiator、IQN、LUN 等),并逐步演示了如何配置 iSCSI Target、创建 LUN、设置 ACL 以及客户端如何发现、连接、格式化并使用 iSCSI 存储,最后还涵盖了持久化挂载和故障处理等关键运维知识。全文旨在为系统管理员和运维工程师提供一套清晰、可操作的 NFS 与 iSCSI 服务器配置与管理实战方案。

NFS 服务介绍

在计算机网络存储领域,NFS(Network File System,网络文件系统)是一种实现不同计算机之间文件共享的经典技术。它允许网络中的客户端计算机像访问本地文件一样,透明地访问远程服务器上的文件资源,极大地简化了跨设备的数据共享与管理流程。

NFS 的起源与发展

NFS 技术诞生于 20 世纪 80 年代,由太阳微系统公司(Sun Microsystems)率先开发。最初的设计目标是解决 UNIX 系统之间的文件共享问题,凭借其简洁的架构和良好的跨平台性,迅速成为网络文件共享的主流标准之一。

随着技术的演进,NFS 经历了多个版本的迭代。其中,NFSv3 是应用最为广泛的版本之一,它在早期版本的基础上增强了性能和可靠性,支持更大的文件尺寸和更多的功能。而 NFSv4 则是较新的版本,引入了更强的安全性(如支持 Kerberos 认证)、状态化连接以及更完善的文件锁机制,进一步提升了 NFS 在复杂网络环境中的适用性。

NFS 的核心架构

NFS 采用客户端 - 服务器(Client-Server)架构,主要由两部分组成:

  • NFS 服务器:负责存储文件资源,并通过 NFS 协议将这些资源共享给授权的客户端。服务器上运行着 NFS 守护进程,用于监听客户端的请求、处理文件访问操作以及维护共享目录的权限控制。

  • NFS 客户端:通过 NFS 协议访问服务器上的共享文件。客户端需要挂载(Mount)服务器的共享目录到本地文件系统,之后就可以像操作本地文件一样对远程文件进行读写、创建、删除等操作。

NFS 的工作原理

NFS 的工作流程基于远程过程调用(RPC,Remote Procedure Call)机制,具体过程如下:

  1. 注册阶段:NFS服务端启动服务时,向RPC服务注册服务端口。
  2. 建立连接阶段:客户端向RPC服务器查询NFS服务器服务端口,然后再向NFS 服务器的服务端口发起挂载请求。
  3. 挂载阶段:服务器验证客户端的身份和权限,如果通过验证,则允许客户端将共享目录挂载到本地指定的挂载点。
  4. 文件访问阶段:挂载成功后,客户端对远程文件的操作(如读取、写入)会通过 RPC 协议转换为对服务器的远程过程调用。服务器接收到请求后,执行相应的文件操作,并将结果返回给客户端。
  5. 权限控制:NFS 通过文件系统的权限机制(如 UNIX 的用户 ID 和组 ID)来控制客户端对文件的访问。服务器会根据客户端的身份以及共享目录的权限设置,决定是否允许客户端的操作。

NFS 的数据传输特点

  • 无状态性(部分版本):NFSv3 及之前的版本属于无状态协议,服务器不保存客户端的连接状态信息。这意味着如果服务器或网络出现故障,客户端重新连接后即可继续操作,无需恢复复杂的状态信息,简化了协议的实现和容错处理。

  • 基于 UDP 和 TCP:NFS 可以使用 UDP(用户数据报协议)或 TCP(传输控制协议)进行数据传输。UDP 具有较低的开销,适用于对实时性要求较高但对可靠性要求相对较低的场景;TCP 则提供可靠的面向连接的传输,适用于数据传输量大、对可靠性要求高的场景,在现代网络中应用更为广泛。

NFS 的优势

  • 透明性:客户端访问远程文件的方式与访问本地文件几乎一致,用户无需关注文件的实际存储位置,降低了使用复杂度。

  • 跨平台性:NFS 支持多种操作系统,如 UNIX、Linux、macOS 等,能够实现不同操作系统之间的文件共享。

  • 高效性:通过优化的数据传输机制和缓存策略,NFS 能够提供较高的文件访问性能,满足多数网络环境下的文件共享需求。

  • 易于管理:NFS 的配置相对简单,管理员可以通过修改配置文件轻松设置共享目录、访问权限等,便于集中管理网络中的文件资源。

NFS 的局限性

  • 安全性较弱(早期版本):NFSv3 及之前的版本在安全性方面存在不足,缺乏强大的身份认证和数据加密机制,容易受到网络监听、身份伪造等攻击。虽然 NFSv4 引入了更多安全特性,但在一些对安全性要求极高的场景中,仍需配合其他安全措施(如 VPN、防火墙)使用。

  • 对网络依赖性强:NFS 的性能和可用性高度依赖网络状况,网络延迟、丢包等问题会直接影响文件访问的速度和稳定性。

  • 文件锁机制复杂:在多客户端同时访问同一文件时,NFS 的文件锁机制相对复杂,处理不当可能导致数据不一致的问题。

NFS 的典型应用场景

  • 企业内部文件共享:在企业局域网中,NFS 可以用于共享办公文档、软件安装包等资源,方便员工在不同的计算机上访问和协作。

  • 服务器集群存储:在 Web 服务器集群、数据库集群等场景中,NFS 可以为集群中的所有节点提供统一的共享存储,确保各节点访问的数据一致性。

  • 嵌入式系统:在一些嵌入式设备(如网络存储设备、路由器等)中,NFS 可以作为简单的文件共享解决方案,实现设备与外部计算机的数据交互。

总结

总之,NFS 作为一种成熟的网络文件共享技术,凭借其简洁、高效、跨平台等优势,在各类网络环境中得到了广泛应用。尽管存在一些局限性,但通过版本迭代和与其他技术的结合,NFS 仍然在网络存储领域发挥着重要作用。

NFS 服务最佳实践

部署服务

NFS服务由nfs-utils软件包提供。

# 安装软件包
[root@server ~ 17:10:57]# yum install nfs-utils


# 准备用户
[root@server ~ 17:11:48]# useradd -u 1001 hm

[root@server ~ 17:12:18]# echo redhat | passwd --stdin hm


# 准备共享目录
[root@server ~ 17:12:39]# mkdir -p /shares/webapp

[root@server ~ 17:13:27]# chown 48 /shares/webapp

# apache 账户ID是48

# 启用并启动服务
[root@server ~ 17:13:29]# systemctl enable nfs-server --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@server ~ 17:14:19]# systemctl status nfs-server --now
#检查一下
# 配置防火墙
#可以关闭防火墙先
[root@server ~]# firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd
[root@server ~]# firewall-cmd --reload

配置 NFS 导出

NFS服务器主要配置文件是**/etc/exports**,目录**/etc/exports.d中任何以.exports**结尾且不以点(.)开头的文件也会生效。 所有这些文件都使用相同的语法。

==提示:==与编辑文件/etc/exports本身相比,在/etc/exports.d中创建或删除文件可能更容易,并且它可以减少一系列相关配置更改意外破坏现有导出的风险。

配置文件中,每一行都声明一个导出点。 第一个字段是要导出到客户端的目录的名称。 该行的其余部分列出了可以访问共享目录的客户端系统以及授予它们的访问权限。

==提示:==NFS不要使用SMB共享的目录。 如果这样做,则可能会导致文件损坏或其他文件完整性或一致性问题。

常用的选项:

  • rw,此选项允许对指定客户端进行读/写访问。 如果没有该选项(或者如果您使用ro代替),则NFS仅授予读取访问权限。 在以下示例中,client.laoma.cloud具有读/写访问权限,而client2.laoma.cloud具有只读访问权限。

  • no_root_squash,默认情况下,当客户机上的root用户访问NFS导出时,服务器会将其视为nobody用户(在服务器上定义)的访问。 这意味着,如果客户端上的root用户在导出文件上创建了文件,则该文件将归用户nobody所有。 这也意味着,如果客户机上的root用户尝试读取导出文件,而该文件是没人能读取的用户,则访问将失败。 您可以通过添加no_root_squash选项来禁用该安全保护。

    以下示例允许client.laoma.cloud系统具有对/shares/webapp导出目录的读/写访问权限和实际root用户访问权限。

我们使用以下记录:

[root@server ~ 17:15:24]# vim /etc/exports
/shares/webapp 10.1.8.0/24(rw)
#配置文件

每当您在/etc/exports或/etc/exports.d/*.exports中更改导出点时,请对NFS服务运行exportfs -r命令确保更改生效,或者运行systemctl reload nfs-server

[root@server ~ 17:18:49]# exportfs -r
[root@server ~ 17:19:28]# systemctl reload nfs-server

# 两个重启命令都行任意选一个ok
[root@server ~ 17:19:49]# exportfs -av
exporting 10.1.8.0/24:/shares/webapp

监视 NFS 导出

使用exportfs命令列出NFS服务器当前导出的目录。

[root@server ~ 17:19:58]# exportfs
/shares/webapp	10.1.8.0/24

默认情况下,该命令不显示导出选项。 使用-v选项列出这些选项,包括缺省选项。

[root@server ~ 17:20:44]# exportfs -v
/shares/webapp	10.1.8.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

客户端挂载

# 安装软件包
[root@client ~ 17:24:38]# yum install -y httpd
[root@client ~ 17:22:26]# yum install -y nfs-utils

#客户端也得下这个的

[root@client ~ 17:26:54]# id apache 
uid=48(apache) gid=48(apache)=48(apache)

[root@client ~ 17:26:18]# systemctl enable httpd --now


# 查看服务端提供的共享
[root@client ~ 17:26:30]# showmount -e server
Export list for server:
/shares/webapp 10.1.8.0/24


# 挂载
[root@client ~ 18:45:18]# mount -t nfs server:/shares/webapp /var/www/html
[root@server ~ 18:53:01]# echo Hello world From NFS server > /shares/webapp/index.html
#创建一个index

# root用户不能创建
[root@client ~ 18:46:11]# touch /var/www/html/root-f1
touch: 无法创建"/var/www/html/root-f1": 权限不够

# apache 用户能创建
[root@client ~ 18:48:07]# su -l -s /bin/bash apache

-bash-4.2$ echo hello han > /var/www/html/test.html 

访问测试

[[root@server ~ 18:55:47]# curl http://10.1.8.11/
Hello world From NFS server

[root@server ~ 18:49:48]# curl http://10.1.8.11/test.html
hello han

持久化挂载

修改 /etc/fstab,最后添加如下记录:

[root@client ~ 18:53:49]# vim /etc/fstab 
#修改
server:/shares/webapp /var/www/html nfs defaults 0 0
[root@client ~ 19:03:31]# umount server:/shares/webapp 
#关了
[root@client ~ 19:08:09]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  1.7G   49G    4% /
/dev/sda1               1014M  153M  862M   15% /boot
/dev/mapper/centos-home  146G   33M  146G    1% /home
tmpfs                    378M     0  378M    0% /run/user/0
#没有了
#重启看看
[root@client ~ 19:12:25]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  1.7G   49G    4% /
/dev/sda1               1014M  153M  862M   16% /boot
/dev/mapper/centos-home  146G   33M  146G    1% /home
server:/shares/webapp     50G  1.7G   49G    4% /var/www/html
tmpfs                    378M     0  378M    0% /run/user/0
#有
server:/shares/webapp /var/www/html nfs defaults,_netdev 0 0
#这个挂载依赖网络,等网卡、网络服务完全起来之后再挂载。_netdev

iSCSI 服务器

iSCSI 服务介绍

SCSI(Small Computer System Interface,小型计算机系统接口),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)连接标准。

iSCSI(Internet Small Computer System Interface,Internet 小型计算机系统接口),又称为IP-SAN,是IBM公司研究开发的IP SAN技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,基于TCP/IP的协议连接iSCSI服务端(Target)和客户端(Initiator),使得封装后的SCSI数据包可以在互联网传输,最终实现iSCSI服务端提供存储给客户端。

通常,iSCSI使用专用的10 Gb以太网或更好的网络,以最大程度地提高性能。

从物理服务器到存储的电缆通常封闭在数据中心内,并且理想情况下不直接连接到LAN网络,所以SAN流量通常不加密,以最大程度地提高性能。 为了实现WAN安全,iSCSI管理员可以使用IPsec加密流量。

iSCSI 架构

iSCSI服务是C/S架构。访问的iSCSI目标在客户端系统上显示为本地且未格式化的SCSI快设备,等同于通过SCSI布线、FC直连或FC交换光线连接的设备。

iscsi架构
  • Initiator,iSCSI客户端,通常以软件方式部署,也可以使用iSCSI Host Bus Adapters (HBAs) (HBA)硬件。 Initiator必须具有唯一的名称(请参见IQN)。

  • Target,iSCSI服务器上的iSCSI存储资源。 Target必须具有唯一的名称(请参见IQN)。 每个目标都提供一个或多个块设备或逻辑单元(LUN-logical units)。 在大多数情况下,Target只提供一个设备,但一台服务器可以提供多个目标。

  • IQN(iSCSI Qualified Name)全球唯一的名称,用于标识发起者和目标。 IQN具有以下格式:

    iqn.YYYY-MM.com.reversed.domain:name_string
    
    • YYYY-MM,年和月。示例,2020年6月为2020-06。该日期有助于确保IQN唯一性。
    • com.reversed.domain,反向域名。 例如,storage.redhat.fun的反向域名为cloud.laoma.www
    • name_string,用于标识您管理的特定目标。 如果服务器只具有一个目标,则有时会省略此名称。
  • Portal,指定服务器监听的地址和端口,例如,172.25.250.50:3260。

  • LUN(Logical Unit Number),代表Target提供的块设备。 每个目标可以提供一个或多个LUN

  • ACL(Access Control List),使用InitiatorIQN限制客户端访问Target

  • TPG(Target Portal Group),是目标的完整配置,包括PortalLUNACL。 几乎所有目标都使用一个TPG,但是高级配置有时可能会定义多个TPG

  • discovery,查询服务器上有Target列表。

  • login,向Target验证,验证通过后即可以使用Target服务器提供的块设备。

配置 iSCSI Targets

配置 iSCSI Targets需要安装以下软件:

  • targetd,服务端软件。
  • targetcli,targetd服务配置工具。
# 安装软件
[root@server ~ 19:17:56]# yum install -y targetd targetcli


# 启用并启动服务
[root@server ~ 19:19:08]# systemctl enable target --now
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.

当您不带任何选项运行targetcli时,该命令将进入交互模式。

在以下示例中,使用ls命令显示当前布局。

[root@server ~ 19:19:26]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
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]
/> 

配置 backstore 对象

backstore类型:

  • block:服务器中的块设备,例如磁盘驱动器,磁盘分区或逻辑卷。
  • fileio:本地文件系统中的常规文件。targetcli将该文件用作磁盘映像。
  • pscsi:物理SCSI设备。 这种类型的存储允许客户端通过网络访问服务器上的物理SCSI设备。
  • ramdisk:内存中的磁盘设备。 这种类型的存储不会持久存储数据。 服务器重新启动后,数据将丢失。

要使用targetcli创建后备存储,请使用其create命令。 该命令的行为取决于您在配置树中的当前位置。

示例:

/> cd /backstores/block
/backstores/block> create han /dev/sdb
Created block storage object han using /dev/sdb.

配置 Target IQN

#就是 iSCSI 存储服务器(Target)的唯一身份证号

在/iscsi伪目录中,创建IQN,将您选择的IQN名称作为其第一个参数。

#看一下默认格式然后删除了

/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.server.x8664:sn.dc0f640ba440.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> delete iqn.2003-01.org.linux-iscsi.server.x8664:sn.dc0f640ba440 
Deleted Target iqn.2003-01.org.linux-iscsi.server.x8664:sn.dc0f640ba440.

/iscsi> create iqn.2026-05.han.server.x8664:sn
Created target iqn.2026-05.han.server.x8664:sn.
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.2026-05.han.server.x8664:sn ............................................. [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

配置 LUN虚拟硬盘

/> cd /iscsi/iqn.2026-05.han.server.x8664:sn/tpg1/luns 
/iscsi/iqn.20...:sn/tpg1/luns> create /backstores/block/han 
Created LUN 0.

配置 ACL访问控制列表

创建ACL,以允许客户端启动程序访问目标。在Red Hat Enterprise Linux上,启动器的IQN存储在/etc/iscsi/initiatorname.iscsi文件中。

/iscsi> cd /iscsi/iqn.2026-05.han.server.x8664:sn/tpg1/acls 
/iscsi/iqn.20...:sn/tpg1/acls> create iqn.2026-05.han.client
Created Node ACL for iqn.2026-05.han.client
Created mapped LUN 0.

配置 Portal

/iscsi/iqn.20...x8664:sn/tpg1> cd /iscsi/iqn.2026-05.han.server.x8664:sn//tpg1/portals/
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260 
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20.../tpg1/portals> create 10.1.8.10 3260
Using default IP port 3260
Created network portal 10.1.8.10:3260.

保存配置

退出targetcli shell时,该命令将配置保存在/etc/target/saveconfig.json文件中。

/> ls
o- / ................................................................................. [...]
  o- backstores ...................................................................... [...]
  | o- block .......................................................... [Storage Objects: 1]
  | | o- han .................................... [/dev/sdb (150.0GiB) 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.2026-05.han.server.x8664:sn ........................................... [TPGs: 1]
  |   o- tpg1 ....................................................... [no-gen-acls, no-auth]
  |     o- acls .................................................................. [ACLs: 1]
  |     | o- iqn.2026-05.han.client ....................................... [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ........................................... [lun0 block/han (rw)]
  |     o- luns .................................................................. [LUNs: 1]
  |     | o- lun0 ................................ [block/han (/dev/sdb) (default_tg_pt_gp)]
  |     o- portals ............................................................ [Portals: 1]
  |       o- 10.1.8.10:3260 ........................................................... [OK]
  o- loopback ................................................................. [Targets: 0]
/> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

访问 iSCSI 存储

iSCSI 启动器通常以软件方式实现。 使用基于软件的iSCSI启动器需要连接到具有足够带宽的现有以太网网络,以承载存储流量。

您也可以使用硬件启动器-主机总线适配器(HBA),从而减轻了其他系统资源的负担。

准备系统

配置iSCSI客户端启动程序需要安装iscsi-initiator-utils软件包,该软件包包括iscsiiscsid服务以及**/etc/iscsi/iscsid.conf/etc/iscsi/initiatorname.iscsi**配置文件。

[root@client ~ 19:18:05]# yum install -y iscsi-initiator-utils

作为iSCSI启动器,客户端需要其自己的唯一iSCSI合格名称(IQN)。在安装iscsi-initiator-utils的过程中,该软件包生成唯一的IQN,并存储到/etc/iscsi/initiatorname.iscsi文件中。 管理员通常需要更改该名称。

[root@client ~ 19:37:28]# vim /etc/iscsi/initiatorname.iscsi 
[root@client ~ 19:38:21]# cat /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2026-5.cloud.han.client

/etc/iscsi/iscsid.conf文件包含您连接的目标的默认设置。 这些设置包括iSCSI超时,重试以及用于身份验证的用户名和密码参数。

软件包安装会自动配置iscsid服务,以便启动器在系统启动时自动重新连接到任何已发现的目标。 每当您修改启动程序的配置文件时,请重新启动iscsid服务。

连接 iSCSI 目标

在使用远程设备之前,首先需要发现目标。 发现过程使用/etc/iscsi/iscsid.conf中的配置将目标信息和设置存储在/var/lib/iscsi/nodes/目录中。

示例:

[root@client ~ 19:39:55]# iscsiadm -m discovery -t st -p server
10.1.8.10:3260,1 iqn.2026-05.han.server.x8664:sn
[root@client ~ 21:24:56]# echo 'InitiatorName=iqn.2026-05.han.client' >/etc/iscsi/initiatorname.iscsi 
#客户端配置
[root@client ~ 21:27:21]# iscsiadm -m discovery -t st -p server
10.1.8.10:3260,1 iqn.2026-05.han.server.x8664:sn
#扫描

要使用列出的目标之一,请使用以下命令登录到该目标:

[root@client ~ 21:30:16]# iscsiadm -m node -T iqn.2026-05.han.server.x8664:sn -l
Logging in to [iface: default, target: iqn.2026-05.han.server.x8664:sn, portal: 10.1.8.10,3260] (multiple)
Login to [iface: default, target: iqn.2026-05.han.server.x8664:sn, portal: 10.1.8.10,3260] successful.

格式化 iSCSI 设备

[root@client ~ 21:31:57]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=9830400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=39321600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=19200, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@client ~ 21:32:24]# mount /dev/sd
sda   sda1  sda2  sdb   
[root@client ~ 21:32:24]# mount /dev/sdb /var/www/html/

多个启动程序同时从同一目标安装同一文件系统,会导致文件系统损坏或尝试读取数据时出现不一致。 本地文件系统(例如ext4或XFS)不支持从多个系统并发安装。如果需要允许从多个系统同时访问基于iSCSI的块设备,请使用群集文件系统(例如GFS2)。

如果磁盘为空,则可以对其进行格式化,创建分区或将其用作LVM物理卷。

持久化挂载

在/etc/fstab中的iSCSI目标上持久地挂载文件系统时,请确保遵循以下建议:

  • 使用文件系统UUID挂载。 不要使用设备名称(/dev/sd*)。 设备的名称取决于 iSCSI 设备通过网络响应的顺序,因此设备名称可能会在引导之后更改。如果在 /etc/fstab 中使用设备名称,则系统可能会将设备挂载在错误的挂载点下。
  • 在/etc/fstab中使用 _netdev 挂载选项。 因为iSCSI依赖网络访问远程设备,所以此选项可确保在网络和启动器启动之前,系统不会尝试挂载文件系统。

示例:

server:/shares/webapp /var/www/html nfs defaults_netdev 0 0

还需要确保服务iscsi开机自动启动,该服务默认是开机自动启动的。

[root@client ~ 21:45:04]# systemctl enable iscsi

断开目标连接

要停止使用iSCSI目标,请执行以下步骤:

  • 确保没有使用目标提供的任何设备。 例如,卸载文件系统。

  • 从/etc/fstab等位置删除对目标的所有持久引用。

  • 从iSCSI目标注销。

    [root@client ~ 21:50:50]# umount /dev/sdb
    #取消挂载
    [root@client ~ 21:51:32]# iscsiadm -m node -T iqn.2026-05.han.server.x8664:sn -p 10.1.8.10:3260 -u
    Logging out of session [sid: 1, target: iqn.2026-05.han.server.x8664:sn, portal: 10.1.8.10,3260]
    Logout of [sid: 1, target: iqn.2026-05.han.server.x8664:sn, portal: 10.1.8.10,3260] successful.
    #登出
    
    
  • 删除 iSCSI目标的本地记录,以使启动器在引导过程中不会自动登录到目标。

    [root@client ~ 21:51:34]# iscsiadm -m node -T iqn.2026-05.han.server.x8664:sn -p 10.1.8.10:3260 -o delete
    

故障处理

如果发现成功,但是启动器登录到发现的目标时遇到问题,则该问题很可能与访问控制或身份验证有关。客户端上的IQN与服务器上的IQN不匹配会导致目标登录失败。

可能是客户端上的启动器IQN不正确引起的,请在客户端的/etc/iscsi/initiatorname.iscsi文件中修复IQN,然后重新启动iscsid服务以使更改生效。

[root@client ~ 21:56:34]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2026-05.cloud.gsb.server.x8664:client1
#可以将该client加一个字母

# 重启 iscsid 服务,释放之前客户端扫描时使用的IQN。
[root@client ~ 21:57:32]# systemctl restart iscsid 

# 重新登录
[root@client ~ 21:59:11]# iscsiadm -m node -T iqn.2026-05.cloud.gsb.server.x8664:webapp -p server -l
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐