前面我已经在这台 ThinkPad T480 的 PVE 上陆续安装过 Debian、Arch Linux、Windows 11、FreeBSD,甚至 Windows XP。
这次继续折腾一个更适合长期放在 PVE 里的系统:飞牛 fnOS。
和前面那些桌面操作系统不同,fnOS 的定位是一套 NAS 系统。安装完成以后,日常使用基本都在浏览器和手机 App 里完成,因此它其实非常适合运行在 PVE 虚拟机中。
这次我的目标也很简单:
先不做物理硬盘直通,只用 PVE 虚拟磁盘搭一套完整的 fnOS 环境。
最终配置如下:
| 项目 | 配置 |
|---|---|
| fnOS | fnOS 1.2 Standard |
| PVE VM | VM 120 |
| VM 名称 | pve-fnOS |
| CPU | 2 Core,Type = host |
| 内存 | 4GB |
| 系统盘 | 64GB |
| 数据盘 | 200GB |
| 系统盘接口 | SCSI |
| 数据盘接口 | SCSI |
| 网卡 | VirtIO |
| fnOS IP | 192.168.100.20 |
这套配置并不追求“正式 NAS”的最终形态,而是优先满足:
安装简单;
不影响 PVE 现有存储;
可以体验 fnOS 的存储、相册、影音、Docker 等功能;
后续如果觉得确实好用,再考虑物理硬盘直通。
一、先说一下我的 PVE 环境
我的 PVE 装在一台 ThinkPad T480 上:
16GB 内存;
256GB NVMe;
1TB 机械硬盘;
PVE 系统和部分 VM 放在 NVMe;
机械盘作为
hdd-data,主要存放 ISO、虚拟机磁盘等大容量数据。
网络则稍微特殊一点。
PVE 本身通过 Wi-Fi 接入家里的局域网,而虚拟机使用一个独立的:
192.168.100.0/24内部网络,通过 PVE NAT 上网。
因此这次安装完成以后,fnOS 最终拿到的地址是:
192.168.100.20我的主力电脑已经配置了到这个网段的静态路由,所以可以直接通过浏览器访问它。
如果是普通的有线 PVE 环境,直接让 VM 桥接到家庭局域网即可,网络反而会更简单。
二、下载并上传 fnOS ISO
首先到飞牛官网下载 x86 版本的 fnOS 安装 ISO。
下载完成以后进入 PVE Web:
Datacenter ↓ 对应存储 ↓ ISO Images ↓ Upload我这里的 ISO 统一放在机械硬盘对应的hdd-data中。
上传完成以后,就可以创建虚拟机了。
三、创建 fnOS 虚拟机
点击 PVE 右上角:
Create VM我这次创建的是:
VM ID:120 Name:pve-fnOSVM ID 本身没有特别要求,使用 PVE 自动分配的号码即可。
1. OS
选择刚才上传的 fnOS ISO。
Guest OS 选择:
Type:Linux Version:Linux 7.x - 2.6 Kernel这里的Linux 7.x - 2.6 Kernel只是 PVE 对 Guest OS 类型的一种分类,并不是说 fnOS 使用什么“Linux 7.x”。
保持默认即可。
2. System
System 页面我没有进行特殊修改。
大体保持:
Graphic card:Default Machine:Default BIOS:SeaBIOS SCSI Controller:VirtIO SCSI singlefnOS 是 NAS 系统,安装完成以后主要通过 Web 管理,因此这里完全没有必要像 Windows 11 那样折腾 TPM、UEFI 等配置。
显卡也保持默认即可。
四、创建 64GB 系统盘
系统盘我分配了:
Bus/Device:SCSI Disk size:64 GiB Cache:Default Discard:开启 IO thread:开启如果虚拟盘底层位于 SSD/NVMe 上,也可以开启:
SSD emulation这里的64GB 是整块虚拟硬盘容量。
安装 fnOS 时还会继续在这块硬盘里面创建系统分区、Swap 等,因此不要把“64GB 虚拟磁盘”和“64GB 系统分区”混为一谈。
另外,我这里一开始只添加系统盘,不添加 200GB 数据盘。
原因非常简单:
安装系统时只有一块盘,就完全不存在选错安装磁盘的问题。
等 fnOS 安装完成以后,再把数据盘挂进去即可。
五、CPU 和内存
CPU 我设置为:
Sockets:1 Cores:2 Type:host这里我比较建议把 CPU Type 改成:
host这样 Guest 可以直接使用宿主机 CPU 的大部分特性,也比较适合这种长期运行的 Linux VM。
内存设置:
4096 MiB也就是4GB。
我没有开启 Ballooning,直接给 fnOS 固定 4GB 内存。
对于目前以体验 NAS、相册、影音和一些应用为主的环境,这个配置已经足够起步。
以后如果 Docker 服务越来越多,再增加 CPU 和内存也非常方便。
六、配置网络
网络设置:
Bridge:vmbr0 Model:VirtIO Firewall:关闭VirtIO 是 Linux VM 下非常成熟的半虚拟化网卡方案,没有必要使用模拟的 Intel E1000 等网卡。
因为我的vmbr0是:
192.168.100.0/24所以 fnOS 安装完成以后也会工作在这个网段。
如果你的 PVE 直接通过有线网卡桥接到家庭 LAN,那么 fnOS 通常会直接从家里的路由器获得一个局域网 IP,使用起来会更加自然。
七、启动 fnOS 安装
虚拟机创建完成以后:
VM 120 ↓ Console ↓ Start Now随后进入 fnOS 安装界面。
安装流程本身并不复杂。
选择刚才创建的64GB 虚拟磁盘作为系统盘,然后按照安装程序提示继续。
因为当前 VM 只有这一块虚拟磁盘,所以基本没有选错硬盘的可能。
系统分区和 Swap
安装过程中需要配置系统分区和 Swap。
需要注意的是:
64GB是整个虚拟磁盘的容量,并不是一定要创建一个 64GB 的系统分区。
还需要给:
引导相关分区;
Swap;
其他系统空间
留出余量。
因此直接使用安装程序给出的合理默认值即可,没有必要刻意把系统分区拉满。
安装完成以后,fnOS 会重启。
这时可以在 PVE 中把安装 ISO 卸载掉:
VM ↓ Hardware ↓ CD/DVD Drive选择不再挂载 ISO。
同时确认启动顺序中系统盘优先于 CD-ROM。
八、初始化 fnOS
fnOS 正常启动以后,Console 会显示当前网络地址。
我的环境中最终使用:
192.168.100.20在电脑浏览器中访问这个地址,就可以进入 fnOS 的初始化界面。
按照提示配置:
设备名称 超级管理员账号 密码我的设备名称设置为:
pve-fnOS密码这里一定建议设置一个真正的强密码,尤其是以后如果准备开放远程访问。
初始化完成以后,就可以进入 fnOS 桌面了。
到这里,fnOS 系统本身已经安装完成。
九、再添加一块 200GB 数据盘
NAS 最重要的当然不是系统盘,而是数据盘。
关机以后回到 PVE:
fnOS VM ↓ Hardware ↓ Add ↓ Hard Disk添加:
Bus/Device:SCSI Storage:hdd-data Disk size:200 GiB Cache:Default Discard:开启 IO thread:开启 SSD emulation:关闭为什么这里关闭 SSD emulation?
因为我的:
hdd-data底层本身就是一块1TB Hitachi 机械硬盘。
所以没有必要把这块虚拟磁盘伪装成 SSD。
最终虚拟机的磁盘结构就很清楚:
PVE │ ├── 64GB System Disk │ └── fnOS │ └── 200GB Data Disk └── NAS Data这也是我这次没有直接把整块物理 HDD 直通给 fnOS 的原因。
目前只是体验和实验阶段,使用一个 200GB 虚拟盘:
不破坏 PVE 原有存储;
不影响其他 VM;
删除、迁移、备份都很方便;
已经足够体验 fnOS 的主要功能。
如果以后真的把这套 fnOS 长期作为家庭 NAS 使用,再考虑整块 HDD 或 SATA Controller 直通更加合理。
十、在 fnOS 中创建存储空间
重新启动 fnOS。
进入:
系统设置 ↓ 存储空间管理此时应该可以看到刚刚添加的约 200GB 新硬盘。
接下来按照 fnOS 的提示创建存储空间即可。
我的这套环境只有一块虚拟数据盘,而且底层本身已经建立在 PVE 的存储系统之上,因此没有打算在这里研究复杂 RAID。
它的目标首先是:
给 fnOS 一个真正独立于系统盘的数据空间。
这样以后安装相册、影音、Docker 等应用时,就已经具备一套比较完整的 NAS 环境了。
十一、开启 SSH
安装完成以后,我还做了一个服务器系统几乎必做的配置:
打开 SSH。
fnOS 中进入:
系统设置 ↓ SSH ↓ 开启 SSH随后就可以从其他电脑:
ssh 用户名@192.168.100.20登录 fnOS。
有了 SSH,以后检查系统状态、网络、磁盘、服务会方便很多。
当然,对于正常的 NAS 日常使用,并不需要频繁 SSH 登录,大部分操作仍然应该在 fnOS 的 Web UI 中完成。
十二、更新软件
打开 SSH 以后,我对系统的软件包进行了检查和更新:
sudo apt update sudo apt upgradefnOS 底层是 Linux 系统,因此我们仍然可以看到熟悉的 APT 软件包管理方式。
不过这里需要强调一下:
fnOS 并不是一套普通的 Debian Desktop,而是一套经过大量定制的 NAS 系统。
因此我这次执行apt upgrade更多是实验环境下的实际测试。
如果以后长期运行 fnOS,我会优先使用fnOS 自己提供的系统更新机制,而不是把它当普通 Debian 一样频繁手工做大规模软件包升级。
十三、QEMU Guest Agent 要不要装?
既然运行在 PVE 上,我还检查了一下:
sudo apt install qemu-guest-agent结果发现:
当前这套 fnOS 1.2 环境中已经安装了 QEMU Guest Agent。
也就是说,这一步实际上不需要额外安装。
可以检查:
systemctl status qemu-guest-agent然后在 PVE 中进入:
VM ↓ Options ↓ QEMU Guest Agent将它开启。
之后也可以在 PVE Host 上测试:
qm agent 120 ping如果能够正常返回,就说明 PVE 和 fnOS 之间的 Guest Agent 通道已经工作。
这对 NAS VM 还是比较有价值的。
PVE 可以通过它更好地获取:
Guest OS 信息;
IP 地址;
正常关机状态;
一些虚拟机内部信息。
所以QEMU Guest Agent 建议开启。
十四、SPICE 就没必要折腾了
之前在 PVE 上安装 Debian、Arch Linux、Windows 11 时,我还专门研究过 SPICE。
原因是这些系统都有真正的桌面环境,SPICE 能带来:
动态分辨率;
剪贴板;
音频;
remote-viewer;
更好的桌面操作体验。
fnOS 就完全不是这种使用方式。
它真正的管理路径是:
PVE Console ↓ 只负责安装和应急维护 SSH ↓ 命令行维护 Web / App ↓ 真正的日常使用所以这一次我完全没有折腾 SPICE。
PVE 自带的 noVNC Console 留着应急已经足够。
对于 NAS 系统来说,这反而更加干净。
十五、网络还有一点特殊之处
我的 PVE 并不是直接通过有线 Bridge 接入家庭局域网,而是:
家庭 LAN 192.168.31.0/24 │ Wi-Fi │ PVE │ NAT │ vmbr0 192.168.100.0/24 │ fnOS 192.168.100.20因此我的主力电脑配置一条静态路由以后,可以直接访问:
192.168.100.20但是家里的手机、电视、其他电脑默认并不知道:
192.168.100.0/24在哪里。
这个问题暂时不影响我安装和体验 fnOS。
后面如果开始真正研究:
飞牛相册;
手机 App;
影音;
SMB;
Docker 应用;
我准备直接利用PVE 的三层转发能力,按需做端口映射。
例如:
家庭设备 │ │ PVE_IP:某个端口 ▼ PVE │ │ DNAT ▼ 192.168.100.20:某个端口 │ ▼ fnOS这样没有必要一下子把 fnOS 的所有服务全部暴露到家庭网络。
需要哪个服务,就开放哪个端口。
这部分等真正用到时再折腾,也可以单独再写。
十六、最终效果
到这里,我的 fnOS VM 已经形成了一套比较完整的基础环境:
ThinkPad T480 │ ├── PVE │ ├── fnOS 1.2 │ │ │ ├── 2 Core CPU │ ├── 4GB RAM │ ├── 64GB System Disk │ ├── 200GB Data Disk │ ├── VirtIO Network │ ├── SSH │ └── QEMU Guest Agent │ └── Web 管理 └── 192.168.100.20相比前面在 PVE 上折腾 FreeBSD 图形桌面、QXL、Xorg 之类的问题,fnOS 的安装其实轻松得多。
原因也很简单:
NAS 天生就很适合虚拟化。
它并不需要复杂的虚拟显卡、桌面环境和远程桌面。
PVE 负责:
CPU;
内存;
网络;
虚拟磁盘;
虚拟机生命周期。
fnOS 则负责:
存储;
文件;
相册;
影音;
NAS 应用。
两者的边界非常清晰。
十七、以后完全可以把真实硬盘交给 fnOS
这次为了安装简单,我给 fnOS 添加的是一块:
200GB PVE 虚拟磁盘这很适合学习和体验:
存储空间;
文件共享;
相册;
影音;
下载;
Docker;
各种 fnOS 应用。
但如果以后真的打算长期使用 fnOS,这套架构完全可以进一步升级。
例如直接把一块真实机械硬盘交给 fnOS:
Physical HDD ↓ PVE ↓ 硬盘 / 控制器直通 ↓ fnOS ↓ 真实 NAS 数据盘这其实并不是什么奇怪的玩法。
恰恰相反,PVE 跑 NAS VM,再把真实数据盘直通给 NAS,是家庭 All-in-One 主机里非常常见的一种架构。
PVE 负责虚拟化层:
CPU Memory PCIe Network VM 生命周期而 fnOS 负责:
硬盘 存储池 共享目录 相册 影音 备份 下载 NAS 应用两边职责非常清楚。
这样一来,PVE 就不只是一个“装几个系统玩的虚拟机平台”,而逐渐变成整个家庭服务器的底座。
十八、fnOS 也不只是一个“文件服务器”
NAS 这个词很容易让人想到:
放几个硬盘,然后 SMB 存文件。
但现在的 NAS 实际上已经远远不止这些东西了。
最直接的一个用途就是:
下载机
家庭服务器一天 24 小时开着,本身就非常适合处理:
BT;
PT;
HTTP 下载;
离线下载;
自动追剧;
下载后的媒体整理。
电脑没必要一直开着。
手机上丢一个任务,NAS 自己慢慢下载即可。
而且下载完成以后,文件本身就在 NAS 上:
下载 ↓ NAS 存储 ↓ 影视库 ↓ 电视 / 手机 / 平板播放完全不需要再从 PC 往 NAS 搬一次。
这可能才是很多家庭 NAS 真正高频的用途之一。
相册与手机照片备份
另外一个很实际的用途就是照片。
现在手机照片、视频越来越多,如果完全依赖手机本地存储,很快就会遇到容量问题。
NAS 可以变成自己的家庭照片库:
手机 ↓ 自动备份 ↓ fnOS ↓ 家庭照片库以后换手机,照片依然在自己的硬盘上。
如果飞牛相册实际体验足够好,这很可能会成为我使用 fnOS 最重要的理由之一。
家庭影音中心
再往前一步就是影音。
下载机和 NAS 其实天然适合组合:
下载 ↓ 整理 ↓ 刮削 ↓ 媒体库 ↓ 电视 / 手机 / 平板一台机器可以同时承担:
数据存储;
下载;
影视库;
家庭媒体服务器。
这比“NAS 就是个共享文件夹”有意思得多。
十九、再往前一步:NAS 甚至可以和 AI 放在一起
现在还有一种越来越有意思的玩法:
给家庭服务器加 GPU。
以前 NAS 对 GPU 的需求并不大。
但现在情况开始变化。
GPU 可以用于:
视频硬件转码;
图片处理;
AI 相册;
本地 OCR;
语音识别;
Embedding;
RAG;
本地大模型推理。
甚至真的有人把:
NAS + GPU + LLM塞进同一台家庭服务器。
例如:
PVE │ ├── fnOS │ └── HDD / SSD │ └── AI Linux VM └── GPU Passthrough ↓ Ollama vLLM Stable Diffusion Whisper Embedding这时候甚至没必要要求 fnOS 自己承担所有 AI 工作。
PVE 的好处恰恰就是可以拆开。
fnOS 专心负责数据:
照片 电影 文档 模型 数据集另一台 Linux VM 专门负责 GPU:
CUDA Docker vLLM PyTorch AI 服务它们通过虚拟网络共享数据即可。
这其实和我前面搭 AI Infra 实验环境的思路已经开始连起来了。
一台服务器既可以是 NAS,也可以同时是一台本地 AI Server。
二十、PVE + fnOS 真正有意思的地方:All-in-One
如果继续发散,其实最终可以形成一台很典型的家庭 All-in-One 主机:
PVE │ ┌───────────────┼───────────────┐ │ │ │ fnOS OpenWrt Linux VM │ │ │ NAS 软路由 Docker 相册 DNS AI 影音 VPN 开发环境 下载 DHCP │ │ HDD / SSD甚至还可以再加:
Windows VM Home Assistant 测试 K8S 各种 Linux这就非常符合 PVE 的定位。
如果直接裸机装 fnOS:
Hardware ↓ fnOS整台机器基本就成为 NAS。
但如果:
Hardware ↓ PVE ↓ ┌──────────────┬──────────────┐ fnOS OpenWrt Linux那么同样一套硬件就可以承担很多完全不同的工作。
这也是为什么很多家庭服务器最后会走向:
PVE / ESXi / Unraid 之类的虚拟化底座 + NAS VM + 其他服务。
当然,All-in-One 也不是完全没有代价。
一台机器承担的工作越多:
配置越复杂;
故障影响范围越大;
网络设计越重要;
硬盘直通、GPU 直通也会增加维护成本。
尤其如果把软路由也放进去:
PVE 一旦重启,家里的网络可能也跟着断。
所以这是一种“资源利用率和可玩性很高”的方案,而不是唯一正确的方案。
但作为实验环境,它实在太适合折腾了。
写在最后
这次在 PVE 上安装 fnOS 1.2,真正让我感兴趣的其实并不只是:
“终于又装好了一个新系统。”
而是它让我这台 PVE T480 又多了一种完全不同的可能。
之前我在 PVE 上装:
Debian Arch Linux Windows 11 FreeBSD Windows XP更多是在体验不同操作系统。
而 fnOS 不太一样。
它开始让这台 PVE 从:
虚拟机实验平台
慢慢有了一点:
家庭服务器
的味道。
目前它只是:
2 Core 4GB RAM 64GB System Disk 200GB Virtual Data Disk但以后完全可以进一步演化:
真实 HDD ↓ fnOS NAS ↓ 相册 / 影音 / 下载 / 文件 GPU ↓ Linux VM ↓ AI / LLM / CUDA 虚拟网卡 ↓ OpenWrt ↓ 家庭网络 其它 VM ↓ Linux / Windows / K8S最后可能变成一台真正的:
NAS + 下载机 + 影音服务器 + AI Server + 软路由 + 实验室
All-in-One 主机。
当然,我现在还不会马上把这台 T480 改造成这么复杂。
这次先把 fnOS 最基础的环境搭起来。
下一步我更想实际体验一下:
飞牛相册到底怎么样;
手机照片自动备份是否好用;
下载机怎么搭;
飞牛影视体验如何;
SMB 文件共享;
Docker 应用生态;
PVE NAT 环境下手机和电视如何访问;
如果给 fnOS 一块真实 HDD,会有什么变化。
如果这些东西确实好用,那么到时候就不仅仅是在 PVE 上:
“装过一次飞牛。”
而是真的可以考虑:
让飞牛长期住下来。