Por alguma razão, quando eu faço um arquivo de texto no OS X, ele sempre é de pelo menos 4kB, a menos que esteja em branco. Por que é isso? Poderia haver 4.000 bytes de metadados sobre 1 byte de texto sem formatação?
:P
Por alguma razão, quando eu faço um arquivo de texto no OS X, ele sempre é de pelo menos 4kB, a menos que esteja em branco. Por que é isso? Poderia haver 4.000 bytes de metadados sobre 1 byte de texto sem formatação?
:P
Respostas:
O tamanho do bloco do sistema de arquivos deve ser 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 Wikipedia explica brevemente esse processo.
O tamanho do bloco subjacente do sistema de arquivos para esse arquivo deve ter um tamanho de bloco de 4K bytes. Este arquivo está usando 1 bloco de 4K e apenas um byte dentro desse bloco contém dados reais.
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 manter um arquivo. Mesmo que o tamanho real do arquivo seja menor que o tamanho do cluster / bloco, ele ainda consumirá um cluster ou 4K no seu sistema de arquivos. O tamanho do cluster depende do sistema de arquivos e das opções do sistema de arquivos.
Se ele contiver zero bytes, como Gilles apontou , usa zero blocos / clusters, mas um inode em sistemas de arquivos * nix típicos, o que responde melhor à ressalva, "a menos que esteja em branco".
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 o esperado. Agora, vamos criar três arquivos: O primeiro tem zero bytes, o segundo tem apenas um byte e o terceiro tem 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
o diretório. Usamos a -s
opção para ver o tamanho alocado (a coluna mais à esquerda), em número de "blocos" de 1024 bytes.
(ls não sabe que o tamanho real do bloco é 4096 - poderíamos especificar, --block-size
mas isso dimensiona tudo por esse valor, e também queremos ver o tamanho real do arquivo em bytes) .
[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 observadas aqui:
Arquivos esparsos são arquivos com grandes blocos de zeros. Como os dados são conhecidos como zero, não há sentido em armazená-los no disco. Dessa maneira, o tamanho aparente de um arquivo pode realmente ser maior que o tamanho do disco.
Observe que alguns sistemas de arquivos permitem que arquivos muito pequenos sejam armazenados no próprio inode . Consulte É possível armazenar dados diretamente dentro de um inode em um sistema de arquivos Unix / Linux? .