Por que o tamanho do diretório do cache não é ext4?

1

Mais uma vez estou limpando minha área de trabalho porque estou ficando sem espaço no disco rígido e toda vez que eu chamo du -sh ~ , demora muito tempo para calcular o tamanho atual do diretório.

Do meu ponto de vista, não consigo ver uma razão pela qual o sistema de arquivos ext4 não armazene em cache as informações sobre o tamanho do diretório e atualize-o sempre que um arquivo é criado / excluído. A informação seria então exposta ao sistema e, eventualmente, ao usuário. É claro que seria necessário propagar os dados de tamanho de diretório para a árvore de diretórios, mas não consigo imaginar uma situação em que, em uma área de trabalho normal do Linux, isso causaria problemas.

Onde eu entendi errado?

    
por d33tah 05.11.2012 / 15:00

2 respostas

4

Um cache simples não funcionaria. Um cache é sobre a verificação se você já tem a resposta e só reprocessa se não tiver. Mas neste caso, uma única entrada perdida tornaria os outros inúteis. Por isso, teria de manter todas tamanhos de diretório atualizadas todas a hora.

Além disso, não subestime o possível impacto da sua proposta. Quando os sistemas de arquivos journalling eram novos, havia muita oposição porque atualizar o diário era muito caro. Além disso, a maioria dos sistemas de arquivos permite opções como noatime , nodiratime e relatime que reduzem esses tipos de atualização de medatata. Note que todos estes (periódicos e atualizações de tempo) estão ligados no tempo, todos eles pegam um número específico de acessos de blocos (e são geralmente 'escondidos' pelo agendamento avançado de IO), mas atualizando o tamanho de todos diretório acima do caminho significa uma quantidade desconhecida de acessos.

Finalmente, nos sistemas de arquivos POSIX, não existe um 'diretório contendo' real. Uma entrada de arquivo em um diretório aponta para um inode (a estrutura do disco que contém as informações do arquivo), mas não há referência do inode de volta ao diretório. Isso permite o recurso 'link físico', onde mais de uma entrada (geralmente em diretórios diferentes) aponta para o mesmo inode. Mesmo se você mantiver uma lista de diretórios que apontam para o inode, você está multiplicando o número (já grande) de atualizações. Pior, agora você tem que acompanhar se já atualizou cada diretório, já que em algum ponto da cadeia você obterá um ancestral compartilhado, que não deve contar duas vezes a atualização. Ou deveria? talvez você tenha que manter dois tamanhos em cada diretório, um que conte todos os arquivos "reais" e outro que conta sempre que aparecer ....

Não parece tão útil depois de tudo.

    
por 05.11.2012 / 15:16
0

Há também outro motivo. du não leva em conta se parte do subsistema está em outro volume montado no diretório que você está medindo.

Assim, mesmo se o uso fosse avaliado por volume, du não o explicaria. Por outro lado, df faz uso de tal informação ....

    
por 05.11.2012 / 15:34