部署:Nixos虚拟化,六计拿下特洛伊

架构

  • 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