Estou certo de que um arquivo de diretório tem muito menos informações que 4096 bytes. Eu sei que o tamanho do setor é 4096 bytes. Mas existem arquivos normais menores que isso.
Por que o Unix reserva 4096 bytes para cada pasta?
É o tamanho inicial necessário para armazenar os metadados sobre os arquivos contidos nesse diretório (incluindo nomes). A alocação inicial é igual ao tamanho de um setor, mas pode crescer acima disso, se necessário. Uma vez alocado, o espaço não é liberado se os arquivos forem removidos, para reduzir a fragmentação.
Por exemplo:
$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/
Às vezes, 4096 bytes é a menor unidade de alocação para alguns sistemas de arquivos. É por isso que o diretório possui 4096.
O mesmo se aplica aos arquivos. Embora alguns arquivos possam relatar menos que 4096, na verdade eles estão consumindo pelo menos 4096 de armazenamento em disco.
fonte
4096 é reservado para reduzir a fragmentação, porque geralmente o tamanho real dos metadados contidos flutua com base no conteúdo do diretório. Se estiver constantemente crescendo e diminuindo (digamos, continha arquivos de log ou conteúdo dinâmico) ao longo do tempo, isso poderia prejudicar o desempenho. Provavelmente, isso não aconteceria com uma pasta, mas em todo o sistema de arquivos seria acrescentado rapidamente.
fonte
Depende do sistema de arquivos. No ext2 / 3/4, "é" 4096. No reiserfs, pode ser 9608 (my
$HOME
) 1032 (/tmp
) ou 48 (alguns dir in/tmp
).Por padrão, no bloco ext2 / 3/4 é 4096 - e o arquivo não pode demorar menos que isso. Se o arquivo for menor, será necessário um bloco inteiro. Como é inútil perguntar sobre o tamanho lógico do diretório e essas informações provavelmente não estão no disco e, de qualquer forma, é necessário relatar algo que informa um tamanho de bloco vezes o número de blocos ocupados, ou seja, o espaço físico que foi ocupado.
fonte
actual
tamanho do arquivo.\0
o caractere legal nos arquivos binários. PS. É possível criar FS que não o armazena - mas apenas não ext familly (e provavelmente nenhum outro popular).