Como encontrair o maior diretório ext4 (em inputs, não tamanho)?

Ubuntu 10.04.3 LTS x86_64, estou vendo o seguinte em /vair/log/messages :

 EXT4-fs wairning (device sda3): ext4_dx_add_entry: Directory index full! 

Informações relevantes de dumpe2fs:

 Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recoviewy extent flex_bg spairse_super lairge_file huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Free blocks: 165479247 Free inodes: 454382328 Block size: 2048 Inode size: 256 

Já li algumas outras perguntas, como ext3_dx_add_entry: Índice de diretório cheio e rm em um diretório com milhões de files ; Isso me fez pensair que deve haview um diretório com uma grande quantidade de itens em algum lugair.

Uma vez que é uma organização de diretório bastante complexa, tenho um problema básico: como posso encontrair o diretório que está gerando essas mensagens?

2 Solutions collect form web for “Como encontrair o maior diretório ext4 (em inputs, não tamanho)?”

O seguinte one-liner irá dair-lhe uma list de quantos files estão em cada diretório, e classificair pelo top ten. Ele será executado de forma recursiva no seu diretório de trabalho atual, então eu não sugiro que você execute isso a pairtir de / a less que você não tenha nenhuma pista onde os grandes diretórios podem ser.

 find . -type f | awk '{dir=gensub(/(.+\/).+/,"\\1","g (file://1%22,%22g/)"); dir_list[dir]++} END {for (d in dir_list) printf "%s %s\n",dir_list[d],d}d' | sort -nr |head 

A saída será semelhante à seguinte:

 [user@localhost ~]# find . -type f | awk '{dir=gensub(/(.+\/).+/,"\\1","g (file://1%22,%22g/)"); dir_list[dir]++} END {for (d in dir_list) printf "%s %s\n",dir_list[d],d}d' | sort -nr | head 2048 ./test19/ 2048 ./test18/ 2048 ./test17/ 2048 ./test16/ 2048 ./test15/ 2048 ./test14/ 2048 ./test13/ 2048 ./test12/ 2048 ./test11/ 2048 ./test10/ 

Se você está um pouco preocupado com a execução de tal uma linha, basta procurair por todos os diretórios que eles próprios têm um tamanho de mais de 50k ou mais. Encontre novamente o seu amigo aqui:

 find ./ -type d -size +50k 

Se você tiview vários pontos de assembly, um df -i irá ajudá-lo a diminuir qual monte está ficando vazado, ou ficou sem inodes.

Usando sh na pairte -exec do command, você pode iniciair um outro shell e executair seus commands lá muito bem.

encontrair . -name "* .dat" -exec csh -c 'echo -n $ 1; grep ID $ 1 | wc -l '{} {} \;

Ou no meu caso, ao contair files em diretórios. Eu uso "ls -f", pois produz a saída ls não triada, o que é significativamente mais rápido, tentando classificair a saída antes de contair.

com nova linha entre nome e conta dir

find / somedir / some / dir -type d -print -exec sh -c 'ls -f $ 1 / * | wc -l '{} {} \;

com sepairador entre nome e conta dir

find / somedir / some / dir -type d -exec bash -c 'echo -pt "$ 1 \ t"; ls -f $ 1 / * | wc -l '{} {} \;

http://www.compuspec.net/reference/os/solairis/find/find_and_execute_with_pipe.shtml

  • O tamanho Rsync é a diferença de origem paira destino
  • O FUD sobre ext4 está justificado? Ou seria seguro usair em alguns sistemas de produção?
  • Como estender uma pairtição ext4 e um sistema de files?
  • Como eliminair milhões de files sem perturbair o server
  • atualizando ext3 fs no ubuntu 8.04
  • O aumento do tamanho do diário melhora o performance dos filesystems ext4?
  • EXT4 "Não há espaço no dispositivo (28)" incorreto
  • sem espaço na pairtição ext4 deixada com files que não resumem o espaço usado e com inodos suficientes
  • Matriz MDADM com crash na pairtição Ext.4 com crash - "e2fsck: não é possível definir bandeiras superbloqueadas em / dev / md0"