Como o tamanho do diretório é calculado?

1

Eu executei isso na minha instância do CentOS 7.3.

[user01@ ~]$ rm -rf my-very-own-directory/
[user01@ ~]$ mkdir my-very-own-directory/ 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 6           Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ mkdir my-very-own-directory/00
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 16          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ date > my-very-own-directory/date.txt 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 32          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ echo "content" > my-very-own-directory/content
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 47          Blocks: 0          IO Block: 4096   directory
  • Criação inicial = > tamanho = 6
  • Adicione uma entrada com 2 bytes no comprimento do nome = > tamanho é 16 (6 + 8 + 2)
  • Adicione outra entrada com 4 bytes no comprimento do nome = > o tamanho é 32 (16 + 8 + 8)
  • Adicione outra entrada com 7 bytes no comprimento do nome = > o tamanho é 47 (32 + 8 + 7)

2 perguntas:

  1. Um diretório criado tem um tamanho de 6. Por quê?
  2. Cada nova entrada no diretório, seja o arquivo de um subdiretório, será adicionada ao tamanho de 'my-very-own-directory'. A questão é, o tamanho aumenta em 8 + (comprimento do nome do arquivo / nome do diretório). Por que 8?
por Titi Wangsa bin Damhore 08.04.2017 / 00:42

1 resposta

2

O formato do diretório depende inteiramente do sistema de arquivos.

No mínimo, uma entrada de diretório deve conter o nome do arquivo e um número de inode.

Para usar o Linux ext4 filesystem (e versões mais antigas) como exemplo, a entrada de diretório original tinha o número de inode (4 bytes), o comprimento do nome de arquivo (2 bytes) e o comprimento total de entrada (2 bytes), além do próprio nome do arquivo. (IIRC o comprimento total é especificado explicitamente para permitir preenchimento e tal.)

As versões atuais (de ext3 ) também suportam um armazenamento de tipo de árvore, que permite pesquisas mais rápidas em diretórios com um grande número de arquivos, mas é claro que possui um formato mais complicado.

Embora em ext4 , o tamanho de um diretório é mostrado apenas como um múltiplo do tamanho do bloco, ou seja, um diretório vazio tem tamanho 4096 e não aumenta até que arquivos suficientes sejam criados para exigir a alocação de um novo bloco de dados para isso.

O RHEL 7 usa o XFS como o sistema de arquivos padrão, de modo que pode ser o que você está executando. O XFS tem vários formatos de diretório , e o forma abreviada usada para diretórios pequenos tem essencialmente o mesmo conjunto mínimo de inode + nome do arquivo + tamanho do nome do arquivo + comprimento total.

    
por 08.04.2017 / 12:07