最近好几个朋友都在折腾PVE问得最多的就是Proxmox VE上到底怎么装一个干净的Ubuntu Server。这个需求太典型了手里一台小主机或者服务器刷好PVE做底层虚拟化然后想在上面开几个Linux虚拟机跑服务、搞实验、搭轻量的home lab环境。系统选择上Ubuntu Server是很多人的首选生态好、资料多、后面跑Docker、K8s都很顺手。这篇文章我把完整流程写出来从ISO准备、虚拟机创建到系统安装、Guest Agent集成再到装完之后的性能微调和常见翻车点。刚接触PVE的新手可以直接照着做装过但被各种细节坑困扰的老手也能看看有没有漏掉什么关键步骤。1. 安装前准备版本选型与镜像上传1.1 PVE和Ubuntu Server的版本搭配先说底层。Proxmox VE目前主流是8.x系列底层基于Debian 12自带6.x内核对Ubuntu的KVM虚拟化支持非常成熟。如果你的PVE还是7.x甚至6.x也不是不能用但建议尽量升级到8.x因为新版对UEFI引导、VirtIO设备、以及新硬件的兼容性都更好。Ubuntu Server这边我推荐直接用24.04 LTS或者22.04 LTS这类长期支持版本。LTS版本有5年标准支持如果开通扩展还能更久生产环境稳定压倒一切。普通用户可能觉得非LTS版本内核新、功能多但服务器虚拟机讲究的是少折腾LTS足够应对绝大多数场景。选好了系统还要确认PVE宿主机本身开启了硬件虚拟化。一般BIOS里打开Intel VT-x或AMD-V即可。可以用命令检查pveversion -v grep -E -c (vmx|svm) /proc/cpuinfo第二个命令如果输出大于0说明CPU虚拟化已经开启。如果输出是0就得先去宿主机的BIOS里把虚拟化打开不然后面创建虚拟机时会卡在启动阶段性能也会很难看。1.2 镜像下载、校验与上传Ubuntu Server的安装镜像在官网可以直接下载选择“Server install ISO”版本。文件名类似这种格式ubuntu-24.04.2-live-server-amd64.iso下载完成后第一件事是校验完整性。官方页面会同时给出SHA256校验值在Linux终端里执行sha256sum ubuntu-24.04.2-live-server-amd64.iso把输出结果和官网的值逐字符核对。这一步看似多余但很实用。如果镜像下载到一半断了、从第三方站点拉取被篡改过校验值对不上后面装系统大概率会中途报错甚至安装成功却带病运行。镜像上传到PVE有两个常用途径第一种Web界面操作。在管理后台选择“local”存储进入“ISO镜像”页面点“上传”选择本地文件即可。这种方式适合一次性上传速度取决于你浏览器到PVE主机的网络。第二种命令行方式。把镜像文件放到PVE宿主机上的ISO目录然后用一条命令远程拉取。ISO默认目录通常是/var/lib/vz/template/iso用wget直接下载到该目录也行wget -P /var/lib/vz/template/iso https://example.com/ubuntu-24.04.2-live-server-amd64.iso这里我建议把ISO放在PVE本地存储上。如果放在外置NAS或共享存储上一方面安装时读镜像要走网络另一方面万一存储服务有抖动安装过程也会被拖累。对单机实验环境来说本地存储永远是最稳的选择。1.3 网络模式桥接还是NATPVE安装完成后默认会创建一个名为vmbr0的Linux桥接设备物理网卡直接桥接进来。新建虚拟机时默认网络模型会挂到vmbr0上也就是说虚拟机默认走桥接模式直接和局域网其他设备处于同一个二层网络行为就像一台独立的物理机。这个模式最适合绝大多数home lab和开发测试场景。虚拟机可以被路由器正常分配IP也可以从外部直接SSH访问不需要额外做端口转发。如果你只是自己用没有特殊隔离需求强烈建议直接选vmbr0。另一种常见方案是NAT模式PVE宿主机做网关虚拟机走独立的内部网段。这种模式适合需要隔离、不想让虚拟机直接暴露在局域网里的场景。NAT模式下你需要手动创建桥接接口再配合iptables做IP转发和SNAT配置复杂度高一些。我个人建议新手不要一上来就折腾NAT先跑通桥接再说。2. 创建虚拟机关键参数一次看懂2.1 新建虚拟机向导怎么选在PVE管理后台点击右上角“创建虚拟机”会进入向导。大致流程是VM ID、名称、ISO、系统类型、磁盘、CPU、内存、网络、确认。VM ID随便填只要不重复就行。名称建议见名知意比如“ubuntu-srv-01”方便以后维护。ISO镜像选择你上传好的Ubuntu Server安装镜像。系统OS一栏里有个“机型”选项默认一般是i440fx也可以选q35。q35更现代支持PCIe直通等高级特性兼容性也没问题。BIOS选项有两个选择SeaBIOS和OVMFUEFI。这里我给出一个实际经验如果你图省事用默认的SeaBIOS就好。Ubuntu Server在SeaBIOS下安装、引导都非常顺畅不需要额外创建EFI磁盘。如果你选OVMF则必须再添加一个“EFI磁盘”才能启动多一个步骤对普通虚拟机而言收益并不大。只有当你想启用Secure Boot或者虚拟机里跑的系统强依赖UEFI时再去选OVMF。提示如果选了OVMF但不添加EFI磁盘启动时会卡在找不到引导设备的状态屏幕直接黑在那里很容易误以为ISO坏了。2.2 CPU、内存和硬盘分配CPU一栏“核心数”按需分配我建议至少2核起步。“类别”这里容易被忽略默认可能是kvm64这个务必改成host。所谓kvm64是QEMU提供的一个最保守的CPU型号只包含最基本的x86-64指令集很多新指令如SSE4.2、AVX等都没有。实际表现就像一双均码鞋谁都能穿但谁穿都不跟脚。选host则把宿主机CPU的特性直接暴露给虚拟机性能和兼容性都会好很多。磁盘一栏总线选择VirtIO。Ubuntu的内核自带VirtIO驱动不需要额外装驱动性能比模拟SATA好得多。磁盘大小如果只是跑个服务、做点实验给32GB也够用但如果你打算装Docker、跑一堆容器我建议至少50GB起步。磁盘也可以勾选“Discard”对应TRIM功能之后虚拟机内删除文件时能通知宿主机释放底层空间避免磁盘文件越涨越大。内存方面Ubuntu Server图形化安装程序本身吃内存不大但安装完跑服务后2GB是底线4GB是舒服起步如果计划跑编译、数据库这类吃内存的应用直接给8GB。2.3 网络模型和启动顺序网络一栏模型选VirtIO半虚拟化性能是最好的。Ubuntu Server安装镜像会直接加载virtio-net驱动不用担心没驱动的问题。桥接选vmbr0就是上一节说的默认桥接模式。还要检查“确认”页里的“启动顺序”。默认会优先从CD-ROM启动安装镜像挂在虚拟光驱里这个没问题。等系统装完以后启动顺序应该保持CD-ROM在先否则某些情况下重启会重新进入安装界面。不过通常PVE检测到光驱里的ISO还在会优先引导安装程序所以装完系统后建议拔掉ISO或调整启动顺序这一步可以提前在确认页看一眼。3. Ubuntu Server系统安装过程实录3.1 安装引导和初始配置点击“启动”进入虚拟机控制台会显示Ubuntu的GRUB引导菜单。选择“Install Ubuntu Server”回车。第一屏会让你选语言。服务器系统建议直接选English原因是服务器文档、命令、日志绝大多数都是英文中文环境容易遇到编码和字符集问题出了问题搜资料也不方便。键盘布局默认即可除非你用特殊键盘。接着安装器会开始初始化网络如果PVE的桥接网络里有DHCP服务器这一步会自动拿到IP。可以看到一个类似“ens18”的网卡名称IP地址会自动显示出来。如果你需要静态IP选择该网卡进入编辑手动设置IP地址、网关和DNS。举个例子地址: 192.168.1.100/24 网关: 192.168.1.1 DNS: 192.168.1.1这里注意PVE的虚拟机网卡名通常是ens18或类似编号不是eth0至于你机器上显示什么名字以实际界面为准。3.2 软件源和代理设置安装器会询问“配置代理”如果你的网络不需要代理直接留空继续。这一步很多人在内网环境会纠结其实内网不经过代理就留空很直接。随后进入Ubuntu归档镜像源配置。默认是官方源在国内环境下下载软件包的速度可能很慢。你可以换用国内可访问的镜像源。这里有个容易出错的地方不同版本代号不同比如24.04代号是noble22.04是jammy。配置镜像源时一定要选和你安装版本一致的代号。如果在安装界面这里频繁报错大概率就是网络到默认源不通换个可用源就能解决。3.3 分区方案直接整盘还是LVM接下来是存储配置。对于虚拟机上安装Ubuntu Server大多数情况可以选择“Use An Entire Disk”也就是使用整块虚拟磁盘。安装器会询问是否启用LVM。LVM的好处是方便后期扩展逻辑卷如果你打算在这台虚拟机上长期使用建议开启。LVM组大小会让设置一个上限默认是使用整块磁盘直接默认就好。如果你不想搞复杂选择不使用LVM直接ext4分区也行。分区布局我建议默认即可。安装器会自动创建/boot/efi、/ 和swap分区。如果手动分区一个合理的服务器方案是系统盘50GB起步swap给4GB其余空间留给数据目录。但虚拟机场景下我更倾向把全部空间交给根分区后续按需创建新磁盘挂载灵活度反而更高。提示虚拟机磁盘在PVE里是稀疏文件时分区并不会立刻占满宿主机空间。但安装系统时会有大量写入宿主机实际磁盘占用会明显增长这是正常现象不用担心。3.4 用户创建、SSH和最终安装安装器会让你设置主机名、用户名和密码。主机名建议提前想好比如“u20-dev”后面改起来要额外操作。这一步可以导入SSH公钥。如果你平时SSH连接已经用密钥登录强烈建议现在就把public key粘进去。这样装完系统之后直接从宿主机或电脑上用SSH密钥登录密码登录可以后续关掉安全指数提高一大截。“安装OpenSSH服务器”这个选项要勾选上否则装完系统后没有任何远程登录手段只能在PVE网页控制台里操作体验很差。之后安装器会进入正式安装阶段从镜像里解包、写入文件系统、安装GRUB引导。此时可以泡杯茶等一等。完成后会提示“现在重新启动”。重启时记得回到PVE界面把虚拟光驱里的ISO卸载避免再次进入安装程序。3.5 登录后的第一件事重启完成后控制台或者SSH连接到新机器。第一次登录先做几个基础检查和更新ip a apt update apt upgrade -y cat /etc/os-release uname -r确认IP地址符合预期、系统更新完成、内核版本正常。看到这里一台裸的Ubuntu Server已经跑起来了。4. 装完系统后的PVE集成与优化4.1 安装QEMU Guest Agent很多新手装完Ubuntu Server就以为万事大吉实际上漏了一个很重要的步骤安装QEMU Guest Agent。Guest Agent的作用是让PVE宿主机和虚拟机能互相通信。装上之后PVE管理界面可以显示虚拟机内部的IP地址、内存使用情况还能执行优雅关机、快照前冻结文件系统。安装命令非常简单apt install -y qemu-guest-agent systemctl enable --now qemu-guest-agent然后在PVE的虚拟机“选项”里把“QEMU代理”这一项启用。等虚拟机重启一次管理界面就会显示客户机IP等信息。这一步我建议所有PVE虚拟机都做尤其是创建快照或备份时有Guest Agent参与快照的一致性会好很多。没有它快照只能保证磁盘层面一致无法确保文件系统层面干净。4.2 把系统转成模板后续克隆起飞如果你打算以后经常创建Ubuntu Server虚拟机可以趁现在系统干净直接把它转成模板。模板本质上是一台只读虚拟机之后可以从它克隆出多台实例省去每次手动安装系统的时间。转模板前需要先在虚拟机内部做一次“净化”sudo apt clean sudo truncate -s 0 /etc/machine-id sudo rm -f /var/log/*.log sudo rm -rf /var/lib/dhcp/*然后关机在PVE界面右键虚拟机“转换为模板”。之后“克隆”时选择“完整克隆”或“链接克隆”。完整克隆空间占用大但不依赖母本链接克隆创建快共享底层数据适合大量临时测试环境。克隆出来的机器要记得改主机名和IP避免和内网其他设备冲突。4.3 网络多队列与磁盘IO调优装完系统后性能上限主要看三处CPU类型、网卡队列、磁盘IO。CPU类型在创建虚拟机时已经建议选host这里不再重复。网络方面VirtIO网卡默认只有单队列多核虚拟机上高并发网络会存在瓶颈。可以在虚拟机内手动开启多队列ethtool -L eth0 combined 4这里的数字根据虚拟机的CPU核数设置一般是2或4。注意这个设置重启后会失效需要写成开机服务或者用持久化配置工具。如果你只是常规使用不搞大规模网络吞吐这条可以跳过影响不大。磁盘方面PVE支持开启IO Thread让磁盘请求用单独线程处理。在虚拟机的“硬件”里选择磁盘点编辑把“IO线程”打开。另外如果宿主机用的是SSD可以在虚拟机磁盘的“SSD仿真”选项勾上。之后在虚拟机内启用定期TRIMsystemctl enable fstrim.timer --now这一步能防止虚拟机删除文件后宿主机上的磁盘镜像不断膨胀。特别是做快照和克隆比较多的场景效果很明显。5. 常见问题排查与避坑指南5.1 安装界面进不去或黑屏最常见的原因有三类第一ISO镜像没传完整。校验一下SHA256比对不一致就重新上传。第二启动顺序不对。虚拟机的启动顺序如果第一项不是CD-ROM就可能直接从空硬盘启动表现为黑屏无反应。进“硬件”检查光驱设备是否存在确认ISO还挂载着。第三用了OVMF但没有EFI磁盘。检查虚拟机“硬件”里是否多了一个EFI磁盘。没有这个磁盘UEFI模式启动不了。最简单的方案是改成SeaBIOS。5.2 装完系统之后无法访问网络这种情况优先按顺序排查在PVE界面的虚拟机“硬件”里看网络设备的模型是不是VirtIO。如果不是就改过来。进入虚拟机内部编辑netplan配置sudo vim /etc/netplan/00-installer-config.yaml看看有没有eth0或ens18的配置网关和DNS是否正确。PVE的桥接模式下网关就是局域网网关不需要指向PVE宿主机IP。如果配置都对但还上不了网回PVE宿主机检查桥接设备的对应关系用命令cat /etc/network/interfaces ip a确认vmbr0绑定的物理网卡是不是你实际使用的网口。很多N合1软路由小主机有多个网口物理网线插在eth0上PVE默认却把eth1桥进了vmbr0那肯定不通。5.3 克隆虚拟机后主机名重复或IP冲突从模板克隆出来的机器默认会带着母机的机器ID、主机名和网卡租约。如果直接开机很可能出现两台机器同名、同IP的混乱问题。解决方案每次克隆完成后登录机器修改主机名和IP。尤其是机器ID建议重新生成sudo rm -f /etc/machine-id sudo systemd-machine-id-setup如果不处理这个某些依赖机器ID的程序比如系统日志、某些授权软件会出现诡异问题。更彻底的做法是用cloud-init预配置模板PVE对cloud-init的集成很成熟可以自动注入主机名、SSH密钥和IP但这部分内容展开讲又是一篇长文这里只提醒一句。5.4 快照删除后宿主机磁盘空间没释放这是很多用PVE的人踩过的坑。删除快照理论上方块数据应该合并回基础镜像但合并过程不一定立即完成而且如果虚拟机内部删除过大量文件快照里仍然保留着旧的数据块。就导致快照删了空间也没少多少。所以要养成两个习惯一是虚拟机内开启Discard并定期执行fstrim二是删除快照后观察PVE任务日志等“merge”完成再继续做其他操作。如果多次快照叠加导致空间爆炸最简单粗暴的办法是删除所有快照、执行一次trim然后做一次备份恢复。5.5 系统卡顿、性能不达预期装了Ubuntu Server后觉得卡优先看三个地方。第一CPU类型是不是host。kvm64模式跑出来的虚拟机编个程序能慢到怀疑人生。第二内存是不是开了Ballooning。PVE默认启用了内存气球宿主机内存紧张时会回收虚拟机的内存造成卡顿。如果这台虚拟机是常驻服务可以在“选项”里关掉Ballooning给足固定内存。第三磁盘是不是模拟成了IDE或SATA。如果创建时没有选VirtIO磁盘IO性能会差很多。修改磁盘总线类型需要谨慎可能会影响引导建议创建时一步到位。收尾前再分享一点个人习惯这套PVE加Ubuntu Server的流程我前前后后装了几十次现在自己最顺手的做法是手动安装一台干净的Ubuntu Server立刻转模板后续所有新虚拟机全部从模板克隆再通过cloud-init注入IP和主机名。整个流程从创建到登录不超过五分钟极其省心。还有一个小心得是每次刚装完系统、还没开始改装任何服务之前先在PVE里做一次快照。这个干净快照就是你的“后悔药”后面无论你折腾坏了什么都能一键回到最原始状态。PVE的快照不是万能但在这个场景下它的性价比几乎是最高的了。