从飞牛迁回黑群晖:一场「掉盘」疑案,真凶竟是电源
文中所有 IP、序列号均已脱敏,思路和命令不受影响。 起因:不想把数据交给不信任的系统 我的主力 NAS 之前跑的是飞牛(fnOS)。用下来功能没得挑,但有个心结始终解不开——它是国产闭源系统,数据主权这种事,等厂商真做了什么再想撤就晚了。所以决定迁回黑群晖(Xpenology),装完固定版本、以后也不升级了。反正我所有服务都在 Docker 里,迁移主要是存储和数据搬家的事。 结果这趟「简单的搬家」,在硬件上给我上了一课。 一个意外的好消息:存储格式其实兼容 动手前我最怕的是存储格式不兼容——以为飞牛是裸 btrfs,群晖认不出会强制格式化。上机一看 lsblk,发现自己想错了: sda1 → linux_raid_member → md → LVM2_member → btrfs → /volX 飞牛的存储结构和群晖几乎同构:mdadm(单盘 RAID1)+ LVM + btrfs 三层,md superblock 也是 1.2 版本。这意味着数据盘插到群晖上,理论上能用命令行手动挂载读出来,不必先搬走再搬回。 于是方案定了: 先备份不可再生的东西(服务配置、密码库、种子文件) 物理拔掉数据盘,用空盘装 DSM、建存储池 插回数据盘,命令行只读挂载,把数据灌进新池 第 2 步的拔盘是铁律——群晖装机时会在它能看到的每一块盘上划系统分区,数据盘不隔离就开装,13T 直接报废。 备份:几分钟的事,别省 不可再生的数据几乎全在配置盘上,才几个 G。用 tar 打包整个 Docker 目录,再对几个 sqlite 数据库做在线一致性快照(不用停容器): import sqlite3 s = sqlite3.connect(f"file:{src}?mode=ro", uri=True) d = sqlite3.connect(dst) s.backup(d) # 一致性快照,避免热备份拿到撕裂的中间态 密码库、索引器配置、辅种记录逐个存好,双份放在 NAS 和电脑上,全部校验通过。这一步零风险、完全可逆,是整个迁移里唯一不该图省事的环节。 诡异登场:怎么数着数着盘就少了 麻烦从这里开始。我这台是 6 块 16T + 2 块 SSD。现象是这样的: ...