✕
开启精彩搜索
热门搜索
emby EMBY 解析 免流 源码 IPV6 阿里 阿里云 青龙 音乐 网心 网心云 webdav 阿里云盘 unraid 洗白 Rclone 刮削 云梦

OES NAS 折腾记:将飞牛 fnOS 从 eMMC 完美迁移至 SATA SSD

背景与起因

我使用的设备是 OES(OneThingCloud),刷入了飞牛 fnOS。虽然系统运行正常,但 eMMC 容量实在太小(仅 8G,可用不到 2G),不仅空间捉襟见肘,频繁的日志读写也让人担心 eMMC 的寿命。

为了提升系统性能和空间,我决定把系统迁移到一块 SATA 固态硬盘(SSD)上。由于 OES 特殊的硬件引导机制(启动必须依赖 eMMC),这就构成了一套“eMMC 引导 + SATA 系统”的组合方案。

下面是整个折腾过程中踩过的坑和最终的完美解决方案。

折腾过程与踩坑记录

第一阶段:OTA 升级导致的灾难与引导切换

最初,我尝试通过修改 eMMC 里的 fnEnv.txt 引导文件,让系统直接去 SATA 启动。虽然成功启动了,但在系统内进行 OTA 升级时,灾难发生了:系统直接卡死,重启后网口亮红灯(失联)。
经过排查,发现是因为 eMMC 里的引导内核版本与 SATA 里升级后的内核版本不一致,导致“引路人”迷路了。

为了救砖并恢复运行,我切回了 eMMC 系统,并通过修改 eMMC 的引导配置,临时恢复到了 eMMC 启动状态。

第二阶段:没有 U 盘怎么迁移?用 Rsync!

由于手头没有 U 盘可以重新刷写固件,我决定在 eMMC 运行的状态下,直接通过命令行把系统“热迁移”到 SATA 硬盘。

核心步骤:

  1. 挂载 SATA 分区到 /mnt/sata_sys 和 /mnt/sata_boot。
  2. 使用 rsync 将 eMMC 系统完整拷贝到 SATA(排除虚拟目录):
    rsync -aAXv / /mnt/sata_sys/ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"}
    rsync -av /boot/ /mnt/sata_boot/
    
  3. 极其关键的一步:因为换了硬盘,必须修改 SATA 系统里的 /etc/fstab,把根目录和 boot 分区的挂载 UUID 改成 SATA 自己的 UUID。如果不改,重启必死机。
  4. 修改 eMMC 里的 fnEnv.txt,去掉 #rootdev 的注释,让引导重新指向 SATA。

第三阶段:Web 页面打不开与空间满的“套娃”危机

历经千辛万苦切换重启后,SSH 能连上,但 Web 页面死活打不开。排查发现是 /usr/trim 目录权限丢失。执行 chmod o+x /usr/trim && systemctl restart trim_nginx 后恢复。

为了彻底解决重启后权限丢失的问题,我写了一个 systemd 开机自启脚本(fix-fn-perm.service),每次开机自动修复权限。

本以为大功告成,结果打开飞牛网页一看:系统空间 99.97% 已满! 通过 du -h -d 1 / 排查,发现 /vol00 目录竟然占了 29G。
原来,由于我用 rsync 拷了整个根目录,把以前生成的旧系统快照(如 GLOWAY STK512GS3-S7_1 和 RemovableDisk_1)当做普通文件一起“套娃”拷了过来。

清理命令:

rm -rf "/vol00/GLOWAY STK512GS3-S7_1"
rm -rf "/vol00/RemovableDisk_1"

清理完毕后,SATA 系统盘空间瞬间回到了健康的水平,系统终于完美运行。

💡 最终成果与经验总结

现在,我的 OES NAS 已经是一台“eMMC 引导 + 大容量 SATA 系统”的满血设备。回顾这次折腾,有几个经验值得记录:

  1. 引导与系统的版本必须对齐:OES 的引导极其脆弱,跨版本升级大概率亮红灯。
  2. 不要用 dd 全盘克隆:容量不同和 UUID 冲突会让你怀疑人生,用 rsync 文件级复制是最稳妥的。
  3. fstab 是生死线:迁移系统后,第一件事就是改 UUID,这决定了系统能不能找到自己的盘。
  4. 警惕 Btrfs 的“套娃”占用:用 rsync 拷贝 Btrfs 文件系统时,一定要手动清理那些历史快照目录,否则系统盘秒满。
  5. 开机自启脚本是救星:对于迁移后出现的固件小 Bug(如权限丢失),写一个 systemd 服务自动修复,比每次手动敲代码省心得多。

附录:开机自动修复 Web 权限的脚本
如果你也遇到了迁移后 /usr/trim 权限丢失导致网页打不开的问题,可以用这个方案:

  1. 创建 /usr/local/bin/fix-fn-perm.sh,写入 chmod o+x /usr/trim 和 systemctl restart trim_nginx。
  2. 创建 /etc/systemd/system/fix-fn-perm.service,配置 After=trim_nginx.service,并设置开机自启。
  3. 执行 systemctl enable --now fix-fn-perm.service 即可一劳永逸。

💬 评论区 0