web-dev-qa-db-fra.com

Le périphérique SSHFS est occupé

J'ai monté un système de fichiers distant à l'aide de SSHFS (version 2.8.4)

sshfs -o allow_root [email protected]: ./example

mais la démontage échoue

> 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))

Des idées quant à ce qui pourrait causer cette erreur et comment on pourrait le réparer?

32
ctuffli

Certains programmes utilisent un fichier dans le système de fichiers que vous essayez de démonter. Il pourrait s'agir d'un fichier ouvert pour la lecture ou l'écriture, un répertoire actuel ou quelques cas plus obscur. Il pourrait même être dû à un répertoire sur le système de fichiers étant un point de montage.

Enquêter, courir lsof +f -- example. Il indiquera ce que le processus (ES) utilise le système de fichiers. Faites votre propre jugement quant à savoir s'il faut les faire fermer les fichiers, les tuer ou reporter l'opération de démontage.

Je pense que tu veux un démon paresseux:

Sudo umount -l example
39
Chris

Je viens d'avoir ce problème et je ne pouvais pas kill -9 Le processus de lecture du système de fichiers monté. kill -9 n'a pas fonctionné même après fusermount -zu /mount/point ou alors umount -l /mount/point (qui a fonctionné). La seule chose qui a fonctionné était pkill -9 sshfs.

4
ctn

Courir Ubuntu, man fusermount raconte environ un -z Option, qui est documentée sous la forme "paresseuse Unmount". Il semble être lié, mais a besoin d'une confirmation donnée par cette autre page d'homme: fuserermeount (man.he.net) , qui dit "Lazy Unmount (fonctionne même si la ressource est toujours occupée) ". Il faut l'utiliser avec le -u, les -z Option seule, produira une erreur. J'ai essayé le -z option, et peut confirmer que cela fait le tour, mais cela ressemble précisément à une astuce: qu'est-ce que cela fait exactement? Faites-le être démonté automatiquement dès que le répertoire n'est pas occupé plus? Je ne sais pas, pas documenté, si dangereux.

Voici donc une autre option, plus verbeuse, mais plus sûre: essaie de démonter jusqu'à ce qu'il réussit, autant de temps que nécessaire, dans une boucle.

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;

Il y a une rétroaction de progrès minimale, de sorte que l'on sache ce qui se passe et ne croit pas qu'il est pendu.

Cette option est acceptable à partir d'un script shell; Pour l'interaction de ligne de commande, l'utilisation de la -z L'option est plus pratique, mais il faut probablement être informé que la page de l'homme ne le documente pas et il peut y avoir un doute sur ce que c'est exactement.

3
Hibou57

Je vois souvent un "périphérique occupé" avec SSHFS lorsque j'ai une fenêtre de terminal ouvert à un répertoire sur la part de SSHFS. Définir le terminal ou changer les annuaires vers une part locale, puis exécutant FusermeMount -U résolvez mes problèmes.

2
CJ Travis

Si vous déjà assuré Aucun processus n'utilise toujours pas le système de fichiers avant d'essayer "régulier" de mentionner:

  • fuser -vm /mount/point et/ou
  • lsof /mount/point Pour les trouver,
  • quitter/tuer/do_something_with_them afin qu'ils n'utilisent pas /mount/point plus,

Essayez :

  • pkill -KILL sshfs puis
  • fusermount -u /mount/point.

Cela m'a aidé lorsque j'ai perdu la connexion réseau et je n'ai pas pu oublier le point de montage des SSHFS insensible.

De plus, si vous voulez que SSHFS soit mentionne automatiquement lorsque la connexion réseau est perdue, informer les applications utilisant des SSHF d'une erreur d'E/S (afin qu'ils ne soient pas coincés infiniment), montage avec:

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

Lorsqu'aucune donnée n'est échangée, votre client ssh vérifiera toutes les 15 secondes s'il peut obtenir une réponse du serveur. Si 3 chèques échouèrent, il se déconnectera et oubliera.

1
Totor