Dd
dd,用一個塊大小尋找,用另一個塊大小寫
背景資料:
- 將一些 .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 次呼叫,以及它們如何協同工作以完成指南聲稱的目標。
更新
在這裡找到了答案:
請參閱下面的完整解決方案
解決方案:
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”)不包括這些選項。