Como descobrir qual cliente tem bloqueio de arquivo no NFS

2

Temos um cluster do Centos 7 apoiado pelo NFS4. Existem alguns arquivos nele esse bando de execução com blocos LOCK_EX (e com LOCK_NB retorna recurso temporariamente indisponivel). Apenas um punhado de arquivos, e eles são todos os que um usuário teria motivos para se reunir ().

Ergo, algo tem um bloqueio nesses arquivos. Mas quem? Nós tentamos executando o lsof em todas as máquinas do cluster, e ele não criou qualquer coisa, mas possivelmente há alguns clientes que não conhecemos. o programa lslocks não ajuda.

Como posso descobrir qual máquina, quanto mais o processo, tem o bloqueio?
Ou é possível que o NFS esteja confuso e pense que há um bloqueio quando o processo se foi? Nesse caso, como eu descobriria se é esse o caso e como eu iria esclarecer isso? Reiniciando o NFS servidor requer uma solicitação de mudança, portanto, não é algo fácil de fazer.
Idem para a estratégia de reiniciar todos os clientes, um por um.

Embora muitas páginas da Web declarem que o flock () não funciona no NFS, outros dizem que sim (por exemplo link ) e meu testes confirmam isso. Por exemplo, execute:

perl -E 'abra $ fh, "> >", mude ou morra "Open: $!"; diga "Feito aberto"; flock ($ fh, 2) ou morrer "flock: $!"; diga "Done flock"; sleep 10 'somefilename

Execute-o em um cliente, aguarde 5 segundos, execute-o em outro e o segundo não será impresso "Done flock" até que o primeiro saia por 5 segundos mais tarde. Apenas o que você esperaria. Então o servidor NFS sabe que o arquivo está bloqueado. Como obtenho isso para me dizer quem acha que o bloqueou?

    
por Peter Scott 03.07.2018 / 01:40

0 respostas