Por que o tamanho físico de um arquivo .dylib é menor que seu tamanho lógico?

2

Há um comportamento que não posso explicar no OSX Lion (pode estar em outras versões também).

Quando copio ou duplico alguns aplicativos, por exemplo o iTunes, que contêm algumas bibliotecas dinâmicas, o tamanho físico dessas bibliotecas muda (o tamanho aumenta). Isso pode ser devido à fragmentação de disco. Mas não é só isso, porque o surpreendente é que o tamanho físico original é menor que o tamanho lógico (onde normalmente o tamanho físico é sempre maior que o tamanho lógico, exceto quando há compressão envolvida).

Para ilustrar meu caso:

antoine@amarante:/Applications$ ls -ls iTunes.app/Contents/MacOS/libgnsdk_submit.1.8.2.dylib 
384 -rwxrwxr-x+ 1 root  admin  558704  8 jul  2011 iTunes.app/Contents/MacOS/libgnsdk_submit.1.8.2.dylib

ls considera um tamanho de bloco de 512 bytes, 384 blocos fazem 196608 bytes em comparação com o tamanho lógico reportado de 558704 bytes. Ou, como mostrado na janela obter informações no Finder:

558.704 octets (197 Ko sur disque)

Isso também é mostrado após algumas operações de cópia em que copiei todo o aplicativo iTunes. O primeiro iTunes copie é uma duplicata feita através do Finder e iTunes-cp é uma cópia feita com o comando CLI cp -a .

antoine@amarante:/Applications$ ls -ls iTunes*.app/Contents/MacOS/libgnsdk_dsp.1.8.2.dylib 
11632 -rwxr-xr-x+ 1 antoine  admin  5955104  8 jul  2011 iTunes copie.app/Contents/MacOS/libgnsdk_dsp.1.8.2.dylib
11632 -rwxrwxr-x+ 1 antoine  admin  5955104  8 jul  2011 iTunes-cp.app/Contents/MacOS/libgnsdk_dsp.1.8.2.dylib
 3944 -rwxrwxr-x+ 2 root     admin  5955104  8 jul  2011 iTunes.app/Contents/MacOS/libgnsdk_dsp.1.8.2.dylib

Vemos que os arquivos copiados têm um tamanho físico maior (11632 * 512 = 5955584 bytes) do que o tamanho lógico (5955104), exceto pelo arquivo original, que é muito menor. Quando copio o único arquivo .dylib por conta própria, o comportamento é o mesmo. Isso acontece para alguns arquivos de biblioteca dinâmica, não para todos.

Como o arquivo da biblioteca original pode ser menor que as cópias? Existe alguma compressão envolvida? Ou meus arquivos originais estão corrompidos de alguma forma? Como posso verificar isso?

    
por Tonin 01.08.2012 / 19:06

1 resposta

3

Existe, de fato, compressão no HFS + no mac em 10.6 e posterior. É transparente e pode ser difícil até mesmo detectar com ferramentas padrão do SO.

E nem sempre é feito. Para compatibilidade com versões anteriores, o padrão é não compactar, mas eles compactam o SO quando ele é instalado.

  • O link tem muitos detalhes sangrentos.
  • O link lista como as várias ferramentas de linha de comando exibem os tamanhos dos arquivos compactados.

Lista de ferramentas, em caso de quebra de link:

  • hfsdebug
  • afsctool
  • stat -f %f - informa "bandeiras do usuário" nos arquivos - um dos sinalizadores significa compactação. Eu recebo "32" em um arquivo compactado e "0" em um arquivo descompactado. Provavelmente os 32 mapeiam para um campo de bits.
  • ditto - tem suporte para escrever arquivos compactados
por 02.08.2012 / 18:58