o dispositivo sshfs está ocupado


30

Montei um sistema de arquivos remoto usando sshfs (versão 2.8.4)

sshfs -o allow_root joeuser@example.com: ./example

mas desmontar falhar

> fusermount -u example
umount: /home/joeuser/example: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

Alguma idéia do que pode estar causando esse erro e como corrigi-lo?

Respostas:


14

Algum programa está usando um arquivo no sistema de arquivos que você está tentando desmontar. Pode ser um arquivo aberto para leitura ou gravação, um diretório atual ou mais alguns casos obscuros. Pode até ser devido a um diretório no sistema de arquivos ser um ponto de montagem.

Para investigar, execute lsof +f -- example. Ele informará o (s) processo (s) que estão usando o sistema de arquivos. Faça seu próprio julgamento sobre se deve fazê-los fechar arquivos, matá-los ou adiar a operação de desmontagem.


Estranhamente, lsof não mostrou um processo gvfsd-archive, que foi deixado de abrir (e fechar?) Um arquivo de uma GUI do gerenciador de arquivos. Então, verifique também ps aux | grep gvfsd-archive.
Alexei

Avisou que lstat não pode ser executado e que as informações podem estar incompletas e não listou o culpado. No meu caso, eu tinha um terminal aberto com o diretório de trabalho dentro do montado.
Jānis Elmeris

36

Eu acho que você quer uma desmontagem preguiçosa:

sudo umount -l example

1
Eu acho que sua sugestão está incorreta. De acordo com a página de manual umount preguiçoso Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore. Portanto, isso não resolverá o problema original. Concordou com @Gilles, lsofdeve ajudar aqui.

2
Na verdade, isso funcionou para mim. lsof não conseguiu encontrar nenhum arquivo aberto, mas umount -lfuncionou.
gerrit

1
Esta solução também funcionou para mim!
Dan

1
Experimentou o mesmo problema com o sshfs, isso funcionou para mim também.
226 Orun

4

Eu apenas tive esse problema e não consegui kill -9o processo de leitura do sistema de arquivos montado. kill -9não funcionou nem depois fusermount -zu /mount/pointou umount -l /mount/point(que funcionou). A única coisa que funcionou foi pkill -9 sshfs.


1
fusermount -zu /mount/pointtrabalhou para mim. Obrigado!
ostrokach

3

Executando o Ubuntu, man fusermountfala sobre uma -zopção, que é documentada como "desmontagem lenta". Parece estar relacionado, mas precisa de uma confirmação, que é fornecida por essa outra página de manual : fusermount (man.he.net) , que diz "desmontagem lenta (funciona mesmo se o recurso ainda estiver ocupado)". Deve-se usá-lo com o -u, a -zopção por si só, produzirá um erro. Eu tentei a -zopção e posso confirmar que ele faz o truque, mas isso parece demais com um truque: o que ele faz exatamente? Desmontá-lo automaticamente assim que o diretório não estiver mais ocupado? Não sei, não documentado, tão inseguro.

Então, aqui está outra opção, mais detalhada, mas mais segura: tenta desmontar até que seja bem-sucedida, quantas vezes forem necessárias, em um loop.

echo -n "Unmounting...";
fusermount -u -q "$MOUNT_POINT";
OK="$?";

while [ "$OK" != "0" ]
do
   sleep 1;
   echo -n ".";
   fusermount -u -q "$MOUNT_POINT";
   OK="$?";
done

echo;

Há um feedback mínimo sobre o progresso, para que se saiba o que está acontecendo e não acredite que esteja travado.

Esta opção é aceitável em um script de shell; para a interação da linha de comando, o uso da -zopção é mais útil, mas é provável que você esteja ciente de que a página de manual não a documenta e pode haver dúvidas sobre o que exatamente ela faz.


2

Costumo ver "dispositivo ocupado" com sshfs quando tenho uma janela de terminal aberta para um diretório no compartilhamento sshfs. Sair do terminal ou alterar os diretórios para um compartilhamento local e executar o fusermount -u resolve meus problemas.



1

Se você já garantiu que nenhum processo ainda está usando o sistema de arquivos antes de tentar a montagem "regular":

  • fuser -vm /mount/point e / ou
  • lsof /mount/point para encontrá-los,
  • saia / kill / do_something_with_them para que eles não usem /mount/pointmais,

Experimentar:

  • pkill -KILL sshfs e depois
  • fusermount -u /mount/point.

Isso me ajudou quando perdi a conexão de rede e não consegui desmontar o ponto de montagem do sshfs que não responde.

Além disso, se você quiser que o sshfs desmonte automaticamente quando a conexão de rede for perdida , informando os aplicativos usando sshfs sobre um erro de E / S (para que eles não fiquem presos infinitamente), monte com:

  • sshfs -o ServerAliveInterval=15 remote-srv:/remote/dir /local/mountpoint

Quando nenhum dado é trocado, seu sshcliente verifica a cada 15 segundos se consegue obter uma resposta do servidor. Se três verificações falharem, ele será desconectado e desmontado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.