架构
- nisox宿主系统:运行在盘2,接管所有硬件,虚拟化提供,显卡可切换直通,看vm需求,公共需求的标准件则在宿主直接docker提供
- vm虚拟系统:运行在盘1子目录内,被动接受资源,关注内部最优,不干预宿主机行为
- 数据:运行在盘1,映射给vm,冷备给移动盘
初始态
固态硬盘1:c盘300G(win10) D盘1700G(data),速度1GB/s,
固态硬盘2:闲置,120G,速度300MB/s,
移动硬盘:2000GB(原先的对系统分区的镜像和数据分区的文件同步冷备盘),速度800MB/s
中间态
固态硬盘1:整盘 ZFS,挂载 /dataset
├── vms/ Win10ltsc2021.qcow2(从移动硬盘恢复)
├── s500data/ D盘数据(从移动硬盘恢复,NTFS 数据迁入 ZFS)
├── repos/ NixOS 配置仓库 + Git 仓库
└── docker/ Docker Compose 与映射数据
固态硬盘2:NixOS 宿主系统 + Docker 程序盘
└── 极简系统、KVM/libvirt、Docker、Hermes-Host
固态移动硬盘:数据恢复源 + QCOW2 来源 + 傲梅原始镜像冷备
├── D盘数据(用于恢复到 /dataset/atdata)
├── WinVM.qcow2(用于放入 /dataset/vms)
└── 傲梅原始 .adi 镜像(最终兜底)
最终态态
固态硬盘1:/dataset(ZFS 单池,dataset 逻辑隔离)
├── s500data/ 核心数据资产(自动快照 + zfs send 到移动硬盘)
├── repos/ Git 仓库 + NixOS 配置(自动快照 + zfs send)
├── docker/ Docker 配置与映射数据(不自动快照)
└── vms/ QCOW2 虚拟磁盘(不备份,可随时重建)
固态硬盘2:NixOS 系统 + Docker 程序盘
└── 运行时卷,可抛弃,从配置重建
固态移动硬盘:ZFS 备份目标 + 冷数据归档 + 傲梅原始镜像兜底
├── 接收 atdata 和 repos 的 zfs send 流(保留快照历史)
└── 冷数据归档
实施注意点
网络 VM 无法访问外网 → virsh net-start default;防火墙信任 virbr0
网络 多 VM 互联 → Bridge 网络(br0),VM XML 指定 source bridge
网络 透明代理阻断 br0 内部通信 → Mihomo iptables 规则需放行 br0
VirtioFS Windows 端无法挂载 → 安装 WinFsp + 启用 VirtioFS 服务
VirtioFS 大文件传输性能下降 → 超过 10GB 的文件可能性能骤降,考虑 Samba 备选
驱动 Win VM 蓝屏 → 磁盘总线先用 IDE,装好 VirtIO 驱动后再切换
性能 VM 磁盘 I/O 瓶颈 → 磁盘总线设为 VirtIO,网卡设为 VirtIO,启用 vhost-net
性能 CPU 绑核 → 7840U 只有 8 核 16 线程,不建议硬绑,动态调度更灵活
性能 Hugepages → 启用后不支持内存超配,需权衡
休眠 S0ix 调不通 → 禁用虚假唤醒源(I2C 环境光传感器),NixOS 配置固化
休眠 suspend-then-hibernate → 需配置 swap 分区,至少 16GB
备份 ZFS 流无法直接查看 → 双轨制:ZFS send 增量 + rsync 可浏览副本
Hermes 多实例 Bot 冲突 → 每个 profile 使用独立 Telegram Bot Token
外设 Input Leap 与 Hermes 关系 → Input Leap 管键鼠跨界,Hermes 管 AI 调度
2026-10-08 方案调整
触发:NixOS 的声明式配置机制更适合长期迭代(明文、模块化、可回退、AI 可读写),
原「NixOS 只当宿主 + 主力 Linux VM」的方案作废。
【角色重排】
主力系统:NixOS 本体直接当主力(原「3. 反客为主」的主力 Linux VM 不再需要)
Win 系统:保留 VM 形态(游戏 / 网银),运行调试归「2. 釜底抽薪」
盘1(2T):主力盘 —— 系统 root 与数据都在它上
盘2(128G):现有 NixOS 先养熟,成熟后克隆入盘1;盘2 留作备用僚机
【存储定案:全部 ext4,放弃 ZFS】
理由:单盘机上 ZFS 的冗余维度买不到(无第二盘位)、运维面用不上(不扩池不换盘),
只剩快照与校验;而「任何 U 盘可 mount、可 fsck」比这两样更值钱。
代价:放弃快照回退与数据校验 —— 由备份层承担(冷备到移动硬盘)。
【盘1 分区规划(2026-10-08 定案 · 2026-10-09 已落地)】
一、把 BWINEFI(551 MiB)与 s500win(295.1 GiB)整体搬到盘尾,保留旧 Win 不删 ✅ 已执行
二、盘首起连续排布:NIXOS ESP 2 GiB → root 约 1.57 TiB(1609 GiB,ext4) ✅ 已执行
三、不单独划分数据分区;/s500data 是 root 内的目录,平铺 vms/ repos/ docker/ 个人数据
理由:Win 置盘尾,将来若放弃物理 Win,腾出的 0.29 TiB 紧接 root 尾部可免费并入
(growpart + resize2fs 在线完成);当前 root 拿满,不留闲置洞
【盘1 最终分区表(2026-10-09 实测,克隆入盘1 直接引用)】
p3 NIXESP LBA 2048..4196351 2.00 GiB vfat(FAT32) LABEL=NIXESP
UUID=8BE3-50EF PARTUUID=f4bb77fa-b2be-4a83-966d-fc1e28ef1dd5
p4 nixos-root LBA 4196352..3380763319 1610.07 GiB ext4 LABEL=nixos-root
UUID=75ebd049-5ac5-43fe-a290-2cddeb7b748e PARTUUID=da073886-aa65-47f3-9234-cb4663e55d52
p1 BWINEFI LBA 3380763320..3381891727 0.54 GiB vfat LABEL=BWINEFI (旧 Win,未动)
p2 s500win LBA 3381891728..4000797326 295.12 GiB ntfs LABEL=s500win (旧 Win,未动)
四段无空洞。实测:fsck.ext4 -n 无错;ext4 与 vfat 均挂载 rw 读写正常。
操作与备份归档:~/.hermes/profiles/nixos-u533b-u751f/backups/{partition-tables,partition-scripts}/
【B 方案的已知代价(系统与数据同处一条 ext4)】
重装 NixOS 会连数据一起处理(缓解:nixos-install 不格式化覆盖装 / 先冷备)
/s500data 写爆 = / 也满 = 系统不可用(缓解:ext4 project quota 给数据目录设上限)
数据不能单独离线 fsck;跨机读不受影响(挂盘1 root 即可)
【僚机(盘2)读盘1 数据:bind mount】depends 不能省,否则 bind 早于 /mnt/disk1 执行
fileSystems."/mnt/disk1" = { device = "UUID=75ebd049-5ac5-43fe-a290-2cddeb7b748e"; fsType = "ext4";
options = [ "ro" "nofail" "x-systemd.device-timeout=5s" ]; };
fileSystems."/s500data" = { device = "/mnt/disk1/s500data";
options = [ "bind" "ro" "nofail" ];
depends = [ "/mnt/disk1" ]; };
【命名口径】目录 / 挂载点用业务或设备名,不用技术概念名(/s500data,非 /dataset)
【执行顺序】盘2 NixOS 成熟 → 克隆入盘1(含双 EFI 引导)→ 才动 Win VM