it-swarm-pt.tech

Ficando sem memória executando fsck em sistemas de arquivos grandes

Eu cuido de uma caixa Debian Linux antiga (rodando etch) com apenas 512 MB de RAM, mas muito armazenamento externo conectado. Um sistema de arquivos ext3 tem 2.7 TB de tamanho, e fsck não pode verificar, porque está sem memória, com um erro como este:

 Erro ao alocar matriz de bloco de diretório: Falha na alocação de memória 
 E2fsck: abortado 

Eu adicionei uma partição swap de 4 GB e ela ainda não foi concluída, mas este é um kernel de 32 bits, então não espero que adicionar mais nenhuma ajude.

Além de inicializar em um kernel de 64 bits, há alguma outra maneira de fazer com que o fsck conclua sua verificação?

13
TimB

Um kernel de 64 bits e grandes quantidades de RAM permitirá que o fsck termine bem e rápido. Como alternativa, agora há uma opção no e2fsck que o instrui a armazenar todos os seus resultados intermediários em um diretório em vez de na RAM, o que ajuda imensamente. Create /etc/e2fsck.conf com o seguinte conteúdo:

[scratch_files]
directory = /var/cache/e2fsck

(E, obviamente, certifique-se de que o diretório exista e esteja em uma partição com alguns GB de espaço livre). e2fsck executará SLLOOOOWWWWWWW, mas pelo menos será concluído.

Claro, isso não funcionará com o FS root, mas se você tem swap, então você deixou de montar o root FS de qualquer maneira.

12
womble

Acabei tentando o que sugeria womble; aqui estão mais alguns detalhes que podem ser úteis se, como eu, você nunca viu essa nova funcionalidade no e2fsck antes.

A opção de configuração "scratch_files" para e2fsck se tornou disponível no período da versão 1.40.x. (No nosso caso, tivemos que atualizar para a distribuição Debian mais recente para obter esta funcionalidade.)

Além da opção "diretório =/var/cache/e2fsk" sugerida, existem algumas outras opções de configuração para ajustar como o armazenamento de arquivos temporários é usado. Usei "dirinfo = false", pois o sistema de arquivos tinha um grande número de arquivos, mas não um grande número de diretórios. Se a situação fosse inversa, a opção "icount" seria apropriada. Essas opções foram documentadas na página de manual do e2fsck.conf.

BTW, Ted T'so escreveu sobre essas opções em este tópico .

Descobri que o e2fsck estava funcionando extremamente devagar, muito mais do que o previsto por Ted. Ele funcionava com 99,9% de utilização da CPU na maior parte do tempo (em um processador antigo extremamente lento), o que sugere que o armazenamento dessas estruturas de dados no disco em vez da memória não foi a principal causa da lentidão. Pode ser que algo mais sobre o que estava armazenado no sistema de arquivos tornou o e2fsck particularmente lento. No final, abandonei a verificação do sistema de arquivos por enquanto; o sistema de arquivos deveria ser verificado, mas não apresentava erros (até onde eu sei), então vou providenciar para que seja verificado em um momento mais conveniente, quando pudermos ter uma indisponibilidade de uma semana.

6
TimB