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? .