在Linux系统中,iSCSI(Internet Small Computer System Interface)是一种基于TCP/IP的存储网络协议,允许用户通过网络将远程存储设备映射为本地块设备,当需要更换存储方案、排查故障或进行系统维护时,卸载iSCSI连接是必要的操作,本文将详细讲解Linux系统中卸载iSCSI的完整流程,包括准备工作、核心卸载步骤、常见问题处理及注意事项,帮助用户安全、彻底地移除iSCSI配置。
卸载前的准备工作
在开始卸载iSCSI之前,需完成以下准备工作,以确保操作安全且避免数据丢失:
- 备份数据:确认iSCSI挂载点中的数据已备份,避免误操作导致数据丢失。
- 检查挂载状态:使用
mount
或df -h
命令确认iSCSI设备是否仍被挂载,若已挂载需先卸载文件系统。 - 确认会话状态:通过
iscsiadm -m session
查看当前活跃的iSCSI会话,记录目标名称(Target)和门户地址(Portal),便于后续针对性操作。 - 获取管理员权限:卸载操作通常需要root权限,建议使用
sudo
执行相关命令。
详细卸载步骤
卸载iSCSI的核心流程包括“停止会话→删除持久化配置→清理设备文件→可选卸载软件包”,需按顺序执行,确保彻底移除配置。
停止iSCSI会话
iSCSI会话是客户端与目标存储设备之间的活跃连接,停止会话是卸载的第一步,Linux中主要通过iscsiadm
工具管理会话,具体操作如下:
-
查看活跃会话
执行以下命令列出当前所有活跃的iSCSI会话:iscsiadm -m session
输出示例类似:
tcp: [1] 192.168.1.100:3260,1 iqn.2023-01.com.example:storage.target01
其中
[1]
为会话ID,168.1.100:3260
为目标门户地址,iqn.2023-01.com.example:storage.target01
为目标名称。 -
停止指定会话
若需停止所有会话,可直接使用以下命令:iscsiadm -m session -u
若需停止特定会话(通过会话ID筛选),可结合
grep
和awk
提取会话ID后执行:iscsiadm -m session | grep '192.168.1.100:3260' | awk '{print $2}' | xargs -I {} iscsiadm -m session -s {} -u
执行后,系统会终止与目标设备的网络连接,释放相关资源,若提示“Session terminated successfully”,表示会话已停止。
删除持久化配置
Linux的open-iscsi
工具默认会持久化保存iSCSI节点配置(如目标地址、认证信息等),即使会话停止后,系统重启仍可能自动重新连接,需手动删除持久化配置,避免意外重连。
-
查看节点配置
执行以下命令列出所有已发现的iSCSI节点配置:iscsiadm -m node
输出将显示目标名称、门户地址、认证方式等信息,
iqn.2023-01.com.example:storage.target01 192.168.1.100:3260,1
-
删除节点配置
若需删除所有节点配置,直接执行:iscsiadm -m node -o delete
若需删除特定目标(如通过目标名称筛选),可结合
grep
精确匹配:iscsiadm -m node | grep 'iqn.2023-01.com.example:storage.target01' | awk '{print $2}' | xargs -I {} iscsiadm -m node -T {} -o delete
执行后,系统会清除
/etc/iscsi/nodes/
和/etc/iscsi/send_targets/
目录下的相关配置文件,确保目标信息不再被持久化。
清理挂载点与设备文件
iSCSI设备通常被映射为本地块设备(如/dev/sdb
),并挂载至指定目录(如/mnt/iscsi_data
),若文件系统已挂载,需先卸载;同时需清理残留的设备文件符号链接。
-
卸载文件系统
使用umount
命令卸载挂载点,若设备正被占用,需先终止占用进程(如通过fuser -km /mnt/iscsi_data
强制释放):umount /mnt/iscsi_data
若提示“device is busy”,可尝试强制卸载:
umount -l /mnt/iscsi_data
-
清理设备文件
iSCSI设备文件可能残留于/dev/disk/by-path/
或/dev/disk/by-id/
目录下,可通过以下命令查看并手动删除:ls -l /dev/disk/by-path/ | grep -i iscsi
找到对应的符号链接(如
ip-192.168.1.100:3260-iscsi-iqn.2023-01.com.example:storage.target01-lun-1
),使用rm
删除:rm /dev/disk/by-path/ip-192.168.1.100:3260-iscsi-iqn.2023-01.com.example:storage.target01-lun-1
-
删除挂载目录(可选)
若挂载目录不再需要,可手动删除:rmdir /mnt/iscsi_data
卸载iSCSI软件包(可选)
若后续不再使用iSCSI,可彻底卸载open-iscsi
软件包,不同Linux发行版的卸载命令略有差异:
- Ubuntu/Debian:
sudo apt remove --purge open-iscsi
- CentOS/RHEL/Fedora:
sudo yum remove iscsi-initiator-utils # 或 dnf remove
- Arch Linux:
sudo pacman -R open-iscsi
卸载后,建议清理残留配置文件(如
/etc/iscsi/iscsid.conf
),确保系统不再保留任何iSCSI相关设置。
验证卸载结果
完成上述步骤后,需验证iSCSI是否已彻底卸载:
- 检查会话状态:执行
iscsiadm -m session
,若无输出,表示会话已全部停止。 - 检查节点配置:执行
iscsiadm -m node
,若无输出,表示持久化配置已删除。 - 检查设备文件:执行
lsblk | grep -i iscsi
或fdisk -l
,确认不再显示iSCSI设备。
常见问题与注意事项
-
设备占用导致卸载失败
若umount
提示“device is busy”,可通过fuser -vm /mnt/iscsi_data
查看占用进程,或使用lsof | grep /mnt/iscsi_data
定位具体进程,终止后重试。 -
会话停止后仍自动重连
可能是未删除持久化配置或iscsid
服务未停止,需确保执行了iscsiadm -m node -o delete
,并检查iscsid
服务状态:systemctl status iscsid # 若运行,可执行 systemctl stop iscsid
-
多路径环境下的卸载
若使用多路径(如multipathd
),需先停止多路径服务并清理多路径映射,再执行iSCSI卸载,避免残留多路径设备:systemctl stop multipathd multipath -F # 清理多路径映射
Linux iSCSI卸载核心步骤及命令总结
以下表格汇总了卸载过程中的关键步骤、对应命令及操作说明,便于快速查阅:
操作阶段 | 命令示例 | 说明 |
---|---|---|
查看活跃会话 | iscsiadm -m session |
列出当前所有iSCSI会话,包含目标地址和会话ID |
停止所有会话 | iscsiadm -m session -u |
终止所有活跃的iSCSI会话,释放网络连接 |
停止特定会话 | iscsiadm -m session -s [会话ID] -u |
通过会话ID精确终止指定会话(需先通过grep 提取会话ID) |
查看节点配置 | iscsiadm -m node |
列出所有持久化的iSCSI节点配置,包含目标名称和门户地址 |
删除所有节点配置 | iscsiadm -m node -o delete |
清除系统中的iSCSI目标持久化配置,防止重启后自动重连 |
卸载文件系统 | umount /mnt/iscsi_data |
卸载iSCSI设备挂载的文件系统,若占用可强制卸载(umount -l ) |
清理设备文件 | rm /dev/disk/by-path/ip-[目标地址]-iscsi-[目标名称]-lun-[LUN号] |
删除iSCSI设备在/dev/disk/by-path/ 下的符号链接 |
卸载软件包 | sudo apt remove --purge open-iscsi (Ubuntu)或sudo yum remove iscsi-initiator-utils (CentOS) |
彻底移除iSCSI客户端软件及配置文件(可选操作) |
相关问答FAQs
Q1:卸载iSCSI后,为什么lsblk
仍能看到残留设备?
A:这通常是因为内核缓存未刷新或设备未被彻底释放,可尝试以下方法解决:
- 重启系统(最彻底的方式,可清除所有内核缓存和设备映射);
- 手动刷新设备缓存:
echo 1 > /sys/block/sdb/device/delete
(将sdb
替换为实际设备名); - 检查多路径服务是否运行:
systemctl status multipathd
,若运行需先停止并清理多路径映射(multipath -F
)。
Q2:如何批量卸载多个iSCSI会话?
A:当存在多个会话时,可通过循环命令批量处理,停止所有会话并删除对应节点配置:
# 停止所有会话 iscsiadm -m session | awk '{print $2}' | xargs -I {} iscsiadm -m session -s {} -u # 删除所有节点配置 iscsiadm -m node | awk '{print $2}' | xargs -I {} iscsiadm -m node -T {} -o delete
上述命令通过awk
提取会话ID或目标名称,结合xargs
批量执行操作,适用于大规模iSCSI环境的快速卸载。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/22912.html