Como o tamanho do diretório é calculado?

Como o tamanho do diretório é calculado?

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 => o tamanho é 16 (6 + 8 + 2)
  • Adicione outra entrada com 4 bytes de comprimento de nome => o tamanho é 32 (16 + 8 + 8)
  • Adicione outra entrada com 7 bytes de comprimento de nome => o tamanho é 47 (32 + 8 + 7)

2 perguntas:

  1. Um diretório criado tem tamanho 6. Por quê?
  2. Cada nova entrada no diretório, seja um arquivo de um subdiretório, aumentará o tamanho de 'meu-próprio-diretório'. A questão é: o tamanho aumenta em 8 + (comprimento do nome do arquivo/nome do diretório). Por que 8?

Responder1

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 oext4Sistema de arquivos Linux(e versões mais antigas), por exemplo, a entrada do diretório original tinha o número do inode (4 bytes), o comprimento do nome do arquivo (2 bytes) e o comprimento total da 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 armazenamento do tipo árvore, que permite pesquisas mais rápidas em diretórios com grande número de arquivos, mas é claro que possui um formato mais complicado.

Embora ativado 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 4096e não aumenta até que arquivos suficientes sejam criados para exigir a alocação de um novo bloco de dados para ele.

RHEL 7 usa XFS como sistema de arquivos padrão, então pode ser isso que você está executando.O XFS possui vários formatos de diretório, e o formato abreviado usado para diretórios pequenos tem essencialmente o mesmo conjunto mínimo de número de inode + nome do arquivo + comprimento do nome do arquivo + comprimento total.

informação relacionada