Linux ext3 Índice de diretório completo - internals

2

Encontrou uma situação hoje em um servidor que me faz pensar. Aqui está o cenário:

O syslog mostra:

kernel: EXT3-fs warning (device sdb2): ext3_dx_add_entry: Directory index full!

Encontrou o culpado como um diretório com 9,1 milhões de arquivos. Eu sei que foram 9 milhões de arquivos porque usei isso para excluí-los:

perl -e 'my $i=0;for(<*>){$i++;((stat)[9]<(unlink))} print "Files deleted: $i\n"'

Logo após a conclusão, eu corri ls - que levou cerca de 3 minutos e retornou um arquivo.

Alguns minutos depois, um novo lote - mais de 9,1 milhões de arquivos foram exibidos no mesmo diretório, e o syslog mostrou novamente:

kernel: EXT3-fs warning (device sdb2): ext3_dx_add_entry: Directory index full!

Eu executei a exclusão novamente e o mesmo cenário se repetiu. Poucos minutos depois, um novo lote de mais de 9 milhões de arquivos.

Os arquivos que acabaram de aparecer são antigos (cerca de 3 meses de idade).

Alguém pode confirmar se esse é o comportamento esperado do ext3?

  • Índice de diretório completo é gerado, bem, quando está cheio
  • Novos arquivos podem ser criados, mas não podem ser adicionados ao índice
  • Novos arquivos são armazenados em cache "em algum lugar"
  • Quando um espaço é liberado, o novo arquivo é adicionado ao índice (e, portanto, será exibido com, por exemplo, ls)

Eu suspeito que isso é o que está acontecendo, mas atualmente não tenho nenhuma prova.

Qualquer feedback apreciado!

Por favor, note que a questão não é sobre como consertar, é sobre entender o que está acontecendo aqui.

    
por Stefan 13.08.2015 / 05:35

1 resposta

0

" ... a questão não é sobre como consertar, é sobre entender o que está acontecendo aqui .... "

Meu palpite é que você está sofrendo de uma corrupção (grave?) do sistema de arquivos e ... quanto mais arquivos forem (virtualmente?) criados e removidos, mais grave será a corrupção.

Estou dizendo isso porque:

  1. você escreveu " ... Alguns minutos [...] mais tarde, 9,1 milhões de arquivos apareceram no mesmo diretório ... ". Vamos supor que com "alguns minutos" você pretendia 15 minutos. Isso significa que aproximadamente 10 mil arquivos são criados por segundo . Mesmo que seu servidor / armazenamento possa lidar com essa carga, é difícil acreditar que enquanto esse processo de criação está sendo executado não há nenhum nenhum sinal dessa atividade! Então, pelo menos, o duplo fato de que:

    • 10K arquivos por segundo são criados (em um intervalo de tempo de 15 minutos);
    • você não está percebendo nenhuma carga / comportamento estranho do seu sistema

    deixe-me pensar que ... o processo de criação é "falso" e, como tal, você tem problemas de integridade do sistema de arquivos;

  2. até mesmo a mensagem " ext3_dx_add_entry: Índice do diretório cheio! " deixe-me pensar que em tal cenário não deve ser possível criar arquivos adicionais dentro do sistema de arquivos relacionado (BTW: como mencionado por @Stefan, comentando seu OP), você parece ser capaz de efetivamente criar arquivos adicionais. Isso é novamente - IMHO - outro fato que chama a atenção. Como mitigação parcial, a palavra " warning " (... e não "error") nas mensagens de log (aviso EXT3-fs) .... me faz pensar que até mesmo desenvolvedores de kernel esperavam que tal situação não é tão "crítica" (... eles acham que é um aviso ... e não um erro. Então não deveria ser algo tão ... terrível!);

Além do acima, eu também encontrei este outro post do SF confirmando que, pelo menos, é essa situação específica, o problema era um problema de integridade do sistema de arquivos.

Quanto à parte final de sua pergunta (aquela relacionada à hipótese de "caching"), mesmo que eu não seja um hacker do kernel, eu acredito strongmente que isso é não um comportamento do kernel, uma vez que estaria fora do escopo do kernel, sendo algo a ser abordado pelo módulo cruzado (não sendo possível implementar lidando apenas com o módulo ext3). Mas, por favor, não me culpe se esta última frase estiver absolutamente errada! É apenas o meu "sentimento": -)

Atualizar

Quanto ao ponto 2) acima, eu estava errado : o "Índice do Diretório" parece não estritamente relacionado à estrutura do sistema de arquivos usada para armazenar de forma eficiente os dados de arquivo e metadados de arquivos. Em vez disso, é "apenas" um meio de otimizar a pesquisa em diretórios que contenham lotes de arquivos [veja aqui ou esta outra postagem SF aqui ] . Isto parece explicar porque o log reporta um "aviso" (e não um "erro") como, na minha opinião, quando o "Directory Index" está cheio ... tudo pode continuar normalmente, sem os benefícios da indexação.     
por 13.08.2015 / 15:37