日常运维
运维总原则
网管只需要维护三件事:服务器别断电、交换机别掉线、模板偶尔更新。日常运维比传统 PC 机房轻松 80% 以上。
模板更新与推送
什么时候需要更新模板
- 课程软件版本升级(如 Python 升版本)
- 新增课程软件(如在编程模板里加 Git)
- 系统补丁和安全更新
- 学期初统一调整
更新流程
- 在 PVE 中找到模板 VM(如 9000)
- 从模板克隆一个临时 VM(如 9001)
- 启动 9001,开机,进行软件更新
- 确认软件都正常后,关机
- 将 9001 转为新模板
- 在教师端设置中,将课程模板指向新模板编号(9001)
- 下一节课点上课时,系统自动用新模板克隆
- 确认无误后,旧模板可保留或删除
不要直接修改原模板
始终通过"克隆 → 修改 → 新模板"的方式更新。这样如果新模板有问题,可以立刻回退到旧模板。
多模板管理
建议按课程命名模板,并在 PVE 注释里标注:
| VM ID | 模板名称 | 用途 |
|---|---|---|
| 9000 | tpl-win10-base | 基础模板(只装系统+驱动) |
| 9001 | tpl-python | 编程课(Python + VSCode) |
| 9002 | tpl-design | 设计课(Photoshop + Illustrator) |
| 9003 | tpl-exam | 考试环境(干净系统,指定软件) |
| 9004 | tpl-office | 办公课(Office + WPS) |
终端升级(ELF 替换)
终端程序(terminal_student.py 或打包后的 ELF)有版本更新时,需要批量替换。
升级工具
使用 terminal-upgrader.sh 脚本进行批量升级:
# 在教师端或管理机上执行
# 批量推送新 ELF 到所有终端
./terminal-upgrader.sh --source /path/to/new-terminal.elf --target /home/vdi/
# 或逐台升级
scp new-terminal.elf root@终端IP:/home/vdi/
ssh root@终端IP "chmod +x /home/vdi/new-terminal.elf"
升级注意事项
os.rename 防 Text file busy
终端程序在运行中,直接覆盖会导致 "Text file busy" 错误。正确做法:
- 先将新文件传到临时文件名(如
terminal_student.elf.new) - 用
os.rename()原子替换旧文件(rename 不受运行中限制) - 重启终端程序
版本确认
升级后在终端上确认版本:
# 查看终端程序版本
ssh root@终端IP "strings /home/vdi/terminal_student.elf | grep -o '1\.5\.[0-9]*'"
# 或在教师端详情页查看终端版本号
版本口径
当前终端程序最新版口径是 1.5.039。不能只看文件头里的旧版本注释判断新旧,要实际比对程序功能。
T1 模板母盘升级规则
T1 = 克隆母盘/模板
母盘上的终端程序只用于克隆模板,不回推到开发机。升级流程:先在开发机验证新版本 → 确认无误 → 推送到母盘 → 从母盘批量克隆到其他终端。
PVE 日常维护
定期检查项
| 频率 | 检查项 | 方法 |
|---|---|---|
| 每周 | 磁盘空间 | PVE 界面 → 节点 → Storage |
| 每周 | VM 残留 | PVE 界面确认没有遗留的 running VM |
| 每月 | 系统日志 | journalctl -u pveproxy -n 200 |
| 每月 | PVE 更新 | apt update && apt list --upgradable |
| 每学期 | 存储碎片整理 | 检查 thin pool 或 ZFS fragmentation |
| 每学期 | 备份模板 | vzdump 9000 --storage 备份存储名 |
清理 VM 残留
正常情况下下课会自动回收 VM。但如果异常断电或教师端崩溃,可能有残留 VM:
# 查看所有 VM 状态
qm list
# 批量停止所有 running 的 VM(谨慎!)
for vmid in $(qm list | grep running | awk '{print $1}'); do
qm stop $vmid
done
PVE 官方维护文档
备份与恢复
需要备份什么
| 对象 | 频率 | 方法 | 恢复方式 |
|---|---|---|---|
| 模板 VM | 每学期 | vzdump | qmrestore |
| 教师端配置 | 每次修改后 | 手动导出 JSON | 导入 JSON |
| 终端配置 | 每次修改后 | 备份 /home/vdi/.terminal_config | 还原文件 |
| PVE 网络配置 | 每次修改后 | 备份 /etc/network/interfaces | 还原文件 |
模板备份示例
# 备份模板 VM 9000
vzdump 9000 --storage local --mode snapshot --compress zstd
# 备份结果在 /var/lib/vz/dump/
# 恢复(从备份文件)
qmrestore /var/lib/vz/dump/vzdump-qemu-9000-*.vma.zst 9000
教师端配置备份
教师端配置存储在 DB(SQLite)。备份方法:
# 在教师端电脑上
# 复制 DB 文件
copy "C:\teacher\data\school.db" "D:\backup\school-$(date).db"
# 同时导出配置为 JSON(在教师端设置界面操作)
A2 备份缺字段注意
旧版本 A2 备份可能缺
teacher_ip 字段。从旧备份恢复后需要检查配置完整性。
性能调优
服务器 CPU 与 Worker 调优
详见 部署手册 - PVE 配置。核心规则:
| 物理核数 | pveproxy workers | pvedaemon workers |
|---|---|---|
| ≤2 | 3 | 3 |
| ≤4 | 4 | 4 |
| ≤8 | 6 | 6 |
| 9+(如 16 核) | 8 | 8 |
| 检测失败 | 4(回退) | 4(回退) |
不要超过物理核数的 1.5-2 倍。
存储 IOPS 优化
- SSD 必须:60 台同时克隆时 IOPS 压力极大,HDD 跟不上
- NVMe 最佳:如果有条件,NVMe + ZFS 缓存效果最好
- thin pool 不要过满:存储使用率超过 80% 时性能会下降
- 定期清理差异盘:下课回收会清理,但异常残留需要手动清
网络优化
- 千兆带宽足够 60 台并发(SPICE 单台 1-2 Mbps,总计 <100 Mbps)
- 如果考试场景要求更稳定,考虑万兆服务器上联
- 交换机开启 Flow Control 可减少突发丢包
- 60 台同时开机时广播包较多,确认交换机能扛住广播风暴
实测性能基准
| 指标 | 实测值 | 条件 |
|---|---|---|
| 60 台批量启动 | 3 分钟全部就绪 | 16 核 / 128GB / NVMe |
| SPICE 连接数 | 360 路持续运行 | 5+ 小时无断线 |
| 网络延迟 | < 1ms | 0% 丢包 |
| 带宽总占用 | < 100 Mbps | 空闲约 2 Mbps |
| 下课回收 | 10 秒内 | 60 台全部 VM 停止 |
数据来源
以上数据来自已服务 60+ 院校机房的实测口径。实际性能取决于服务器配置、网络质量和终端硬件。