跳转至

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)

目录

  1. 背景 / 2. 目标 / 3. 前置条件 / 4. 影响范围 / 5. 分步操作 / 6. 验证 / 7. 回滚 / 8. 风险说明 / 附录

1. 背景

用户决策:本环境不再使用 IC25.10(安装树 09-26 已卸载,/tools/cadence/virtuoso/IC25.10.000 已删)。 但卸载只删了安装树,配置侧遗留仍在,产生两处持续误导:

  1. 共享盘 modulefile cadence/virtuoso/IC25.10.000.lua 仍存在且由 Lmod 可见,六台 module avail 都能看到它; 一旦加载立即报 LmodError: 工具尚未安装或路径待配置(目录守卫),对使用者是明确的错误诱导。
  2. 其生成来源(slurm_ins 的 config/slurm_deploy.yaml 中 families.cadence.tools[virtuoso])仍指向已删路径; 另有更早的假占位 cadence/IC/20.1.lua(指向从未存在的 /opt/eda/cadence/IC/20.1),配置里已无来源,属孤儿文件。
  3. 宿主 /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 同步,请勿在站点侧修改)