友善RK3399 eflasher多系统镜像裁剪笔记,节省69%的存储空间

本文记录了将 NanoPC-T4 的 RK3399 eflasher 多系统镜像从 30GB 成功裁剪至 9.28GB 的具体过程(为什么要裁剪镜像呢?因为我只有16GB的SD卡hhh)。在确保所有核心功能完整的前提下,实现了存储空间 69% 的节省。

项目概况

  • 原始镜像rk3399-eflasher-multiple-os-20260112-30g.img (30 GB)
  • 目标设备:NanoPC-T4 (RK3399)
  • 保留系统
    • debian-bullseye-desktop-arm64 (Debian 11 桌面版)
    • debian-trixie-core-arm64 (Debian 13 核心版)
  • 最终镜像rk3399-eflasher-debian-only-20260122.img (9.28 GB)
  • 空间节省:20.7 GB,压缩率达 69%

操作步骤

第一阶段:环境准备与镜像分析

首先对原始镜像结构进行分析,明确裁剪基础。

  1. 挂载并分析原始镜像结构

    1
    2
    3
    4
    5
    6
    # 创建回环设备
    sudo losetup -f --show rk3399-eflasher-multiple-os-20260112-30g.img
    # 输出示例:/dev/loop13

    # 映射分区
    sudo kpartx -av /dev/loop13

    分析结果

    • loop13p1 分区采用 exFAT 文件系统(标签 FriendlyARM
    • 镜像包含9个分区:p1 为主数据区,p2p9 为引导及配置分区
  2. 确认保留系统的内核版本

    • debian-trixie-core-arm64:内核 6.6+
    • debian-bullseye-desktop-arm64:内核 5.10

第二阶段:清理系统与重建数据分区

移除不需要的系统文件,创建精简数据分区。

  1. 挂载exFAT分区并移除多余系统

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sudo mount -t exfat /dev/mapper/loop13p1 /mnt/p1
    sudo rm -rf /mnt/p1/alpine-linux-arm64 \
    /mnt/p1/android8 \
    /mnt/p1/android10 \
    /mnt/p1/ubuntu-focal-desktop-arm64 \
    /mnt/p1/openmediavault-arm64 \
    /mnt/p1/friendlycore-focal-arm64 \
    /mnt/p1/friendlywrt24 \
    /mnt/p1/friendlywrt24-docker \
    /mnt/p1/friendlydesktop-arm64
  2. 创建并填充新的精简数据镜像

    1
    2
    3
    4
    5
    6
    7
    8
    # 创建8G空白文件并格式化为exFAT
    truncate -s 8G trimmed.img
    sudo mkfs.exfat -n "FriendlyARM" trimmed.img

    # 挂载新镜像并拷贝必要数据
    sudo mount -t exfat trimmed.img /mnt/new
    sudo cp -a /mnt/p1/debian-* /mnt/p1/eflasher.conf /mnt/new/
    sudo umount /mnt/new
  3. 合并引导区与数据区

    1
    2
    3
    4
    5
    # 1. 拷贝原镜像前1.38GB(含所有引导分区)
    dd if=original.img of=final.img bs=512 count=2686976

    # 2. 追加新建的精简数据区
    dd if=trimmed.img of=final.img bs=512 seek=2686976

第三阶段:修复与重建GPT分区表

这是裁剪过程的核心步骤,需要精确计算分区参数。

  1. 导出原始分区表作为参考

    1
    sudo sfdisk -d original.img > original.pt
  2. 精确计算新分区参数

    • p1分区大小:16,777,216 扇区 (8 GB)
    • p1结束扇区:2,686,976 + 16,777,216 - 1 = 19,464,191
    • 镜像总扇区数19,464,191 + 34 = 19,464,226
  3. 扩展镜像并应用新分区表

    1
    2
    3
    4
    5
    # 将镜像扩展至最终计算大小
    truncate -s $((19464226 * 512)) final.img

    # 基于修改后的 final.pt 文件重新分区
    sudo sfdisk final.img < final.pt
  4. 验证分区结构完整性

    1
    2
    sudo fdisk -l final.img
    # 确认输出中9个分区完整,且p1分区大小正确

第四阶段:部署测试与验证

对生成的镜像进行实际测试。

  1. 写入SD卡进行实测

    1
    2
    3
    4
    # 请将 /dev/sde 替换为您的SD卡设备
    sudo umount /dev/sde1
    sudo dd if=rk3399-eflasher-debian-only-20260122.img of=/dev/sde bs=4M status=progress oflag=sync
    sync
  2. 设备启动验证结果

    • 设备正常启动并进入eflasher GUI界面
    • 界面中仅显示保留的两个Debian系统选项
    • 可成功选择并安装任一系统至eMMC,功能完全正常

    9759ac7f7eda4d3ba87b2c927cb551a9

方案适用性

本方案已通过RK3399平台(NanoPC-T4)的实测验证。其方法论可复用于采用类似eflasher框架的其他开发板(如NanoPi M4、Rock Pi 4等)进行固件定制。如需为Android、OpenWrt等其他系统制作精简镜像,可完全复用本流程中的分区处理与验证步骤。


友善RK3399 eflasher多系统镜像裁剪笔记,节省69%的存储空间
https://blog.lecreate.asia/2026/01/23/2026012301/
作者
LECREATE
发布于
2026年1月23日
许可协议