umount bind de NFS obsoleto

4

Eu tenho um problema ao remover montagens criadas com mount -o bind de uma pasta NFS montada localmente. Assuma a seguinte estrutura de montagem:

Diretório montado do NFS:

$ mount -o rw,soft,tcp,intr,timeo=10,retrans=2,retry=1 \
 10.20.0.1:/srv/source /srv/nfs-source

Diretório vinculado:

$ mount -o bind /srv/nfs-source/sub1 /srv/bind-target/sub1

Quais os resultados neste mapa de montagem

$ mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
# ...
10.20.0.1:/srv/source on /srv/nfs-source type nfs (rw,soft,tcp,intr,timeo=10,retrans=2,retry=1,addr=10.20.0.100)
/srv/nfs-source/sub1 on /srv/bind-target/sub1 type none (rw,bind)

Se o servidor ( 10.20.0.1 ) ficar inativo (por exemplo, ifdown eth0 ), as alças ficarão obsoletas, o que é esperado.

Agora posso desmontar a montagem do NFS com força

$ umount -f /srv/nfs-source

Isso leva alguns segundos, mas funciona sem problemas. No entanto, não consigo desmontar o diretório ligado em /srv/bind-target/sub1 . O umount forçado resulta em:

$ umount -f /srv/bind-target/sub1
umount2: Stale NFS file handle
umount: /srv/bind-target/sub1: Stale NFS file handle
umount2: Stale NFS file handle

Aqui está um link

Eu tentei desmontar os subdiretórios de antemão, encontrar qualquer processo que acesse qualquer coisa dentro do NFS ou ligar montagens (não há nenhuma).

lsof também reclama:

$ lsof -n
lsof: WARNING: can't stat() nfs file system /srv/nfs-source
      Output information may be incomplete.
lsof: WARNING: can't stat() nfs file system /srv/bind-target/sub1 (deleted)
      Output information may be incomplete.
lsof: WARNING: can't stat() nfs file system /srv/bind-target/
      Output information may be incomplete.

Eu tentei com os recentes kernels Linux estáveis 3.2.17, 3.2.19 e 3.3.8 (não posso usar o 3.4.x, porque preciso do patch do grsecurity, que ainda não é suportado - o grsecurity não é corrigido no os testes acima!).

Meus nfs-utils são da versão 1.2.2 (debian stable).

Alguém tem uma ideia de como eu posso:

  • forçar o desmontar de alguma outra maneira? (qualquer truque sujo é bem-vindo, perda de dados ou dano neglible neste momento)
  • usa outra coisa em vez de mount -o bind ? (não pode usar links suaves, pois diretórios montados serão usados no chroot; bindfs via FUSE está longe de ser lento para ser uma opção)

Obrigado Paul

Atualização 1

  • Com o 2.6.32.59, o montante das submontagens (antigas) funcionam bem. Parece ser um erro de regressão do kernel.
  • Os testes acima, onde com o NFSv3. Testes adicionais com o NFSv4 não mostraram alterações.

Atualização 2

  • Testamos agora vários kernels 2.6 e 3.x e agora temos certeza de que isso foi introduzido no 3.0.x. Vamos filmar um relatório de bug, esperamos que eles resolvam isso.
por Paul Eisner 06.06.2012 / 20:56

3 respostas

2

Algo que funcionou para mim na minha configuração particular, para fazer com que as cleints funcionassem, foi o seguinte:

Eu tinha uma árvore autofs com um nfs montado em fs / fs / doom e outro montado em / fs / doom / localvol5. Após a reinicialização do servidor, foi possível acessar / fs / doom e / fs / doom / localvol5 / sub, mas / fs / doom / localvol5 em si deu ESTALE em tudo, incluindo umount -f, -l, -fl.

O que eu fiz para fazer o cliente rodar sem reiniciar foi mover toda a hierarquia / fs / doom para outra árvore:

    mkdir /dev/shm/garbage-mount
    mount --move /fs/doom /dev/shm/garbage-mount

Isso moveu a árvore inteira e aparentemente funciona apenas porque / fs / doom era acessível e um ponto de montagem. Eu não consigo desmontar nenhum desses sistemas de arquivos, mas consegui reiniciar o autofs e obter uma árvore nova e funcional.

Isso deve funcionar com qualquer árvore autofs que tenha subdiretórios nfs com problemas.

Espero que ajude.

    
por 26.06.2014 / 22:58
1

Você pode simplesmente montar o sistema de arquivos remoto em / srv / bind-target / sub1.

Se você está esperando este nível de indisponibilidade, você também deve especificar a opção de sincronização (embora talvez defailt) para o NFS para diminuir as chances de mudanças não escritas no seu cliente

    
por 28.09.2012 / 14:51
0
$ umount -l

Trabalhei para mim antes que nenhum deles estivesse funcionando:

$ mount -f ...
    
por 17.06.2013 / 19:47

Tags