几年前第一次装 PVE,我把它想得太简单了:下载 ISO、写进 U 盘、一路下一步、重启,然后浏览器里敲 IP——结果页面转圈转到凌晨两点。后来在不同硬件上反复装过十几遍才明白,PVE 7.2-1 这套安装流程表面上只有七八个界面,真正决定后面顺不顺手的,是开装前那十几分钟的准备和装完后的二十分钟收尾。这篇就把从拿到 ISO 到第一台虚拟机跑起来的整条链路摊开讲一遍,中间那些装完才会暴露、官方文档写得很客气但实际会卡人的细节,我都会单独标出来。不管你手里是一台淘汰的办公机、一台二手服务器,还是一台迷你主机,思路都是通用的。看完至少能确定三件事:硬件够不够跑、文件系统选哪个、装完先动哪几个文件。
1. 开装前的三个决定:版本、硬件、启动盘
1.1 7.2-1 这个版本到底是个什么组合
先把版本号拆开说清楚。PVE 7.2-1 里的 "7.2" 是 Proxmox VE 的大版本号,"-1" 是安装镜像的修订号,底层是 Debian 11(Bullseye),装完默认跑的是 5.15 系列的 LTS 内核,QEMU 和 LXC 的版本也都跟这个内核世代对齐。这套组合的意义在于:它的硬件兼容面非常宽,2010 年前后的一批服务器和工作站基本都能跑起来,驱动也都进主线了,不用折腾。
这一点很关键。更晚的大版本对 CPU 指令集提了额外要求,一些老处理器会在引导阶段直接卡住或者被安装程序礼貌拒绝,而 7.x 这一代对老硬件相当宽容。我手上那台用 DDR3 的老机器,装新版本连引导菜单都过不去,回到 7.2-1 就一点问题没有。所以如果你手里的硬件是二手的、机龄超过八年的,7.2-1 反而是更省心的选择,不是"落后",是"匹配"。
另一个值得知道的点:7.2 这一版开始把 Btrfs 作为根文件系统的选项放进安装程序,同时配的是 ZFS 2.1,带了 dRAID 这种面向大容量盘位的冗余方案。这些功能大部分人用不上,但知道它们存在,在你后面翻安装界面看到多出来的几个选项时就不会一脸茫然。
最后说内存。官方给的最低要求看起来很友好,但那是"能启动"的线,不是"能用"的线。我的经验值是:纯宿主机不跑虚机,8GB 起步;每台轻量 Linux 虚机按 1~2GB 预留;如果根文件系统选 ZFS,还要额外给 ARC 缓存留出至少 2~4GB,这部分内存是 ZFS 自己拿走的,不会出现在free的第一列里,很容易被误判成"内存莫名其妙没了"。16GB 是我比较推荐的舒适起点。
1.2 BIOS 里那几个必须提前打开的开关
这一步是新手最容易漏的,因为漏掉之后不会立刻报错,而是在你几个月后想做个直通时才发现要重启进 BIOS。既然都要装机了,不如一次开完。
| 开关名称 | Intel 平台叫法 | AMD 平台叫法 | 不开的后果 |
|---|---|---|---|
| 硬件虚拟化 | VT-x / Virtualization Technology | SVM Mode | 虚机起不来或性能极差 |
| IOMMU | VT-d | AMD-Vi / IOMMU | 无法做 PCI 直通 |
| SR-IOV | SR-IOV Support | SR-IOV Support | 网卡虚拟化功能用不了 |
| 大地址解码 | Above 4G Decoding | Above 4G Decoding | 多张大显存卡时资源分配失败 |
这几个开关的位置各家 BIOS 不一样,一般藏在 CPU 配置或者高级芯片组菜单里。开机时按 Del 或 F2 进去,找带 Virtualization、IOMMU 字样的项,能开的都打开。有个细节值得提醒:部分品牌机(尤其是某些商用台式机)的 BIOS 里硬件虚拟化默认是关的,而且菜单藏得很深,需要先设一个 BIOS 管理员密码才能解锁高级选项。如果你找不到,先搜一下你这台机器的型号加"开启虚拟化的方法",别在这上面耗时间。
引导模式也得顺手定下来:UEFI 还是 Legacy BIOS。PVE 7 两种都支持,选哪种主要看后面要不要跟别的系统共盘。如果打算独占整块盘,UEFI 更现代一些;如果是老机器、老阵列卡,Legacy 兼容性更稳。定了就别中途改,改了之后引导项会全部错位。
1.3 启动盘怎么做才不会白折腾
U 盘制作这一步看起来最没技术含量,实际上翻车率不低。三条路,各有各的适用场景。
- dd 或者 balenaEtcher 这类直接写镜像的:最原始也最稳,把 ISO 原样写进去,不经过任何中间层。缺点是写完之后 U 盘在 Windows 里会显示成一个很小的分区,看着像坏了,其实是正常的,重新格式化就恢复。
- Rufus:Windows 下最常用。这里有个必须注意的点——模式一定要选 DD 模式(或者叫"以 DD 镜像模式写入")。默认的 ISO 模式会自己解包、改引导结构,对一部分 Linux 发行版会写出一个能进菜单但装到一半报"找不到安装介质"的盘。我见过太多人卡在这里还以为是 ISO 下坏了。
- Ventoy:一个盘塞多个 ISO,开机选一个启动就行,特别适合经常折腾不同系统的人。代价是它引入了一层自己的引导逻辑,个别主板和它配合会有小毛病,比如需要关掉安全启动才能识别。你要是只装一次 PVE,不用为它折腾。
不管用哪种方式,ISO 下载完之后先校验一遍哈希再说。下载页上一般会给出 SHA256,Linux 下sha256sum一下,Windows 下用certutil -hashfile 文件名 SHA256。这一步花十秒,能排除掉后面一小时的各种诡异故障。U 盘本身尽量用 USB 3.0 的、容量 2GB 以上,杂牌扩容盘是隐藏杀手,会写出一个文件长度对但内容错的镜像,症状和 ISO 损坏一模一样。
2. 安装向导逐屏拆解:每一屏选错会有什么后果
2.1 引导菜单和 Advanced Options 里有什么
U 盘插上,BIOS 里把它设为第一启动项,保存重启,第一眼看到的是 PVE 的引导菜单。主选项就两个:Install (Graphical)和Install (Console)。绝大多数情况选图形界面那个,有鼠标、有颜色,看得清。
但这里有个坑:如果是真正的服务器,显示芯片往往是主板集成的低端显卡,图形模式在这个环境下有可能黑屏或者花屏。遇到这种情况不要慌,直接把 U 盘拔了重来,选Install (Console),纯文本界面照样能装完,功能一点不少。
Advanced Options展开后主要有三项:
Install with Debug Mode:安装过程会打印一堆调试信息,卡住时能看它到底停在哪一步。正常安装用不上,出问题时是救命稻草。Boot from first hard disk:跳过安装,直接从硬盘启动。装完之后 U 盘忘了拔,用它绕过就行。Rescue Boot:救援模式,进一个临时系统,可以挂载修复已安装的 PVE。
顺便说说 UEFI 和 Legacy 的差别。如果你 BIOS 设的是 UEFI 引导,这里启动项名字后面一般带 "UEFI" 字样;反之则是普通项。选错了不一定报错,但后面硬盘分区方式会跟着变,所以启动前先确认一下自己 BIOS 设的到底是什么模式。
2.2 磁盘和文件系统:ext4、XFS、ZFS、Btrfs 怎么选
这是整个安装流程里唯一一个"选错了后面很难改"的决定。安装程序会让你勾选目标磁盘,然后从下面几种里选一个。
| 文件系统 | 适合场景 | 优点 | 代价 |
|---|---|---|---|
| ext4 + LVM | 单盘、硬件 RAID 卡 | 兼容性最好,什么盘都能上 | 无软件冗余 |
| XFS | 有大文件读写需求 | 大文件性能好、成熟 | 不能缩小 |
| ZFS | 无阵列卡、想软件组阵列 | 校验、快照、压缩、RAIDZ | 吃内存,写放大 |
| Btrfs | 尝鲜 | 快照灵活 | 7.2 里还是技术预览 |
展开说几句。ext4 + LVM 是默认选项,也是最不容易出事的一个。它的逻辑是:安装程序在你的盘上建一个 LVM 卷组(名字叫pve),里面再切出 root、swap 和一个叫data的 thin pool,虚机磁盘从 thin pool 里划。单盘或者你已经有硬件 RAID 卡做了冗余,选它就行。
ZFS 的吸引力在于不需要阵列卡就能组软件 RAID。它能建 RAID0、RAID1、RAID10,还有 RAIDZ-1/2/3,分别对应能容忍一到三块盘损坏。这里有个流传很广的误解:ZFS 必须配 ECC 内存。准确的说法是——ECC 内存能让 ZFS 的数据完整性优势发挥到最大,但普通内存照样能跑,没必要因为不是 ECC 就放弃 ZFS。真正要注意的是两块:一是 ARC 会占用内存,装完之后要去改zfs_arc_max;二是 RAIDZ 的写放大比较明显,用机械盘跑 RAIDZ 的虚拟机体感会很差,能用 SSD 就用 SSD。
Btrfs 从 7.2 开始出现在选项里,但标的是技术预览,我个人的态度是:除非你有明确的理由和足够的时间折腾,否则别在主力环境上用它。
还有一个安装程序不会大声提醒你的点:swap 分区的大小默认按物理内存来定。内存越大,swap 占的空间越多。32GB 内存的机器,装完会发现一大块盘被 swap 吃掉了。如果你后面打算关换页,这部分空间白扔,可以考虑在安装后手动调整,或者干脆重装时换一种分区方案。我一般会在装之前就想清楚这件事,省得后面再动。
2.3 网络配置页:四个字段填错的表现
这一屏是整个安装过程里信息密度最高的地方,也是装完之后最常回来改的地方。四个字段:主机名、IP 地址、网关、DNS 服务器。
主机名必须是带点的完整格式。不是pve01,而是pve01.lan或者pve01.local这种。只写短名字装是能装下去,但后面集群、邮件通知、证书生成都会出问题。装完想去改的话,得同时动三个文件:/etc/hostname、/etc/hosts和/etc/network/interfaces,三处不一致就会出现"能 ping 通但 web 界面登录失败"这种莫名其妙的现象。
IP 地址要带掩码长度,也就是 CIDR 写法,比如192.168.1.10/24。只填192.168.1.10会提示格式不对。这里必须填静态地址,安装程序不接受 DHCP——因为 PVE 是宿主系统,地址漂移会让管理界面直接失联。
网关就是你路由器的地址,DNS 填路由器地址或者公共 DNS 都行。有个小技巧:如果你所在的网络有多个网段,DNS 这一栏填两个会更好,中间用空格分开即可。
这四点里最容易出问题的是IP 冲突。安装程序不会去检测这个地址是不是已经被占用,它会很痛快地装完,然后你发现管理界面时好时坏,或者干脆打不开。装之前先在现有网络里 ping 一下你准备用的地址,返回"无法访问目标主机"才说明是空的。这一步十秒钟,能省掉半小时的怀疑人生。
2.4 进度条走完之后的那两分钟
安装过程本身没什么可说的,复制文件、配置引导,进度条走完提示重启。这时候有两件小事必须做:
第一,把 U 盘拔掉,或者进 BIOS 把启动顺序改回硬盘优先。否则重启之后又进了安装菜单,会让人产生"是不是没装上"的错觉。
第二,第一次访问管理界面的地址是https://你的IP:8006。三个细节:必须写https不是http;端口是8006不是80;浏览器会弹安全警告,因为用的是自签证书,点"继续访问"即可,不要试图去"修复"它。
登录页上有个容易搞混的地方:用户名那个框里,root后面跟着一个域的下拉。root@pam走的是 Linux 系统密码,也就是你安装时设的那个;另一个是给外部认证源用的,单机环境用不上。选默认的那个就行。
3. 首次登录之后的四步收尾
3.1 换源:企业源、无订阅源与国内镜像
登进去之后第一件事,很多人会去点更新,然后发现apt update直接报 401 未授权。原因很简单:安装程序默认写进去的是企业源,它只对购买了订阅的机器开放。没订阅不是不能用,只是要把源换成免费的那个。
三个文件要处理。第一个是企业源,直接注释掉:
# /etc/apt/sources.list.d/pve-enterprise.list # deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise第二个是 Debian 系统源,换成国内镜像速度会快很多:
# /etc/apt/sources.list deb https://mirrors.tuna.tsinghua.edu.cn/debian bullseye main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian bullseye-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free第三个是 PVE 自己的免费源,新建一个文件:
# /etc/apt/sources.list.d/pve-no-sub.list deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription另外,如果你不打算用分布式存储,/etc/apt/sources.list.d/ceph.list这个文件里的内容也一并注释掉,否则每次更新都会因为连不上那个源而卡住。
改完执行:
apt update apt dist-upgrade -y这里插一句经验:先改源再更新,别反过来。我见过有人先apt update失败,然后开始怀疑网络、怀疑 DNS、怀疑镜像坏了,其实只是源没换。看到 401、403 这类错误,第一反应应该去看sources.list.d里那几个文件。
dist-upgrade和普通upgrade的区别在于它会处理依赖关系的变化,该装的装、该删的删。PVE 这种内核和底层组件耦合比较紧的系统,用dist-upgrade更稳妥。
3.2 swap 关不关,得看你用的什么文件系统
关于关 swap 这件事,网上说法很分裂。先把原理讲清楚:PVE 有个特性,会把虚拟机里长时间不访问的内存页换出到宿主机的 swap 里,这在内存吃紧时能提高超配比。所以 swap 对 PVE 来说不完全是废的。
但用 ZFS 做根文件系统的时候情况特殊。ZFS 和 swap 叠在一起,在一些高负载场景下会出问题,而且 ZFS 本身就有 ARC 在做内存缓存,两套机制容易打架。所以社区里 ZFS + 关 swap 的组合非常常见。如果是 LVM + ext4,swap 就是普通 swap,风险小得多。
判断标准可以简单一点:内存 32GB 以上、又用 ZFS 的,可以关;内存紧张、还想多跑几台虚机的,留着。折中方案是保留 swap 但降低使用倾向:
# /etc/sysctl.d/99-swap.conf vm.swappiness = 10真要关的话,操作不复杂:
swapoff -a # 然后编辑 /etc/fstab,注释掉含 swap 的那一行或者干脆把那个逻辑卷删了,把空间还给存储池:lvremove /dev/pve/swap。注意这一步不可逆,删之前想清楚。关掉之后free -h里 swap 那一行会变成 0,这是正常的。
还有个细节:安装时 swap 默认按内存大小创建,内存越大的机器被占的地方越多。所以我前面才建议装之前就想清楚,而不是装完再回来收拾。
3.3 内核更新、CPU 微码与重启验证
换完源更新完,有几个东西值得确认一下。
内核。PVE 的内核包叫pve-kernel-*,升级时会装上新的,但老内核会保留。uname -r看的是当前运行的,不是最新的。所以更新完之后必须重启才能生效,别以为apt跑完就完事了。重启完再uname -r对一下,数字变了才说明升级成功。
CPU 微码。Intel 平台装intel-microcode,AMD 平台装amd64-microcode。这东西修的是 CPU 层面的硬件缺陷,尤其是那几年闹得很大的侧信道问题,装了对稳定性和安全性都有好处。装完之后同样需要重启。
ZFS 模块编译。如果你用了 ZFS,内核升级之后第一次重启可能会看到 ZFS 模块重新编译的过程,这是正常的,编译完成前存储是挂不上的,耐心等。这也是我不建议在远程无人值守的情况下跑内核升级的原因——万一编译失败,机器重启后起不来,你只能现场处理。
顺手把时间校准也看一眼。timedatectl能看到当前时区和同步状态。时间不准在单机环境里只是日志看着别扭,但一旦涉及快照时间戳、集群通信,就会变成真问题。国内环境把时区设成Asia/Shanghai即可。
3.4 订阅提示的处理与基础安全设定
每次登录会弹一个订阅提示。它纯粹是界面层的对话框,不影响任何功能。自用环境嫌烦可以处理掉,改的是 web 组件里的一个判断条件:
sed -i.bak "s/data.status !== 'Active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js systemctl restart pveproxy必须说明两点:一是这个改动每次升级 web 相关组件后都可能被覆盖,需要重新执行;二是官方并不鼓励这么做,商业环境请老老实实买订阅,那是这个项目能持续维护下去的基础。我把它写出来只是因为很多人在自用环境里确实会被这个弹窗烦到,知道它改的是什么、风险在哪,比糊里糊涂照着教程敲要强。
安全方面几条建议,都是踩过坑的:
- 8006 管理端口不要直接暴露到公网。要远程访问,先在本地网络或者通过其他安全方式进来,别图省事做端口映射。
- root 密码设复杂一点,然后配 SSH 密钥登录。公钥放在
/root/.ssh/authorized_keys,配好之后可以关掉密码登录。 - PVE 自带的防火墙默认是关的,别急着开。它和虚机网络的关系比较绕,开着开着可能把自己的管理访问也挡了。要开之前先确认规则,最好人在机器旁边。
- 有条件的话开启两因素认证,在用户设置里能配。
4. 存储与网络这两块骨架,装完就得先摸清
4.1 三种存储模型:目录、LVM-thin、ZFS
装完之后在左侧会看到至少两个存储:local和local-lvm。这两个是完全不同的东西,很多人一直到磁盘满了才搞明白。
local是目录型存储,物理位置在/var/lib/vz。它能存的东西最多:ISO 镜像、容器模板、备份文件、虚机磁盘都可以放在这里。虚机磁盘在这里是 qcow2 格式,单文件,支持快照、支持稀疏分配。
local-lvm是 LVM-thin 块存储。它不放在文件系统里,而是直接从卷组里划块设备。虚机磁盘是 raw 格式,性能比 qcow2 好一些,因为是 thin 分配,也支持快照和克隆。代价是你没法直接进目录里看这些文件,它们以块设备的形式存在。
ZFS 存储池如果装了的话,快照和压缩是天然带的,压缩对虚机磁盘的收益其实不小,尤其里面存的文本类数据多的时候。
这里正好回答一个经常被问的问题:"vm-102-disk-0 这个文件到底在哪?"答案取决于它所在的存储类型。
| 存储类型 | 实际位置 | 查看方式 |
|---|---|---|
| 目录存储 | /var/lib/vz/images/102/vm-102-disk-0.qcow2 | 直接 ls |
| LVM-thin | /dev/pve/vm-102-disk-0(设备节点,非普通文件) | lvs看逻辑卷 |
| ZFS | rpool/data/vm-102-disk-0 | zfs list |
搞清楚这个之后,很多操作就顺了。比如给虚机磁盘做备份,LVM-thin 上的盘不能直接拷贝文件,得用qemu-img convert或者 PVE 自己的备份工具导出。
4.2 vmbr0 网桥到底桥了什么
PVE 安装的时候会自动创建一个叫vmbr0的虚拟网桥,然后把你的物理网卡挂上去当作端口。它的作用是让虚拟机直接"接"到物理网络上,和宿主机同网段,各拿各的 IP。这是整个 PVE 网络模型的基础。
配置文件在/etc/network/interfaces,正常长这样:
auto lo iface lo inet loopback iface enp3s0 inet manual auto vmbr0 iface vmbr0 inet static address 192.168.1.10/24 gateway 192.168.1.1 bridge-ports enp3s0 bridge-stp off bridge-fd 0新手最容易犯的错,是把 IP 配在物理网卡上,再另外建一个网桥。这样物理网卡既当宿主机的出口,又想当网桥的端口,结果就是网络直接断掉,而且因为你已经远程连上去了,断掉之后只能去现场救。记住这个模式:物理网卡永远是manual,不配任何地址;地址配在网桥上。
改完配置之后用ifreload -a让它生效。如果改动比较大(比如换了端口名),别指望热加载,直接reboot最省事。前提是你人在机器旁边。
4.3 多网口、VLAN 感知网桥和硬件直通
物理网口不止一个的时候,选择就多了起来。
每个口一个网桥是最简单的方案,比如vmbr0接内网、vmbr1接另一个网段。给虚机加网卡时选对应的网桥就行。
做 bond是把两个口捆成一个逻辑口,多一条物理链路做冗余。LACP 模式需要交换机那边也做对应配置,两边不一致的话链路起不来。如果是单纯的主备冗余,用 active-backup 模式不需要交换机配合,更省事。
VLAN 感知网桥是个很实用的开关。在网桥的设置里勾上 "VLAN aware" 之后,虚机的网卡上就能填 VLAN 标签,一个物理口能承载多个隔离的网络。做网络实验或者多租户隔离的时候特别方便。
PCI 直通是把物理设备整个交给某台虚拟机独占。做这个之前需要在宿主机层面开启 IOMMU 支持,在/etc/default/grub里的GRUB_CMDLINE_LINUX_DEFAULT后面加上intel_iommu=on(AMD 平台是amd_iommu=on),然后update-grub重启。此外还要加载 vfio 相关模块、把宿主机上的驱动加进黑名单,否则宿主机自己会把设备抢走。
有一点必须提前说明:直通之后宿主机就用不了那个设备了。所以别把唯一的网卡直通掉,那等于自断管理通道。多网口的机器,留一个口给宿主机,剩下的再直通。
4.4 容量规划与后续扩容的余量
LVM-thin 有一个必须知道的特性:池子满了之后不是变慢,而是直接锁死。所有虚机的 IO 会挂起,整个机器基本处于不可用状态,恢复起来很麻烦。
所以 thin pool 的容量要留出余量,我一般建议至少留 20% 空闲。日常可以用这两条命令看:
lvs pvesm statuslvs输出里的Data%那一列就是 thin pool 的使用率。也可以把它加到监控里,超过 80% 就该处理了。
扩容的路径要看存储类型。LVM 的话,加新盘之后:
pvcreate /dev/sdb vgextend pve /dev/sdb lvextend -l +100%FREE /dev/pve/data/dev/pve/data就是那个 thin pool,扩完之后虚机磁盘的上限跟着变大。ZFS 的话情况复杂一些,加盘通常是往池子里加新的 vdev,而不是简单扩容量,而且加进去之后不太容易拿出来,所以动手前先把 ZFS 的存储池文档看一遍,别凭感觉操作。
5. 跑通第一台虚拟机把流程闭环
5.1 上传 ISO 和创建时的几个关键参数
虚机盘上的系统镜像要先传到存储里。左侧点local,选 ISO Images,点上传,把下载好的系统 ISO 丢进去。如果文件已经在宿主机上,也可以在命令行里 cp 到/var/lib/vz/template/iso/,效果一样。
创建虚机点右上角的 Create VM,几步向导里真正影响体验的是这几项:
机型(Machine)。i440fx是老牌的,兼容性最好,装老系统选它基本不会错;q35支持 PCIe 拓扑,更接近现代主板,装新系统、要 UEFI 引导或者要直通 PCIe 设备时选它。拿不准就先i440fx。
BIOS。SeaBIOS是传统 BIOS,OVMF是 UEFI。选 OVMF 的话记得勾上 EFI 磁盘,不然装不了。Windows 11 这类强制要求 UEFI 的系统必须选 OVMF。
CPU 类型。host表示把物理 CPU 的特性全透给虚机,性能最好;kvm64之类是虚拟的通用型号,迁移友好但性能打折。单机环境、不考虑在线迁移的,直接选host。
总线/设备。VirtIO SCSI 性能最好,但 Windows 需要额外驱动。Linux 系统无脑选 VirtIO。老系统或者懒得装驱动的,用 SATA,性能差点但开箱即用。
网卡型号。同样推荐 VirtIO,性能比模拟的 Intel E1000 好不少。Windows 需要装驱动,Linux 原生支持。
5.2 VirtIO 驱动缺失和安装中的卡点
装 Windows 的时候最常见的卡点就是:安装程序提示"找不到任何驱动器"。原因是 VirtIO 磁盘控制器对 Windows 来说是个陌生设备,安装介质里没有它的驱动。
解决办法是挂第二个光驱。Proxmox 官方提供了virtio-win.iso,里面有各版本的驱动。把它作为第二块 CD 挂到虚机上,安装到选硬盘那一步点"加载驱动程序",浏览到 virtio-win 光驱里对应系统的目录,装完驱动硬盘就出来了。记得选对架构和系统版本,选错了会提示驱动不匹配。
Linux 系统基本不存在这个问题,主流发行版都自带 VirtIO 驱动。装完之后建议在虚机里装上 qemu-guest-agent,然后在虚机配置里把 QEMU Agent 那一项打勾。这样宿主就能拿到虚机的 IP、文件系统使用率,关机操作也能走正常流程而不是直接拔电源。
5.3 快照、克隆和"复制一台机器的磁盘"
这三件事经常被混在一起,其实适用场景完全不同。
快照的前提是底层存储支持。qcow2、LVM-thin、ZFS 都支持,raw 格式在普通 LVM 上就不支持。快照适合做"打补丁前先存一个档"这种事,回滚很快。但要注意:快照不是备份。它和原盘存在同一个存储上,存储坏了两份一起没。而且快照链太长会拖慢读写,正常应该定期合并或者删掉。
克隆分两种。完整克隆是把源盘的数据整份复制一份出去,独立性强,占空间;链接克隆是新建一个增量盘指向源盘,省空间、秒级完成,但源盘不能删,删了克隆体就废了。命令行操作是:
qm clone 100 101 --name web01 --full不带--full就是链接克隆。做批量部署的时候链接克隆很香,但一定要记住依赖关系。
手动复制磁盘的场景通常是把外部镜像导入进来。流程是先传上去,再导入,最后挂到虚机上:
qm importdisk 101 /path/to/image.qcow2 local-lvm qm set 101 --scsi0 local-lvm:vm-101-disk-1导入之后别忘了在虚机选项里把引导顺序设到新盘上,否则开机进不了系统,会以为是导入失败。
顺带说一下扩容,这个操作很常用:
qm resize 101 scsi0 +20G这只是在块设备层面把盘变大了,进系统之后还得自己扩分区和文件系统,Linux 下大概是growpart加resize2fs或者xfs_growfs。只做前一步的话,系统里看到的容量是不变的。
5.4 什么时候该用 LXC 而不是虚拟机
PVE 同时支持两种虚拟化:KVM 虚机和 LXC 容器。很多人只知道前者,其实容器的开销小得多,启动快、内存占用低,跑常驻的轻量服务特别合适。
判断标准很简单:需要跑不同内核、需要完整硬件模拟、需要跑 Windows 的,用虚机;跑纯用户态服务、想省资源、启动快的,用容器。
容器有个硬性限制:它和宿主机共享同一个内核。所以你不能在容器里装一个跟宿主机不一样版本的内核,也不能在容器里做内核模块相关的事情。设备直通在容器里也比虚机麻烦。
模板要先下载:
pveam update pveam available pveam download local debian-11-standard_11.7-1_amd64.tar.zst下载完之后创建就很快了,命令行一条或者界面点几下都行。创建时有个"非特权容器"的选项,默认是勾上的,安全性更好,代价是容器内无法访问某些特权资源。做实验、跑普通服务保持默认就行。
6. 装机后最容易撞上的问题与排查链路
6.1 Web 界面打不开时按这个顺序查
这是最高频的问题,也是最容易被乱猜的问题。别急着重装,按物理层往上走一遍,基本都能定位。
第一,机器到底起来没有。接个显示器看,能看到登录提示符说明系统正常。看不到的话问题在引导层,回去检查 BIOS 启动顺序和硬盘。
第二,网口的指示灯亮不亮。不亮说明物理链路或网线有问题,这一步就断了,后面都白搭。
第三,在同网段的另一台机器上 ping 那个 IP。通不通是分水岭。ping 不通就去查 IP 配置和冲突;ping 通但网页打不开,问题在服务层。
第四,看服务状态。SSH 进去执行systemctl status pveproxy pvedaemon pve-cluster,哪个挂了看哪个的日志。journalctl -u pveproxy --since "10 min ago"能看到最近的报错。
第五,确认访问方式。https://加:8006,两个都不能少。我见过有人在浏览器里输入192.168.1.10:8006,浏览器自动补成http,然后一直连不上。
第六,清浏览器缓存或者换个浏览器。管理界面的静态资源更新之后,旧缓存会引发一堆奇怪的界面错乱,看着像坏了其实只是缓存。
一个补充技巧:实在没头绪的时候,ip a看一眼网桥有没有拿到 IP,ip r看一眼默认路由在不在。这两条命令的输出基本就能说明网络层有没有问题。
6.2 网卡名变了导致网络直接断掉
这个坑很隐蔽,通常发生在你动了硬件之后——换了网卡插槽、加了新网卡、更新了固件。现象是重启之后网线灯正常,但整个网络不通,管理界面进不去。
原因在于现代 Linux 的网卡命名不是固定的eth0,而是根据物理位置生成的enp3s0这种名字。你把网卡从第三个槽挪到第四个槽,名字就从enp3s0变成enp4s0,而/etc/network/interfaces里vmbr0的bridge-ports还指向那个已经不存在的旧名字,网桥自然起不来。
排查方式:
ip -br link lspci | grep -i ethernet dmesg | grep -i "renamed"第一条看现在实际有哪些网卡,第二条看硬件识别情况,第三条能看到内核给出的重命名记录。
修复就是把/etc/network/interfaces里的端口名改成新的,然后ifreload -a。如果这种情况反复发生(比如你经常插拔网卡),可以用 systemd 的.link文件把名字固定下来,按 MAC 地址绑定,这样不管插哪个槽名字都不变。另一种极端做法是在内核启动参数里加net.ifnames=0彻底关掉可预测命名,网卡全变回eth0、eth1。这个方案简单粗暴,但要注意改完之后所有引用旧名字的地方都得同步改,包括虚机的网桥绑定。
6.3 磁盘容量只能加不能减,这时候怎么办
PVE 的界面只提供扩容,没有缩容按钮,很多人第一次遇到会以为是功能缺失。实际上这是设计取舍:在线缩容一个正在被文件系统使用的块设备风险极高,官方干脆不提供。
真要缩,得看存储类型。
qcow2 文件(目录存储)是唯一相对可行的路径。步骤是:进虚机,先在系统内缩小文件系统和分区(这一步必须在虚机里做,因为宿主机不知道文件系统结构),关机,然后在宿主机上执行:
qemu-img resize --shrink /path/to/vm-102-disk-0.qcow2 20G顺序不能反。先缩文件系统再缩块设备,反过来会直接损坏数据。
LVM-thin 或者 raw 格式就没这么幸运了,块设备层面没法原地缩。可行方案是新建一个小盘,把数据迁过去,确认无误后删掉旧盘。迁移可以用 dd、文件系统级别的同步工具,或者最稳妥的做法——先用 PVE 的备份功能完整备份,然后恢复到新建的小盘上。虽然慢,但出错概率最低。我自己遇到需要缩容的场景,基本都选这条路,因为快照和块设备操作一旦出问题,损失的是整台虚机的数据。
这里有个前置建议:创建虚机磁盘时别一次给太大。thin 分配的好处就是按需增长,先给一个合理的初始值,不够了再扩,扩容易缩难。
6.4 时间、日志和几个零碎坑
最后收几个零散但会遇到的点。
时间。虚机和宿主机时间不一致,轻则日志时间戳对不上,重则影响需要时间同步的服务。Linux 虚机建议装qemu-guest-agent并开启时间同步;Windows 虚机在驱动装好之后一般会自动同步。宿主机本身的时区和 NTP 状态用timedatectl确认一遍。
日志位置。管理界面的操作日志在/var/log/pveproxy/access.log,系统服务日志用journalctl看,具体到某个服务加-u 服务名。虚机的启动失败信息在journalctl -u qemu-server@虚机ID,这个排查虚机起不来时很有用。
存储状态要定期看。pvesm status一行一条,能看出每个存储的可用量。前面说过 thin pool 满了会锁死,这个检查习惯值得养成。
改配置前先备份配置文件。/etc/network/interfaces、/etc/hosts、/etc/fstab这几个文件被改坏之后,机器可能连不上或者起不来。改之前cp xxx xxx.bak,成本几乎为零,救命概率极高。
别在只有远程访问的情况下做大动作。内核升级、网桥改造、存储扩容,这三类操作都有一定概率让你失去连接。如果机房不在身边,尽量安排在有人能到场的时间做,或者先确认机器有带外管理(服务器的 IPMI/iDRAC 之类)。
我个人折腾 PVE 这些年,最大的体会是:这个系统的安装本身没什么难度,难度全在"装完之后默认配置和你的实际需求之间的那段差距"。源要换、swap 要不要关、网桥怎么配、存储怎么规划,每一处都是默认值给你一个能跑的起点,剩下的得自己补。把上面这些点理清楚,后面加虚机、做快照、跑容器,基本就是顺水推舟的事了。