Interromper montagens NFS quebradas de bloquear um diretório?

17

Eu tenho uma configuração um tanto interessante: um servidor com vários servidores NFS remotos montados em uma pasta, com essa pasta sendo reexportada pelo Samba. Pense nisso como um proxy de compartilhamento, mantendo todas as pastas compartilhadas em um só lugar.

Meu problema, porém, é que sempre que uma das montagens é desativada (servidor reiniciado, serviço reiniciado, disco rígido externo que o servidor estava exportando removido etc.) qualquer tentativa de ler os blocos de montagem para sempre. Isso também significa que a execução lsnesse diretório congela e os usuários conectados ao Samba também congelam. Isso também causou algumas vezes que um dos meus trabalhos agendados foi bloqueado, o que quase causou um travamento no servidor porque ele tinha centenas de processos bloqueados. Isso está ficando muito chato, pois geralmente tenho que abrir um terminal que não está esperando para lsterminar (não pode cancelá-lo), executar for i in *; do sudo umount -l -f $i; done;, esperar que funcione, corrigir o problema e remontar tudo.

Existe uma maneira de montar um compartilhamento NFS com a estipulação de que, se a conexão falhar por qualquer motivo (de preferência com um período de repetição), a montagem será desmontada ou, pelo menos, não será bloqueada?

TheLQ
fonte
Você pode postar /etc/fstab?
21412 Karlson

Respostas:

19

Normalmente, ao montar o NFS, é uma boa ideia definir sinalizadores semelhantes a este:

bg,intr,soft
   bg      If  the  first  NFS  mount  attempt times out, retry the mount in the 
           background.  After a mount operation is backgrounded, all subsequent mounts
           on the same NFS  server  will  be  backgrounded immediately, without first
           attempting the mount.  A missing mount point is treated as a timeout, to
           allow for nested NFS mounts.
   soft    If  an  NFS  file operation has a major timeout then report an I/O error
           to the calling program.  The default is to continue retrying NFS file
           operations indefinitely.
   intr    If  an  NFS  file  operation  has  a major timeout and it is hard mounted,
           then allow signals to interupt the file operation and cause it to return
           EINTR to the calling program.  The default is to not allow file operations
           to be interrupted.

Além disso, você pode definir:

timeo=5,retrans=5,actimeo=10,retry=5

o que deve permitir que a montagem do NFS atinja o tempo limite e torne o diretório inacessível se o servidor NFS interromper a conexão em vez de aguardar novas tentativas.

Dê uma olhada neste link para obter mais informações sobre as opções de montagem NFS

Karlson
fonte
usando apenas bg, intr, soft ainda deixa um travamento de 120 segundos no Fedora 20. Mas adicionar timeo = 5, retrans = 5, actimeo = 10, tentar novamente = 5 torna a tarefa agradável e rápida. Obrigado!
22814 Greg
4
"A opção de montagem intr / nointr foi descontinuada após o kernel 2.6.25. Somente o SIGKILL pode interromper uma operação NFS pendente nesses kernels e, se especificada, essa opção de montagem é ignorada para fornecer compatibilidade com versões anteriores dos kernels". "Esta opção é fornecida para compatibilidade com versões anteriores. É ignorada após o kernel 2.6.25."
David C. Bishop
1
@ DavidC.Bishop, de onde é essa citação? Você pode dar um link? Obrigado.
Becko
2
@ Becko: A citação SIGKILL é da página de manual do nfs (basta procurar por 'nointr'). As versões mais recentes, como a do meu sistema, agora simplesmente leem "Esta opção é fornecida para compatibilidade com versões anteriores. Ela é ignorada após o kernel 2.6.25". linky .
David C. Bishop