Depende do sistema de arquivos subjacente no servidor NFS. Em última análise, isso se resume a um pouco estranho e pouco conhecido de semântica POSIX, ou seja, que o campo st_blocks
retornado por stat()
não inclui blocos alocados como metadados , somente blocos alocados como < em> data .
Essa distinção se originou quando os sistemas de arquivos padrão nos sistemas UNIX usavam tabelas de inodes alocadas estaticamente, o que significava que havia uma quantidade fixa de espaço usada por cada objeto do sistema de arquivos para metadados (e, portanto, não fazia sentido se preocupar com isso. tamanho do arquivo, pois não contribuiu para o uso total do espaço do arquivo (porque a tabela de inodes foi alocada estaticamente, esse espaço já estava reservado). Nesses sistemas de arquivos, as entradas de diretório não eram armazenadas como metadados, mas como blocos regularmente alocados no arquivo principal. parte do sistema de arquivos (IOW, entradas de diretório são tratadas como conteúdo de arquivo, não como metadados) É por isso que a maioria dos diretórios em sistemas UNIX mais antigos são múltiplos de 4kB, já que é o tamanho de bloco para a maioria dos sistemas de arquivos UNIX. também por que stat()
e ferramentas que o usam relatam tamanhos de arquivo sem contabilizar metadados.
Em muitos sistemas de arquivos mais novos, no entanto, as coisas são bem diferentes. O espaço para metadados é alocado dinamicamente em vez de ser uma tabela estática de entradas de tamanho fixo, e entradas de diretório são tratadas como metadados. Como resultado, dependendo do sistema e sistema de arquivos exatos, os diretórios podem mostrar como zero tamanho aparente, ou podem mostrar uso de disco zero (como relatado por stat
ou du
) mas um pequeno tamanho aparente sub-kB conforme relatado por %código%. O BTRFS é um bom exemplo de um sistema de arquivos que se enquadra na segunda categoria, o tamanho aparente de um diretório é uma função de quantas entradas existem e por quanto tempo seus nomes estão, enquanto o tamanho reportado em disco é recuperado de ls
é sempre zero.