dd, 탐색에 하나의 블록 크기를 사용하고 쓰기에 다른 블록 크기 사용

dd, 탐색에 하나의 블록 크기를 사용하고 쓰기에 다른 블록 크기 사용

배경 정보:

  • 일부 .bin 파일을 SD 카드에 복사합니다(임베디드 장치에서 읽음, 파일 시스템 없음)
  • 디버그 카드에서는 특정 세그먼트를 삭제(즉, 0으로 설정)하고 바이너리를 다른 세그먼트에 복사해야 합니다.
  • 하위 프로세스 모듈을 사용하여 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

그러나 두 번의 호출이 필요한 이유와 가이드에서 주장하는 내용을 달성하기 위해 두 호출이 어떻게 함께 작동하는지 명확하지 않습니다.


고쳐 쓰다

여기서 답을 찾았습니다.

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

아래에서 내 전체 솔루션을 확인하세요.

답변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)

이로 인해 전송 속도가 느려지는 것처럼 보이지만 적어도 kB/s가 아닌 MB/s 단위입니다. 또한 웹에서 사용할 수 있는 매뉴얼 페이지(예: Google "man dd")에는 이러한 옵션이 포함되어 있지 않은 것 같으므로 시스템의 매뉴얼 페이지를 확인하십시오.

관련 정보