背景信息:
- 将一些 .bin 文件复制到 SD 卡(由嵌入式设备读取,无文件系统)
- 调试卡需要擦除某些段(即清零),并将二进制文件复制到其他段
- 使用 subprocess 模块从 python 脚本调用 dd (因为涉及的 dd 操作是由一种需要首先解析和验证的配置脚本触发的,我还让用户确认该操作,因为它们可能会擦除一个重要的磁盘,被误认为是SD卡)
问题:
bs=512 时,写入 SD 卡的速度很慢。对于大跨度,bs=8M 速度要快得多。
是否可以以某种方式“bs=512eek={n_small_blocks}”,然后更改为“bs=8M”以进行实际写入(一旦我已经搜索到正确的位置)?
我找到了以下资源: http://www.delorie.com/gnu/docs/textutils/coreutils_65.html
但我不清楚为什么需要两次调用,以及它们如何协同工作来完成指南声称的任务。
更新
在这里找到了答案:
请参阅下面我的完整解决方案
答案1
解决方案:
dd if='input_file.bin' \
of='/dev/sd{X}' \
bs={desired write block size} \
seek={start offset in bytes} \
count={write size in bytes} \
oflag=seek_bytes \
iflag=count_bytes
从手册页:
count_bytes
treat 'count=N' as a byte count (iflag only)
...
seek_bytes
treat 'seek=N' as a byte count (oflag only)
这似乎确实会减慢传输速度,但至少以 MB/s 为单位,而不是 kB/s。另外,请务必检查系统上的手册页,因为网络上可用的手册页(即谷歌搜索“man dd”)似乎不包含这些选项。