6. 不败之地:重建系统备份和数据备份

计划

核心目标:控制数据可恢复,系统可重建

【2026-10-08 节奏重排】ZFS 已废(存储定案 ext4)⇒ 下方原计划中全部 zfs snapshot / send /
  syncoid / sanoid / zpool 相关内容作废(原文保留备查)。改为:

  一、系统备份(配置层,不做整盘镜像)
     主机 ↔ 僚机 双向选择覆盖:任一方被验证可用后,将配置与系统状态同步到对方
     依据:NixOS 的系统可由声明重建,不需要镜像;重点是 /etc/nixos 与 /home

  二、主机系统整体备份的范围(他问的「缺 EFI 世代记录」有答案)
     内容:root 的配置文件 + 系统程序(/nix/store 重建即可)+ 数据文件
     疑点:只备 root 不备 ESP ⇒ 恢复后引导菜单里的历史 generation 不在
     结论:连 ESP 一起备。世代记录(loader/entries 与各代内核/initrd)全在 ESP 上,
           它只有几十 MB,成本极低;不备反而贵

  三、数据层冷备(/s500data → 移动硬盘)
     可浏览的 rsync 副本 + 逐文件 SHA256 清单(跨格式、跨文件系统的完整性基线)
     旧 Win 的 VHDX 与傲梅 .adi 保留为最终兜底

  四、验证
     日常:rsync 后抽查 diff
     季度:用僚机或 VM 做一次完整恢复演练

  五、灾难重建 S.O.P(对应新结构)
     1. 新盘装 NixOS
     2. 恢复 /etc/nixos 与 /home,nixos-rebuild switch
     3. 恢复 /s500data
     4. 恢复 ESP(保留世代菜单)或重装引导

【原计划(ZFS 时代,保留备查)】
【备份策略矩阵】
  s500data  → ZFS 本地快照 + rsync 到移动硬盘(可浏览)
  repos     → ZFS 本地快照 + rsync 到移动硬盘(可浏览)
  docker    → ZFS 本地快照 + rsync 到移动硬盘(可浏览)
  vms       → ZFS 本地快照 + zfs send -c 块级增量到移动硬盘

【本地自动快照(Sanoid)】
  策略:s500data/repos/docker/vms 4个小时,7个日,4个周,12个月,3个年
  回滚:zfs rollback dataset/s500data@autosnap_xxx

【冷备】
  首次初始化:
    zpool create backup_pool /dev/disk/by-id/移动硬盘
    zfs create backup_pool/vms
    mkdir -p /mnt/backup-rsync/{s500data,repos,docker}
  日常同步:
    rsync -a --delete --inplace /dataset/s500data/ /mnt/backup-rsync/s500data/
    rsync -a --delete --inplace /dataset/repos/    /mnt/backup-rsync/repos/
    rsync -a --delete --inplace /dataset/docker/   /mnt/backup-rsync/docker/
    sanoid --take-snapshot=manual dataset/vms
    syncoid --no-privilege-elevation --sendoptions="-c" dataset/vms backup_pool/vms
    zpool export backup_pool && 拔盘
  触发方式:手动执行 backup.sh,或通过 Hermes-Host 说“执行冷备”

【验证机制】
  日常:rsync 后 diff -r 抽查;zfs send 后 zstreamdump 校验
  季度:隔离 VM 中执行完整恢复演练

【灾难重建 S.O.P】
  1. 新盘装 NixOS LiveUSB
  2. 挂载 /dataset,git clone 配置,nixos-rebuild switch
  3. rsync 恢复 s500data、repos、docker
  4. zfs receive 恢复 vms
  5. 全量复活,< 30 分钟

【空间估算】
  rsync 副本 ~600GB(三个目录合计)+ zfs send 流 ~200GB = 800GB
  2TB 移动硬盘剩余 1.2TB 缓冲
    • 原win脚本位置:/s500data/fileJob/1606atibm/2105oracle/scripts/vps_backup.ipynb
    • 改造为:运行在服务器docker实例 与 本机/s500data/docker的同步,比如nginx多实例需要命名不同目录名和服务名
    • 原凭证和路径以及排除规则都要适配,有的可以从运行实例的yml映射解决(减少映射等于精确锁定需要备份的数据)
    • 迁移重建:nix配置体系建立远端仓库,作为源,可能在/etc/nixos/增加一个脚本,来管理仓库的拉取安装,比如 执行仓库远端地址/install.sh,引导你输入github仓库用户名密码,在本地完成拉取后,执行硬件编号适配,完成nixos系统快速重建?或者readme说明增加简单的1-3步操作命令也可以
    • 备份还原:不走nix rebuild,而是完整备份 运行时系统,还原后重启完全一样,支持增量备份,可以选择不同的增量时间点作为还原,备份文件是单镜像文件还是一个目录多文件无所谓,主要是足够nixos linux native,不要整的太山寨自造土味就行了
    • 基于目录的双通同步:支持本地目录,移动硬盘目录,ftp目录,sftp目录,手机kde连接后的目录,google driver目录,onedriver目录,dropbox目录
    • 支持include和exclude强大规则
    • 支持差异分析判断每个文件的同步方向,扫描后可以手动调整部分内容的同步方向,再执行同步(goodsync交互逻辑)
    • 指定某个目录下的多个目录,过滤掉一些子目录,对另一个目录最同步(goodsync交互逻辑)
    • 主要是工具选型,S1,S3,S4 本质上可以是同一个的强大高度定义的同步工具,管理多套同步方案
    • S2有点难,其中重建主要是对于github的运用,可能多个sh脚本+github配置文件(用户可以在一个全新nixos系统,填写配置文件执行sh快速拉取,以及后续重建nixos操作的引导或说明),系统备份还原我对linux不熟悉,希望有更native的解决方案。迁移重建和备份还原是两种并存的系统维护手段,都需要建立起来