跳转至

SOP — Tier0 scratch/users 权限参数化(用户自助建目录)

  • 主题目录:scratch_users_20261012/
  • 执行日期:2026-10-12
  • 类型:C 类变更(配置 + 实现体 + 4 台节点目录权限)
  • 关联:eda_tools_ins/design/sim_layering_20261012/SOP.md(应用侧落层依赖本变更)

1. 背景

ADE-XL 落层段把 saveResDir 指向 /mnt/lustre/scratch/users/<user>/adexl,但 Tier0 的 scratch/users 原为 755 root:root,普通用户不能在其下自建 <user> 目录(TaskProlog 只建本地层目录),导致模板通用化后非 rain01 用户落层会失败。

按 2026-10-12 裁定(口径甲1)把 scratch/users 改为 1777(sticky),与本地层 /local_scratch/users(users_dir_mode: 1777)及 scratch/tmp 口径一致,由 storage_layout 部署器参数化维护。

2. 目标

项 可验证状态
验收 /mnt/lustre/scratch/users 权限为 1777(drwxrwxrwt root:root)
功能 非 rain01 用户(如 cy01)可在其下自助建自己的目录
回归 复跑 --storage-layout 零变更、全跳过
边界 不改挂载参数、不改导出、不重启任何服务

3. 前置条件

条件 检查方法 本次实测
本地管控机可 SSH 到 compute/submit 节点 部署器 pre_check ✅
Lustre 在线且节点已挂载 findmnt -M /mnt/lustre ✅
目标准备就绪(scratch/{users,projects,tmp} 已存在) 部署器探测 ✅

4. 影响范围

项 内容
主机 .18/.19/.20/.28(node_groups = compute + submit)
对象 Lustre 上 /mnt/lustre/scratch/users 的权限位(共享 FS,一处生效全局可见)
停服 否。不重启 daemon、不动挂载与导出
在跑业务 变更前 squeue 为空
安全 1777 只放开「新建自己目录」;sticky 位保证用户不能删他人目录。原 rain01 目录权限不变

5. 分步操作

实现体:storage_layout_deployer.py(probe_tier0/judge_tier0/apply_tier0)+ storage_layout_assets.py;配置 config/slurm_deploy.yaml 的 storage_layout.tier0。

步骤 1:配置参数化

tier0:
  enabled: true
  mount_point: "/mnt/lustre"
  scratch_root: "scratch"
  subdirs: ["users", "projects", "tmp"]
  sticky_dir: "tmp"             # 该子目录置 1777
  users_dir_mode: "1777"        # /scratch/users 权限(1777 允许用户自助建目录)
  mount_options: "defaults,noatime,nofail"

步骤 2:实现体三处(探测 + 三态 + 幂等应用)

  • probe_tier0:新增 USERS_MODE=$(stat -c %a <scratch>/users) 探测;
  • judge_tier0:USERS_MODE != users_dir_mode 即判 PENDING;
  • apply_tier0:不匹配则 chmod <users_dir_mode> <scratch>/users,仅实际变更时记 change。

等价 shell(部署器逐台幂等执行):

# 高危:改目录权限前先确认当前值
stat -c %a /mnt/lustre/scratch/users        # 变更前 755
chmod 1777 /mnt/lustre/scratch/users        # 1777 + sticky
stat -c "%a %A %U:%G" /mnt/lustre/scratch/users   # 期望 1777 drwxrwxrwt root:root

6. 验证

# ① 幂等复跑(第二次零变更、全跳过)
cd /home/rain/Documents/slurm/slurm_ins
.venv/bin/python main.py --config config/slurm_deploy.yaml --storage-layout

# ② 权限位(任一客户端)
stat -c "%a %A %U:%G" /mnt/lustre/scratch/users    # 期望 1777 drwxrwxrwt root:root

# ③ 非 rain01 用户自助建目录
su -s /bin/bash cy01 -c 'mkdir -p /mnt/lustre/scratch/users/cy01/probe && echo OK'
验证项 结果(2026-10-12)
apply 4 台 nodes,退出码 0
幂等复跑 零变更,幂等跳过 19,退出码 0
权限位 1777 drwxrwxrwt root:root
cy01 自助建目录 SELF_OK
rain01 写 scratch/tmp OK(回归正常)

7. 回滚

备份位置:scratch_users_20261012/backup/(三个文件改动前副本)。台账见 backup/README.md。

# ① 还原实现体与配置
cd /home/rain/Documents/slurm/slurm_ins
cp -p scratch_users_20261012/backup/slurm_deploy.yaml.bak.20261012-012500 config/slurm_deploy.yaml
cp -p scratch_users_20261012/backup/storage_layout_deployer.py.bak.20261012-012500 storage_layout_deployer.py
cp -p scratch_users_20261012/backup/storage_layout_assets.py.bak.20261012-012500 storage_layout_assets.py

# ② 还原目录权限
chmod 755 /mnt/lustre/scratch/users

回滚后验证:stat -c %a /mnt/lustre/scratch/users 返回 755;--storage-layout 复跑零变更。

8. 风险说明

风险 等级 缓解
1777 放开写入面 低 sticky 位防止删改他人目录;与 scratch/tmp、本地层 users 口径一致
改权限影响在跑作业 低 仅改目录权限位,不卸载、不重启;变更前 squeue 为空
与 storage_layout 既有幂等冲突 低 已参数化并纳入三态判定;复跑零变更已验证

附录:交付物与证据

  • 本目录:SOP.md、backup/README.md
  • 实现体:storage_layout_deployer.py、storage_layout_assets.py、config/slurm_deploy.yaml
  • 下游依赖:eda_tools_ins/design/sim_layering_20261012/SOP.md

来源:/home/rain/Documents/slurm/slurm_ins/scratch_users_20261012/SOP.md | 最后更新:2026-10-12 01:27(由 build/sync.py 同步,请勿在站点侧修改)