dd,以一种块大小查找,以另一种块大小写入

6 dd sd-card disk

背景资料:

  • 将一些 .bin 文件复制到 SD 卡(由嵌入式设备读取,没有文件系统)
  • 调试卡需要擦除某些段(即清零),而其他段则需要将二进制文件复制到其中
  • 使用 subprocess 模块从 python 脚本调用 dd(因为所涉及的 dd 操作是由一种需要首先解析和验证的配置脚本触发的,我还让用户确认该操作,因为他们可能会删除一个重要的磁盘被误认为是 SD 卡)

问题:

写入 SD 卡很慢,bs=512。对于大跨度,bs=8M 要快得多。

是否有可能以某种方式 'bs=512 seek={n_small_blocks}' 然后更改为 'bs=8M' 以进行实际写入(一旦我找到了正确的位置)?

我找到了以下资源:http : //www.delorie.com/gnu/docs/textutils/coreutils_65.html

但我不清楚为什么需要 2 次调用,以及它们如何协同工作以完成指南声称的任务。


更新

在这里找到答案:

https://superuser.com/questions/380717/how-to-output-file-from-the-specified-offset-but-not-dd-bs-1-skip-n

在下面查看我的完整解决方案

小智 5

解决方案:

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
Run Code Online (Sandbox Code Playgroud)

从手册页:

count_bytes
    treat 'count=N' as a byte count (iflag only)

...

seek_bytes
    treat 'seek=N' as a byte count (oflag only)
Run Code Online (Sandbox Code Playgroud)

这似乎确实减慢了传输速度,但至少以 MB/s 为单位,而不是 kB/s。另外,请务必检查系统上的手册页,因为网络上可用的手册页(即谷歌搜索“man dd”)似乎不包含这些选项。