Como faço para parar o bash de pendurar ao tentar iniciar programas enquanto o NFS é interrompido

6

No momento, estou tendo um erro no Ubuntu 13.10 , o que significa que, quando Eu retomo minha máquina depois de uma suspensão, as conexões de rede não voltam. Eu tenho um par de montagens NFS e porque eles estão em um estado suspenso, sempre que eu tento executar qualquer coisa na linha de comando (por exemplo, a solução no relatório de erro: nmcli cli sleep false ) o shell trava. Por "travar" quero dizer que eles não respondem a nenhum sinal (Ctrl-C, Ctrl-Z, kill, etc).

Quando eu uso caminhos absolutos (ieeg. /usr/bin/nmcli ), ele funciona bem como esperado. Quando retome a conexão de rede, todos os processos suspensos voltam à vida e concluem sua execução.

Estou confuso sobre o porquê disso acontecer. Minha suspeita atual é que o bash está tentando procurar em um dos diretórios montados pelo NFS o comando que estou tentando executar. Meu PATH não inclui nenhum dos diretórios montados pelo NFS.

Então, minha pergunta é dupla: Por que o shell fica assim e como posso pará-lo?

    
por Burhan Ali 30.10.2013 / 10:22

4 respostas

2

Na minha experiência, a implementação do NFS no Linux não é tão boa quanto a do Solaris. Em particular, o NFS no Linux pode fazer com que os processos travem em um dispositivo, então você pode parecer alguns processos nesse estado:

[pkearns@centos6 ~]$ ps -lp $$
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 D   500  2626  2307  0  80   0 -  1282 -      pts/1    00:00:00 bash
[pkearns@centos6 ~]$ 

O D na segunda coluna, indicando que o processo está pendurado em um dispositivo. Esse dispositivo suspenso pode se propagar pelo sistema de uma maneira imprevisível, interferindo em processos aparentemente não relacionados.

Tente isto:

ps -elf | awk '$2=="D"'

Isso mostrará todos os processos pendurados em dispositivos.

    
por 07.11.2013 / 16:33
1

Por padrão, o NFS está usando chamadas de hardware não interrompíveis. Assim, você não pode "Ctrl + C" ou "Ctrl + Z" qualquer operação FS (pode ser uma leitura, gravação, stat ...).

Para poder "Ctrl + C" você pode montar seu compartilhamento NFS com a opção " intr " para poder interromper o syscall. Você pode testá-lo com:     montar -o remontar, intr / YOUR / MOUNTPOINT

Depois, edite o arquivo / etc / fstab para adicionar a opção de persistência.

A opção "nolock" é apenas para desabilitar o método "File Locking", usado para evitar a escrita simultânea por múltiplos clientes. Não faz nada com o I / O.

Para a pergunta "Por que ele fica pendente enquanto não tenho nenhuma referência a locais NFS", talvez haja algo com o bashcompletion ou um script que use um comando que teste o NFS?

Adrien.

    
por 07.11.2013 / 18:22
0

Provavelmente, a opção "-o nolock" no lado do cliente pode resolver o seu problema.

    
por 04.11.2013 / 19:34
0

A razão para isso geralmente é um processo aguardando o tempo limite no compartilhamento NFS (o que geralmente não acontece). No shell, o motivo mais provável é um dos diretórios em seu PATH que vem antes daquele que realmente contém o executável em um compartilhamento NFS inacessível (que, como você descobriu, era de fato o caso )

    
por 07.11.2013 / 11:56

Tags