Proxmox VE 8.1 上装 Home Assistant OS 12.1,这套组合我前后用了差不多一年,中间踩过不少坑,今天把完整流程和参数整理出来。这件事本身不算难,但网上教程往往只告诉你“点哪里”,不说“为什么这么配”,导致很多人装完三天两头出问题。这篇尽量把每个关键选择背后的逻辑讲透,你照着做完,应该能得到一个长期稳定跑的智能家居中枢。
Proxmox VE 是一个开源的虚拟化平台,底层是 Debian + KVM + LXC,你可以把它理解成一个“7x24小时运行的宿舍管理员”,负责把一台物理服务器的 CPU、内存、硬盘、USB 设备分配给各个虚拟机。Home Assistant OS(下面简称 HAOS)则是专门为智能家居打造的嵌入式系统,核心是 Home Assistant,自带 Docker 和 Add-on 商店,从 Zigbee 网关到媒体播放器都能一键装。
这篇文章适合谁?如果你手上已经有一台 NUC、迷你主机、软路由,或者旧笔记本改装的服务器,想让 Home Assistant 和 NAS、AdGuard、Node-RED 这些服务共存,而不是一台设备一个系统来回插拔,那这套方案就是为你准备的。我也建议你先别急着动手,把前两章的选型理由和硬件规划看完,再进第三章实操会顺手很多。
1. 为什么要把Home Assistant装进Proxmox
1.1 这套组合到底解决什么问题
智能家居玩到一定阶段,设备多了,你会发现 Home Assistant 跑在哪是个大问题。树莓派性能吃紧,Docker 部署功能残缺,专门买一台物理机跑 HA 又太浪费——毕竟机器的 CPU 大部分时间是空闲的。Proxmox 就是来解决这个矛盾的:一台物理机上同时跑 HAOS、文件服务器、去广告服务、下载机,每个服务一个独立虚拟机,互不干扰。
虚拟机最大的好处是快照和备份。我给 HAOS 做系统升级之前,习惯先在 Proxmox 里打个快照,升级完如果发现某个 Add-on 和新版本不兼容,一分钟就能回滚。这个操作在物理机上几乎做不到,在 Docker 里虽然也能做镜像备份,但整机级别的恢复能力完全不是一个量级。
另外还有一个很实际的好处:硬件换代时迁移方便。我最早是在一台旧笔记本上跑的 PVE,后来换成 NUC,整个过程就是备份、恢复、重新直通 USB 设备,半个多小时搞定。如果是物理机安装的 HAOS,换硬件之后很可能要重新配置一堆驱动和网络,非常折腾。
1.2 HA几种部署方式对比:为什么最终选了HAOS虚拟机
Home Assistant 官方提供了好几种安装方式,简单列个表格:
| 部署方式 | 完整 Add-on 商店 | 系统级管理 | 备份恢复难度 | 适合场景 |
|---|---|---|---|---|
| HAOS 物理机 | 完整 | 完整 | 中,依赖整机备份 | 专门一台设备跑 HA |
| HAOS 虚拟机(KVM) | 完整 | 完整 | 低,虚拟机快照随便打 | 一台服务器多服务共存 |
| Docker 容器 | 受限 | 无 | 中,自带备份插件可用 | 已熟悉 Docker 的玩家 |
| Supervised | 完整 | 无,依赖宿主机 | 高,环境一旦变化容易崩 | 不推荐,环境难复现 |
| Core 纯 Python | 无 | 无 | 中 | 只做自动化测试 |
我的建议很直接:想省心,选 HAOS 虚拟机;想折腾,选 Docker。别碰 Supervised,那种“宿主机直接装 Python 环境再套 HA”的方式,每次系统更新都可能炸,我已经见太多人在群里问为什么升级后 HA 起不来了。
那为什么不用 LXC 容器跑 HAOS?官方明确不支持这种用法,LXC 因为不是完整虚拟机,systemd 和 Docker 的关系很别扭,而且通常需要特权容器,安全性也差。Proxmox 既然原生支持 KVM,就老老实实用虚拟机,这是官方推荐的方式。
1.3 关于PVE 8.1和HAOS 12.1的版本搭配
Proxmox VE 8.1 发布于 2023 年底,底层是 Debian 12,内核 6.5,属于当时的一次大版本更新。和 7.x 相比,8.x 对现代 CPU 的支持更好,磁盘性能也有优化,在我用下来最直观的感受是虚拟机开机快了不少,直通设备的兼容性也比老版本稳。
HAOS 12.1 则是 Home Assistant OS 的 12.x 系列版本,内核 6.6,底层基系统自带 Docker,所以你能在 Add-on 商店里装任何 Docker 镜像——比如 Node-RED、ESPHome、Frigate 这些。这套 PVE 8.1 + HAOS 12.1 的组合,在发布时间上相近,相互兼容性很好,我实测下来几乎没有出现过“内核补丁冲突”这类问题。
这里要顺带提一句:Proxmox VE 9.0 已经发布了,新版本确实吸引人,但我的态度是“大版本升级观望半年再说”。8.1 目前是经过大量社区验证的稳定版本,如果你是为了家里长期跑服务,完全没有必要追新。等 9.0 出到 9.1、9.2,补丁足够多了再考虑也不迟。
2. 安装前的准备
2.1 硬件配置怎么定才不浪费
先明确一个观念:HAOS 本身对硬件要求不高,真正吃资源的是你后期安装的 Add-on 和自动化任务。比如跑 Frigate 做摄像头识别,需要大量 CPU 和内存;跑语音助手模型,那更是无底洞。所以给虚拟机分配资源前,先想清楚你要用它做什么。
我的推荐配置是两档:
| 配置项 | 入门档 | 推荐档 |
|---|---|---|
| CPU | 2 核 | 4 核 |
| 内存 | 2 GB | 4~8 GB |
| 硬盘 | 32 GB | 64 GB SSD |
| 网卡 | VirtIO 桥接 | VirtIO 桥接 |
我自己跑的是一台 NUC 改装的服务器,物理机是 16GB 内存,给 HAOS 分配了 4GB 内存和 4 个核。跑了一堆自动化、Zigbee 网关、Node-RED、ESPHome,平时 CPU 占用率基本在 5% 以下,内存用了 70% 左右,非常宽裕。
硬盘是很多人容易忽略的点。HAOS 的日志和数据库(比如 history 落库)写得很勤,机械硬盘的随机读写能力很差,会导致 HA 界面卡顿,建议至少用 SATA SSD。如果条件允许,把 HAOS 的磁盘放到 NVMe 上,那体验确实顺畅。
2.2 下载并校验HAOS镜像
HAOS 官方专门为虚拟机提供了 OVA/QEMU 格式的镜像,文件名类似haos_ova-12.1.qcow2.xz。这里不要下错了,有些教程让人去下树莓派版或者 Intel NUC 版,那都不是给虚拟机用的。
镜像下载链接在 Home Assistant 官方文档的 “Install Home Assistant OS” 页面里,翻到 Virtual Machine 一节就能找到。下载完成后是个.xz压缩文件,需要先解压成.qcow2格式镜像才能导入 Proxmox。Linux 命令很简单:
xz -dk haos_ova-12.1.qcow2.xz如果你对网络下载的完整性有疑虑,官方页面会同时给出 SHA256 校验值,用下面的命令核对一下:
sha256sum haos_ova-12.1.qcow2.xz比对两个值一致再继续,避免下载过程中文件损坏导致后面启动失败。
2.3 网络规划:装之前先想好IP
很多人装完才发现 8123 端口打不开,排查半天结果是 IP 变了或者网段不对。所以安装之前建议先规划好网络。
Proxmox 安装完成后,默认会有一个虚拟网桥vmbr0,它把你的物理网口和虚拟机网络连接起来。你新建虚拟机时选择 VirtIO 网卡,桥接模式选vmbr0,那么虚拟机就像是接在同一台交换机上一样,直接由你家里的路由器分配 IP,和其他设备一个网段。
HAOS 默认使用 DHCP 获取 IP,这没问题,但千万别让这个 IP 随意变动。有两个办法:一是在路由器后台做 DHCP 静态绑定,把 HAOS 的 MAC 地址固定到一个 IP;二是装完 HAOS 后在ha>控制台里手动改成静态 IP。我个人推荐第一个方法,因为操作简单,且不会因为 HA 配置文件写错导致断网。
还有一点,HAOS 对网络依赖很强:Zigbee 网关一般走 USB 不占网络,但 Wi-Fi 设备的控制、云服务的同步、Add-on 商店的访问都靠这条链路。所以建议给 HAOS 用有线网络,不要用 Wi-Fi 网卡直通,稳定性和延迟完全是两个级别。
3. 在PVE 8.1上创建HAOS虚拟机的完整过程
3.1 创建虚拟机:关键参数逐个说清楚
登录 Proxmox Web 管理界面,右上角“创建虚拟机”,开始配置。很多教程这一步直接给你一张截图,但这里面的参数为什么这么选,我拆开讲。
首先在“常规”页面填 VM ID 和名称。VM ID 我习惯用 100、101 这样有规律的编号,名称写haos,方便以后在命令行里一眼认出。
最关键的是“操作系统”页面。这里选择“不使用任何介质”,类型选 Linux,版本随便选一个 6.x 的内核版本都行。因为我们后面要导入现成的磁盘镜像,不是从 ISO 安装,所以这里不需要指定安装介质。
“系统”页面需要注意:
| 参数 | 设置值 | 原因 |
|---|---|---|
| 机型 | q35 | 新平台,支持 UEFI,兼容性更好 |
| BIOS | OVMF (UEFI) | HAOS 官方推荐,启动更规范 |
| EFI 磁盘 | 添加,64MB,选 local-lvm | 存储 UEFI 启动引导文件 |
| TPM | 添加,版本 2.0 | 某些新版本系统和安全组件需要 |
这里特别提醒:如果你用了 SeaBIOS,虽然也能启动 HAOS,但官方文档推荐的是 UEFI 方式。我建议直接按上表走,因为后面挂载 EFI 磁盘和 TPM 的操作,在 SeaBIOS 模式下是不可用的,而且一些 Add-on 涉及安全启动时会出问题。
“硬盘”页面先不添加磁盘,或者添加一个临时空盘但后面删掉也行。最省事的方式是创建时不加盘,等导入镜像之后再挂载。
“CPU”页面,类型选host而不是默认的kvm64。host模式会把物理 CPU 的全部特性暴露给虚拟机,对 HAOS 里的 Docker 和某些需要硬件指令集的应用很重要。
“内存”页面,给至少 4096MB(4GB)。如果你物理机内存紧张,开 2048MB 也可以运行,但后期跑多点自动化就会捉襟见肘,建议别低于 4GB。
“网络”页面,桥接选vmbr0,模型选 VirtIO,半虚拟化网卡性能更好。VirtIO 需要虚拟机内有对应驱动,HAOS 自带,所以可以放心选。
3.2 导入磁盘镜像并调整引导顺序
创建完虚拟机之后,把刚才解压好的.qcow2镜像传到 Proxmox 宿主机上。传文件方式有两种:一种是通过 Web 界面上传到特定目录,另一种是用 scp 直接拷。我习惯用 scp:
scp haos_ova-12.1.qcow2 root@你的PVE地址:/root/然后 SSH 登录 PVE 宿主机,执行导入命令。假设 VM ID 是 100,存储是local-lvm:
qm importdisk 100 /root/haos_ova-12.1.qcow2 local-lvm这一步会把 qcow2 格式转换成 PVE 的 raw 格式(如果你配置的存储是 local-lvm),导入时间取决于硬盘速度,一般几分钟。导入完成后,打开 Web 界面的“硬件”选项卡,你会看到一个“未使用的磁盘”,双击它,点“添加”,这块磁盘就挂到虚拟机上了。
接下来调整引导顺序。回到虚拟机的“选项”选项卡,双击“引导顺序”,勾选刚才添加的磁盘,把它拖到第一项。注意取消勾选“网络”启动,否则虚拟机可能会先从网络启动,卡很久之后才进系统。
再检查一遍“硬件”里 EFI 磁盘和 TPM 是否存在,如果之前的系统设置里忘了加,这里手动添加也行。最后,确认虚拟机“选项”里的“开机自启动”可以按需打开,我是建议打开的,这样宿主机重启后 HAOS 会自动跟着起来,不用手动干预。
3.3 首次启动与8123初始化
点“启动”按钮,再点“控制台”,你会看到 HAOS 的启动日志滚动,刚开始会有一大堆内核信息,别慌。正常启动之后,控制台会停在ha>提示符,这就是 HAOS 的命令行接口。
首次启动 HAOS 会自动扩展根分区,所以等待时间可能稍微长一点。你可以用ha>下的一些命令来确认状态。最实用的一个是查看网络信息:
ha> network info这个命令会列出当前机器获取到的 IP 地址。如果显示的是一个正常的局域网 IP,说明网络已经通了。如果啥也没有,大概率是 DHCP 没拿到地址,去路由器后台看看有没有新设备接入。
拿到 IP 之后,在浏览器输入http://你的IP:8123,看到 Home Assistant 的初始化引导页面就说明 HAOS 核心服务已经跑起来了。
初始化过程很简单:先创建管理员账号,然后设置家庭名称、时区、单位制。建议时区选“上海”或者其他你自己的本地时区,否则自动化里的时间和日出日落判断会不准。后面会检测你的智能家居设备,可以跳过,等进主界面之后再慢慢配。
注意,第一次进入 8123 页面可能需要等几分钟,因为 HA 的数据库初始化、组件加载都在后台跑。如果你刷新好几次都打不开,先回ha>控制台看看有没有报错,或者等一下再重试。
4. 装完之后这些设置必须做
4.1 稳定性优化:关掉内存气球等三个坑
很多人的 HAOS 装在 PVE 上,前两周还好好的,第三周开始频繁卡死、无响应,十有八九是虚拟机默认参数导致的。我在这个过程里踩了三个坑,分享给你。
第一个坑是内存气球(ballooning)。Proxmox 默认开启动态内存调整,宿主机内存不够时会自动回收虚拟机的内存,但 HAOS 对这种内存收缩非常不敏感,往往收缩之后不主动归还,时间一长就崩溃。解决办法是在“选项”里的“内存”设置中,把“最小内存”改成和“内存”一样,等于禁用了 ballooning。我已经不止一次遇到过,关掉之后再没出现过无故卡死。
第二个坑是磁盘缓存。默认情况下 PVE 的磁盘写入缓存策略可能不适合数据库类应用。我的做法是在硬件里选中磁盘,点“编辑”,把缓存改成“无缓存”,同时勾选“IO 线程”。这样 HAOS 的数据库写入会更稳定,虽然性能不一定提升多少,但避免了缓存不一致带来的数据损坏风险。
第三个坑是定期清理 HAOS 本身的日志。Home Assistant 里home-assistant.log会越滚越大,建议在 HA 的配置文件里开启日志轮转,或者加一个自动化定期清理旧日志。这个和 PVE 关系不大,但虚拟机的磁盘空间一旦被日志吃满,后果和物理机一样严重。
4.2 USB设备直通:让Zigbee/串口设备进虚拟机
智能家居基本离不开 USB 设备:Zigbee 网关(比如 Sonoff Zigbee 3.0 或者 CC2652P 方案的棒子)、Z-Wave 棒、蓝牙适配器、串口传感器,这些都得直通进 HAOS 虚拟机里才能被 Home Assistant 识别。
操作分两步。第一步,在 PVE 宿主机上插好 USB 设备,然后在 Web 界面选中 HAOS 虚拟机,点“硬件”->“添加”->“USB 设备”。弹出的窗口里可以直接选宿主机的某个 USB 设备,也可以按 Vendor/Product ID 填。我建议选具体的设备,因为下拉列表会把宿主机上所有 USB 设备都列出来,包括键盘鼠标,选错了容易出问题。
第二步,添加完成后,需要给虚拟机添加一个 USB 控制器。有的主板默认没有启用 USB 2.0/3.0 的虚拟控制器,直接把设备映射进去可能不识别。在“硬件”里点“添加”->“USB 设备”时,注意勾选“使用 USB 2.0 控制器”或“使用 USB 3.0 控制器”,具体取决于你的设备和 HAOS 的支持情况。Zigbee 棒一般 USB 2.0 就够了。
一个常见的困惑是:直通之后 HAOS 里看不到设备。我的排查经验是先在宿主机上执行lsusb确认设备存在,然后确认这个设备没有被其他虚拟机占用,最后再重启 HAOS 虚拟机。Zigbee 棒的很多驱动需要重新枚举 USB 设备,热插拔不一定生效,重启最稳妥。
4.3 备份和磁盘扩容:平时不弄,出事后悔
备份是 Proxmox 方案相比物理机方案最大的优势,但也需要你提前配置好备份路径。PVE 自带的 VZDump 备份工具,可以在“数据中心”->“备份”里统一配置计划,也可以手动点“备份”按钮对单个虚拟机做备份。
我的建议是至少每周做一次备份,保留最近 2~3 份即可。备份模式可以选择“停止模式”,也就是先关虚拟机再备份,一致性最好;如果你不想中断服务,可以用“快照模式”,但 HAOS 的数据库在快照时可能处于不一致状态,恢复出来偶尔会有小问题。如果 HAOS 里已经装好了“Google Drive 备份”或者“NAS 备份”插件,那 PVE 整机备份和 HA 内部备份可以双保险,搭配使用效果更好。
磁盘扩容这个坑我也踩过。HAOS 自带的虚拟磁盘默认大概 32GB,如果你装了很多 Add-on、存了大量历史数据,用一段时间后空间会告急。扩容步骤是在 PVE 的“硬件”中选中磁盘,点“编辑大小”调大容量,比如调到 64GB。然后重启 HAOS,它会在启动时自动扩展根分区。如果重启之后空间没变,大概率是引导时没触发自动扩容,可能需要进入ha>控制台手动执行resize2fs,但那需要一些 Linux 基础,所以我的建议是创建虚拟机时直接把磁盘给到 64GB,省得后面折腾。
5. 常见问题排查实录
5.1 浏览器打不开8123
这是出现频率最高的问题。我每次帮朋友排查,头一件事就是确认 HAOS 到底有没有拿到 IP。打开 PVE 的 HAOS 控制台,输入ha> network info,看返回结果里的 IPv4 地址。如果地址为空,检查虚拟机的网络模型是不是 VirtIO、桥接是不是vmbr0,再去路由器后台看设备列表里有没有多出来的设备。
如果 IP 有,但浏览器打不开 8123,大概率是 HAOS 核心还没完全启动。首次启动加初始化数据库可能需要 5~10 分钟,你可以通过控制台的日志确认启动进度。还有一个容易忽略的点:你所在网络的防火墙是否放行了 8123 端口的入站访问。如果 PVE 的防火墙或者路由器开了设备隔离,内网访问也会被拦。
5.2 虚拟机一直卡在Booting from Hard Disk
这个问题基本可以锁定在引导顺序上。虚拟机开机黑屏,只显示 “Booting from Hard Disk…” 然后一直转圈,通常是引导顺序里没有把导入的虚拟磁盘设为首选,或者磁盘没有正确挂载。
去“选项”->“引导顺序”里看一下,确保唯一的启动项是那块导入的vm-100-disk-1这类名称的磁盘。如果你之前在“系统”里选了 UEFI,别忘了确认 EFI 磁盘已经添加。如果这些都正常,再用qm importdisk那条命令重新导入一次镜像,有时候是导入文件本身损坏。
5.3 USB设备直通后HA里看不到
先别急着在 HA 里折腾驱动,回到 PVE 宿主机执行lsusb,确认设备已经被宿主机的内核识别。然后到 HAOS 虚拟机“硬件”页,检查 USB 设备是否已经在列表里。如果设备被多个虚拟机同时选为直通对象,PVE 会报冲突,只能给其中一个用。
直通之后 HAOS 里找不到设备,最常见的原因是 HA 的容器环境没有重新枚举 USB。先重启 HAOS 虚拟机(不是重启 Home Assistant 核心,是整个虚拟机),一般能解决 80% 的问题。还有一个小技巧:在 HAOS 的“加载项”里安装一个叫 “Advanced SSH & Web Terminal” 的插件,然后用lsusb命令直接在 HA 侧确认设备是否进入了 HAOS 的内核空间,这样就能判断是宿主机问题还是 HA 应用层问题了。
5.4 大版本升级:PVE 9.0要不要追
最近总有人问我要不要升级 PVE 9.0。我的看法很明确:如果你的 PVE 8.1 跑得正稳,完全没有必要现在升级。大版本升级涉及到内核、QEMU、存储后端一大堆变更,虽然 Proxmox 官方提供了升级脚本,但我见过太多因为升级导致虚拟机起不来的翻车案例。
相比之下,HAOS 的版本升级反而可以稍微积极一点。HAOS 12.x 的小版本更新会修复很多智能家居场景的 Bug,直接在 HA 的设置页面点“更新”就行,不需要手动操作 PVE。升级前记得在 PVE 里打个快照,出了问题一键回滚,这就是虚拟化部署最大的底气。
另外我建议你养成一个习惯:每次改动 HA 的配置或安装大型 Add-on 之前,都去 PVE 面板打一个快照。快照不是备份,它只记录虚拟机磁盘的状态变化,占用空间不大,但能让你随意尝试各种折腾。我自己的规则是:动了系统配置就快照,每个月至少一次整机备份,盘不贵,后悔药才是真的贵。