林荫
林荫
发布于 2026-04-30 / 24 阅读
0
0

PVE虚拟化-让你的NAS更加安全可靠

✨ 预期效果

完成本文的全部配置后,你将获得:

  • 更新再也不怕翻车 — 飞牛更新前一键快照,出问题秒级回滚,再也不用担心更新之后数据丢失、服务宕机甚至设备变砖
  • 系统互相隔离,互不影响 — 飞牛只是 PVE 中的一个虚拟机,它的任何操作都不会影响宿主机和其他虚拟机
  • 硬件直通,性能无损 — 核显、阵列盘等硬件可直接透传给飞牛,存储性能和硬件加速与直装几乎无异
  • 一台机器跑多个系统 — 在飞牛之外,还可以同时跑 OpenWrt 软路由、Linux 服务器等,一台机器顶好几台
  • 资源按需分配 — CPU、内存动态调度,飞牛吃紧就多给点,空闲时其他虚拟机自动复用
  • 专业级管理界面 — PVE 的 Web 后台比任何 NAS 系统的虚拟化管理都强得多,网络、存储、虚拟机一目了然

😤 起因

事情的起因实际上是一次看似普通的飞牛更新。老读者都知道我家里装了一台 HomeLab 家庭服务器,这台家庭服务器跑了挺多服务的,宿主机(Host,即运行所有服务的底层系统)是 fnOS,也就是这两年一直比较火的飞牛 NAS 系统。因为其底层是基于 Debian 的,所以当时觉得用来当宿主机稳定性应该没问题……

但是显然我有点过于乐观了。

image.png

去年年末的那次飞牛零日漏洞(0-day)事件,我虽然侥幸逃过,可能也因此让我有点莫名的自信,但是最近这次 fnOS1.1.29 更新却让我在劫难逃了。

最开始被推送到版本更新时,我完全没当回事儿。因为飞牛每周基本都要推送更新,只是不是每次都更新系统,所以我就点了,结果更新了四五次都没成功。接下来最失败的操作来了——我极其放松地点击了前两个版本飞牛刚出的"系统文件修复"功能,我以为这最多是修复系统文件,应该不会大动干戈。但是可怕的是运行了十几分钟之后,我所有的局域网服务全掉了......

最终查到我 HomeLab 中的 Docker 引擎被卸载了,我所有的容器全没了......

我只能说还好我用的是 1Panel,所以几乎所有容器都走了编排且做了备份,恢复就是重新拉一下镜像就可以了。要是纯用镜像自己手动建容器,估计当时就炸了......

不过这已然让我心中升起了深深的恐惧和后怕,我已经没心情去考虑为什么修复系统会把 Docker 服务卸载了,我现在只想赶紧把飞牛隔离出去


🔍 技术选型

目前常见的虚拟化方案主要有三种:

📦 NAS系统+虚拟化

类似飞牛这种,本身是个家庭系统,但是因为自带 Docker 容器化或 KVM 虚拟机功能,从而可以实现虚拟化。

这种虚拟化很基础很通用,什么都能装,但是不够好用,提供的功能过于简洁,而且因为系统本身是为了家庭需求服务的,所以虚拟化功能不够丰富。

而且就像我说的,你能保证这个 NAS 系统的稳定吗?会不会哪次更新给你把虚拟机全删了?

🖥️ 纯服务器+Docker

这一类服务也挺多的,会比第一种方案更轻量,或者说可以说是最轻量的选择——直接在机器上装 Debian 或者 Ubuntu 这种服务器系统,然后通过 Docker 实现容器化部署,或者通过 KVM 运行完整的虚拟机。

这个方案相比第一种方案也更安全,因为 Debian 或者 Ubuntu 这种长期维护了几十年的系统,在不选择乱七八糟的发行版的前提下,都是非常非常稳定的,很难出现因为更新系统导致服务失效。

但是同样,因为是非常专业的服务器系统,所以它们的功能也非常模块化,以满足各种各样的需求。所以不管是虚拟化还是搭建网桥之类的功能,经常出现只能用命令行解决的情况,而且事无巨细几乎都需要你自己手动设置。如果出了问题,想象一下用命令行排查宿主机复杂的网络配置的场景,简直痛不欲生。

🏗️ 虚拟机系统

专门为了虚拟化而生的系统,系统本身设计来就是为了实现多机虚拟化和组网的。所以不管是网络配置、虚拟化还是硬件直通都做得极其简单便利,提供动态资源调度(CPU、内存按需分配)、一键快照等虚拟化常用的便利功能,同时具备稳定性与安全性。

说实话看到这个方案一眼就爱上了,这正是我此刻需要的梦中情系统。以后飞牛更新前点个快照,一秒备份,出问题直接一键恢复,太香了。

具体的系统当然是无脑选开源的 PVE 了,只能说不是 ESXi 不够香,只是钱包空荡荡~

方案 优点 缺点 适合谁
NAS系统+虚拟化 上手简单,什么都能装 功能简陋,系统稳定性存疑 新手尝鲜
纯服务器+Docker 轻量、稳定、安全 命令行操作多,排查困难 有 Linux 经验的用户
虚拟机系统(PVE) 功能丰富、快照恢复、硬件直通 需要学习,占用资源略多 长期稳定运行

🔧 PVE安装

📋 前置准备

PVE 的安装方式其实是相当传统的,就是做启动盘,改启动顺序,然后 U 盘启动安装。

但是在安装之前,因为我是系统迁移,不是空盘安装,所以要做一些准备来保证我的 fnOS 中的数据以及 1Panel 的服务数据不要丢。

💾 备份服务数据

首先是备份服务数据。这一部分因为大部分设置都在系统盘中,所以需要 copy 出来或者打包备份到本地或者云端,因为装机要格式化磁盘

笔者这里几乎所有服务都跑在 1Panel 上,所以只需要进入 1Panel 后台,点面板设置 -> 快照 -> 创建来创建一个快照。创建好之后是一个目录格式的快照文件,我们要跳转到目录下,把对应的目录打包成一个压缩包,比如把整个 backup 目录打包成 backup.zip,然后下载到你的另一台机器本地,这样服务备份就算完成了。

PixPin_2026-04-17_22-21-49.png|600

1Panel 这个备份还是挺全的,应用、网站啥的全都会备份,基本可以一键恢复,还是很方便的。只是恢复的时候容易遇到问题,但是都不会导致备份失效,想办法解决一下就行了,不行就取消恢复,然后自己手动解压放到对应目录重启服务都是可以的。

⚙️ 备份系统设置

此外我们还需要把 fnOS 本身的系统设置备份下来,方便后续的设置恢复,不然你装了新的飞牛系统之后所有的用户还要重新手动设置。

打开系统设置 -> 更新与还原 -> 系统配置 -> 备份系统配置 -> 导出。会导出一个二进制文件,这就是飞牛系统设置的备份了,装好之后还原系统配置也是在这个界面,别忘了。

image.png|600

但需要注意的是,飞牛的这个备份只备份了系统本身的设置,所有应用全都不会备份。所以举个例子,相册要重新分组识别,影视库要重新刮削,远程挂载同样需要手动重新挂载。

所以如果你非常重视飞牛的一些应用设置的话,请在应用本身中找备份的功能,此处飞牛系统设置备份是不会帮你全都备份好的。

🔌 关机+拆下数据盘

为了防止一会儿装机的时候一不小心选错系统盘把数据盘清空,我会选择装机前先把数据盘都拆下来。

⚠️ 注意:一定要正常手动关机之后再拆,直接断电有概率导致机械硬盘磁头撞击盘体损坏。

💿 启动盘准备

首先下载 PVE 系统的 ISO 镜像,这个直接去PVE官网下载页下载就可以,注意要下 PVE,别下成 Proxmox Backup Server(PBS)或者 Proxmox Mail Gateway(PMG)了~

笔者这里直接下载的最新的 9.1.1,可能没有之前的 8 稳定、教程多,但是本人生来就是一个弄潮儿,所以...

接下来准备的是启动盘制作工具,笔者这里选择的是 Rufus,简单小巧全中文~ 同样也是直接去Rufus官网下载最新的 .exe 就可以了。

这俩都准备好之后,准备一块至少 8G 的 U 盘(U 盘数据先备份好,一会儿要清盘),然后双击打开 Rufus

首先是设备,选择你的这块 U 盘;引导类型,选择刚才下载的 PVE 的 ISO 镜像文件,会弹出一个提示问你要不要用 DD 模式(即逐扇区写入),点"是"就行了。

然后其他的按我图中设置的就可以,点击开始,写入镜像。

PixPin_2026-04-17_22-46-10.png|600

进度条走满,状态重新变为准备就绪时,就表示镜像写入成功了,这时候这个 U 盘可能已经识别不出来了,我们直接拔掉就可以~

🚀 安装系统

在安装系统之前,拔掉系统盘以外的其它硬盘,特别是数据盘,关机,插上显示屏和键鼠,插上 U 盘,开机。

IMG_20260417_151344.jpeg|500

另外说一下因为笔者买的采集卡还没到,所以这部分的图都是手机拍照,如果不够清晰的话望海涵。

家里有闲置小主机的可以尝试自己搭建 IPKVM(IP-based KVM 远程管理设备),会方便很多,需要教程的可以催更~

🔧 BIOS启动项设置

首先要进 BIOS 确定是否是 U 盘优先启动。进 BIOS 的方式各不相同,一般是启动的时候狂按 F12 或者 F2。我的主板是云星 Z690,我是启动的时候有个启动项选择,直接选最后一个 UEFI Firmware Settings,机器就会自动重启进 BIOS。

IMG_20260417_152357.jpeg|500

进了 BIOS 之后找"启动"相关的选项,然后有个启动顺序或者启动项的选择,里面应该是至少有两个:一个是你的系统盘,大概率是叫 NVMe 之类的;另一个是 U 盘,一般是叫 UEFI 或者 USB 什么的。

把 U 盘的调整到第一次序启动,调整到系统盘之前,然后记得选择保存并退出,不保存是无效的。然后系统就会进 PVE 的安装启动页了。

📥 PVE安装

首先启动页我们选第一个 Graphical,这是图形化界面,像我这种菜狗就是喜欢用图形化的 2333。

IMG_20260417_153228.jpeg|500

接下来 PVE 会做一会儿启动项的准备,跑一会儿脚本,不用管。

IMG_20260417_153313.jpeg|500

等一会儿会进入图形化的安装程序。不重要的过程我会直接跳过,我没提的过程一般就是维持默认就可以,大手子可以自己选择自己需要修改的部分。

首先是硬盘选项,选中自己的系统盘后,点击 Options 按钮打开。

具体需要根据自己的硬盘来确定,各参数说明如下:

  • 文件系统(Filesystem):无脑选 ext4 就对了,稳定高效
  • hdsize:系统盘总大小,维持默认即可
  • swap:交换分区(Swap),当物理内存不足时充当虚拟内存,防止 OOM(内存溢出)。一般不超过 8G,物理内存大时根本用不到,多填只会浪费空间
  • maxrootPVE 自留空间,存放系统及应用程序数据,填 32G 即可
  • minfree:预留不分配空间,防止日志等塞满硬盘导致服务挂掉。计算方式:min(硬盘大小 / 8, 16GB),即 128G 以下填八分之一,128G 及以上填 16G
  • maxvz:剩余空间,留空即可

笔者硬盘是 128G,最终数据如下:

IMG_20260417_154834.jpeg|500

点击 OK 继续。

下一个要注意的是网卡配置:网卡选择能上网的那一个,域名随便填一个,比如 pve.local 或者 pve.lan。然后剩下三项分别填入:

  • IP 地址(Address)PVE 宿主机自身的静态 IP
  • 网关(Gateway):你路由器的 IP,通常是 x.x.x.1
  • DNS 服务器:可填路由器 IP 或公共 DNS

一般来说维持默认就可以。但是如果有内部复杂组网需求的小伙伴还是要注意改成自己的,比如如果你局域网内有自建 DNS 服务器的话。

IMG_20260417_155401.jpeg|500

接着会让你确定你的所有设置,没问题就点击安装正式开始安装了。

然后会走个几分钟的进度条~

完事儿会提示你安装完成,此时就可以拔掉 U 盘然后点击 Reboot 重启了。

之前拔掉的硬盘也可以这时候插回去了~ 一会儿硬件直通用~

此时因为 U 盘拔掉了,所以会自动使用系统盘重启,就可以正式进入 PVE 了。

进入系统界面后,如果出现如下的登录界面,说明安装成功了~

IMG_20260417_160037.jpeg|500

注意看登录界面上面是有个 URL 的,这个 URL 就是 PVE 的后台管理服务的 IP + 端口,你可以在同网段内的任意机器用这个 URL 来打开了。

可以试一下,如果用另一台电脑正常打开了后台,弹出了登录框,就说明安装成功了,可以开始使用了。

⚙️ PVE配置

首先用安装时设置的密码 + 用户名 root 登录,记得选择语言为简体中文。

PixPin_2026-04-18_00-04-56.png|600

会弹出一个提示说没有有效订阅,不用管他,这个主要是自动推送 PVE 更新和软件包的订阅,一会儿用脚本一键优化时就会帮你去掉,不影响 PVE 正常使用的。

PixPin_2026-04-18_00-05-05.png|600

首先我们需要配置上国内的 DNS 服务来保证它可以正常连接网络。

点击数据中心下的 pve -> 系统 -> DNS -> 编辑,打开 DNS 编辑界面。前两个服务器分别填两个国内比较稳定的 DNS 服务器,比如阿里云的 223.5.5.5、腾讯云的 119.29.29.29,第三个可以填入主网关的 IP,或者不填第三个也可以。

PixPin_2026-04-18_00-25-30.png|600

接下来点击 pve -> Shell 进入命令行,尝试 ping 一下百度来确定是否可以联网了,如果出现了正常的 ping 延迟数据,就说明网络通了。

PixPin_2026-04-18_00-07-13.png|600

接下来的直通配置包括换源手动改比较麻烦,所以这里我们使用第三方脚本来解决。如果你的 PVE 版本是 88 之前的,推荐使用 pve_source,这个脚本的功能多一些,但是目前似乎对 9 支持不太好。所以如果你的版本是 9,可以使用下面这个 pve_diy 脚本。

提示:运行第三方脚本前,建议先通过链接查看脚本源码确认安全后再执行。从互联网直接 curl | bash 存在一定安全风险。

# pve_source
wget -q -O /root/pve_source.tar.gz 'http://szrq.hkfree.work/pve-source/pve_source.tar.gz' && tar zxvf /root/pve_source.tar.gz && /root/./pve_source

# pve_diy
bash -c "$(curl -fsSL https://raw.githubusercontent.com/xiangfeidexiaohuo/pve-diy/master/pve.sh)"

# 如果上面的链接用不了,可以用下面的国内镜像版本
bash <(curl -sSL https://ghfast.top/https://raw.githubusercontent.com/xiangfeidexiaohuo/pve-diy/master/pve.sh)

pve_diy 脚本要用 curl,没装的先 apt install curl 装一下。

脚本启动后按提示操作就可以了,一般建议一键优化、PCI 硬件直通这两个一定跑一下,其他的根据需求选择。换源需要特别说一下,北方推荐用清华 TUNA 镜像站,南方可以考虑用中科大镜像站

PixPin_2026-04-18_00-29-23.png|600

到此 PVE 就算正式可用了,接下来开始创建虚拟机。


🖥️ 配置虚拟机

🆕 创建虚拟机

这里笔者在创建飞牛之前还创建了一些其它虚拟机,用于组网,下次再谈,这次我们主要说一下飞牛的虚拟机。

首先前往飞牛首页下载最新版本的 ISO 文件。

image.png|600

回到 PVE 后台,点击 pve -> local(pve) -> ISO 镜像 -> 上传,把 ISO 镜像文件上传到 PVE 后台存储中。

image.png|600

然后点击右上角创建虚拟机,打开虚拟机创建界面。这一次我就不详细说每一个选项的含义了,跟着我选就行了,具体的每一个选项含义和推荐选择,下一期讲家庭 PVE 组网再讲。

常规

填入名称,比如 fnos,其他不用动。

操作系统

ISO 镜像选择刚才上传的镜像,其它不用动。

系统

机型选择 q35q35 是较新的虚拟机芯片组,相比默认的 i440fx,支持 PCIe 直通、UEFI 启动等现代特性,性能和兼容性更好。

勾选 QEMU Agent(QEMU 代理),这样 PVE 可以与虚拟机内的 Guest Agent 通信,获取 IP、执行安全关机等操作。

BIOS 这个两种都可以,SeaBIOS 兼容性更好,UEFI 效率更高,在 fnOS 上使用其实区别不大。

如果你打算给 fnOS 的虚拟磁盘分配 1TB 以上的空间(注意是系统盘不是数据盘),就用 UEFI,因为 SeaBIOS 使用 MBR 分区表,最大仅支持 2TB。

其它不用动,下一项。

磁盘

飞牛官方推荐是 64G,那就给个 64G 就够了。

如果你是 SSD 的话,勾选 丢弃(Discard) 以支持 TRIM(延长 SSD 寿命),勾选 SSD 仿真 让虚拟机识别为固态硬盘;机械硬盘的话不用勾,其它不动。

CPU

这边推荐至少给两个核心四个核心会更稳。

因为飞牛的智能相册和影视库刮削都挺吃 CPU 的。

要注意的是,类别(Type)要拉到最下面选择 host。选择 host 会将物理 CPU 的全部指令集直通给虚拟机,性能最好,但会牺牲热迁移能力(家用场景无需热迁移,放心选)。

内存

fnOS 同样很吃内存,这边推荐至少给 8G,最好能给到 16G

不用担心自己的物理内存不够用,PVE 支持内存气球(Memory Ballooning)机制进行动态调度,这里配置的其实是虚拟机可使用的最大内存上限,只要所有虚拟机的内存不同时跑满,就不会爆。

勾选 Ballooning(内存气球),最小内存建议设为与最大内存相同的值。虽然这样实际上禁用了动态内存回收,但开启 Ballooning 驱动后 QEMU Guest Agent 才能正确上报内存使用情况。不开的话,PVE 后台会显示内存占用 100%(因为无法获取真实数据),容易造成误判。

网络

不用动。

确认

最后可以确认下跟我的是不是一样,我这里应该除了操作系统其它都是对的,我把飞牛的 ISO 镜像删掉了,所以这里的系统看着是 debian-13。

PixPin_2026-04-21_14-43-58.png|600

没问题就可以点击完成了。

🔗 配置硬件直通

笔者这里是 CPU 有一颗核显,还有三块组成 RAID 的阵列盘打算直通给 fnOS。直通的硬件无法给其它虚拟机分享,所以如果你没有直通需求的话,可以跳过这个章节。

⚠️ 注意:整个直通过程不要开机,直通配置完之后再开机。

🎮 GPU直通

选中刚才的 fnos 虚拟机,点击硬件 -> 添加,选择 PCI 设备,然后选择原始设备。展开下拉列表,找到你的 GPU 设备(通常名称中包含 VGADisplay 或具体的 GPU 型号如 Intel UHD,不确定的话问 AI 就行),选择之后勾选所有功能,点击添加,你的飞牛就可以识别出这颗 GPU 了。

image.png|600

💽 硬盘直通

硬盘的话比较麻烦。如果不想把整个阵列卡都直通的话,不要在 PCI 设备里直接添加 SATA/AHCI 控制器——那会把整个控制器直通给虚拟机,该控制器下挂载的所有硬盘都会被一起直通,其他虚拟机甚至 PVE 宿主机本身都将无法访问这些硬盘。

先用下面的命令在 PVE 的 Shell 里看一下所有硬盘和硬盘分区:

ls /dev/disk/by-id/

PixPin_2026-04-18_04-21-08.png|600

机械磁盘一般是 ata- 开头的,我这可以看到前三块就是,分别是一张东芝的盘和两张西数的盘。

-part1 的部分是该磁盘的分区,此命令会把硬盘和硬盘分区都列出来,所以我这里的三块盘是显示了六行。

接下来使用 qm 命令直通:

# 命令格式:qm set <VMID> --<磁盘总线><编号> <磁盘路径>
# 示例:把东芝硬盘以 SCSI 接口直通给 101 号虚拟机,挂载到 scsi1 插槽
qm set 101 --scsi1 /dev/disk/by-id/ata-TOSHIBA_HDWG51GUZSVA_3580A09XFWRH

需要注意的是 scsi 编号需要递增,如 scsi1scsi2scsi3scsi0 已被虚拟机的系统盘占用,所以直通盘从 scsi1 开始。

三条命令输完之后,回到虚拟机的硬件菜单,就会发现多了三块硬盘,此时飞牛也可以识别到三块硬盘了。

PixPin_2026-04-18_04-30-51.png|600

⚠️ 注意一定不要格盘!一定不要格盘!一定不要格盘!

创建存储空间的时候一定要按迁移之前的方式来创建,本来是几块盘还是那几块盘,飞牛会自动识别之前创建的存储池(Storage Pool)并恢复数据结构。

🔄 恢复飞牛设置

再次打开系统设置 -> 更新与还原 -> 系统配置 -> 还原系统配置,等待一会儿,飞牛就会把你之前的飞牛系统本身的设置恢复了,账号也都恢复了。

但是注意应用内和服务的数据都还没恢复,读者自己陆续恢复即可。


📝 结语

只能说还是因为自大和过分乐观吃到了苦果,或许当初侥幸逃过一关的时候就应该慢慢开始折腾迁移了,而不是等服务都挂了才紧急迁移,因为这台设备本身是装在机柜里的,搞了一晚上才搞好,全程伏地调试。

而且因为刚开始不了解 + 有点完美主义,导致我踩的坑远比看起来还要多。比如我还尝试了硬盘拷贝来把 PVE 完整迁移到新的硬盘上、尝试更换正在运行的两个虚拟机的 ID、更换正在运行的虚拟机的 BIOS 等莫名其妙的强迫症操作。

另外其实很大一部分时间用在了组网上。我目前是给家里分了两套网段,通过 OpenWrt 分割,还架了个简单的局域网 DNS 服务器,您感兴趣的话我可以写一篇家庭组网相关的文章。

所以还是不要太过乐观相信年轻的产品,更新频繁往往意味着稳定性差。不过折腾这么久也算有好处吧,现在虚拟机快照恢复基本就是一瞬间的事儿了~

让暴风雨来得更猛烈些吧!

image.png|600


评论