跳转至

本集群存储演进差距清单(对标旧集群五轮模板)

文档定位:A 类讨论稿 / 只读分析产物,不含任何系统变更,命令均为演示骨架。 对标基线:旧集群 192.168.0.x 的 eda_storage_standardization(五轮改造,已闭环)。 分析对象:本集群 192.168.31.x Slurm 26.05.2 主备集群。 证据来源:旧集群 存储目录行业标准设计.md、方案说明.md;本集群 docs/SOP.md、docs/RUNBOOK.md、docs/INCIDENT-*.md、docs/HANDOFF.md;2026-09-24 闸门 0 实机只读核查(见附录 A)。

⚠️ 本版为核查后修订版:闸门 0 实测发现本集群已部署可用 Lustre(192.168.31.21@tcp:/edafs → /mnt/lustre),三份档案文档均未记载。原「不建议引入 Lustre」结论已作废,补建顺序相应重排。


一、对标基线:旧集群五轮做了什么

轮次 主题 核心动作 落点
第一轮 NFS 基线 + 分层框架 客户端挂载参数统一为 hard,timeo=600,retrans=2,noatime,actimeo=30,_netdev,去除全部 soft;Tier0/Tier1/Tier2 分层定型 方案说明.md 二/四章
第二轮 目录标准化 + 本地 SSD Tier1 增量收敛(软链,不搬数据);Tier0 Lustre 重整为纯 scratch;3 节点各加 50G 独立虚拟盘 → /local_scratch(xfs,noatime) 存储目录行业标准设计.md 四/七章
第三轮 工具/PDK 物理迁移 /data/slurm/opt/* → /data/eda/{tools,pdk};modulefile 改写为标准路径 /tools /pdk 同文档 八章
第四轮 License 服务化 + 权限标准化 + 三级版本化 FlexLM 独立节点 + systemd;tools/pdk 755 root、modules 由 777 修为 644、projects 2775 setgid;<厂商>/<工具>/<版本> 三级目录 同文档 九章
第五轮 家目录统一 + 项目区对齐 LDAP homeDirectory → /home/<user>;/projects/<团队组> 按 LDAP 组建,2775 同文档 十章

五条达标判定(该文档 11.8):① 三层物理分离 ② 工具/PDK 只读+版本化 ③ License 服务化 ④ 客户端统一视图 ⑤ 临时数据生命周期与清理。 旧集群 前 4 条达标,第 5 条留有缺口(epilog_eda.sh 不清理 scratch、task_prolog_eda.sh 不注入 TMPDIR),列在 12.4「待补强,未实施」。


二、本集群存储现状快照(2026-09-24 实测)

项 现状 来源
存储层数 两层(Tier1 NFS + Tier0 Lustre),缺本地层 实测
Tier0 并行文件系统 已有:192.168.31.21@tcp:/edafs → /mnt/lustre,1 MDT(11.6G)+ 1 OST(308G),总 295G / 已用 52M;三台计算节点(.18/.19/.20)均已挂载,fstab defaults,nofail 持久化;控制节点 .16/.17 未挂 实测(三份文档均无记载)
Tier0 内容 仅性能测试残留:eda_small_files/、eda_large_files/、eda_shared_files/、eda_scratch/(均空)、hello.txt、50MB testfile;无标准 scratch 结构、无清理策略 实测
Tier1 导出 1 /data/nfs/slurm-state → /mnt/slurm-shared(.16),挂载参数 hard,timeo=600,retrans=2,relatime,async 导出 SOP 5.6 + 实测
Tier1 导出 2 /data/nfs/home → /home,soft SOP 5.9 + 实测
Tier1 导出 3 /data/nfs/modulefiles → /opt/modulefiles,soft SOP 5.11 + 实测
Tier1 fstab 写法 仅 rw,soft,_netdev(其余为内核默认,无 noatime/actimeo/nconnect) 实测
项目区 无 实测
工具/PDK 视图 无;模块树已就位但 install_dir 为占位 SOP 5.10
家目录 已统一 /home/<user> 与旧集群第五轮一致
本地 scratch 无;三台计算节点无独立数据盘(仅 vda 100G = vda1 /boot 1G + vda2 / 99G,xfs) 实测
宿主机 249 磁盘 sda 232G(根 sda3 220G,用 98G/可用 111G);sdb 1.8T(sdb1 → /data,用 449G/可用 1.3T)——所有 NFS 导出与全部虚盘共用这两块盘;LVM/RAID 布局因非 root 未读到,待 root 复核 实测
虚盘存储池 ssd-pool → /kvm/img(属 sda3,剩 ~111–133G);hdd-pool → /data/kvm/img(属 sdb1,剩 ~1.6T) 实测
249 角色 共享 KVM 宿主:17 台虚机在跑,含本集群 5 台、Lustre 2 台(.21 mgs / .22 oss)、LSF 6 台、k8s 4 台 实测
上游 LDAP SSSD 不枚举(enumerate=false),按名解析正常:cy01:*:4001:4000:...:/home/cy01:/bin/csh、custom:*:4000: 实测 + RUNBOOK 4.4
账户层级(8 小组 + 4 父账户) frontend{design,dv} analog{custom,layout} it{cad,sre} backend{pnr,signoff} RUNBOOK 4.4
Prolog/Epilog 链 Prolog=/usr/local/slurm/prolog_eda.sh、Epilog=/usr/local/slurm/epilog_eda.sh、TaskProlog=/etc/slurm/task_prolog_lmod.sh(内容见附录 A);task_epilog_eda.sh 存在但未被引用(无 TaskEpilog=) 实测
TaskProlog 透传 task_prolog_lmod.sh 内部 [ -x /usr/local/slurm/task_prolog_eda.sh ] && 执行 → 注入落点是 task_prolog_eda.sh,且该目录属部署覆盖范围 实测

三、差距清单(五轮逐项对标)

轮次 旧集群动作 本集群现状 差距 是否要做 优先级
一 挂载参数统一、禁 soft /mnt/slurm-shared 已是 hard(达标);/home /opt/modulefiles 为 soft 且 fstab 未写 noatime/actimeo 参数未标准化(soft 与"禁 soft"结论相悖) 部分要做(见 4.3) 中
二 Tier0 Lustre 重整为纯 scratch Lustre 已存在,但只有测试残留、无 scratch/{users,projects,tmp} 结构、无清理策略、单 OST 无法条带化 目录与生命周期未标准化 要做(低风险) 高
二 3 节点本地 SSD scratch 完全缺失,且节点无独立数据盘 全缺,需加盘 要做(高风险) 高
三 工具/PDK 物理迁移 + 标准路径 工具未安装,install_dir 占位 工具未就位 + 无 /tools /pdk 视图 依赖外部介质 低(受阻)
四 License 服务化 + 权限标准化 + 三级版本化 无 license 服务;/opt/modulefiles 已是 755 root root(天然达标) 权限已基本合规;License 未涉及 权限=基本达标;License 暂不做 低
五 家目录统一 + /projects 按 LDAP 组 家目录已统一;/projects 缺 仅缺 /projects 要做 高

总评:本集群实际是「两层半」——Tier1(NFS)+ Tier0(Lustre,未标准化)已具备,缺本地层与 Tier1 的标准语义(/projects、/tools、/pdk)。相对旧集群,差距集中在目录标准化与生命周期管理,而非基础设施缺失。这比"从零建三层"的成本低得多。


四、补建顺序规划

4.0 闸门 0:前置核查(✅ 2026-09-24 已完成,见附录 A)

六项核查全部完成,不再阻塞规划。由核查引出的三项新决策点见第六节。

4.1 阶段一:/projects(对标第五轮)【低风险 · 优先】

为什么 /projects 排在最前:

  1. 依赖方向:Tier1(持久)是 Tier0(临时)的上游。scratch 的 stage-out 目标是 /projects,先有归宿再开临时区。
  2. 风险最低:只需宿主机新增导出 + 客户端新增挂载点,不格式化任何磁盘、不重启任何 Slurm 服务、不动现有数据。
  3. 权限模板复用:/projects 是 LDAP 组权限模型(2775 setgid)的首次落地,验证后 scratch 的 per-user 目录权限可套用同一模式。
  4. 容量最宽裕:/data 尚余 1.3T,/projects 不构成容量压力(与需要争抢 sda3 的 scratch 虚盘形成对比)。

动作骨架(演示,宿主机 + 各节点):

# 宿主机 249:新增导出(高危:改 /etc/exports 前必备份)
sudo cp -a /etc/exports /etc/exports.bak.$(date +%Y%m%d-%H%M%S)
sudo mkdir -p /data/nfs/projects
sudo sh -c 'printf "/data/nfs/projects 192.168.31.0/24(rw,hard,async,no_subtree_check,no_root_squash)\n" >> /etc/exports'
sudo exportfs -ra

# 各计算节点:挂载(新挂载点无历史包袱,直接按标准用 hard)
mount -t nfs -o rw,hard,timeo=600,retrans=2,noatime,actimeo=30,_netdev \
  192.168.31.249:/data/nfs/projects /projects

# 按 LDAP 小组建目录(组名取自 RUNBOOK 4.4 的 8 个小组)
mkdir -p /projects/<组名> && chown root:<组名> /projects/<组名> && chmod 2775 /projects/<组名>

4.2 阶段二:Tier0 Lustre 标准化(对标第二轮)【低风险 · 建议与阶段一同批】

Lustre 已就位且三节点已挂载,本阶段只是"整理",不是"建设" —— 成本远低于旧集群当年。

# 1) 清理测试残留(demo 数据,确认后可删;注意仍在根目录留 hello.txt/testfile 判断)
#    /mnt/lustre/{eda_small_files,eda_large_files,eda_shared_files,eda_scratch} 均为空目录

# 2) 建标准 scratch 结构
mkdir -p /mnt/lustre/scratch/{users,projects,tmp}
chmod 1777 /mnt/lustre/scratch/tmp

# 3) 挂载参数补 noatime(当前 fstab 为 defaults,nofail)
#    /etc/fstab: 192.168.31.21@tcp:/edafs /mnt/lustre lustre defaults,noatime,flock,_netdev,nofail 0 0

三条必须写进设计的实测约束:

约束 实测值 影响
单 OST edafs-OST0000_UUID 仅一个 旧集群的 -c 3 -S 1M 条带化在本集群不可能(stripe_count 上限 1);根目录实测 stripe_count: 1
单 MDT edafs-MDT0000_UUID 仅一个 印证旧集群 11.4 结论:单 MDT 元数据能力不比单台 NFS 强一个量级,靠的是多 MDT + 缓存 + 分层
容量 295G / 已用 52M — 与旧集群 Lustre(146G)同级,属"迷你版"

结论修正:Lustre 在本集群的真实价值是「提供一个可跨节点共享的临时层」(旧文档 11.1 的判据:多节点作业必须用共享 FS),而不是"提升元数据性能"。元数据减压要靠 4.4 的本地 scratch。

4.3 阶段三:NFS 挂载参数基线(对标第一轮)【中风险】

挂载点 现状(实测) 建议 理由
/projects(新增) — hard,timeo=600,retrans=2,noatime,actimeo=30,_netdev 数据写层,新挂载点无历史包袱
/mnt/slurm-shared hard,timeo=600,retrans=2 不动 已达标;且为主控 state 路径,改动窗口风险高
/home soft,timeo=600,retrans=2 暂保持,单独立项评估 soft 是刻意选择(防登录卡死);一旦 EDA 工具往家目录写结果即数据损坏隐患,届时改 hard
/opt/modulefiles soft,timeo=600,retrans=2 保持 只读用途,卡住不如报错
/mnt/lustre defaults,nofail 补 noatime,flock,_netdev 见 4.2

旧集群"禁 soft"的结论在本集群需分场景适用:soft 在只读或"宁可报错不可卡死"的场景是合理的,在数据写层才是隐患。

4.4 阶段四:本地 scratch(对标第二轮)【高风险】

为什么仍要做:旧文档 11.1 明确「本地 SSD 的核心理由是卸载元数据压力,不只是提速」。当前三台节点把元数据压力全压在 Lustre 单 MDT(或 NFS)上,这是 EDA 第一瓶颈。

容量决策(本次核查的最大变化):

方案 落盘位置 可用空间 容量配置 评价
A(推荐) ssd-pool → /kvm/img(sda3) ~111–133G 3 × 30G = 90G 性能优先;余量 ~20G,偏紧,且 sda3 上还跑着其他虚机
B hdd-pool → /data/kvm/img(sdb1) ~1.6T 3 × 50G = 150G 空间充裕,但与全部 NFS 导出同盘争 IO,隔离性打折
C 不加盘,仅用 Lustre — — 放弃本地层,元数据压力不卸载

旧集群"50G/节点"的基线在本集群需下调:宿主机无独立大容量 SSD,ssd-pool 仅剩 ~111–133G,放不下 3×50G。旧文档同时说过「30G 用于学会机制、跑小电路完全够用,只是真实环境(1~4TB)的 1%」,故 3×30G 是可接受的折中。

动作顺序(每步幂等,先检查后动作):

# 1) 加盘(在 KVM host 执行,演示;须先落实第六节决策 1)
qemu-img create -f qcow2 /kvm/img/slurm-work-01-scratch.qcow2 30G
virsh attach-disk slurm-work-01 /kvm/img/slurm-work-01-scratch.qcow2 vdb --persistent

# 2) 节点内:格式化 + 挂载(先探测,已有文件系统或已挂载即跳过)
mkfs.xfs /dev/vdb
# fstab: /dev/vdb  /local_scratch  xfs  defaults,noatime  0 0

# 3) 目录树 + 权限(模式见第六节决策 3)
mkdir -p /local_scratch/users

# 4) 作业环境变量(对标旧集群 /etc/profile.d/eda_scratch.sh)
export LOCAL_SCRATCH=/local_scratch/users/$USER
export TMPDIR=$LOCAL_SCRATCH/${SLURM_JOBID:-$$}

必须同时认知的陷阱(旧集群 11.7 实测):编译产物默认落在 cwd(VCS 的 ./csrc、./simv),不在 $TMPDIR。要让 scratch 真正生效,需 workdir 直接放本地盘,或用 -Mdir 等显式指到本地。

4.5 阶段五:生命周期清理(补齐旧集群第 5 条缺口)【与两个 scratch 层捆绑】

状态:已实施(2026-09-24)。实现体 --scratch-gc(scratch_gc_deployer.py); 变更档案见 SOP-scratch生命周期清理.md,日常运维见 ../docs/RUNBOOK.md 第 4.11 节。

必须与 scratch 同步交付——旧集群正是「先建了 /local_scratch、清理机制留在 12.4 未实施」,scratch 会被写满。本集群两个 scratch 层(Lustre + 本地)都要覆盖。

层 动作 实施落点
作业脚本 trap 'rm -rf "$TMPDIR"' EXIT 用户侧范例,见 RUNBOOK 4.11
Slurm Epilog 按退出码分级:成功即删,失败改名保留现场 epilog_eda.sh 的 cleanup_scratch()
老化兜底 本地 7 天、Lustre 30 天 slurm-scratch-gc.{sh,service,timer}(systemd timer,非 cron)
TaskProlog 注入 TMPDIR / LOCAL_SCRATCH task_prolog_eda.sh

⚠️ 落点约束(本次核查新增): - 注入落点是 /usr/local/slurm/task_prolog_eda.sh(task_prolog_lmod.sh 透传链末端),不是 /etc/slurm/task_prolog_lmod.sh。 - 但 /usr/local/slurm/ 属部署器覆盖范围(SOP 5.4 阶段 4「分发(高危:覆盖安装目录)」)→ 必须走模板/资产落地,禁止手改,否则下次部署被覆盖。 - Epilog=/usr/local/slurm/epilog_eda.sh 同理。 - 实测纠正(2026-09-24):scontrol show config 显示 TaskEpilog = /usr/local/slurm/task_epilog_eda.sh 已配置生效,原「文件存在但未引用、属死文件」的判断不成立,该决策项关闭。 - 新增红线:Epilog 脚本不得使用 set -u——变量未定义会让 Epilog 返回非 0,直接导致节点 DRAIN(本变更实测踩中,见 SOP 附录 C)。

4.6 阶段六:工具/PDK 与 License(对标第三、四轮)【受阻】

  • 工具/PDK:依赖 EDA 工具介质就位。就位后按旧集群模式落地:收敛为 /tools /pdk 只读视图,install_dir 改真实路径后重跑 --module-env(HANDOFF 待办 6)。
  • License:本集群无 License 服务需求,暂不做。
  • 权限:/opt/modulefiles 实测已是 755 root:root,天然达标;/projects 2775 在阶段一完成。

顺序总览

闸门0  只读核查 ........................ ✅ 已完成(附录 A)
  │
  ├─ 阶段一  /projects ................. 低风险,纯导出+挂载
  ├─ 阶段二  Tier0 Lustre 标准化 ........ 低风险,仅建目录+清理测试残留   ← 建议与阶段一同批
  ├─ 阶段三  NFS 参数基线 ............... 只对新挂载点与 Lustre 用 noatime/hard
  │
  ├─ 阶段四  本地 scratch .............. 高风险;需先定容量落点(决策 1)
  │     └─ 阶段五  生命周期清理 ......... 必须与两个 scratch 层捆绑
  │
  └─ 阶段六  工具/PDK + License ........ 受阻于外部介质

(Lustre 已存在,阶段二是"整理"而非"建设",成本远低于旧集群当年)

五、风险与回滚要点

阶段 风险 缓解 回滚
一 exportfs -ra 短暂影响所有 NFS 客户端 低峰执行;导出为追加非修改 还原 /etc/exports.bak.* + exportfs -ra
二 删除 Lustre 测试残留(testfile/hello.txt/4 个空目录) 确认均为 09-22 测试产物、非业务数据后再删 数据不可恢复——删除前须用户确认
三 remount 参数热改失败 失败仅告警;hard 只用于新挂载点 fstab 备份还原
四 格式化磁盘(不可逆) 只对新附加的空盘执行;lsblk 确认无文件系统与挂载再动 无回滚——故必须先确认是空盘(本阶段最高风险点)
四 加盘占用 249 空间(共享宿主) 先落实第六节决策 1;ssd-pool 余量偏紧需留意 virsh detach-disk + 删 qcow2
五 Epilog 误删用户数据 只删本作业的 scratch 目录;失败作业改名保留 停用 Epilog 配置项 + scontrol reconfigure

通用红线(沿用本集群既有约定):改 /etc/exports 前必备份至本次交付物目录的 backup/;凭据不入命令行;--module-env 类操作前 squeue 必须为空;禁止手改 /usr/local/slurm/(部署覆盖)。


六、待确认项

# 事项 状态
1 本地 scratch 容量与落点:A(3×30G 放 ssd-pool,性能优先/余量紧)还是 B(3×50G 放 hdd-pool,空间优先/与 NFS 同盘)? 需决策(原「50G/节点」基线不可直接套用)
2 Lustre 测试残留是否清理:/mnt/lustre/ 下 4 个空目录 + hello.txt + 50MB testfile,是否可删? 需确认
3 /local_scratch 权限模式:users 用 1777+sticky(自助),还是按 LDAP uid 预建(可控)? 需决策
4 /home 是否改 hard:取决于是否会有 EDA 工具往家目录写数据 待定
5 ~~task_epilog_eda.sh 死文件处置~~ → 实测已配置 TaskEpilog=,原判断不成立,本项关闭(2026-09-24) 已关闭
6 249 是否为单盘无冗余:lsblk 仅见 sda/sdb,LVM/RAID 因非 root 未读到 需 root 复核
7 档案文档与实机不一致:Lustre(.21@tcp:/edafs,三节点已挂)在 SOP/RUNBOOK/HANDOFF 中零记载,须补记 建议尽快同步
8 本清单落位:作为 docs/SOP.md 新轮次(第六轮)追加,还是独立成册 待定

已解决(原待确认项):249 容量 ✅(/data 余 1.3T)、节点磁盘形态 ✅(无独立盘,需加盘)、LDAP 组 ✅(8 小组,RUNBOOK 4.4)、现有挂载参数 ✅、TaskProlog 链 ✅、modulefiles 权限 ✅。


附录 A:闸门 0 实测记录(2026-09-24)

取证留痕:主机 192.168.31.249(本地)/ .16 / .18 / .19 / .20;全部命令为只读(df、lsblk、mount、findmnt、ls、getent、virsh list/domblklist/pool-dumpxml/domiflist、lfs df、ip neigh);无任何写操作。

# 核查项 关键结果
① 249 磁盘 sda3 220G(用 98G/余 111G);sdb1 1.8T → /data(用 449G/余 1.3T);LVM/RAID 需 root 复核
② 节点磁盘 .18/.19/.20 结构完全一致:vda 100G(vda1 /boot 1G + vda2 / 99G,xfs),无独立数据盘
③ 249 角色 libvirtd active,17 台虚机;ssd-pool→/kvm/img、hdd-pool→/data/kvm/img
④ 挂载参数 /home、/opt/modulefiles:soft,timeo=600,retrans=2,relatime,vers=4.2,_netdev(fstab 仅写 rw,soft,_netdev);/mnt/slurm-shared:hard,timeo=600,retrans=2
⑤ Lustre(意外发现) 192.168.31.21@tcp:/edafs → /mnt/lustre,295G/用 52M;1 MDT + 1 OST;.18/.19/.20 均已挂、fstab defaults,nofail;.16/.17 未挂;内容为测试残留
⑥ LDAP SSSD 不枚举;getent passwd cy01 → 4001:4000,getent group custom → 4000;ldapsearch 未安装
⑦ Prolog/Epilog TaskProlog=/etc/slurm/task_prolog_lmod.sh(955B,内部透传 /usr/local/slurm/task_prolog_eda.sh);Epilog=/usr/local/slurm/epilog_eda.sh;task_epilog_eda.sh 存在但未引用
⑧ modulefiles 权限 /opt/modulefiles 及 Core:drwxr-xr-x root root(已达标,无需整改)
⑨ 目标路径存在性 .18 上 /projects /local_scratch /tools /pdk 均不存在

两个已排除的误报: 1. 首轮 .18 上 findmnt 对 /home 无输出 → 实为 findmnt 不接受多个路径参数,NFS 挂载实际正常。 2. getent group | awk '$3>=1000' 无输出 → 实为 SSSD enumerate=false 的正常表现,按名解析正常。


来源:/home/rain/Documents/slurm/slurm_ins/eda_storage_gap/本集群存储演进差距清单.md | 最后更新:2026-09-24 23:00(由 build/sync.py 同步,请勿在站点侧修改)