Por que os arquivos de texto são 4kB?

44

Por alguma razão, quando eu faço um arquivo de texto no OS X, é sempre pelo menos 4kB, a menos que esteja em branco. Por que é isso? Poderia haver 4.000 bytes de metadados sobre 1 byte de texto simples?

    
por tkbx 21.01.2013 / 19:14

3 respostas

50

O tamanho do bloco do sistema de arquivos deve ser de 4 kB. Quando os dados são gravados em um arquivo contido em um sistema de arquivos, o sistema operacional deve alocar blocos de armazenamento para conter os dados que serão gravados no arquivo.

Normalmente, quando um sistema de arquivos é criado, o armazenamento contido nesse sistema de arquivos é segmentado em blocos de tamanho fixo. Este artigo da Wikipédia explica brevemente este processo.

O tamanho do bloco subjacente do sistema de arquivos para este arquivo deve ter um tamanho de bloco de 4 KB. Este arquivo está usando 1 bloco de 4K e apenas um byte dentro desse bloco contém dados reais.

    
por 21.01.2013 / 19:22
13

Todos os sistemas de arquivos têm um tamanho de cluster ou bloco ou a menor quantidade de espaço em disco que pode ser alocada para armazenar um arquivo. Mesmo se o tamanho real do arquivo for menor que o tamanho do cluster / bloco, ele ainda consumirá um cluster ou 4K em seu sistema de arquivos. O tamanho do cluster depende do sistema de arquivos e das opções do sistema de arquivos.

Se contiver zero bytes, como Gilles apontou , ele usa zero blocos / clusters, mas um inode em sistemas de arquivos típicos * nix, o que responde melhor à advertência, "a menos que esteja em branco".

    
por 21.01.2013 / 19:23
8

Um pequeno experimento para ajudar a ilustrar isso:

Primeiro, vamos ver qual é o tamanho real do bloco da minha partição raiz ext4 (LVM):

[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size:               4096

É 4096 (4 KiB), conforme esperado. Agora, vamos criar três arquivos: o primeiro é zero bytes, o segundo é apenas um byte e o terceiro é 4 KiB (o tamanho do bloco):

[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096


Agora, nós ls do diretório. Usamos a opção -s para ver o tamanho alocado (a coluna mais à esquerda), em número de "blocos" de 1024 bytes. (ls não conhece o o tamanho real do bloco é 4096 - podemos especificar --block-size , mas isso escala tudo por esse valor, e queremos ver o tamanho do arquivo real em bytes também .

[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root    0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root    1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin

Duas coisas podem ser notadas aqui:

  • O arquivo de zero bytes ocupa zero blocos no sistema de arquivos, confirmando o que Giles afirmou .
  • Mesmo que os outros dois arquivos tenham tamanhos de arquivo diferentes, ambos ocupam 4 * 1024 = um bloco 4KiB ext4.

Arquivos esparsos

Arquivos esparsos são arquivos com grandes blocos de zeros. Como os dados são conhecidos como sendo todos zero, não há sentido em armazená-los no disco. Dessa forma, o tamanho aparente de um arquivo pode, na verdade, ser maior do que o tamanho do disco.

Dados Inline

Note que alguns sistemas de arquivos permitem que o conteúdo de arquivos muito pequenos seja armazenado no próprio inode . Veja É possível armazenar dados diretamente dentro de um inode em um sistema de arquivos Unix / Linux? .

    
por 22.01.2013 / 05:53