2. 釜底抽薪:win vm系统和存储架构

计划

核心目标:把盘1 交还给 NixOS —— 旧 Win 分区让位到盘尾,盘首腾给 NixOS(2026-10-08 定案)

【盘1 现有布局】
  p1  BWINEFI   551 MiB    vfat   旧 Win 的 ESP
  p2  s500win   295.1 GiB  ntfs   旧 Win 的 C 盘
  未分配        约 1.57 TiB

【目标布局】
  [NIXOS ESP 2 GiB][root 约 1.57 TiB(1609 GiB)ext4 → …………][BWINEFI][s500win]
  盘首起连续排布;/s500data 是 root 内的目录,不单独划分数据分区

【执行步骤】
  1. 搬移:把 BWINEFI 与 s500win 整体搬到盘尾(保留旧 Win,不删)
     工具:傲梅分区助手 / MiniTool Partition Wizard / GParted
           —— Windows 磁盘管理不支持移动分区
     前置:sgdisk --backup 存分区表;s500win 内容已有 200G VHDX 副本兜底
     复核:搬完先验固件引导菜单还能进 Windows
           (GPT 下固件按分区 GUID 定位 ESP,搬移工具一般保留 GUID)
     退路:万一引导失效,PE 里 bcdboot X:\Windows /s Y: /f UEFI 重建
  2. 新建:腾出的盘首空间划两段
     NIXOS ESP 2 GiB —— 克隆入盘1 时才写引导(见计3)
     root 约 1.57 TiB ext4 —— 占其余全部
     复核:分区表起止不重叠且无空洞;root 的 ext4 可 mount、可 fsck

【为什么 Win 放盘尾】将来若放弃物理 Win,腾出的 0.29 TiB 紧接 root 尾部,
  可免费并入(growpart + resize2fs 在线完成)。当前 root 拿满,不留闲置洞。

【Win VM 数据剥离接口设计(保留设计,执行归「5. 浴火重生」)】
  核心目标:D 盘数据从虚拟机中剥离回宿主机数据盘,实现 Win VM “无状态化”
  1. 数据回迁:将移动硬盘中原 D 盘数据完整回迁至 /s500data
  2. KVM XML 映射配置(在 VM 配置文件中添加):
     <filesystem type='mount' accessmode='passthrough'>
       <source dir='/s500data'/>
       <target dir='s500data'/>
     </filesystem>

【Win VM 环境】
  3. 依赖安装:Win VM 内安装 WinFsp(VirtioFS 的 Windows 依赖)
  4. 启用服务:以管理员权限注册并自启 VirtioFS Windows 服务
     sc create VirtioFsSvc binpath="C:\Program Files\Virtio-Win\VioFS\virtiofs.exe"
     sc config VirtioFsSvc start=auto
     net start VirtioFsSvc
  5. 盘符替换:将 VirtioFS 映射为系统盘符(如 Z: 盘或直接顶替原 D: 盘)
  6. 重启验证:重启 VM,确认映射自动恢复且读写正常

【⚠️ 降级预案 (Plan B)】
  若 VirtioFS 在 Windows 处理 >10GB 单文件时出现缓存击穿/性能骤降,
  立即在 NixOS 宿主启用 Samba (SMB) 共享,Win VM 改用网络驱动器映射。

执行清单

本计只做盘1 的分区几何,不碰盘2 现有系统,也不启动任何 VM。做完后机器仍从盘2 启动;克隆入盘1 在「3. 反客为主」。编号:S = 分区几何(Step)。(2026-10-08 新增,承接计1 移交的分区事项)

    • 动作:用第三方工具(傲梅分区助手 / MiniTool Partition Wizard / GParted)把 BWINEFI(551 MiB)与 s500win(295.1 GiB)整体搬到盘尾;保留旧 Win,不删。Windows 磁盘管理不支持移动分区
    • 前置:sgdisk --backup 存分区表;s500win 内容已有 200G VHDX 副本兜底
    • 复核:搬完先验固件引导菜单还能进 Windows(GPT 下固件按分区 GUID 定位 ESP,搬移工具一般会保留 GUID);万一失效,PE 里 bcdboot X:\Windows /s Y: /f UEFI 重建
    • 注意:物理搬移 0.29 TiB,中途断电 = 分区表损坏;可再搬回来,不是单向门
    • 已完成(2026-10-09 实测):p1 BWINEFI 起始 LBA 3380763320、p2 s500win 结束 LBA 4000797326(≈盘尾 4000797359),盘首腾出 34..3380763319 共 1.5737 TiB 连续空闲;两个分区的类型 GUID 未变
    • 动作:腾出的盘首空间划两段 —— NIXOS ESP 2 GiB(克隆入盘1 时才写引导)、root 约 1.57 TiB(1609 GiB,ext4,占其余全部)
    • 复核:分区表起止不重叠且无空洞;root 的 ext4 可 mount、可 fsck
    • 注意:不单独划分数据分区;/s500data 是 root 内的目录(见计3)
    • 已完成(2026-10-09,经 pkexec 以 root 执行;脚本带前置断言,p1/p2 位置或类型不符即中止)
    • 结果:
      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
    • 实测验证(非“应该能用”):fsck.ext4 -n 无错(12 个 inode / 422070871 块,0% 不连续);ext4 挂载 rw 后写入→回读→删除均正常,df 报 1.6T 可用;vfat 同样挂载 rw 并读写正常,df 报 2.0G 可用
    • 动作:记录最终分区表(起止 LBA + PARTUUID + 卷标)存档,供计3 克隆时直接用
    • 复核:盘1:ESP 2 GiB + root ~1.57 TiB + BWINEFI + s500win 四段,无未分配空洞;盘2:/boot 与 / 未变,系统仍可正常启动
    • 盘1 四段无空洞:p3 2048..4196351 → p4 4196352..3380763319 → p1 3380763320..3381891727 → p2 3381891728..4000797326
    • 盘2 未受影响(实测):/ 与 /boot 挂载正常;nvme0n1p2 类型 GUID 仍为 0FC63DAF-8483-4772-8E79-3D69D8477DE4(Linux filesystem)、分区名 root —— 分区工具报的「root 标记损坏」经查是它不认识 ext4 的误报,分区表一个字未损
    • 存档位置:/home/cat/.hermes/profiles/nixos-u533b-u751f/backups/partition-tables/(两盘 GPT 头/尾各 1 MiB 原样镜像 + sfdisk 文本 dump + blkid);操作脚本在同级 partition-scripts/