Dd

dd,用一個塊大小尋找,用另一個塊大小寫

  • September 17, 2014

背景資料:

  • 將一些 .bin 文件複製到 SD 卡(由嵌入式設備讀取,無文件系統)
  • 調試卡需要擦除一些段(即清零),而其他段則需要將二進製文件複製到其中
  • 使用 subprocess 模組從 python 腳本呼叫 dd (因為涉及的 dd 操作是由一種需要首先解析和驗證的配置腳本觸發的,所以我還讓使用者確認操作,因為他們可能會清除一個重要的磁碟被誤認為是 SD 卡)

問題:

bs=512 時,寫入 SD 卡的速度很慢。對於大跨度,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

請參閱下面的完整解決方案

解決方案:

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。此外,請務必檢查系統上的手冊頁,因為似乎網路上可用的手冊頁(即Google搜尋“man dd”)不包括這些選項。

引用自:https://unix.stackexchange.com/questions/156079