Linux多块共享磁盘搭建到多个节点
Linux共享磁盘搭建到多个节点1 环境说明2 磁盘服务器端配置3 客户端服务器配置4 安全卸载 iSCSI 共享磁盘并清理配置5 更多Linux命令全方位指南实战教程Linux命令学习使用列表1 环境说明CPU x86Os Centos7.92 磁盘服务器端配置vitargetcli_clearconfig.sh#!/bin/bashset-euopipefail# 设置域名和时间YEAR$(date%Y)MONTH$(date%m)DOMAINexample.com# 推荐使用你自己的域名#根据客户端数量增删行数 1TGT_NAMEiqn.${YEAR}-${MONTH}.${DOMAIN}:sharedCLIENT_IQN1iqn.${YEAR}-${MONTH}.${DOMAIN}:client1CLIENT_IQN2iqn.${YEAR}-${MONTH}.${DOMAIN}:client2CLIENT_IQN3iqn.${YEAR}-${MONTH}.${DOMAIN}:client3CLIENT_IQN4iqn.${YEAR}-${MONTH}.${DOMAIN}:client4# 1. 清除现有配置targetcli clearconfigconfirmTrue# 2. 使用 here-document 配置 targettargetcliEOF #根据实际盘符数量增删行数 2 /backstores/block create disk0 /dev/sdb /backstores/block create disk1 /dev/sdc /backstores/block create disk2 /dev/sdd /backstores/block create disk3 /dev/sde /backstores/block create disk4 /dev/sdf /iscsi create$TGT_NAME#根据实际盘符数量增删行数 3 /iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk0 0 /iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk1 1 /iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk2 2 /iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk3 3 /iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk4 4 #根据客户端数量增删行数 4 /iscsi/$TGT_NAME/tpg1/acls create$CLIENT_IQN1/iscsi/$TGT_NAME/tpg1/acls create$CLIENT_IQN2/iscsi/$TGT_NAME/tpg1/acls create$CLIENT_IQN3/iscsi/$TGT_NAME/tpg1/acls create$CLIENT_IQN4saveconfig exit EOF# 3. 启服务并设为开机自启# 重启服务systemctlenable--nowtarget systemctl restart target# 4. 检查端口ss-ltnp|grep3260# 4. 建 ACL允许客户端 IQN#根据客户端数量增删行数 5targetcli /iscsi/$TGT_NAME/tpg1/acls create$CLIENT_IQN1||truetargetcli /iscsi/$TGT_NAME/tpg1/acls create$CLIENT_IQN2||truetargetcli /iscsi/$TGT_NAME/tpg1/acls create$CLIENT_IQN3||truetargetcli /iscsi/$TGT_NAME/tpg1/acls create$CLIENT_IQN4||true# 5. 防火墙放行 3260/tcpifsystemctl is-active firewalld/dev/null;thenfirewall-cmd--permanent--add-port3260/tcp firewall-cmd--reloadelifcommand-vufw/dev/null;thenufw allow3260/tcpfi# 6. 打印结果echo Target 配置完成 chmodx /root/targetcli_clearconfig.sh /root/targetcli_clearconfig.sh备用修改命令-可忽略检查端口 ss-ltnp|grep3260手动 修改客户端访问权限 查看当前时间替换目录中日期echo$(date%Y)-$(date%m)targetclilscd/iscsi/iqn.2025-09.example.com:shared/tpg1/acls/ls创建客户端 create iqn.2025-09.example.com:client1 create iqn.2025-09.example.com:client2 create iqn.2023-09.example.com:client3 create iqn.2023-09.example.com:client4 删除客户端访问 delete iqn.2025-09.example.com:client1 delete iqn.2025-09.example.com:client2 delete iqn.2025-09.example.com:client3 delete iqn.2025-09.example.com:client4exit3 客户端服务器配置# 创建一个空见文件mkdir-p/etc/iscsi;touchinitiatorname.iscsi# 使用共享盘创建日期 替换 TARGET_IQN 中的日期echo$(date%Y)-$(date%m)# 创建编辑执行脚本vi/root/initiator_mount.sh#!/bin/bash# # 文件名: iscsi-client-connect.sh# 功能: 自动安装 iSCSI 客户端设置唯一 IQN并连接共享磁盘# 作者: 用户# 日期: $(date %Y-%m-%d)# set-euopipefail# 可配置参数 TARGET_IP192.168.100.203# iSCSI 服务端 IPTARGET_IQNiqn.2025-09.example.com:shared# 目标 IQNPORT3260# 默认端口DOMAINexample.com# 域名用于 IQNYEAR$(date%Y)MONTH$(date%m)# 每台客户端必须手动设置或传参指定唯一编号例如CLIENT_IDclient1# ⚠️ 注意每台机器必须不同推荐client1, client2, ...# echo 开始配置 iSCSI 客户端 # 1. 检查是否为 rootif[[$EUID-ne0]];thenecho错误: 请以 root 用户或 sudo 权限运行此脚本2exit1fi# 2. 设置唯一的 InitiatorNameINITIATOR_IQNiqn.${YEAR}-${MONTH}.${DOMAIN}:${CLIENT_ID}INITIATOR_FILE/etc/iscsi/initiatorname.iscsiecho→ 设置客户端 IQN:$INITIATOR_IQNechoInitiatorName$INITIATOR_IQN$INITIATOR_FILE# 重启 iscsi 服务以应用新 IQN可选systemctl try-restart iscsid/dev/null21||true# 3. 显示当前客户端 IQNechoecho 当前客户端 IQN 已设置为cat$INITIATOR_FILEecho# 提示用户确认服务端已授权该 IQNecho 请确保服务端已将 $INITIATOR_IQN 添加到 ACL 白名单中echo 否则登录会因 authorization failure 失败。echo# 4. 安装 iSCSI 客户端工具echo→ 安装 iscsi-initiator-utils...yum-q-yinstalliscsi-initiator-utils||{echo安装失败请检查网络或 yum 源exit1}# 5. 启动 iscsid 守护进程echo→ 启动 iscsid 服务...systemctlenableiscsi iscsid/dev/null21||truesystemctl start iscsid# 等待服务启动sleep2# 检查 iscsid 是否运行if!pgrep iscsid/dev/null;thenecho❌ iscsid 进程未启动请检查日志: journalctl -u iscsidexit1elseecho✔ iscsid 已运行fi# 6. 发现目标echo→ 发现 iSCSI 目标:$TARGET_IP...iscsiadm-mdiscovery-tst-p$TARGET_IP--opupdate||trueiscsiadm-mdiscovery-tsendtargets-p$TARGET_IP# 7. 查看发现的节点echo→ 已发现的目标:iscsiadm-mnode# 8. 登录目标echo→ 登录到目标:$TARGET_IQN...ifiscsiadm-mnode-T$TARGET_IQN-p$TARGET_IP:$PORT-l;thenecho✔ 成功登录 iSCSI 目标elseecho❌ 登录失败请检查服务端是否允许此客户端 IQNexit1fi# 9. 验证连接列出磁盘sleep1echoecho 发现的磁盘 (lsblk) lsblk-oNAME,MAJ:MIN,SIZE,TYPE,TRANechoecho✅ iSCSI 客户端配置完成echo提示: 新磁盘可能需要格式化和挂载才能使用。echo 请勿在多台客户端同时挂载同一文件系统需集群文件系统支持。chmodx /root/initiator_mount.sh /root/initiator_mount.sh配置成功后查询磁盘信息TRANiscsi 表示该磁盘是通过 iSCSI 协议接入的。MODELLIO-ORG 是 Linux-IOLIOTarget 的典型标识。lsblk-oNAME,SIZE,TYPE,TRAN,MODEL4 安全卸载 iSCSI 共享磁盘并清理配置# 使用共享盘创建日期 替换 TARGET_IQN 中的日期viinitiator_umount.sh#!/bin/bash# # 文件名: initiator_umount.sh# 功能: 安全卸载 iSCSI 共享磁盘并清理配置# 作者: 用户# 日期: $(date %Y-%m-%d)# set-euopipefail# 可配置参数 MOUNT_POINT/mnt/iscsi_diskTARGET_IQNiqn.2025-09.example.com:sharedTARGET_IP192.168.100.203PORT3260# # 检查 rootif[[$EUID-ne0]];thenecho错误: 请以 root 权限运行此脚本2exit1fiecho 开始卸载 iSCSI 磁盘 ($TARGET_IQN) # 1. 卸载指定挂载点ifmountpoint-q$MOUNT_POINT;thenecho→ 卸载挂载点:$MOUNT_POINTumount$MOUNT_POINTecho ✔ 成功卸载elseecho→ 挂载点$MOUNT_POINT未挂载跳过fi# 2. 从 /etc/fstab 中删除对应条目echo→ 清理 /etc/fstab 中的挂载配置...ifgrep-q\s$MOUNT_POINT\s/etc/fstab2/dev/null;thensed-i\\$MOUNT_POINT d/etc/fstabecho ✔ 已从 /etc/fstab 删除$MOUNT_POINTelseecho → /etc/fstab 中无$MOUNT_POINT条目跳过fi# 3. 断开 iSCSI 会话如果存在echo→ 检查 iSCSI 会话状态...ifiscsiadm-msession|grep-q$TARGET_IQN;thenecho → 发现活跃会话正在断开...iscsiadm-mnode-T$TARGET_IQN-p$TARGET_IP:$PORT-u\echo ✔ 会话已断开elseecho → 无活跃会话跳过fi# 4. 删除持久化节点配置防止开机自动重连echo→ 删除 iSCSI 节点配置...ifiscsiadm-mnode|grep-q$TARGET_IQN;theniscsiadm-mnode-T$TARGET_IQN-p$TARGET_IP:$PORT-odelete\echo ✔ 节点配置已删除elseecho → 无节点配置跳过fi# 5. 可选强制从内核删除 SCSI 设备真正“移除”磁盘echo→ 尝试强制删除 SCSI 设备...lsblk# 获取所有属于该目标的磁盘devices$(iscsiadm-msession-P32/dev/null|grepAttached scsi disk|awk{print $4}|sort-u)fordevin$devices;dodelete_file/sys/block/$dev/device/deleteif[[-f$delete_file]];thenecho → 删除设备: /dev/$devecho1$delete_fileecho ✔ 已触发删除elseecho ⚠ 警告:$delete_file不存在设备可能已断开fidone# 6. 重启 iscsid可选为后续操作准备systemctl try-restart iscsid/dev/null21||trueechoecho✅ 卸载完成iSCSI 磁盘已安全移除。echo 提示运行 lsblk 可验证磁盘是否消失。lsblkchmodx /root/initiator_umount.sh /root/initiator_umount.sh5 更多Linux命令全方位指南实战教程Linux命令学习使用列表更多Linux命令全方位指南实战教程Linux命令学习使用列表 - - 点击跳转