Abortar operação lenta do NFS

0

Estou conectado a um servidor via ssh, nesse servidor estou tentando acessar um diretório NFS. No entanto, devido a problemas de conexão, os comandos básicos, como ls , às vezes, mas não sempre, levam uma eternidade para serem concluídos nesse diretório. Existe uma maneira melhor de abortar tais comandos do que terminar e reabrir a conexão ssh? Enviar SIGING não parece ter efeito.

    
por Peter 08.11.2018 / 09:36

1 resposta

4

Após a versão do kernel 2.6.25, a única maneira de parar processos pendurados em montagens NFS inacessíveis é SIGKILL, ou seja, kill -9 .

Antes dessa versão do kernel, ela dependia das opções de montagem usadas: com opções hard,nointr os processos não poderiam ser interrompidos e com hard,intr seria possível interromper um processo pendente do NFS com o SIGINT .

No kernel 2.6.25, foi reconhecido que os processos sendo totalmente impossíveis de matar são geralmente altamente indesejáveis, então todo o par de opções intr/nointr mount foi tornado não operacional e intr foi feito o modo de operação padrão. Ao mesmo tempo, o requisito de sinal foi reforçado para SIGKILL para tornar óbvio que matar um processo em tal estado só deveria ser feito após uma consideração cuidadosa.

Inerentemente, processos somente de leitura como ls devem sempre ser seguros para matar, mas se o processo estiver gravando algo em um arquivo localizado em um sistema de arquivos NFS, é travado no servidor NFS inacessível, e você o mata, o destino O arquivo pode estar em um estado incoerente depois e pode precisar de algumas ações de recuperação específicas do aplicativo.

Com as opções soft,timeo=<number of seconds> , a operação falharia automaticamente com um erro após o número especificado de segundos, mas isso poderia causar problemas de integridade de dados. Por exemplo, se um programa estava acessando um arquivo baseado em NFS com um mmap(2) habilitado para gravação e uma operação de gravação falhava, não haveria nenhuma maneira de relatar o erro de volta ao programa, nem mesmo uma maneira determinística de evitar o programa prossiga em frente, a menos que / até o programa chamar munmap(2) ou msync(2) . Portanto, ou os dados na memória e os dados no disco estariam fora de sincronia, ou os dados mapeados na memória teriam que se reverter silenciosamente para o estado de pré-gravação por trás do programa ... nenhum desses é uma boa opção, e é o motivo pelo qual a opção de montagem do NFS soft geralmente não é recomendada.

    
por 08.11.2018 / 12:19

Tags