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同步,请勿在站点侧修改)