SOP — 清除 IC25 遗留(2026-09-27)¶
变更目录:
ic25_cleanup_20260927/;执行人:Agent(用户确认后执行) 落点跨两处:共享盘/data/nfs/modulefiles(宿主dell-R620/ 192.168.31.249)与slurm_ins工程 前置:IC25 安装树已于 2026-09-26 卸载(ic25_install_20260924/docs/SOP.md变更 4)
目录¶
- 背景 / 2. 目标 / 3. 前置条件 / 4. 影响范围 / 5. 分步操作 / 6. 验证 / 7. 回滚 / 8. 风险说明 / 附录
1. 背景¶
用户决策:本环境不再使用 IC25.10(安装树 09-26 已卸载,/tools/cadence/virtuoso/IC25.10.000 已删)。
但卸载只删了安装树,配置侧遗留仍在,产生两处持续误导:
- 共享盘 modulefile
cadence/virtuoso/IC25.10.000.lua仍存在且由 Lmod 可见,六台module avail都能看到它; 一旦加载立即报LmodError: 工具尚未安装或路径待配置(目录守卫),对使用者是明确的错误诱导。 - 其生成来源(
slurm_ins的config/slurm_deploy.yaml中families.cadence.tools[virtuoso])仍指向已删路径; 另有更早的假占位cadence/IC/20.1.lua(指向从未存在的/opt/eda/cadence/IC/20.1),配置里已无来源,属孤儿文件。 - 宿主
/tmp/ic25_sha256.txt(IC25 介质校验清单)为遗留临时文件。
关键机制:slurm_ins 的 module_env 部署器只写不删——它按配置派生 modulefile 集合后写入并做内容哈希比对,
对"共享盘上存在、但配置里已无来源"的文件不做处理(实测:--module-env 复跑报"待变更 0",孤儿文件纹丝不动)。
因此清除动作必须显式删除文件,不能只改配置。
2. 目标(可验证状态)¶
| # | 判据 | 实测结果 |
|---|---|---|
| 1 | 六台 module avail 无任何 IC25 条目;module load virtuoso/IC25.10.000 报 unknown module |
✓(六台一致) |
| 2 | 共享盘与配置中无 IC25 引用 | ✓(grep -rIn IC25 无输出) |
| 3 | slurm_ins --module-env 复跑零变更(待变更 0、幂等跳过 27、RC 0) |
✓ |
| 4 | IC617/MMSIM/ASSURA/Calibre 及跨厂商共存不受影响 | ✓(四模块同屏 active,checkout 0.20s) |
| 5 | 宿主 /tmp/ic25_sha256.txt 已删 |
✓ |
3. 前置条件¶
squeue为空(--module-env红线):实测仅表头,rc=0。- 宿主
dell-R620是 NFS server 本身(/data/nfs/modulefiles为本地导出,六台客户端挂成/opt/modulefiles), 故删共享盘文件须sudo;sudo 免密已实测可用(sudo -n true→ OK)。 - root 免密可至六台验证节点
192.168.31.{18,19,20,25,26,27}。 - 工程 venv:
slurm_ins/.venv/bin/python(部署器)、ic617_replay_20260927/.venv/bin/python(功能验证)。 - 无需停服;无在跑作业;窗口任意。
4. 影响范围¶
| 项 | 内容 |
|---|---|
| 共享盘 | /data/nfs/modulefiles/cadence/virtuoso/IC25.10.000.lua、/data/nfs/modulefiles/cadence/IC/20.1.lua(+ 空目录 cadence/IC/) |
| 客户端视图 | 六台 /opt/modulefiles(同一份 NFS 数据,一次生效) |
| 配置侧 | slurm_ins/config/slurm_deploy.yaml(+.example) 的 families.cadence.tools |
| 宿主临时 | /tmp/ic25_sha256.txt |
| 是否停服 | 否(未动 slurm.conf、未重启任何 daemon) |
| 在跑作业 | 无 |
有意保留(不动):31.29 FlexLM 服务与 5280/5281 防火墙(IC617 用同一 license)、六台 /tools fstab 挂载、
IC06.17.700.lua 与 Core/cadence.lua(IC617 在用)、Calibre/Synopsys/PDK 模块、客户端系统依赖包、/opt/iscape、31.29 上任何文件。
5. 分步操作¶
步骤 1:备份(改前必做)¶
坑:本次涉及 3 类对象、跨宿主与本机。备份统一落本交付物目录的 backup/,
按"相对原路径"建目录层次(data/nfs/...、slurm_ins/...、tmp/...),命名 <原名>.bak.<时间戳>。
slurm_deploy.yaml 含 LDAP 凭据(权限 600),备份须保留 600 且不得外传。
TS=$(date +%Y%m%d-%H%M%S)
D=ic25_cleanup_20260927
mkdir -p "$D/backup/data/nfs/modulefiles/cadence/virtuoso" "$D/backup/data/nfs/modulefiles/cadence/IC" \
"$D/backup/slurm_ins/config" "$D/backup/tmp"
cp -p /data/nfs/modulefiles/cadence/virtuoso/IC25.10.000.lua "$D/backup/data/nfs/modulefiles/cadence/virtuoso/IC25.10.000.lua.bak.$TS"
cp -p /data/nfs/modulefiles/cadence/IC/20.1.lua "$D/backup/data/nfs/modulefiles/cadence/IC/20.1.lua.bak.$TS"
cp -p /home/rain/Documents/slurm/slurm_ins/config/slurm_deploy.yaml "$D/backup/slurm_ins/config/slurm_deploy.yaml.bak.$TS"
cp -p /home/rain/Documents/slurm/slurm_ins/config/slurm_deploy.yaml.example "$D/backup/slurm_ins/config/slurm_deploy.yaml.example.bak.$TS"
cp -p /tmp/ic25_sha256.txt "$D/backup/tmp/ic25_sha256.txt.bak.$TS"
sha256sum /data/nfs/modulefiles/cadence/virtuoso/IC25.10.000.lua "$D/backup/data/nfs/modulefiles/cadence/virtuoso/"*.bak.$TS # 两侧须一致
预期:5 个备份文件生成,逐对 sha256 一致。本次实测(TS=20260927-174405):
| 对象 | sha256 |
|---|---|
IC25.10.000.lua |
c1dc79a2…0def714 |
IC/20.1.lua |
9ed1f071…25fcc573 |
slurm_deploy.yaml |
7e8badf3…c7c6b2e0e |
slurm_deploy.yaml.example |
f8b5cdf7…c2cb8ae1e3 |
/tmp/ic25_sha256.txt |
7b1a01dc…67104bf2e1 |
失败判断:哈希不一致 → 重拉备份,不得继续。
步骤 2:移除 slurm_ins 配置中的 IC25 条目¶
坑:cadence 家族入口必须保留(Core/cadence.lua 把 /opt/modulefiles/cadence 加入 MODULEPATH,IC617 靠它可见),
只清空该家族的 tools 列表。生成器渲染对空列表安全(family.get("tools") or []),不会报错。
坑(重要):不要把 IC617 顺手填进这个位置。IC617 的实体 modulefile(IC06.17.700.lua)是单个文件同时声明
IC617+MMSIM+ASSURA 组合环境,与生成器"一个工具 → 一个 modulefile"的模型不匹配;一旦纳入,生成器会按
cadence/virtuoso/IC06.17.700.lua 路径覆盖该手工文件,丢失 MMSIM/ASSURA 环境。纳入需另行变更(逐项核对 14 个变量)。
cd /home/rain/Documents/slurm/slurm_ins
# ① 编辑 config/slurm_deploy.yaml:删除 cadence 家族 tools 下的 virtuoso 条目块,
# 并将该家族改为 tools: [](保留 name/description/family_tag)
# ② 编辑 config/slurm_deploy.yaml.example:把 IC25 示例值改为中性占位 <工具版本> / /tools/<vendor>/<tool>/<version>
# 等价校验(预期无输出):
grep -n "IC25" config/slurm_deploy.yaml config/slurm_deploy.yaml.example
预期:grep 无输出;YAML 仍可解析、家族列表里 cadence 存在且 tools 为空。
步骤 3:确认部署器派生内容零变更¶
本步不改任何 modulefile 内容——cadence 家族入口渲染结果与改前相同,被删的只是"不再派生"的条目。
部署器入口(实现体:module_env_deployer.py,渲染源 module_env_assets.py):
cd /home/rain/Documents/slurm/slurm_ins
.venv/bin/python main.py --config config/slurm_deploy.yaml --module-env --dry-run # 预演
.venv/bin/python main.py --config config/slurm_deploy.yaml --module-env # 真实执行
预期:两次均为 变更记录总数 27 / 待执行变更 0 / 幂等跳过 27 / 退出码 0(本次实测)。 失败判断:出现"待执行变更 ≥1" → 说明改配置误伤了其它派生文件,先按第 7 章回滚配置再排查。
本步暴露的实现体缺口:正因"待变更 0",说明部署器不会处理已删除条目的残留文件(见第 1 章)。 步骤 4 是本次必须人工补上的动作;后续若要把 IC617/Calibre 2015.2 纳入配置,建议同时给生成器加 "删除本工程生成标记、但不在当前配置中的 modulefile"的 prune 逻辑(判据必须是生成标记,避免误删手工文件)。
步骤 4:删除共享盘孤儿 modulefile(高危)¶
高危:/data/nfs/modulefiles 是六台共享数据,删除即时影响全部客户端;路径须逐条明确,不用通配。
先删文件、再删因之变空的目录。删除前确认这两个文件没有其它用途:它们分别指向已删的 IC25 安装树与从未存在的 /opt/eda 路径。
# 高危:删除共享盘孤儿 modulefile(六台共享;已备份,见 backup/README.md)
sudo rm -v /data/nfs/modulefiles/cadence/virtuoso/IC25.10.000.lua
sudo rm -v /data/nfs/modulefiles/cadence/IC/20.1.lua
sudo rmdir -v /data/nfs/modulefiles/cadence/IC
# 注意:/data/nfs/modulefiles/cadence/virtuoso/IC06.17.700.lua 为 IC617 在用模块,必须保留
预期:三条命令 rc=0,IC/ 目录消失。失败判断:权限不够 → 确认用了 sudo;
rmdir 报"目录非空" → 内有未预期文件,停止并核对后再决定。
步骤 5:清理宿主临时文件¶
rm -v /tmp/ic25_sha256.txt # 仅 5 行文本(IC25 介质 sha256 清单),无实际依赖
步骤 6:客户端与功能验证¶
见第 6 章。注意:NFS 属性缓存可能导致个别节点短期内仍看到旧文件,验证前若发现残留,等数秒或
sudo systemctl restart nfs-utils(本次六台均即时生效,未触发该情况)。
6. 验证¶
# ① 共享盘无 IC25 引用(本地)
grep -rIn "IC25\|ic25" /data/nfs/modulefiles ; echo "rc=$?" # 预期:无输出、rc=1
# ② 六台客户端:IC25 消失 + IC617 可用 + 跨厂商共存
for h in 18 19 20 25 26 27; do
timeout 45 ssh root@192.168.31.$h 'bash -lc "
source /etc/profile.d/zzz_site_lmod.sh >/dev/null 2>&1
module avail 2>&1 | grep -cE \"virtuoso/IC25|IC25.10\" # 预期 0
module load cadence; module load virtuoso/IC06.17.700 # 预期无报错
module load virtuoso/IC25.10.000 2>&1 | head -2 # 预期 unknown module
module load siemens; module load calibre/2015.2_36.27
module -t list; echo \$CDS_LIC_FILE; echo \$MGLS_LICENSE_FILE
"'
done
# ③ IC617 功能验证(license checkout;只读)
cd /home/rain/Documents/eda_tools_ins/Cadence/ic617_replay_20260927
.venv/bin/python main.py verify
实测结果(2026-09-27 17:50–17:52):
| 判据 | 实测 |
|---|---|
| 共享盘 IC25 引用 | 无(rc=1) |
| 六台 IC25 条目数 | 0(六台一致) |
module load virtuoso/IC25.10.000 |
Lmod has detected…unknown: "virtuoso/IC25.10.000"(预期) |
| IC617 加载 | OK |
| 六台同屏 active | cadence virtuoso/IC06.17.700 siemens calibre/2015.2_36.27 |
| 环境变量并存 | CDS_LIC_FILE=5280@192.168.31.29 + MGLS_LICENSE_FILE=/tools/mentor/calibre/license.dat |
| IC617 checkout | 通过:Virtuoso Framework License (111) was checked out successfully. Total checkout time was 0.20s. |
slurm_ins --module-env 复跑 |
待变更 0 / 幂等跳过 27 / RC 0 |
7. 回滚¶
备份位置:ic25_cleanup_20260927/backup/(结构、命名、逐条用途见 backup/README.md)。
回滚判据:步骤 6 任一判据不达标(IC617 加载失败、六台视图不一致、checkout 失败)即回滚。
TS=20260927-174405 # 本批次时间戳
D=ic25_cleanup_20260927
# 1) 恢复共享盘 modulefile(父目录已删,先建回)
sudo mkdir -p /data/nfs/modulefiles/cadence/IC
sudo cp -p "$D/backup/data/nfs/modulefiles/cadence/virtuoso/IC25.10.000.lua.bak.$TS" /data/nfs/modulefiles/cadence/virtuoso/IC25.10.000.lua
sudo cp -p "$D/backup/data/nfs/modulefiles/cadence/IC/20.1.lua.bak.$TS" /data/nfs/modulefiles/cadence/IC/20.1.lua
# 2) 恢复配置并重跑部署器(回到 IC25 条目存在状态)
cp -p "$D/backup/slurm_ins/config/slurm_deploy.yaml.bak.$TS" /home/rain/Documents/slurm/slurm_ins/config/slurm_deploy.yaml
cp -p "$D/backup/slurm_ins/config/slurm_deploy.yaml.example.bak.$TS" /home/rain/Documents/slurm/slurm_ins/config/slurm_deploy.yaml.example
cd /home/rain/Documents/slurm/slurm_ins && .venv/bin/python main.py --config config/slurm_deploy.yaml --module-env
# 3) 恢复宿主临时文件(可选,仅留痕)
cp -p "$D/backup/tmp/ic25_sha256.txt.bak.$TS" /tmp/ic25_sha256.txt
回滚后验证:sha256sum /data/nfs/modulefiles/cadence/virtuoso/IC25.10.000.lua 应回到 c1dc79a2…0def714;
六台 module avail 重新出现 virtuoso/IC25.10.000(加载仍会报目录守卫错误,属 IC25 已卸载的必然结果)。
注意:回滚不能恢复 IC25 安装树——介质与安装树均已删除(ic25_install_20260924 HANDOFF §2)。
8. 风险说明¶
| 风险 | 说明 | 缓解 |
|---|---|---|
| 共享盘误删 | /data/nfs/modulefiles 六台共享,误删 IC617 模块会直接打断在用工具 |
逐条明确路径、不用通配;删除前后 find 全树核对;IC06.17.700.lua 显式列为保留项 |
| 部署器不删孤儿 | 只改配置不删文件,孤儿永久驻留(IC/20.1.lua 即前例) |
本次显式删除;建议后续加 prune(判据=生成标记,见步骤 3 备注) |
| IC617 被生成器覆盖 | 若有人"顺手"把 IC617 纳入 families.cadence.tools,生成器会覆盖含 MMSIM/ASSURA 的手工 modulefile |
已在 yaml 就地写明原因与红线(步骤 2 坑位、配置注释) |
| NFS 属性缓存滞后 | 个别节点可能短时仍见旧文件,误判为"删除失败" | 本轮六台即时生效;必要时重启 nfs-utils 后复验 |
| 使用者以为 IC25 仍可用 | 删除 modulefile 后,曾有 IC25 使用经验的人会报未知模块 | 属预期(IC25 已弃用);在 HANDOFF 与合作方沟通中说明 |
| 不动 license 服务 | IC617 与 IC25 共用 31.29:5280 license,本次未动服务与防火墙 |
明确列为保留项,避免误当"IC25 遗留"一并清除 |
附录:交付物清单¶
| 路径(相对本目录) | 内容 |
|---|---|
docs/SOP.md |
本文件 |
backup/README.md |
备份台账(5 个备份文件 + 逐条回滚用途) |
backup/data/nfs/modulefiles/... |
两个被删 modulefile 的回滚源 |
backup/slurm_ins/config/*.bak.20260927-174405 |
配置回滚源(含凭据,勿外传) |
backup/tmp/ic25_sha256.txt.bak.20260927-174405 |
宿主临时文件留痕 |
不产出 RUNBOOK 的理由:本次为"删除遗留"的一次性动作,未产生任何可复用交付物(服务/脚本/配置),
且既有 RUNBOOK(slurm_ins、ic617_replay_20260927)均未记载 IC25 条目,无需同步更新。
同步更新:eda_tools_ins/Cadence/docs/HANDOFF.md(Cadence 根交接快照)、
slurm_ins/docs/HANDOFF.md(cadence 家族 tools 现状)。
来源:
/home/rain/Documents/eda_tools_ins/Cadence/ic25_cleanup_20260927/docs/SOP.md| 最后更新:2026-09-27 17:53(由build/sync.py同步,请勿在站点侧修改)