Mais uma vez, estou limpando minha área de trabalho porque estou ficando sem espaço no disco rígido e toda vez que ligo du -sh ~
, leva muito tempo para calcular o tamanho atual do diretório.
Na minha perspectiva, não vejo uma razão para o sistema de arquivos ext4 não armazenar em cache as informações sobre o tamanho do diretório e atualizá-las sempre que um arquivo for criado / excluído. As informações seriam expostas ao sistema e, eventualmente, ao usuário. É claro que seria necessário propagar os dados do tamanho do diretório na árvore de diretórios, mas não consigo imaginar uma situação em que em um desktop Linux normal isso causaria problemas.
Onde eu entendi errado?
linux
filesystems
ext4
du
d33tah
fonte
fonte
TRIM
. O kernel pode enviar apenas comandos SATA para a unidade de disco rígido.Respostas:
Um cache simples não funcionaria. Um cache consiste em verificar se você já tem a resposta e apenas reprocessar se não tiver. Mas, nesse caso, uma única entrada ausente tornaria outras inúteis. Por isso, teria que manter todos os tamanhos diretório atualizado toda a hora.
Além disso, não subestime o possível impacto da sua proposta. Quando os sistemas de arquivos diários eram novos, havia muita oposição porque a atualização do diário era muito cara. Além disso, a maioria dos sistemas de arquivos permite opções como
noatime
,nodiratime
erelatime
que reduzem esses tipos de atualização de dados. Observe que todos esses (diários e atualizações de tempo) são limitados no tempo, todos eles recebem um número específico de acessos de bloco (e geralmente são "ocultos" pelo agendamento avançado de E / S), mas atualizar o tamanho de cada diretório no caminho significa um desconhecido. quantidade de acessos.Finalmente, nos sistemas de arquivos POSIX, não existe um 'diretório de contenção' 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 para o diretório. Isso permite o recurso 'hard link', 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, estará multiplicando o número (já grande) de atualizações. Pior, agora você deve acompanhar se já atualizou cada diretório, pois em algum momento da cadeia, você terá um ancestral compartilhado, que não deve contar duas vezes a atualização. Ou deveria? talvez você precise manter dois tamanhos em cada diretório, um que conte todos os arquivos 'reais',
Afinal, não parece tão útil.
fonte
symlink(2)
syscall), mas as ligações duras feitas com olink(2)
syscallHá também outro motivo.
du
não leva em consideração se parte do subsistema estiver 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
utiliza essas informações ....fonte