Clear PiDisk Imager v1.0.0

面向 OrangePi 4 Pro / Allwinner A733 Ubuntu 系统卡的图形化 RAW 镜像工具。支持从离线 TF 卡制作精简可启动镜像、通过 SSH 从在线设备直接制作镜像到本机,以及将 RAW IMG 写入 TF 卡。支持同时打开多个窗口;同一设备、远程主机和 IMG 路径均由跨进程锁保护。

安全边界

  • GUI 始终以普通用户运行,只有任务阶段通过受限 sudo 规则启动固定的独立 root helper;不会授权任意命令。
  • 自动排除承载 /、/boot、/boot/efi 的系统盘及其父设备。
  • 仅接受未挂载的整盘块设备;制作时对源盘设置内核只读标志,并以 ro,noload 挂载 ext4。
  • 根文件系统必须是最后一个分区且为 ext4;LVM、LUKS、RAID、多根候选和无法确认的布局会中止。
  • 第一分区前的扇区逐字节保留;非根分区仅按分区范围复制;不会读取卡尾未使用空间。
  • 源卡存在 MBR active/bootable 标志时原样保留,不擅自增加或删除。
  • 所有失败路径都会卸载、释放 loop,并删除 .partial 镜像。
  • 制作模式不生成 .sha256,也不执行第二轮完整文件系统扫描。
  • 新根文件系统禁用厂商 A733 U-Boot 不可靠支持的 ext4 64bit、metadata_csum 与 uninit_bg 特性,确保 U-Boot 能读取 /boot。
  • 不使用 rsync 稀疏化复制,避免把 uImage 中的零块转换为旧版 U-Boot ext4 驱动无法可靠读取的文件 hole。
  • 写卡使用 dd bs=16M oflag=direct conv=fsync,显示实时进度、速度和 ETA;完成后只快速核对分区表与前 32 MiB 启动区,不读取整张卡。

Ubuntu 20.04 依赖

sudo apt update
sudo apt install -y python3-pyqt5 python3-psutil rsync openssh-client sshpass util-linux e2fsprogs gdisk dosfstools policykit-1

安装

sudo ./install.sh

安装器会将程序部署到 /opt/orangepi-image-maker,安装桌面入口,并为执行安装的普通用户生成只允许调用固定镜像 helper 的受限 sudoers 规则。

启动

./run.sh

也可直接使用命令行核心:

python3 -m opi_imager.cli list --json
python3 -m opi_imager.cli inspect /dev/sdX
python3 -m opi_imager.cli create /dev/sdX /path/to/OrangePi4Pro-Ubuntu.img
python3 -m opi_imager.cli remote-create 192.168.1.100 /path/to/OrangePi4Pro-Ubuntu.img --user root
python3 -m opi_imager.cli write /path/to/OrangePi4Pro-Ubuntu.img /dev/sdX
python3 -m opi_imager.cli release /dev/sdX

“制作镜像”和“写入 TF 卡”页面提供“释放 TF 卡”按钮。释放流程会卸载全部分区、执行数据刷新,并优先通过 UDisks 让 USB 读卡器断电;不支持软件断电的设备会被设置为只读后提示安全拔出。

远程制作要求 SSH 用户为 root,远端根文件系统是直接位于最后一个磁盘分区上的 ext4。程序不会在远端生成临时 IMG,而是读取分区表和启动区后,以保留 ACL、xattr、硬链接和数字 UID 的并行 tar 数据流高速写入本机镜像,再执行 rsync -aHAXx --numeric-ids 增量复核。并发数根据远端和本机 CPU 较小值动态计算,保留约 25% CPU 给现场业务且最多 8 路;最终单路 rsync 会修复跨分组硬链接并完成一致性校准。密码仅通过标准输入交给 root helper,不放入命令行;也支持预先配置 SSH 密钥后留空密码。

create 和 write 都会显示设备型号、容量、序列号与操作摘要,并要求再次输入完整设备路径。write 会不可逆地覆盖目标 TF 卡。

打包

./pack.sh

输出为 dist/orangepi-image-maker.tar.gz。项目采用系统 PyQt5,避免在 Ubuntu 20.04 上引入体积较大的私有 Python 运行环境。

无损安全测试

./tests/run.sh
sudo -E ./tests/integration_mbr.sh
sudo -E ./tests/integration_gpt_write.sh
sudo -E ./tests/integration_failure_cleanup.sh

集成测试使用临时稀疏文件和 loop 设备,不访问真实磁盘,失败时自动清理。真卡验收建议先使用可丢弃的测试卡,并验证:

  1. 制作期间源卡块设备保持只读,源卡前后抽样哈希不变。
  2. fdisk -l、sfdisk --verify、sgdisk -v(GPT)通过。
  3. sfdisk --verify 通过,镜像中的 UUID、PARTUUID 和标签保持不变。
  4. 写入容量更大的空卡后可启动;首次启动后根分区和 ext4 自动扩展,orangepi-grow-root.service 变为 disabled。
S
Description
Linux GUI tool for creating compact bootable OrangePi RAW images from local TF cards or remote SSH systems.
Readme MIT
337 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 89.7%
Shell 10.3%