fix(chv-guest): B-16 真机构建扩根分区(云镜像根分区仅 2.4G 会写满)

- 首轮真机构建实测:单次 virt-customize 在 playwright
  --with-deps 装 g++/make 时报 No space left on device,
  根分区 /dev/sda1 仅 2.4G、已用 97%。
- 修复:qemu-img resize +12G 后 sgdisk 只扩 1 号分区
  (起始扇区实测取,不写死;14/15/16 不动),再 guestfish
  resize2fs;实测根分区 2.4G→14G、可用 12G、编号仍为 sda1。
- 不用 virt-resize:实测它重写分区表、把根分区从 1 号重编号
  为 4 号,而执行器默认 cmdline 是 root=/dev/vda1,重编号后
  无法启动。工具检查清单加 sgdisk、guestfish。
This commit is contained in:
host committed 2026-11-06 07:59:29 +00:00
1 parent 3b41f864e8
commit 368bccd16e
1 file changed
+19 -1
+19 -1
View File
@@ -105,7 +105,7 @@ if [ "$DRY_RUN" = "0" ]; then
echo "CHV_GUEST_BUILD needs a KVM host: /dev/kvm 不存在" >&2 echo "CHV_GUEST_BUILD needs a KVM host: /dev/kvm 不存在" >&2
exit 1 exit 1
fi fi
for tool in curl qemu-img virt-customize virt-get-kernel python3 virt-cat; do for tool in curl qemu-img virt-customize virt-get-kernel python3 virt-cat sgdisk guestfish; do
if ! command -v "$tool" >/dev/null 2>&1; then if ! command -v "$tool" >/dev/null 2>&1; then
echo "缺少构建工具:$tool,构建失败" >&2 echo "缺少构建工具:$tool,构建失败" >&2
exit 1 exit 1
@@ -148,6 +148,24 @@ else
fi fi
fi fi
run qemu-img convert -f qcow2 -O raw "$IMG" "$OUT/disk.raw" run qemu-img convert -f qcow2 -O raw "$IMG" "$OUT/disk.raw"
# B-16:云镜像根分区只有 ~2.4G,apt 全量清单(texlive +
# Playwright --with-deps + Chromium + CJK 字体)会写满根分区
# (No space left on device,首轮真机构建实测)。先扩盘:
# qemu-img resize 扩文件;sgdisk 把 1 号分区尾移到磁盘末尾
# (只动 1 号分区,14/15/16 不动);guestfish resize2fs 扩
# 文件系统。注意不能用 virt-resize:它会重写分区表、把根分区
# 从 1 号重编号为 4 号,而执行器默认 cmdline 是 root=/dev/vda1,
# 重编号后无法启动。根分区起始扇区从 sgdisk -i 1 实测取,不写死。
if [ "$DRY_RUN" = "0" ]; then
run qemu-img resize "$OUT/disk.raw" +12G
run sgdisk -e "$OUT/disk.raw"
ROOT_START="$(sgdisk -i 1 "$OUT/disk.raw" | awk '/^First sector:/ {print $3}')"
[ -n "$ROOT_START" ] || { echo "读不到根分区起始扇区" >&2; exit 1; }
run sgdisk -d 1 -n "1:${ROOT_START}:0" -t 1:8300 "$OUT/disk.raw"
run guestfish -a "$OUT/disk.raw" -m /dev/sda1 resize2fs /dev/sda1
else
echo "DRY-RUN: qemu-img resize $OUT/disk.raw +12G; sgdisk 扩 1 号分区; guestfish resize2fs /dev/sda1"
fi
# 清单软件(照抄 cloud/docker/Dockerfile 的 apt/pip 清单, # 清单软件(照抄 cloud/docker/Dockerfile 的 apt/pip 清单,
# 中文 LaTeX xelatex 故意不装,见 README;fonts-noto-cjk 只 # 中文 LaTeX xelatex 故意不装,见 README;fonts-noto-cjk 只
# 是浏览器渲染用的中文字体,不是 LaTeX。Playwright 默认开启 # 是浏览器渲染用的中文字体,不是 LaTeX。Playwright 默认开启