dd는 .img에 존재하는 것보다 더 많은 데이터를 복사합니까?

dd는 .img에 존재하는 것보다 더 많은 데이터를 복사합니까?

내 마이크로 SD(8GB)에 .img 파일을 추가하려고 합니다. ROM(.img)은 2.66GB이지만 내 DD(라이브) 출력에는 전송된 것으로 표시됩니다.9GB. 2GB 이미지를 9GB로 변환하는 방법을 이해할 수 없습니다. 저는 OSX Lion을 실행하고 있으며 Belkin 카드 리더를 사용하고 있습니다. 카드 리더는 문제가 아니며 디스크 유틸리티를 문제 없이 사용합니다. 문제는 dd나 내 카드에 있는 것 같아요(내 카드가 아니길 바랍니다 :( ).

편집: 이것은 파일을 복사하는 데 사용하는 명령입니다.

dd if=honey.img of=/dev/disk1 bs=1m

상태를 확인하는 데 사용하는 코드는 다음과 같습니다.

killall -INFO dd

답변1

당신이 설명하는 동작과 파일의 성격으로 인해 이것이 다음과 같은 것이라고 의심됩니다.스파스 파일. 스파스 파일은 파일에 있는 대량의 널 바이트 시퀀스가 ​​디스크에 저장되지 않는 기본 압축 기술입니다. 다음은 스파스 파일을 생성하는 예입니다.

$ echo a | dd seek=999999999 >sparse
0+1 records in
0+1 records out
2 bytes (2 B) copied, 6.614e-05 s, 30.2 kB/s
$ ls -l a
-rw-r--r-- 1 gilles gilles 511999999490 Apr 30 00:03 sparse
$ du sparse
16      sparse

파일 sparse에는 511999999490바이트(999999999 512바이트 블록, 모두 0, a2바이트 뒤에 개행 문자)가 포함되어 있습니다. 그러나 파일이 사용하는 총 디스크 공간은 16kB입니다(마지막 블록은 4kB이고 다른 3개 블록에는 다른 블록의 위치에 대한 메타데이터만 포함되어 있으며 모두 존재하지 않습니다).

honey.img디스크 이미지를 충분히 신중하게 생성 하면 사용되지 않는 공간이 있는 디스크가 드물어질 수 있습니다.

파일을 읽을 때 희박하다고 표시할 것이 없습니다. 따라서 honey.img대용량 디스크 이미지인 경우 ddnull 바이트만 포함된 기가바이트를 읽을 수 있습니다.

파일에서 ls -l및(또는 OSX의 경우)를 실행하면 저장에 사용되는 바이트 및 블록 수가 표시됩니다. 바이트 수가 블록 수에 맞지 않으면 파일이 희소합니다. 내가 쓴 것처럼, 당신은 이를 확인하거나 입증하는 명확한 데이터를 발표하지 않았습니다.duls -ls

OSX에서 희소 파일을 효율적으로 복사할 수 있는 도구는 다음과 같습니다.동기화. 그러나 여기서 수행하는 작업은 한 파일 시스템에서 다른 파일 시스템으로 파일을 복사하는 것이 아니라 파일에서 발생하는 바이트 스트림을 디스크에 복사하는 것입니다. 이 작업은 데이터가 실제로 대상 디스크에 맞는 경우에만 수행할 수 있습니다.

답변2

데비안 라이브 바이너리.img를 2GB USB 플래시 드라이브로 전송하려고 할 때 매우 비슷한 문제가 발생했습니다. 이미지 크기는 1.6GB로 표시됩니다. stat 사용에 대한 위의 Matt의 의견은 매우 도움이 되었습니다. 블록 크기를 블록 수(3,109,040)의 4096배로 계산한 결과, 나열된 크기인 1.6GB의 거의 8배인 12,734,627,840으로 나왔습니다. dd 명령에도 bs=1M을 사용한 것을 확인하여 bs=4096이 나열된 stat 명령을 다시 시도했고 원래 예상대로 1.6GB 파일을 복사했습니다. 그래서 블록 크기보다 큰 블록을 복사하면 블록 단위로만 복사된다는 느낌이 듭니다. 그러나 블록 크기로 복사하는 경우(테스트되지는 않았지만 더 작을 수도 있음) dd는 블록 내부의 내용을 평가하고 과도한 쓰레기를 잘라냅니다. 팁 주셔서 감사합니다, 매트.

관련 정보