必须用 -b 而不是 -c 或 -l,因为 -c 按换行符切分,二进制文件中 0x0a 字节会导致提前截断、魔数损坏;-b 是纯字节流切割,不解析内容,安全可靠。

直接用 split -b,别碰 -C 或 -l —— 那俩对二进制文件会出错或截断数据。
为什么必须用 -b 而不是 -C
-C 是按“行”边界对齐的大小切割,内部会逐行扫描换行符(\n),但二进制文件里根本没有可靠换行结构。一旦遇到中间某个字节恰好是 0x0a,-C 就可能提前截断,导致后续文件头错位、校验失败甚至无法还原。
-
-b是纯字节流切割:从头开始,每N字节切一刀,不查内容,不跳过任何字节 -
-C是“尽力维持行完整”的文本友好模式,man page 明确写它“may not be suitable for binary data” - 实测中,用
-C 10M切一个 ELF 可执行文件,file命令会报data而非ELF,说明魔数被撕开了
split -b 的常用参数组合和命名控制
默认输出名是 xaa、xab… 这种字母后缀不易排序、不直观。生产环境建议加 -d 和自定义前缀:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
split -b 50M -d firmware.bin out_→ 生成out_00、out_01、out_02… -
split -b 100M -d -a 3 firmware.bin part_→ 后缀长度为 3 位数字:part_000、part_001 - 单位支持
k/M/G(大小写均可),但注意1M = 1048576字节,不是 1000000 - 避免用空格分隔数值和单位:写
-b100M,别写-b 100M(某些老版本 coreutils 会解析失败)
合并后怎么验证没损坏
用 cat 合并只是拼接字节流,不校验逻辑完整性。必须比对原始哈希:
- 切之前先存哈希:
md5sum firmware.bin > firmware.md5 - 合并:
cat out_* > firmware_restored.bin - 验证:
md5sum -c firmware.md5—— 输出firmware_restored.bin: OK才算真正成功 - 如果用
sha256sum更稳妥,尤其对大镜像文件,md5碰撞风险虽低但存在
当文件大小不能被 chunk 整除时会发生什么
split -b 最后一块自动按剩余字节写入,不会补零、不会丢弃、也不会报错。这是正确行为,但容易被忽略:
- 比如
split -b 1M bigfile.bin,文件大小是10485761字节(即 10MB + 1B),会生成 11 个文件:前 10 个各 1MB,最后一个仅 1 字节 - 合并时顺序不能错,
cat out_00 out_01 ... out_10 > restored必须严格按数字升序 - 用
ls -1v out_*(-v启用自然排序)确认顺序,别信ls out_*的默认字典序(out_10会在out_2前面)










