本文讲解CentOS如何挂载块存储。
申请卷
菜单:云平台 -> MStore 存储管理 -> 存储块管理 -> 卷 -> 点击创建

设置卷大小:
参数说明:
存储池:选择对应的存储池卷名称:具备业务属性,或某些标识,例如 image-db(数据库)大小:根据业务需求分配(如 10G)
创建网关
卷创建完成后,我们需要通过“网关”,将该卷向外提供。
菜单:云平台 -> MStore 存储管理 -> 存储块管理 -> iSCSI -> 点击创建

参数说明:
目标限定名(IQN):格式要求:iqn.YYYY-MM.<reversed-domain>:<unique-name>入口网关:向外提供服务的节点存储:选择刚创建的卷
获取连接信息
- IQN:
iqn.2025-09.com.company:1758837954180833 - 入口网关:
192.168.0.16 192.168.0.17 192.168.0.18 192.168.0.19" - 挂载地址:
/mnt/db(自动化脚本默认路径)
自动化脚本
将获取到的IQN和Portals及要挂载的目录写到以下脚本。也可传递给脚本。
PS:当前默认将新创建的卷挂到/mnt/db:
#!/bin/bash
echo "========== 自动挂载脚本 =========="
# ===== 默认配置 =====
TARGET_IQN="iqn.2001-07.com.store:1758791383502"
PORTALS="192.168.0.16 192.168.0.17 192.168.0.18 192.168.0.19"
MOUNT_DIR="/mnt/db"
# ====================
echo "目标 IQN: $TARGET_IQN"
echo "Portal 列表: $PORTALS"
echo "挂载目录: $MOUNT_DIR"
echo "======================================"
# 安装依赖
yum install -y iscsi-initiator-utils device-mapper-multipath xfsprogs
# multipath 配置
mpathconf --enable --with_multipathd y --with_module y
# 登录所有 portal
for portal in $PORTALS; do
echo ">>> 登录 $portal"
iscsiadm -m discovery -t sendtargets -p ${portal}:3260
iscsiadm -m node -T $TARGET_IQN -p ${portal}:3260 --login
done
# 轮询等待 multipath 设备
echo "等待 multipath 设备创建..."
DEVICE=""
for i in {1..10}; do
DEVICE=$(multipath -ll | grep -oE 'mpath[a-z]+' | head -n1)
if [ -n "$DEVICE" ]; then
break
fi
echo "第 $i 次检测: 还未发现 multipath 设备,等待3秒..."
sleep 3
done
if [ -z "$DEVICE" ]; then
echo "未找到 multipath 设备,请检查 iscsi 连接"
exit 1
fi
DEV_PATH="/dev/mapper/$DEVICE"
echo "发现 multipath 设备: $DEV_PATH"
# 创建文件系统(如果未格式化)
if ! blkid $DEV_PATH >/dev/null 2>&1; then
echo "格式化 $DEV_PATH 为 XFS"
mkfs.xfs -f $DEV_PATH
fi
# 挂载目录
mkdir -p $MOUNT_DIR
mount $DEV_PATH $MOUNT_DIR
echo "$DEV_PATH 已挂载到 $MOUNT_DIR"
# 写入 fstab,重启自动挂载
UUID=$(blkid -s UUID -o value $DEV_PATH)
if ! grep -q "$UUID" /etc/fstab; then
echo "UUID=$UUID $MOUNT_DIR xfs _netdev 0 0" >> /etc/fstab
fi
echo "完成!"注意:
- 脚本默认格式化为 XFS,可能不适合所有场景(例如需要 ext4 的用户自行更改)。
运行:
chmod +x mount-rbd.sh
./mount-rbd.sh 验证
lsblk解绑脚本
同样,基于IQN和Portals及要目录写入到以下脚本,进行解绑:
#!/bin/bash
echo "========== 自动卸载脚本 =========="
# ===== 默认配置 =====
TARGET_IQN="iqn.2001-07.com.store:1758791383502"
PORTALS="192.168.0.16 192.168.0.17 192.168.0.18 192.168.0.19"
MOUNT_DIR="/mnt/db"
# ====================
echo "目标 IQN: $TARGET_IQN"
echo "Portal 列表: $PORTALS"
echo "挂载目录: $MOUNT_DIR"
echo "======================================"
# 检查挂载点是否在使用
if mountpoint -q "$MOUNT_DIR"; then
echo ">>> 卸载 $MOUNT_DIR"
umount "$MOUNT_DIR"
if [ $? -eq 0 ]; then
echo "$MOUNT_DIR 卸载成功"
else
echo "卸载 $MOUNT_DIR 失败,请检查是否有进程占用"
exit 1
fi
else
echo "$MOUNT_DIR 未挂载,跳过卸载"
fi
# 获取 multipath 设备
DEVICE=$(multipath -ll | grep -oE 'mpath[a-z]+' | head -n1)
if [ -n "$DEVICE" ]; then
DEV_PATH="/dev/mapper/$DEVICE"
echo "发现 multipath 设备: $DEV_PATH"
# 刷新 multipath 设备
echo ">>> 清理 multipath 设备"
multipath -f "$DEVICE"
if [ $? -eq 0 ]; then
echo "multipath 设备 $DEVICE 已清理"
else
echo "清理 multipath 设备 $DEVICE 失败"
exit 1
fi
else
echo "未找到 multipath 设备,跳过清理"
fi
# 登出所有 iSCSI portal
for portal in $PORTALS; do
echo ">>> 登出 $portal"
iscsiadm -m node -T "$TARGET_IQN" -p "${portal}:3260" --logout
if [ $? -eq 0 ]; then
echo "成功登出 $portal"
else
echo "登出 $portal 失败"
fi
done
# 删除 iSCSI 节点记录
echo ">>> 删除 iSCSI 节点记录"
iscsiadm -m node -T "$TARGET_IQN" -o delete
if [ $? -eq 0 ]; then
echo "iSCSI 节点记录已删除"
else
echo "删除 iSCSI 节点记录失败"
fi
# 移除 fstab 条目
if grep -q "$MOUNT_DIR" /etc/fstab; then
echo ">>> 移除 /etc/fstab 中的条目"
sed -i "\|$MOUNT_DIR|d" /etc/fstab
if [ $? -eq 0 ]; then
echo "fstab 条目已移除"
else
echo "移除 fstab 条目失败"
exit 1
fi
else
echo "fstab 中未找到 $MOUNT_DIR 的条目,跳过"
fi
# 可选:移除挂载目录
if [ -d "$MOUNT_DIR" ] && [ -z "$(ls -A $MOUNT_DIR)" ]; then
echo ">>> 删除空挂载目录 $MOUNT_DIR"
rmdir "$MOUNT_DIR"
if [ $? -eq 0 ]; then
echo "挂载目录 $MOUNT_DIR 已删除"
else
echo "删除挂载目录 $MOUNT_DIR 失败"
fi
else
echo "挂载目录 $MOUNT_DIR 不存在或非空,跳过删除"
fi
echo "完成!"