O comportamento que você descreve e a natureza do arquivo me faz suspeitar que este é um arquivo esparso . Arquivos esparsos são uma técnica de compactação primitiva, na qual grandes seqüências de bytes nulos em um arquivo não são armazenadas no disco. Aqui está um exemplo em que eu crio um arquivo esparso:
$ 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
O arquivo sparse
contém 511999999490 bytes (999999999 blocos de 512 bytes, todos zero, mais os dois bytes a
seguidos por uma nova linha). No entanto, o espaço total em disco usado pelo arquivo é de 16kB (4kB para o bloco final e 3 outros blocos contendo apenas metadados relacionados à localização dos outros blocos - todos ausentes).
Se honey.img
for uma imagem de disco que foi criada com cuidado o suficiente, pode ser esparso onde o disco tenha espaço não utilizado.
Quando você lê um arquivo, não há nada para marcá-lo como escasso. Portanto, se honey.img
for uma imagem de disco grande, dd
pode estar lendo gigabyte com gigabyte contendo apenas bytes nulos.
A execução de ls -l
e du
no arquivo (ou, no OSX, ls -ls
) mostraria o número de bytes e o número de blocos usados para armazenamento. Se os bytes não couberem no número de blocos, o arquivo é esparso. Enquanto escrevo, você não publicou dados legíveis que poderiam confirmar ou anular isso.
A única ferramenta que conheço no OSX que pode copiar arquivos esparsos com eficiência é rsync . No entanto, o que você está fazendo aqui não é copiar um arquivo de um sistema de arquivos para outro, mas copiar um fluxo de bytes (que vem de um arquivo) para um disco. Você só pode fazer isso se os dados realmente couberem no disco de destino.