PVE虚拟化服务器白皮书篇
一、U盘做PVE系统启动盘
第1步:下载工具和镜像
-
启动盘制作工具:下载
balenaEtcher(官网:etcher.balena.io),这是一个跨平台的免费工具,界面非常直观。官网下载太慢,点私有地址 -
PVE 系统镜像:去 Proxmox 官网地址你需要的版本,注意核对文件名,官网下载很慢,这里有加速版本 南京大学镜像加速
-
第2步:插入U盘并打开软件
-
插入你的U盘(注意:U盘里的所有数据都会被清空,请提前备份好重要文件)。
-
打开下载好的
balenaEtcher软件。
-
-
第3步:开始制作(核心三步)
-
点击“从文件烧录”,选择你刚下载好的 PVE 镜像文件(.iso)。
-
点击“选择目标磁盘”,选中你的U盘。
-
点击“现在烧录”,软件就会自动完成写入和验证,等待提示完成即可。
-
-
第4步:从U盘启动服务器
-
把制作好的U盘插到你的服务器上,开机并进入BIOS(通常开机时按
Delete或F11键)。 -
在 BIOS 中将U盘设置为第一启动项,保存退出后重启,就会自动进入 Proxmox VE 的安装界面了。
-
⚠️ 注意事项
-
数据备份:在制作启动盘之前,务必提前备份好U盘内的重要数据。
-
BIOS设置:如果从U盘启动失败或出现错误,请进入主板BIOS,尝试关闭“Secure Boot”(安全启动) 功能,这通常是问题的原因。
-
其他工具提醒:如果你以后改用 Rufus 工具,写入 PVE 镜像时,在弹出提示窗里一定要选择“DD 模式”,否则制作的U盘无法启动。
二、PRID矩阵配置
2.0、硬件环境
- 服务器设备(需支持 PRAID 配置,配备 RJ45 网络接口)
- 具备 RJ45 网络接口的显示屏及配套数据线
- 系统引导盘(U 盘介质,已写入 Proxmox VE 系统镜像)
- 适配服务器的硬盘(含 2 块 446.625GB SATA 接口 SSD、3 块 3.637TB SATA 接口HDD)

2.1、硬件磁盘确认
2个ssd固态硬盘,3个机械磁盘,状态是Online状态,若监测不到5个磁盘,说明状态不对,联系技术厂家

2.2、设备连接与启动
等待服务器启动过程中,当屏幕提示 “按 Ctrl + R” 时,迅速按下该组合键
进入 MegaRAID SAS-MFI BIOS 的 PRAID 配置页面
若未及时按下导致错过配置页面,需按下 Ctrl + Alt + Del 组合键重启服务器后重新操作

2.3、创建 RAID-1 阵列(系统盘)
VD Mgmt -- 通过键盘上下箭头键移动光标到最顶部 -- 回车
"Create New VD"(创建新虚拟磁盘) -- 回车 -- 下拉框选择 "RAID-1"

在Drivers列表中,回车勾选 2 块标识为 "SSD-SATA"、容量为 446.625GB 的硬盘(ID 分别为 P0:01:00、P0:01:01),确保 "Capable"列显示为 “512e”。
RAID-1 为镜像模式,实际可用容量为总容量的 50%,用于系统安装与数据备份
选择OK,回车


2.4、创建 RAID-5 阵列(存储盘)
VD Mgmt -- 通过键盘上下箭头键移动光标到最顶部 -- 回车
"Create New VD"(创建新虚拟磁盘) -- 回车 -- 下拉框选择 "RAID-5" 
- 在Driver列表中,通过空格键勾选 3 块标识为 “HDD-SATA”、容量为 3.637TB 的硬盘(ID 分别为 P0:01:02、P0:01:03、P1:01:04)。
- 确认 “Basic Settings” 中,容量自动计算为 7.276TB(RAID-5 采用分布式校验机制,可用容量 =(硬盘数量 - 1)× 单盘容量,即 2×3.637TB=7.276TB)。

- 移动光标至 “OK” 选项,回车确认。
- 按 ESC 键返回 PRAID 主配置页面,再次按 ESC 键,屏幕弹出 “Are you sure you want to exit?” 提示框,选择 “OK” 回车退出配置界面,服务器自动重启。

然后按ESC退出
三、PVE系统安装
U盘插在服务器上,重启服务器,按F11进入BIOS页面,选择U盘启动盘,回车

等待 Proxmox VE 安装界面加载完成后,点击右下角 “I agree” 按钮,同意最终用户许可协议。
- 进入 “Location and Time Zone selection”(位置与时区设置)页面:
- “Country”(国家)选择 “China”;
- “Time Zone”(时区)默认自动识别为 “Asia/Shanghai”,无需修改;
- “Keyboard Layout”(键盘布局)选择 “US English”,点击 “Next” 进入下一步。
- 进入 “Management Network Configuration”(管理网络配置)页面:
- “Management Interface”(管理接口)选择 “eno2 (igb)”(接口标识为 3c:ec:ef:9a:b1:31);
- “Hostname (FQDN)”(主机名)填写格式为 “pve1.example.invalid”;
- “IP Address (CIDR)”(IP 地址 / 子网掩码)设置为 “10.80.20.10/24”;
- “Gateway”(网关)填写 “192.168.100.1”;
- “DNS Server”(DNS 服务器)填写 “127.0.0.1”;确认配置无误后,点击 “Next”。


系统安装成功后,会提示重启服务器,此时拔掉 U 盘,等待服务器自动重启,Proxmox VE 系统部署完成。
四、服务器软件部分
4.1、服务器时间设置无效
先正确设置时区为越南
sudo timedatectl set-timezone Asia/Ho_Chi_Minh
确保当前 shell 没有 TZ 环境变量干扰
unset TZ
设置正确的本地时间(越南时间 13:01)
sudo date -s "2026-04-10 13:01:00"
此时输出应该显示 +07 时区,例如:
Fri Apr 10 13:01:00 +07 2026
将系统时间写入硬件时钟
sudo hwclock --systohc
验证时间正确性
timedatectl status
期望输出:
-
Local time:
Fri 2026-04-10 13:01:xx +07 -
Universal time:
Fri 2026-04-10 06:01:xx UTC(比本地时间少7小时) -
Time zone:
Asia/Ho_Chi_Minh (+07, +0700) -
RTC time: 应该接近 Universal time
同步时间到docker容器
# 格式:docker cp /etc/localtime <容器名或ID>:/etc/localtime
docker cp /etc/localtime your-node-red-container:/etc/localtime
五、定时备份快照
进入在宿主机的Shell里面,不是虚拟机里面

创建目录 mkdir /home/sh
创建脚本 touch back-100.sh

脚本内容如下,需要注意VMID = 100 ,这里是快照虚拟机的ID

默认只保留7天的快照记录
cat > /home/sh/snapshots.sh << 'EOF'
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# ==================== 配置区域 ====================
SNAPSHOT_PREFIX="juxin" # 快照名称前缀(实际会加下划线和日期,如 juxin_20260429_000001)
RETENTION_DAYS=7 # 保留天数
LOG_FILE="/var/log/pve-snapshot.log" # 日志文件路径
# =================================================
# 日志函数(同时输出到终端和日志文件)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
echo "$msg" | tee -a "$LOG_FILE"
}
# 清理指定 VM 的旧快照
cleanup_old_snapshots() {
local vmid=$1
log "开始清理 VM $vmid 中超过 ${RETENTION_DAYS} 天的旧快照..."
# 获取所有匹配前缀的快照名称(使用已验证的 grep -o 提取)
local snap_names
snap_names=$(qm listsnapshot "$vmid" 2>/dev/null | grep -o "${SNAPSHOT_PREFIX}_[0-9_]*")
if [ -z "$snap_names" ]; then
log "VM $vmid 未找到前缀为 '${SNAPSHOT_PREFIX}_' 的快照,无需清理"
return 0
fi
local current_epoch=$(date +%s)
local keep_before_epoch=$((current_epoch - RETENTION_DAYS * 86400))
local deleted_count=0
echo "$snap_names" | while read -r snap_name; do
# 从快照名称中提取 8 位日期(YYYYMMDD)
local snap_date=$(echo "$snap_name" | grep -oE '[0-9]{8}')
if [ -z "$snap_date" ]; then
log "警告: 快照 $snap_name 不含8位日期,跳过"
continue
fi
# 转换为时间戳
local year=${snap_date:0:4}
local month=${snap_date:4:2}
local day=${snap_date:6:2}
local snap_epoch
if ! snap_epoch=$(date -d "$year-$month-$day" +%s 2>/dev/null); then
log "警告: 快照 $snap_name 的日期 $snap_date 无效,跳过"
continue
fi
local age_days=$(( (current_epoch - snap_epoch) / 86400 ))
if [ "$snap_epoch" -lt "$keep_before_epoch" ]; then
log "发现过期快照: $snap_name (已保留 ${age_days} 天),准备删除"
if qm delsnapshot "$vmid" "$snap_name" --force >/dev/null 2>&1; then
log "成功删除: $snap_name"
((deleted_count++))
else
log "错误: 删除失败 $snap_name"
fi
else
log "保留快照: $snap_name (已保留 ${age_days} 天)"
fi
done
log "VM $vmid 旧快照清理完成,共删除 $deleted_count 个"
}
# 为指定 VM 创建新快照
create_snapshot() {
local vmid=$1
local snap_name="${SNAPSHOT_PREFIX}_$(date +%Y%m%d_%H%M%S)"
log "正在为 VM $vmid 创建快照: $snap_name"
if qm snapshot "$vmid" "$snap_name" --description "Auto backup snapshot created at $(date)" >/dev/null 2>&1; then
log "快照 $snap_name 创建成功"
return 0
else
log "错误: 快照 $snap_name 创建失败!"
return 1
fi
}
# 主函数:对每个 VM 执行创建 + 清理
main() {
if [ $# -eq 0 ]; then
echo "用法: $0 <VMID> [VMID2 ...]"
echo "示例: $0 100 101 102"
exit 1
fi
log "========== 自动快照任务开始 =========="
for vmid in "$@"; do
# 检查虚拟机是否存在
if ! qm status "$vmid" &>/dev/null; then
log "错误: 虚拟机 $vmid 不存在或无法访问,跳过"
continue
fi
log ">>> 处理 VM $vmid <<<"
# 1. 创建新快照
if create_snapshot "$vmid"; then
# 2. 删除旧快照(仅在创建成功后才清理,避免因创建失败误删)
cleanup_old_snapshots "$vmid"
else
log "警告: VM $vmid 快照创建失败,跳过清理步骤"
fi
echo "" # 空行分隔不同 VM 的日志
done
log "========== 自动快照任务结束 =========="
}
# 执行主函数,传入所有命令行参数
main "$@"
EOF
chmod 777 /home/sh/snapshots.sh
crontab -e 加入定时任务
# m h dom mon dow command
0 0 * * * /home/sh/snapshots.sh 100
10 0 * * * /home/sh/snapshots.sh 101
20 0 * * * /home/sh/snapshots.sh 102
观察几天,查看快照这里,能看到记录

六、备份虚拟机到nas服务器
1、虚拟机备份
选中虚拟机 -- Backup -- 选择Backup now 等待备份结束

INFO: Include disk 'scsi0' 'local-lvm:vm-101-disk-0' 200G
INFO: backup mode: snapshot
INFO: ionice priority: 7
INFO: creating vzdump archive '/var/lib/vz/dump/vzdump-qemu-101-2026_06_24-16_13_08.vma.zst'
INFO: started backup task 'f0d9aa53-c5d8-4932-90bb-6140c9c8cda2'
INFO: resuming VM again
INFO: 5% (10.9 GiB of 200.0 GiB) in 3s, read: 3.6 GiB/s, write: 114.2 MiB/s
2、上传备份文件到NAS文件服务器
* 虚拟机备份结束时,会提示导出目录 /var/lib/vz/dump/****.zst
* 选择虚拟机pve1 -- shell -- cd /var/lib/vz/dump/
ls -la 查看备份的文件

2.1、注释企业源
# 注释企业源
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/ceph.list
# 添加免费社区源
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
# 导入密钥
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
# 更新源
apt update
2.2、安装cifs
apt install cifs-utils -y

2.3、上传虚拟机备份文件
# 创建挂载目录
mkdir -p /mnt/nas_backup
# 临时挂载 NAS(重启失效)
mount -t cifs //192.168.1.42/ActiveBackupforBusiness/vmk /mnt/nas_backup -o
username=vnhftd,password=Vnhf2026,vers=3.0,iocharset=utf8
执行命令结束以后,验证是否挂载成功
在nas文件服务器的/ActiveBackupforBusiness/vmk目录下创建一个记事本

查看/mnt/nas_backup/下是否也同步了这个记事本

拷贝虚拟机镜像到共享目录下
root@pve1:/mnt/nas_backup# cp /var/lib/vz/dump/vzdump-qemu-101-2026_06_24-16_13_08.vma.zst /mnt/nas_backup/

等待命令执行结束,到nas文件服务器上查看

2.4、上传镜像文件到NAS服务
界面里 local(pve1) → ISO Images 对应的真实目录 /var/lib/vz/template/iso/

cp CentOS-7-x86_64-Minimal-2009.iso /mnt/nas_backup/
等待执行结束,去NAS服务器上查看

3、从NAS文件服务器上下载备份的虚拟机文件
和2.2 上传备份文件到NAS文件服务器的步骤一致
区别是
root@pve1:/mnt/nas_backup# cp /mnt/nas_backup/vzdump-qemu-101-2026_06_24-16_13_08.vma.zst /var/lib/vz/dump/
反过来,从NAS共享目录拷贝到pve备份虚拟机的目录!!!
从local(vm)可以看到备份的文件,然后还原虚拟机即可

七、越南服务器问题总结
1、PVE宿主机禁用更新

-
systemctl disable --now pve-daily-update.timer
2、服务器一关机系统就崩溃
- 先手动停 InfluxDB:
systemctl stop influxdb - 实时看日志
journalctl -u influxdb -f,出现shutdown complete再执关机,要给缓存数据预留固化时间; - 不要备份虚拟机,会加剧问题,高I/O读写
* 必须安装 QEMU Guest Agent,防止虚拟机关机被 PVE 误判超时强制杀掉(关键)启用QEMU Guest Agent
虚拟机内部安装qemu-guest
# 清理旧缓存
yum clean all && yum makecache
# 正确完整包名安装
yum install qemu-guest-agent -y
# 开机自启并立刻运行
systemctl enable --now qemu-guest-agent
# 查看运行状态,必须显示 active (running)
systemctl status qemu-guest-agent
- 磁盘缓存改为DirectSync:绕过宿主机内存缓存,每次写入直接落盘,不管 Windows 还是 Linux,断电安全性拉平;


- Linux 挂载分区加上
barrier=1参数,强制开启写入屏障,避免文件系统元数据错乱; - InfluxDB 缩短 WAL 日志刷盘间隔( /etc/influxdb/influxdb.conf),不要海量数据堆内存;
[data]
# 将 0s 改为 1s 或 100ms
# 推荐值:1s (对于大多数工业数采场景足够,能降低 90% 以上的 fsync 次数)
# 如果数采频率极高(如毫秒级),可改为 100ms 或 500ms
wal-fsync-delay = "1s"
# 配合调整:适当增大内存缓存,减少落盘频率
# 默认通常是 1GB,如果物理机内存充足(如 8G/16G),可设为 2GB
cache-max-memory-size = "512m"
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)