news 2026/6/3 10:16:08

别再用笨方法了!给Firefly RK3588开发板做系统备份,这招更省硬盘空间

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再用笨方法了!给Firefly RK3588开发板做系统备份,这招更省硬盘空间

给Firefly RK3588开发板做系统备份的两种高效方案

手里这块Firefly RK3588开发板已经陪伴我完成了三个毕业设计项目,系统里塞满了各种开发环境、测试数据和调试工具。某天突然发现128GB的存储卡只剩下不到20GB空间,而实际文件只占用了35GB——这意味着有近60GB的空间被未使用的磁盘区块白白占用。传统dd备份会把这个臃肿的镜像完整复制,就像把空行李箱也打包进搬家纸箱一样浪费空间。

1. 为什么需要智能备份方案

嵌入式开发板的系统备份不同于普通PC,我们经常面临三个特殊挑战:存储介质容量有限(通常使用TF卡或eMMC)、备份频率高(每次重大调试后都需要保存状态)、跨设备部署需求多(团队协作时需复制相同环境)。以RK3588为例,官方推荐的Ubuntu系统镜像安装后基础占用约12GB,但实际分区会被分配30-64GB不等的空间。

传统全盘镜像的弊端

  • 生成的.img文件体积与分区大小一致,包含大量无效的0x00填充数据
  • 备份/传输过程耗时成倍增加(特别是通过网络共享时)
  • 多版本备份时存储成本指数级增长
  • 恢复时需要手动调整文件系统大小

我在实验室就见过有同学用128GB卡做开发,结果备份五个版本就把笔记本硬盘塞满的惨剧。下面介绍的两种方案,可以帮你把备份体积压缩到实际文件大小的1.2倍左右。

2. 方案一:全盘镜像后优化

适合场景:需要完整分区结构备份、对系统一致性要求极高的关键阶段存档

2.1 基础备份操作

首先通过SSH或串口连接到开发板,确认根分区设备节点(通常是/dev/mmcblk0pX/dev/nvme0n1pX):

# 查看分区布局 lsblk -f # 找出根分区对应的设备节点 df -h --output=source,target | grep -w "/"

在PC端使用dd获取原始镜像(假设根分区是/dev/mmcblk0p3):

# 通过SSH直接传输到PC(避免中间存储) ssh root@开发板IP "dd if=/dev/mmcblk0p3 bs=4M" | dd of=raw_backup.img

这个阶段生成的raw_backup.img会与分区大小完全相同。我测试的64GB分区实际使用21GB时,镜像文件也是64GB。

2.2 智能瘦身处理

使用resize2fs进行空间回收前,需要先检查并修复文件系统:

# 检查镜像完整性 e2fsck -f raw_backup.img # 获取当前实际占用空间(单位:4K块) tune2fs -l raw_backup.img | grep 'Block count'

执行瘦身操作(此过程可能需要多次尝试):

# 尝试最小化文件系统 resize2fs -M raw_backup.img # 检查瘦身后的块数 dumpe2fs raw_backup.img | grep 'Block count'

关键参数对比表

操作阶段典型值(64GB分区)耗时参考
原始镜像64.0GB (16M blocks)约25分钟
修复后63.8GB (15.95M blocks)2-5分钟
瘦身后21.4GB (5.35M blocks)3-8分钟

2.3 恢复时的注意事项

瘦身镜像烧录后需要扩展分区:

# 烧录到新设备后首次启动时执行 resize2fs /dev/mmcblk0p3

常见问题解决方案

  • 如果启动失败,检查/etc/fstab中的UUID是否更新
  • 遇到/dev/root找不到时,需要更新bootloader参数
  • 图形界面异常可能是/tmp空间不足导致

3. 方案二:文件级精准备份

适合场景:快速迭代开发、需要版本控制、存储空间极度受限

3.1 智能文件打包策略

与传统rsync不同,我们采用tar的增量备份特性:

# 在开发板上创建排除列表 cat > /tmp/exclude.list <<EOF /dev/* /proc/* /sys/* /tmp/* /run/* /var/cache/* /var/tmp/* *.pyc EOF # 创建基础备份 tar --numeric-owner --xattrs --acls -czpf base_backup.tar.gz \ --exclude-from=/tmp/exclude.list /

文件级备份的优势

  • 体积通常只有实际文件大小的1.1-1.3倍
  • 支持--listed-incremental实现增量备份
  • 可以配合git进行版本管理
  • 恢复时无需处理分区对齐问题

3.2 从备份创建可启动镜像

估算所需镜像大小(增加20%余量):

# 计算已使用空间(单位字节) used_space=$(du -sx --block-size=1 / | cut -f1) # 计算镜像大小(增加20%余量) img_size=$((used_space * 120 / 100 / 1024 / 1024)) # 转换为MB # 创建空白镜像 dd if=/dev/zero of=minimal.img bs=1M count=$img_size mkfs.ext4 -F minimal.img

挂载并恢复文件系统:

mkdir -p /mnt/minimal mount minimal.img /mnt/minimal tar -xzpvf base_backup.tar.gz -C /mnt/minimal # 重建特殊目录 for i in dev proc sys tmp run; do mkdir -p /mnt/minimal/$i chmod 1777 /mnt/minimal/tmp done

3.3 验证备份可启动性

使用chroot进行预验证:

# 绑定关键系统目录 mount --bind /dev /mnt/minimal/dev mount --bind /proc /mnt/minimal/proc mount --bind /sys /mnt/minimal/sys # 进入chroot环境 chroot /mnt/minimal /bin/bash -l # 在chroot中执行基础检查 df -h ip a systemctl --no-pager status exit

恢复效率对比

指标全盘镜像方案文件级方案
备份耗时25-40分钟8-15分钟
恢复耗时15-30分钟5-10分钟
镜像体积实际使用×3实际使用×1.2
跨架构兼容性

4. 进阶技巧与自动化方案

4.1 差分备份实现

结合rsyncbtrfs子卷可以建立高效的版本管理系统:

# 创建基础子卷 btrfs subvolume create /mnt/backups/base # 首次完整同步 rsync -aHAX --delete --numeric-ids \ --exclude-from=/tmp/exclude.list \ / /mnt/backups/base/ # 创建差分备份 btrfs subvolume snapshot -r /mnt/backups/base /mnt/backups/$(date +%Y%m%d)

4.2 自动化备份脚本

保存为/usr/local/bin/smart_backup

#!/bin/bash BACKUP_DIR="/mnt/backups" TIMESTAMP=$(date +%Y%m%d_%H%M) EXCLUDE_LIST="/etc/backup_excludes" # 自动生成排除列表 cat > $EXCLUDE_LIST <<'EOF' /dev/* /proc/* /sys/* /tmp/* *.swp *.pyc EOF # 根据磁盘使用率选择方案 USAGE_PERCENT=$(df --output=pcent / | tr -dc '0-9') if [ $USAGE_PERCENT -gt 70 ]; then echo "采用文件级备份方案" tar --numeric-owner --xattrs --acls -czpf \ $BACKUP_DIR/fs_$TIMESTAMP.tar.gz \ --exclude-from=$EXCLUDE_LIST / else echo "采用全盘镜像方案" dd if=/dev/mmcblk0p3 bs=4M status=progress | \ gzip -c > $BACKUP_DIR/full_$TIMESTAMP.img.gz fi

设置每周自动执行:

# 添加cron任务 (crontab -l 2>/dev/null; echo "0 3 * * 0 /usr/local/bin/smart_backup") | crontab -

5. 恢复环境的最佳实践

无论采用哪种备份方案,恢复时都需要注意:

硬件差异处理

  • 不同RK3588开发板的PCIe设备树可能不同
  • 显示输出接口(HDMI/DP/MIPI)需要匹配
  • 无线网卡固件可能需要单独安装

首次启动优化

# 清理旧的硬件标识 rm -f /etc/machine-id /var/lib/dbus/machine-id systemd-machine-id-setup # 重建内核模块依赖 depmod -a $(uname -r) # 更新引导配置 update-initramfs -u -k all
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 10:14:24

RimSort:告别模组管理噩梦,让《环世界》体验丝滑如初

RimSort&#xff1a;告别模组管理噩梦&#xff0c;让《环世界》体验丝滑如初 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, comm…

作者头像 李华
网站建设 2026/6/3 10:13:05

ComfyUI-Manager批量清理指南:3步释放5GB空间的技术实践

ComfyUI-Manager批量清理指南&#xff1a;3步释放5GB空间的技术实践 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various cus…

作者头像 李华
网站建设 2026/6/3 10:12:21

F#正式集成Visual Studio:函数式编程在.NET生态的全面升级与实践指南

1. 项目概述&#xff1a;一次迟来但意义重大的“官宣”如果你是.NET生态的长期关注者&#xff0c;那么最近这条新闻可能让你有种“终于等到你”的感觉&#xff1a;F#正式加入了Visual Studio。这听起来像是一个技术新闻的标题&#xff0c;但其背后所代表的&#xff0c;远不止是…

作者头像 李华
网站建设 2026/6/3 10:11:35

atomic 原子操作到底有多快?我拿 Mutex 做了个对比测试

atomic 原子操作到底有多快&#xff1f;我拿 Mutex 做了个对比测试前言 写并发代码&#xff0c;锁是免不了的。Mutex 好用&#xff0c;但确实慢。高并发场景&#xff0c;atomic 原子操作是个好东西&#xff0c;但很多人不知道怎么用对。 今天我拿两百万次并发操作做了个测试&am…

作者头像 李华
网站建设 2026/6/3 10:10:41

后摩尔时代:从晶体管微缩到异构集成与架构创新的算力演进

1. 摩尔定律的“终局”与“重生”&#xff1a;一个老生常谈的行业迷思“摩尔定律又双叒叕要终结了”——如果你在半导体行业待得够久&#xff0c;或者稍微关注点科技新闻&#xff0c;这句话大概每隔三五年就会像季节更替一样准时出现。从90纳米工艺的“物理极限”警告&#xff…

作者头像 李华
网站建设 2026/6/3 10:10:18

免费图片去水印工具全场景实操指南,适配手机电脑多设备日常素材处理

在日常素材整理、自媒体内容制作、个人图片留存的过程中&#xff0c;图片水印是高频困扰问题。多余的平台logo、文字水印、边角标识会影响图片观感与使用效果。2026年市面主流的免费图片去水印工具分为网页在线、电脑客户端、手机APP、微信小程序四大品类&#xff0c;不同品类适…

作者头像 李华