教程导读
在基于旭日X3派进行开发时,开发者常常需要对系统进行深度定制与大量修改。官方提供的根文件系统制作方法虽然专业,但对于希望快速备份完整SD卡镜像(包括所有分区、启动文件、系统配置)的用户而言,操作流程不够直观且繁琐。本教程将介绍一种更为简便的镜像备份与恢复方法,通过几个常用命令行工具,即可轻松实现完整SD卡镜像的备份、压缩与恢复,让您能随时将系统还原至任意一张SD卡。
1. 准备工作
1.1 硬件平台
- 旭日X3派 开发板 + 一张待备份的SD卡(已安装系统并完成魔改)
- PC端:一台安装 Ubuntu 操作系统的台式机/笔记本,或使用 VMware、VirtualBox 等工具搭建的 Ubuntu 虚拟机(本教程中所有操作均在 PC 端完成)
1.2 软件工具清单
- 镜像备份阶段必需的软件:
- gparted:图形化磁盘分区编辑工具,用于安全地压缩空闲分区
- fdisk:命令行分区管理工具,用于查看分区布局与起始/结束扇区
- dd:超级磁盘克隆工具,用于将压缩后的分区内容逐扇区复制为镜像文件
- 镜像恢复阶段必需的软件:
- balenaEtcher:跨平台镜像烧录工具,支持直接烧录 img 文件至 SD 卡
- growpart:分区扩容工具(包含在 cloud-utils 软件包中),用于扩展根分区大小
- resize2fs:文件系统调整工具,用于将文件系统大小扩展至分区大小
2. 镜像备份
SD卡中通常存在大量未使用的空闲空间(例如64GB卡仅使用10GB),直接全卡备份将生成几十GB的镜像文件,既浪费存储空间又增加恢复耗时。我们的策略是:先压缩空闲分区,使已占用部分占用尽可能少的扇区,再对缩小的分区范围进行备份。
2.1 安装 gparted 磁盘分区编辑工具
在 PC 端 Ubuntu 系统中打开终端,执行以下命令完成安装:
sudo apt-get install gparted
实用提示: 如果提示软件源找不到,请先运行 sudo apt-get update 更新索引。
2.2 将 SD 卡连接至 PC 并启动 gparted
- 将旭日X3派的SD卡通过读卡器插入 PC 端的 USB 接口。
- 在终端中启动 gparted:
sudo gparted
注意: 必须以 sudo 权限运行才能正确识别并操作块设备。
2.3 使用 gparted 压缩空闲分区
按照以下顺序操作图中的步骤:
- 选择 SD 卡: 在 gparted 窗口右上角的下拉菜单中,选择代表 SD 卡的设备(通常为 /dev/sdb 或 /dev/sdc,可根据容量大小判断)。
- 卸载分区: 右键点击 SD 卡上的任一已挂载分区,选择“Unmount”,确保所有分区处于未挂载状态,否则无法执行大小调整。
- 调整分区大小: 右键点击根分区(通常是 ext4 分区),选择“Resize/Move”。在弹出的对话框中,会显示一个滑块:
- 左侧不可移动的蓝色部分为已占用数据区域。
- 右侧白色部分为可压缩的空闲空间。
- 拖动滑块将右侧空闲空间尽量缩小,但务必保留一小部分白色空间(例如 500MB~1GB),作为启动和运行时的缓存使用,避免空间不足。
- 确认执行操作: 点击“Resize/Move”后,再点击工具栏上的绿色“对勾”图标(Apply All Operations)以实际执行压缩。
- 完成: 操作完成后,分区大小从原来的 59.48GB 压缩至 10.59GB(具体数值取决于实际使用量)。
常见问题: 为什么压缩后分区下面还有一小段未分配空间?
答:这是分区调整机制。压缩分区时,gparted 会在分区末尾预留少量空闲扇区(即未分配空间),以确保文件系统元数据的安全,同时也是我们在上一步故意保留的一部分。这部分空间在后续备份时会被一同包含在镜像中,但恢复后进行扩容时会自动利用。
2.4 使用 fdisk 查看 SD 卡分区信息
首先确认 SD 卡的设备名称:
sudo fdisk -u -l
在输出结果中,找到容量与 SD 卡相符的设备,例如 /dev/sdb。

然后查看该设备的具体分区表:
sudo fdisk -u -l /dev/sdb
输出结果会包含以下关键信息:
- 设备起始扇区(Start)
- 结束扇区(End)—— 我们需要找到 所有分区中最大的 End 值
- 扇区大小(通常为 512 字节)

2.5 使用 dd 命令备份为镜像文件
假设上一步查到的最大 End 值为 21250000,扇区大小为 512,则备份命令为:
sudo dd bs=512 count=[最大End值+1] if=/dev/sdb of=backup_x3p.img
例如最大 End = 21250000,则 count 应为 21250001。
注意: 如果文件系统较大,此过程可能需要等待数分钟到数十分钟,请耐心等待直至命令执行完毕。

执行完成后,在当前目录下会生成一个名为 backup_x3p.img 的文件,这就是压缩后的系统镜像。备份工作至此完成。
实用提示: 备份完成后建议检查镜像文件的完整性,可使用 ls -lh backup_x3p.img 查看大小是否合理,并保留一份校验值。
3. 烧写与恢复镜像
镜像恢复过程分为两个阶段:先将备份的 img 烧录到新 SD 卡,再在旭日X3派上扩展分区以占满整张卡。
3.1 使用 balenaEtcher 烧写镜像
- 将一张新的 SD 卡通过读卡器连接到 PC。
- 打开 balenaEtcher,点击 “Flash from file” 选择前一步生成的
backup_x3p.img。 - 点击 “Select target” 选择目标 SD 卡。
- 点击 “Flash!” 开始烧录,等待进度条完成。
注意: balenaEtcher 烧录完成后会自动验证数据完整性,请务必确认验证通过,否则应重新烧录。
3.2 将 SD 卡插入旭日X3派并启动
将烧录好的 SD 卡插入旭日X3派开发板,上电启动。如果系统能正常启动并进入命令行,说明镜像恢复成功。

3.3 检查当前分区大小
在旭日X3派终端中执行:
df -h
此时会发现根文件系统挂载的大小仍然是备份时压缩后的数值(例如 10.59GB),而未使用 SD 卡的全部剩余空间。

3.4 扩展分区与文件系统
接下来依次执行两个命令,将分区和文件系统都恢复为 SD 卡实际大小。
- 安装 growpart 工具(如果提示找不到命令):
sudo apt-get install cloud-utils - 扩展根分区: 旭日X3派的根分区设备通常为
/dev/mmcblk2p1,执行:
注意:命令的格式是“设备名 分区号”,即sudo growpart /dev/mmcblk2 1/dev/mmcblk2和1之间留有空格。
- 调整文件系统大小:
sudo resize2fs /dev/mmcblk2p1
3.5 重启并验证
执行 sudo reboot 重启开发板。重新登录后,再次运行 df -h,根分区大小应显示为 SD 卡实际容量(如 59.48GB)。

常见问题:
- Q: 执行
growpart时提示“failed to read partition table”,怎么办?
A: 这说明分区表可能被锁定,请先运行sudo partprobe /dev/mmcblk2重新读取分区表,再尝试 growpart 命令。 - Q: 扩容后系统启动异常或文件系统检查报错?
A: 可能是备份时压缩过度。请确保在 gparted 压缩时预留了至少 500MB 的空闲空间,并且在恢复后立即执行扩容操作。 - Q: 备份的 img 文件能否在另一块不同容量的 SD 卡上恢复?
A: 可以,只要新 SD 卡容量 ≥ 备份镜像中的分区总大小 + 预留空间,就完全能够恢复。恢复后执行扩容操作即可填满新卡的剩余空间。
结束语
至此,您已经掌握了通过“压缩-备份-烧录-扩容”这一套操作流程来完整备份与恢复旭日X3派魔改镜像的方法。相比官方方法,本方法不仅节省存储空间、提升烧录速度,而且能够完整保留分区表与文件系统结构。以后无论您对系统进行何种深度定制,都可以随时生成一个干净的恢复镜像,极大提升开发效率。
本文转自地平线开发者社区
原作者:大圣GemiTech
原链接:https://developer.horizon.ai/forumDetail/98129467158916294
