1. 从 eMMC 到 SATA为什么非要折腾这次迁移网心云 OES Plus 这台小机器原厂系统跑在板载 eMMC 上容量通常只有 8GB 到 16GB。刷完 Armbian 之后系统本身加上 Docker、常用工具链再塞几个容器eMMC 很快就见底了。我最初也是抱着“凑合用”的心态结果一次apt upgrade直接报磁盘空间不足连内核都没更新成功机器重启后卡在登录界面进不去。那一刻我就下定决心必须把系统盘迁到 SATA 硬盘上。这件事的核心价值在于OES Plus 本身带一个 SATA 接口可以接 2.5 寸硬盘或通过转接线接 3.5 寸盘。把 Armbian 的根文件系统从 eMMC 迁移到 SATA 硬盘带来的好处不只是容量变大。SATA 硬盘的读写寿命远高于 eMMC尤其是跑 Docker 容器、日志频繁写入的场景eMMC 的擦写次数很快就会被消耗掉。迁移之后系统盘容量可以做到 128GB、256GB 甚至更大想装什么装什么再也不用天天盯着df -h发愁。适合看这篇内容的人是已经给 OES Plus 刷好 Armbian、正在被 eMMC 容量困扰、手里又正好有闲置 SATA 硬盘的玩家。如果你还没刷机建议先把 Armbian 跑起来确认网络、SSH 都正常再来看迁移的事。整个迁移过程不算复杂但有几个关键点如果搞错了机器会直接起不来所以我会把每一步的原理和踩坑点都讲清楚。提示迁移前请务必确认你的 SATA 硬盘已经被系统正确识别并且没有重要数据。迁移过程会格式化这块硬盘。2. 迁移前的硬件确认与系统状态检查2.1 SATA 硬盘的识别与供电问题OES Plus 的 SATA 接口供电能力有限如果你接的是 2.5 寸机械盘或 SSD一般可以直接带动。但如果是 3.5 寸盘必须外接供电否则会出现硬盘反复掉线、识别不稳定甚至根本认不到的情况。我一开始图省事直接拿了一根 SATA 转接线接 3.5 寸盘结果dmesg里全是ata1: link is slow to respond的报错换了带独立供电的硬盘盒才稳定下来。确认硬盘识别的方法很简单SSH 登录后执行lsblk你会看到类似这样的输出NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT mmcblk0 179:0 0 14.6G 0 disk ├─mmcblk0p1 179:1 0 256M 0 part /boot └─mmcblk0p2 179:2 0 14.3G 0 part / sda 8:0 0 238.5G 0 disk这里mmcblk0就是 eMMCsda就是你的 SATA 硬盘。如果sda没出现先检查供电和线材别急着往下走。2.2 当前系统盘的使用情况与迁移必要性评估在执行迁移之前先看一眼当前根分区的占用df -h /如果使用率已经超过 70%那迁移的紧迫性就很高了。另外还要确认一下当前系统是不是纯 eMMC 启动有些玩家可能之前已经把/boot放在别的地方了这种情况迁移步骤会略有不同。还有一个容易被忽略的点检查 eMMC 的健康状态。虽然 eMMC 不像 SSD 那样有完整的 SMART 信息但你可以通过内核日志看看有没有 I/O 错误dmesg | grep -i mmc\|error如果已经有大量读写错误说明 eMMC 寿命快到了迁移更是刻不容缓。2.3 备份当前系统的关键配置迁移过程中如果操作失误系统可能无法启动。虽然我们可以通过重新刷机来恢复但之前配置好的网络、Docker 容器、各种服务都会丢失。所以迁移前建议把关键配置备份到 U 盘或另一台机器上。需要备份的内容包括/etc/network/interfaces或 NetworkManager 的配置文件/etc/fstabDocker 的容器和卷数据如果放在系统盘上的话你自己写的脚本和配置文件我一般会直接打包整个/etc目录tar czf /tmp/etc-backup.tar.gz /etc然后把文件传到电脑上存着。这个习惯救过我好几次尤其是折腾分区表的时候。3. 用 dd 把 eMMC 系统完整克隆到 SATA 硬盘3.1 为什么选择 dd 而不是重新安装把 Armbian 迁移到新硬盘常见做法有两种一是重新在 SATA 硬盘上刷一遍 Armbian二是用dd把当前 eMMC 上的系统完整克隆过去。我强烈推荐第二种原因很直接你当前系统里已经配置好的所有东西——网络设置、SSH 密钥、Docker 环境、各种依赖——全都会原样保留。重新刷机意味着你要从头再来一遍时间成本太高。dd的原理是逐扇区复制它不管文件系统里有什么直接把整个块设备的内容原样搬到另一个块设备。对于 eMMC 到 SATA 这种场景只要目标硬盘容量大于等于源设备就能完整克隆。3.2 确认设备路径与容量匹配这一步非常关键搞错设备路径会把数据写到错误的地方。再次确认lsblk -o NAME,SIZE,TYPE,MOUNTPOINT假设 eMMC 是/dev/mmcblk0SATA 硬盘是/dev/sda。你需要确保/dev/sda的容量大于/dev/mmcblk0。如果 SATA 硬盘容量更小克隆会失败或者截断系统肯定起不来。注意执行 dd 之前确保 SATA 硬盘没有被挂载。如果已经挂载了先umount掉。3.3 执行克隆与同步写入克隆命令本身很简单dd if/dev/mmcblk0 of/dev/sda bs4M statusprogress convfsync这里解释一下参数选择。bs4M是块大小设大一点可以提升复制速度4M 在大多数场景下是比较均衡的选择。statusprogress让你能看到进度不然 dd 默认静默运行你不知道它是在干活还是卡死了。convfsync确保数据真正写入磁盘后才返回避免缓存导致的数据不完整。整个克隆过程取决于 eMMC 的容量和 SATA 硬盘的速度一般 16GB 的 eMMC 大概需要几分钟到十几分钟。完成后执行一次sync确保所有缓存落盘sync3.4 克隆后的分区表检查克隆完成后SATA 硬盘的分区表应该和 eMMC 一模一样。用fdisk看一下fdisk -l /dev/sda你会看到和 eMMC 相同的分区结构比如一个/boot分区和一个根分区。但此时根分区的大小还是原来 eMMC 的大小比如 14GB而硬盘实际有 238GB。多出来的空间还没有被利用这就是下一步要解决的问题。4. 根分区扩容把剩余空间吃干净4.1 理解分区表类型对扩容的影响扩容之前要先搞清楚你的分区表是 MBR 还是 GPT。这决定了你能用的工具和操作方式。查看方法parted /dev/sda print如果显示Partition Table: msdos就是 MBR如果显示gpt就是 GPT。OES Plus 原厂 Armbian 镜像一般是 MBR 分区表但如果你之前自己改过就另当别论了。MBR 分区表有个限制主分区最多四个而且单个分区最大支持 2TB。对于大多数 SATA 硬盘来说够用了。GPT 则没有这些限制但操作上稍微复杂一点。4.2 使用 parted 调整分区大小假设你的根分区是/dev/sda2这是最常见的情况。操作步骤如下parted /dev/sda进入 parted 交互界面后(parted) resizepart 2 100% (parted) quitresizepart 2 100%的意思是把第 2 号分区的结束位置扩展到磁盘的 100% 处。执行完之后分区表已经更新但文件系统还不知道自己变大了。注意如果你的根分区是/dev/sda1就把数字改成 1。操作前务必确认分区编号改错了分区会导致数据丢失。4.3 resize2fs 扩展文件系统分区扩大之后需要用resize2fs让 ext4 文件系统感知到新的空间resize2fs /dev/sda2这个命令会自动把文件系统扩展到分区的大小。执行完成后再df -h看一下根分区应该已经变成接近硬盘总容量的数值了。如果你的文件系统是 btrfs命令换成btrfs filesystem resize max /。如果是 xfs则需要先挂载再执行xfs_growfs /。Armbian 默认一般是 ext4所以resize2fs是最常用的。4.4 扩容后的验证与常见报错处理扩容完成后验证一下df -h / lsblk /dev/sda如果df显示的容量还是原来的大小可能是文件系统没有正确扩展。常见原因有两个一是分区没有真正扩大用parted print再确认一次二是resize2fs执行时分区处于挂载状态但内核没有重新读取分区表这时候可以尝试partprobe /dev/sda然后重新执行resize2fs。还有一种情况是resize2fs报The filesystem is already X blocks long. Nothing to do!这说明文件系统已经和分区一样大了问题出在分区本身没有扩大回头检查parted的操作。5. 让系统从 SATA 硬盘启动bootloader 与 fstab 调整5.1 修改 fstab 中的根分区标识系统能不能从 SATA 硬盘启动关键看 bootloader 和/etc/fstab的配置。先看当前 fstabcat /etc/fstab你可能会看到类似这样的行/dev/mmcblk0p2 / ext4 defaults,noatime 0 1或者用 UUID 标识UUIDxxxx-xxxx / ext4 defaults,noatime 0 1如果是设备路径方式需要改成 SATA 硬盘对应的路径比如/dev/sda2。但更推荐用 UUID因为设备路径可能会变。获取 SATA 根分区的 UUIDblkid /dev/sda2然后把 fstab 里的 UUID 替换成新的。这一步如果搞错系统启动时会找不到根分区直接进入紧急模式。5.2 更新 bootloader 的启动参数Armbian 在 OES Plus 上一般使用 U-Boot 作为 bootloader。U-Boot 的启动参数通常写在/boot/armbianEnv.txt或/boot/boot.cmd里。你需要确认rootdev指向的是 SATA 硬盘。查看/boot/armbianEnv.txtcat /boot/armbianEnv.txt如果里面有rootdevUUIDxxxx这样的行把它改成 SATA 根分区的 UUID。如果没有这一行可能需要修改boot.cmd并重新编译成boot.scr。具体命令mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr不过大多数 Armbian 镜像已经自动处理了这部分你只需要确保 UUID 正确即可。5.3 处理启动顺序与设备识别的不确定性有个很实际的问题OES Plus 的 U-Boot 默认可能优先从 eMMC 启动。即使你把系统克隆到了 SATA 硬盘如果 eMMC 上还有可启动的系统机器还是会从 eMMC 起来。解决办法有两个一是把 eMMC 上的 bootloader 清掉或者改掉二是通过 U-Boot 环境变量调整启动顺序。我个人的做法是迁移完成并确认 SATA 启动正常之后直接把 eMMC 的前几个扇区清空dd if/dev/zero of/dev/mmcblk0 bs1M count16这样 eMMC 就不再具备启动能力机器只能从 SATA 硬盘启动。但这一步有风险如果你还没确认 SATA 能正常启动千万别先清 eMMC否则两个都起不来就麻烦了。提示清空 eMMC 前务必先用 SATA 硬盘单独启动测试成功并且准备好刷机工具作为后路。6. 迁移后的实测表现与几个容易翻车的细节6.1 启动速度与 I/O 性能的实际对比迁移完成后我用systemd-analyze对比了一下启动时间。eMMC 启动大概在 18 秒左右SATA SSD 启动缩短到了 12 秒左右。如果是 SATA 机械盘启动时间可能反而比 eMMC 慢因为机械盘的随机读写性能差。所以如果你追求启动速度建议用 SATA SSD如果只是要容量机械盘也能用但系统响应会明显变慢。顺序读写方面eMMC 大概在 150MB/s 左右SATA SSD 能到 400MB/s 以上机械盘则在 100MB/s 上下。Docker 容器启动、软件包安装这些操作SSD 的体验提升非常明显。6.2 内核日志里那些让人紧张的报错迁移后第一次启动dmesg里可能会出现一些关于ata的报错比如ata1: SError: { RecovComm }或者ata1.00: failed to read native max address。这些报错不一定代表有问题很多时候是 SATA 链路协商过程中的正常现象。但如果报错持续出现并且伴随 I/O 错误那就要检查线材和供电了。另一个常见现象是mmcblk0相关的报错因为你可能已经清空了 eMMC内核还在尝试初始化它。这些报错可以忽略不影响系统运行。6.3 系统更新时 bootloader 被覆盖的风险Armbian 的系统更新有时候会包含 bootloader 的更新如果更新过程中把 bootloader 写回了 eMMC可能会导致启动顺序又变回去。为了避免这个问题可以在更新前先确认一下armbianEnv.txt里的配置更新后再检查一遍。如果发现 bootloader 被覆盖重新执行一遍 bootloader 配置步骤即可。我一般会在迁移完成后把关键的启动配置文件也备份一份到 SATA 硬盘的/root目录下万一哪天配置丢了直接复制回来就行。6.4 长期运行的温度与稳定性观察OES Plus 的散热设计比较紧凑SATA 硬盘尤其是机械盘发热不小。迁移后建议用smartctl监控硬盘温度smartctl -A /dev/sda | grep Temperature如果温度长期超过 50 度建议加个小风扇或者改善通风。我自己是在机器底部垫了两个橡胶脚垫把机器抬高一点空气流通好了很多硬盘温度从 52 度降到了 45 度左右。稳定性方面迁移后连续跑了两个月没有出现掉盘或者系统崩溃的情况。Docker 容器、定时任务、网络服务都正常。唯一一次异常是某次断电后系统没有自动启动后来发现是 U-Boot 的启动延迟设置太短SATA 硬盘还没初始化完就开始引导了。解决办法是在armbianEnv.txt里加一行bootdelay5给硬盘多一点准备时间。7. 关于这套方案还能怎么继续折腾迁移到 SATA 之后系统的存储瓶颈基本解决了。接下来可以考虑的事情不少。比如把 Docker 的数据目录也迁到 SATA 硬盘上进一步减少 eMMC 的写入。或者用剩下的 eMMC 空间做一个小的交换分区虽然性能一般但应急够用。如果你手里有多个 SATA 硬盘还可以考虑用mdadm做软 RAID把系统盘做成冗余的。不过 OES Plus 只有一个 SATA 接口要做 RAID 得通过 USB 转接稳定性和速度都会打折扣这个就看个人取舍了。另外迁移完成后建议把noatime挂载选项加上减少不必要的写入。在/etc/fstab里把根分区的挂载选项改成defaults,noatime对延长硬盘寿命有好处。这个改动很小但长期来看收益不小。我自己在实际操作中的体会是整个迁移过程最关键的其实就是前三步确认硬盘识别、正确克隆、正确扩容。这三步做对了后面启动配置的调整基本不会出大问题。最容易翻车的地方是设备路径搞混和 UUID 写错所以每次操作前多敲一次lsblk和blkid确认清楚了再动手比事后救火省事得多。
企业数字化 ERP 产品动态
相关推荐
装配式钢结构别墅施工动画制作全流程解析 1. 装配式钢结构别墅施工动画的核心价值在建筑行业向工业化、智能化转型的大背景下,装配式钢结构别墅因其"环保高效、抗震性强、工期短"等显著优势,正成为住宅建设的主流选择。而施工流程动画作为可视化技术工具,正在彻底改变传统施… · 2026/9/25 4:29:00
AI编程完整工作流程v2.0:从需求澄清到代码交付的工程化实践 1. 为什么“AI 编程工作流程”值得单独拎出来讲很多人对 AI 编程的理解还停留在“让模型补全一段代码”这个层面。我在过去一年里跟不少团队交流过,发现一个很普遍的现象:大家用 AI 写代码的效率差距极大。同样一个需求,有人半小时能跑通&… · 2026/9/25 4:29:00
西门子EPLAN部件宏下载与安装全攻略:EDZ导入及宏挂接实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:28:54
PHP 自动化请求与模拟登录:不写刷赞工具也能练透这些技术 这类主题我不能帮你写。标题里的“一键领取名片赞”“一键领取圈圈赞”,本质上是一个自动刷赞、批量互动的小工具。这类工具不管代码写得怎么样,落到实际用途就是批量制造虚假互动、绕过平台风控,属于平台规则明令禁止的作弊行为。作为博主我… · 2026/9/25 7:56:24
酒店智能客房设备和服务响应系统如何管理,如何选择 截至 2026 年 9 月,越来越多酒店在做智能化升级时发现一个尴尬:灯光、空调、窗帘装了智能控制,客需呼叫上了小程序,影音娱乐又是另一套——设备是"智能"了,管理却更碎了。客房设备一套系统、服务响应一套系… · 2026/9/25 7:56:24
PHP对接EOS区块链:PHP开发包实现RPC调用与离线签名实战 很多人第一次看到“php <<<eos”这个标题,第一反应是PHP里的heredoc字符串语法,第二反应才可能是EOS区块链。两个理解其实都对,这个项目的核心就是用PHP通过开发包对接EOS区块链——而<<<eos那种“向EOS输出一段内容”的语… · 2026/9/25 7:56:24
广氟 PTFE 全矩阵方案:解决半导体 / 算力 / 新能源高端工况痛点 高端制造卡脖子痛点:PTFE 膜细分品类的现实供需矛盾半导体、AI 算力、储能电池、高频通信快速扩张,下游不再只追求 “能用” 的 PTFE 材料。高速 PCB 需要极低介电损耗;半导体湿法制程过滤膜要兼顾耐强氧化剂与高精度截留;电池 PA… · 2026/9/25 7:56:24
浏览器自动化脚本开发指南:从篡改猴到用户脚本实战 1. 从“雨课堂刷课教程”这个标题说起“雨课堂刷课教程”这个标题,乍一看像是一份操作指南,但稍微有点开发经验的人都能嗅到它背后的技术气息——浏览器自动化。热搜词里那一串“篡改猴”“Tampermonkey”“脚本”“谷歌浏览器”已经把答案摆在了桌面上&… · 2026/9/25 7:56:24
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37