Files
codex-app-server/chv-guest/chv-data-mount.sh
T
host a5f836e9fd feat(chv-guest): 阶段 1 数据盘独立持久(客内挂载)
- 新增 chv-guest/chv-data-mount.sh:按 LABEL=CHVDATA 找盘
  (不依赖 /dev/vd? 固定名;seed ISO 与根盘排除),无 fs
  即 mkfs.ext4 -L CHVDATA,挂到 /home/chv/workspace,幂等;
  无数据盘即静默退出 0(copy 模式旧 VM 不报错)。
- build.sh:缺脚本即失败(与 chv-sync.sh 同款门);拷入
  镜像 /usr/local/bin/chv-data-mount;99-chv-sync.cfg
  runcmd 在 chv-sync boot 之前调它(工作区先挂好再 clone)。
- buildinfo.py BASE_CONTENTS 与两 lockfile DECLARED_SOURCES
  登记 chv-data-mount(repo_commit,随 P2 三脚本先例)。
- tests:test_chv_opt_stage1.DataMountScriptTest(脚本内容、
  构建接线、lockfile 登记);P2 干跑夹具补新文件。
回归:discover test_chv_*.py 与 test_cloud_hypervisor.py 全过。
不推、不合、不部署;只本地分支。
2026-11-08 09:45:00 +00:00

49 lines
1.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# chv-data-mount:把数据盘(LABEL=CHVDATA)挂到 /home/chv/workspace。
#
# 由镜像 99-chv-sync.cfg runcmd 在 chv-sync boot 之前调(final 阶段,
# 用户 chv 已存在,可 chown)。幂等:已挂载即返回;已有 CHVDATA
# 标签的盘即直接挂;无数据盘(copy 模式旧 VM 没有第三块盘)即
# 静默退出 0,不报错、不挡启动。
#
# 找盘不依赖 /dev/vd? 固定名:先按 LABEL 找;找不到则在所有整盘里
# 找一块无文件系统、不是根盘的盘——seed ISO 有 iso9660,不会被选
# 中;根盘本身无 fs,但按持有 / 分区的盘排除;分区(/dev/vda1 等)
# 不参与(glob 只取整盘名)。
#
# 阶段 1(feat-chv-opt-landing):工作区与浏览器 profile 的载体从
# 系统盘 overlay 里剥离出来,独立持久;快照只登记系统盘 overlay,
# 数据盘不进快照(见 cloud/chv/disk.py)。
set -u
MOUNT=/home/chv/workspace
LABEL=CHVDATA
log() { echo "chv-data-mount: $*"; }
mountpoint -q "$MOUNT" 2>/dev/null && { log "already mounted"; exit 0; }
DEV=$(blkid -L "$LABEL" 2>/dev/null || true)
if [ -z "$DEV" ]; then
ROOT_SRC=$(findmnt -n -o SOURCE / 2>/dev/null || echo "")
ROOT_DISK=$(printf '%s' "$ROOT_SRC" | sed -e 's/p[0-9]*$//' -e 's/[0-9]*$//')
for d in /dev/vd[a-z] /dev/sd[a-z] /dev/xvd[a-z]; do
[ -b "$d" ] || continue
[ "$d" = "$ROOT_DISK" ] && continue
TYPE=$(blkid -o value -s TYPE "$d" 2>/dev/null || echo none)
[ "$TYPE" = "none" ] || continue
DEV=$d
break
done
fi
[ -n "$DEV" ] || { log "no data disk found, skip"; exit 0; }
if [ "$(blkid -o value -s LABEL "$DEV" 2>/dev/null || echo "")" != "$LABEL" ]; then
log "formatting $DEV as $LABEL"
mkfs.ext4 -L "$LABEL" "$DEV" || { log "mkfs failed on $DEV"; exit 0; }
fi
mkdir -p "$MOUNT"
mount "LABEL=$LABEL" "$MOUNT" || { log "mount failed"; exit 0; }
chown chv:chv "$MOUNT" || true
log "mounted $DEV -> $MOUNT"
exit 0