SOP — 31.30(centos7-01)补齐 NFS 客户端并复验 VCS¶
- 变更日期:2026-09-28
- 执行主机:
192.168.31.30(centos7-01,CentOS Linux 7.2.1511,内核 3.10.0-327,2 vCPU / 3.8G 内存 / 无 swap) - 触发来源:HANDOFF 待办 #4「centos7-01 处置」+ 用户指定 A 方案(补 NFS 客户端)
- 性质:C 类生产变更(安装软件包 + 挂载共享目录)
- 结论:变更成功;VCS 在 CentOS 7.2 上的行为与既有结论一致(见第 6 章)
1. 背景¶
31.30 是 VCS 崩溃归因验证时新建的 CentOS 7.2 机器,此前只有一份本地的 vcs-mx 干净对照树(/tools/synopsys_clean,4.4G),看不到 NFS 上的 20 棵正式工具树。要把它当正常客户端使用,必须先补 NFS 客户端能力。此前未安装 nfs-utils / rpcbind(HANDOFF 记录「保留需补 nfs-utils,yum 源已 EOL,需 vault」)。
同时借这次机会,要求在不设 VCS_USE_MALLOC 的前提下复验 VCS,以检验既有结论(崩溃与平台无关)在这台机器上是否成立。
2. 目标¶
nfs-utils安装成功,/tools挂载到192.168.31.249:/data/nfs/tools,只读且能从本机读到全部 20 棵树。- 挂载参数与既有六台客户端约定一致(nfs4、
ro、hard、_netdev等)。 - 以 NFS 现役树为基准,实测
VCS_USE_MALLOC开/关两种状态的仿真结果,形成单变量对照结论。
3. 前置条件¶
- 本机(操作机)到 31.30 已配置 root 免密 SSH(
BatchMode可直连)。 - 31.30 上
/etc/yum.repos.d/c72-vault.repo已存在且可用(阿里云 vault,c72-base共 9007 包);EOL 源base/extras/updates已失效,必须命令行禁用。 - NFS 服务端(本机
192.168.31.249,Ubuntu 24.04)/etc/exports已导出/data/nfs/tools给192.168.31.0/24。 - 执行前检查:
/tools现有内容、可用磁盘、SELinux 状态。 - 备份与留档位置:
centos7_01_nfs_20260928/backup/README.md(本次无配置文件被修改,台账见第 7 章)。
4. 影响范围¶
| 项 | 说明 |
|---|---|
| 主机 | 仅 192.168.31.30 一台 |
| 是否停服 | 否。该机当前无在跑业务作业,无 Slurm/LSF 客户端接入 |
| 变更面 | ① 新增安装包(nfs-utils 及其依赖);② /tools 挂载点 |
| 持久化 | 本次仅临时挂载,未写 fstab(遵守「不手改 fstab/exports」红线)。重启后挂载失效,nfs-utils 包保留 |
| 遮盖效应 | /tools 下原有本地目录 synopsys_clean(4.4G)被挂载点遮盖,数据不丢,umount 后立即恢复可见 |
| 窗口期 | 无需窗口;单条命令执行期间对 /tools 的本地访问短暂不可见 |
5. 分步操作¶
步骤 1:安装 nfs-utils¶
官方源已 EOL,base/7/x86_64 的 mirrorlist 会以 curl#52 Empty reply from server 失败并中断整个 yum 事务,因此必须显式只启用可用源,而不是依赖默认源开关。
坑:--disablerepo 的通配必须加引号(--disablerepo="*"),否则 shell 会展开成当前目录文件列表。
ssh root@192.168.31.30 'yum install -y --disablerepo="*" --enablerepo=c72-base nfs-utils'
预期:yum_exit=0,rpm -q nfs-utils 返回 nfs-utils-1.3.0-0.21.el7.x86_64,依赖含 rpcbind、libnfsidmap、quota、keyutils-libs。
失败判断:非 0 → 查 /tmp/yum-nfs2.log,确认是 c72-base 不可达还是依赖缺失;修源后重跑本步。
步骤 2:挂载 /tools(只读)¶
挂载参数照抄既有客户端(31.18 的 fstab)约定,保证行为一致:ro,hard,timeo=600,retrans=2,noatime,actimeo=30。NFSv4 不需要 rpcbind/statd,故未启用 rpcbind 服务。
坑 1:/tools 已有本地内容,直接挂载会遮盖;确认其中内容无需在线访问后再执行。
坑 2:重复执行 mount 会因「已挂载」报错,故用条件判断实现幂等。
# 幂等写法:已挂载则跳过;路径不存在先创建(本次已存在)
ssh root@192.168.31.30 'if grep -q " /tools nfs" /proc/mounts; then
echo "already-mounted -> skip"
else
mount -t nfs4 -o ro,hard,timeo=600,retrans=2,noatime,actimeo=30 \
192.168.31.249:/data/nfs/tools /tools
fi'
预期:mount_exit=0,df -h /tools 显示 192.168.31.249:/data/nfs/tools 1.8T ... 34% /tools。
失败判断:mount_exit=32(文件系统类型错误)多为客户端缺 nfs-utils → 回到步骤 1;超时/拒绝 → 检查网络与服务端 exports。
步骤 3:复核挂载属性与写保护¶
ssh root@192.168.31.30 'grep " /tools " /proc/mounts; touch /tools/_wtest; ls -Zd /tools'
预期:/proc/mounts 行含 nfs4 ro,...,vers=4.0,...,hard;touch 报 只读文件系统;上下文为 system_u:object_r:nfs_t:s0(SELinux Enforcing 下不影响读取与执行)。
失败判断:可写入 → 挂载参数漏了 ro,卸载后按步骤 2 重挂。
步骤 4:VCS 实测(单变量对照)¶
在 /tmp 下建临时工程(NFS 树为只读,不能在其中写产物),仅切换 VCS_USE_MALLOC,其余完全一致。注意不要沿用 Cadence 的 LM_LICENSE_FILE,只设 Synopsys 专用变量,避免老工具回退读错授权变量而拖慢启动。
ssh root@192.168.31.30 'D=$(mktemp -d /tmp/vcsn.XXXX); cd "$D"
printf "module t;\n initial \$display(\"HELLO\");\nendmodule\n" > x.sv
export SNPSLMD_LICENSE_FILE=2700@192.168.31.29
unset LM_LICENSE_FILE VCS_USE_MALLOC # 对照组:不设该变量
export VCS_HOME=/tools/synopsys/vcs-mx/N-2017.12-SP2
"$VCS_HOME/bin/vcs" -full64 -sverilog x.sv -o simv && ./simv'
预期与实测见第 6 章。失败判断:simv 打印 libvcsnew.so 栈回溯并退出 1,即为已知分配器缺陷,处理方式见第 6 章结论。
6. 验证¶
6.1 挂载与服务¶
| 检查 | 命令 | 实测结果 |
|---|---|---|
| 安装包 | rpm -q nfs-utils rpcbind |
nfs-utils-1.3.0-0.21.el7、rpcbind-0.2.0-32.el7 |
| 挂载点 | grep " /tools " /proc/mounts |
nfs4 ro,noatime,vers=4.0,hard,timeo=600,retrans=2 |
| 容量 | df -h /tools |
1.8T 总量,已用 583G,挂载正常 |
| 树数量 | ls /tools/synopsys \| wc -l |
20(外加 1patch 目录) |
| 写保护 | touch /tools/_wtest |
无法创建: 只读文件系统 |
| SELinux | getenforce / 挂载上下文 |
Enforcing;nfs_t,未阻碍读取与执行 |
注:vers=4.0 是 CentOS 7.2(内核 3.10)客户端协商上限,与 Rocky 9.8 客户端的 4.2 不同,功能无影响。
6.2 VCS 单变量对照(核心结论)¶
同一台机、同一棵 NFS 现役树(/tools/synopsys/vcs-mx/N-2017.12-SP2),唯一变量为 VCS_USE_MALLOC:
| 树 | VCS_USE_MALLOC |
vcs 编译 |
simv 仿真 |
|---|---|---|---|
| NFS 现役树 | 不设 | 成功(vcs_exit=0) |
崩溃(simv_exit=1,栈在 libvcsnew.so) |
| NFS 现役树 | =1 |
成功 | 成功,输出 V C S Simulation Report |
| 本地 clean 树 | =1 |
成功 | 成功,输出 V C S Simulation Report |
结论:决定因素是 VCS_USE_MALLOC 这一个环境变量——与树来源(NFS 现役树 / 本地干净树)无关,与平台(CentOS 7.2 内核 3.10 / glibc 2.17)无关。同时排除了「内存不足」这一新变量:本机 3.8G 内存、无 swap,设变量即成功。既有结论(VCS 自带池化分配器缺陷,非新系统不兼容)在 CentOS 7.2 上再次成立,HANDOFF 红线不变。
6.3 幂等复跑¶
| 动作 | 第二次执行结果 |
|---|---|
yum install ... nfs-utils |
软件包 1:nfs-utils-1.3.0-0.21.el7.x86_64 已安装并且是最新版本 / 无须任何处理(零变更) |
| 条件式挂载 | already-mounted -> skip(零变更) |
7. 回滚¶
无配置文件被修改,故无文件级备份;回滚即撤销两项变更。备份台账:backup/README.md。
# 回滚 1:卸载挂载点(本地 synopsys_clean 立即恢复可见)
umount /tools
mount | grep -q " /tools " && echo "STILL-MOUNTED" || echo "unmounted"
# 回滚 2(可选,仅在需要彻底移除客户端能力时执行)高危:移除软件包
yum remove -y nfs-utils rpcbind
回滚验证:df -h /tools 回到本地 /dev/vda2,ls /tools 可见 synopsys_clean;rpm -q nfs-utils 返回「未安装软件包」。
回滚触发判据:/tools 读取报 I/O 错误或服务端异常导致访问 hang(hard 挂载会阻塞),任一出现即 umount;umount 报 busy 时先确认无进程占用(lsof /tools),必要时 umount -l /tools 后择机重启。
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
挂载遮盖 /tools/synopsys_clean(4.4G 本地对照树) |
数据未丢,umount 即恢复;如需长期共存,应改挂 /tools 之外路径或先把本地树迁走 |
| 挂载未持久化,重启后消失 | 已知并接受:本次只做验证。若要长期使用,需另行确认持久化方式(systemd mount unit 或 fstab),并纳入下一份 SOP |
hard 挂载在服务端不可达时阻塞 IO |
服务端为本机 192.168.31.249,同网段稳定;异常时按第 7 章回滚 |
EOL 源导致后续任何 yum 操作失败 |
本次用一次性 --disablerepo 规避,未持久化禁用;后续若常驻使用该机,建议把死源置 enabled=0 |
SELinux Enforcing + firewalld active |
实测未阻碍挂载与 VCS 运行,本次未做策略调整 |
| 内存仅 3.8G 且无 swap | 已实测足以完成本次最小用例;跑真实大设计需评估扩容 |
附录 A:交付物清单¶
| 文件 | 说明 |
|---|---|
docs/SOP.md |
本文件 |
backup/README.md |
备份台账(本次无文件备份,记录回滚动作与理由) |
附录 B:取证留痕¶
- 取证主机:操作机
192.168.31.249→ 目标192.168.31.30(root 免密,BatchMode) - 时间窗:2026-09-28 22:13 — 22:33
- 关键命令与过滤条件:见第 5 章;yum 日志留存于目标机
/tmp/yum-nfs.log、/tmp/yum-nfs2.log - 仿真工程目录(目标机):
/tmp/vcsv.E2k5(本地树+变量)、/tmp/vcsn.maEv(NFS 树,不设变量,崩溃)、/tmp/vcsm.5Yzm(NFS 树+变量)
来源:
/home/rain/Documents/eda_tools_ins/Synopsys/centos7_01_nfs_20260928/docs/SOP.md| 最后更新:2026-09-28 22:30(由build/sync.py同步,请勿在站点侧修改)