Onde estão meus inodes?

3

Meu sistema de arquivos raiz está ficando sem inodes. Se isso fosse um problema de espaço em disco, usaria du -s para obter uma visão geral de alto nível de onde o espaço está indo e, em seguida, desça a árvore de diretórios para localizar criminosos específicos. Existe uma opção equivalente para inodes?

As respostas nesta questão apontarão diretórios individuais com alto uso, mas no meu caso, isso não é bom: o diretório de origem do Linux, por exemplo, fica espalhado em mais de 3000 diretórios com baixa contagem de inodes, em vez de aparecer como /usr/src/linux-4.0.5 52183 .

    
por Mark 14.07.2015 / 06:26

1 resposta

4

Com o GNU coreutils (Linux, Cygwin) desde a versão 8.22, você pode usar du --inodes , como apontado por lcd047.

Se você não tem coreutils GNU recentes, e não há hard links na árvore ou não importa se eles são contados uma vez por link, você pode obter os mesmos números filtrando a saída de find . Se você quiser o equivalente a du -s , ou seja, apenas diretórios de nível superior, tudo o que você precisa é contar o número de linhas com cada nome de diretório de nível superior. Supondo que não haja novas linhas em nomes de arquivos e que você queira apenas diretórios não pontuais no diretório atual:

find */ | sed 's!/.*!!' | uniq -c

Se você deseja mostrar a saída para todos os diretórios, com a contagem de cada diretório, incluindo seus subdiretórios, você precisa executar alguma aritmética.

find . -depth | awk '{
    # Count the current depth in the directory tree
    slashes = $0; gsub("[^/]", "", slashes); current_depth = length(slashes);
    # Zero out counts for directories we exited
    for (i = previous_depth; i <= current_depth; i++) counts[i] = 0;
    # Count 1 for us and all our parents
    for (i = 0; i <= current_depth; i++) ++counts[i];
    # We don´t know which are regular files and which are directories.
    # Non-directories will have a count of 1, and directories with a
    # count of 1 are boring, so print only counts above 1.
    if (counts[current_depth] > 1) printf "%d\t%s\n", counts[current_depth], $0;
    # Get ready for the next round
    previous_depth = current_depth;
}'
    
por 15.07.2015 / 01:27