le périphérique sshfs est occupé

30

J'ai monté un système de fichiers distant en utilisant sshfs (version 2.8.4)

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

mais le 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 sur ce qui pourrait être à l'origine de cette erreur et comment on pourrait la corriger?

ctuffli
la source

Réponses:

14

Un programme utilise un fichier dans le système de fichiers que vous essayez de démonter. Il peut s'agir d'un fichier ouvert pour la lecture ou l'écriture, d'un répertoire courant ou de quelques cas plus obscurs. Cela pourrait même être dû au fait qu'un répertoire sur le système de fichiers est un point de montage.

Pour enquêter, exécutez lsof +f -- example. Il indiquera quels processus utilisent le système de fichiers. Faites votre propre jugement pour savoir s'il faut leur faire fermer les fichiers, les tuer ou différer l'opération de démontage.

Gilles 'SO- arrête d'être méchant'
la source
Étrangement, lsof n'a pas montré de processus d'archivage gvfsd, qui a été laissé après avoir ouvert (et fermé?) Un fichier d'archive à partir d'une interface graphique de gestionnaire de fichiers. Alors, vérifiez aussi ps aux | grep gvfsd-archive.
alexei
A donné des avertissements que lstat ne peut pas exécuter et que les informations peuvent être incomplètes et n'a pas répertorié le coupable. Dans mon cas, j'avais un terminal ouvert avec le répertoire de travail à l'intérieur du répertoire monté.
Jānis Elmeris
36

Je pense que vous voulez un démontage paresseux:

sudo umount -l example
Chris
la source
1
Je pense que votre suggestion est incorrecte. Selon la page de manuel umount paresseux Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore. Cela ne résoudra donc pas le problème d'origine. D'accord avec @Gilles, lsofdevrait aider ici.
2
En fait, cela a fonctionné pour moi. lsof n'a trouvé aucun fichier ouvert mais a umount -lfonctionné.
gerrit
1
Cette solution a également fonctionné pour moi!
Dan
1
J'ai rencontré le même problème avec sshfs, cela a aussi fonctionné pour moi.
Orun
4

Je viens d'avoir ce problème et je n'ai pas pu kill -9lire le processus à partir du système de fichiers monté. kill -9n'a pas fonctionné même après fusermount -zu /mount/pointou umount -l /mount/point(ce qui a fonctionné). La seule chose qui a fonctionné était pkill -9 sshfs.

ctn
la source
1
fusermount -zu /mount/pointtravaillé pour moi. Merci!
ostrokach
3

Exécuter Ubuntu, man fusermount parle d'une -zoption, qui est documentée comme «démontage paresseux». Il semble être lié, mais a besoin d'une confirmation, qui est donnée par cette autre page de manuel : fusermount (man.he.net) , qui dit " démontage paresseux (fonctionne même si la ressource est encore occupée)". Il faut l' utiliser avec le -u, la -zseule option produira une erreur. J'ai essayé l' -zoption et je peux confirmer qu'elle fait l'affaire, mais cela ressemble trop à une astuce: que fait-elle exactement? Le faire démonter automatiquement dès que le répertoire n'est plus occupé? Je ne sais pas, pas documenté, donc dangereux.

Voici donc une autre option, plus détaillée, mais plus sûre: tente de démonter jusqu'à ce qu'elle réussisse, autant de fois 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 minimale sur les progrès, de sorte que l'on sache ce qui se passe et que l'on ne croit pas qu'il soit bloqué.

Cette option est acceptable à partir d'un script shell; pour l'interaction en ligne de commande, l'utilisation du-z option est plus pratique, mais il faut probablement savoir que la page de manuel ne la documente pas et il peut y avoir un doute sur ce qu'elle fait exactement.

Hibou57
la source
2

Je vois souvent "périphérique occupé" avec sshfs lorsque j'ai une fenêtre de terminal ouverte sur un répertoire sur le partage sshfs. Quitter le terminal ou changer de répertoire en partage local puis exécuter fusermount -u résout mes problèmes.

CJ Travis
la source
1

Sous OS X, essayez:

diskutil unmount force /mount/point
ReaperSoon
la source
1

Si vous vous êtes déjà assuré qu'aucun processus n'utilise toujours le système de fichiers avant d'essayer un démontage "normal":

  • fuser -vm /mount/point et / ou
  • lsof /mount/point pour les trouver,
  • quitte / kill / do_something_with_them pour qu'ils n'utilisent /mount/pointplus,

Essayer:

  • pkill -KILL sshfs et alors
  • fusermount -u /mount/point.

Cela m'a aidé lorsque j'ai perdu la connexion réseau et que je n'ai pas pu démonter le point de montage sshfs qui ne répond pas.

De plus, si vous souhaitez que sshfs se démonte automatiquement lorsque la connexion réseau est perdue , informant les applications utilisant sshfs d'une erreur d'E / S (afin qu'elles ne restent pas bloquées à l'infini), montez avec:

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

Lorsqu'aucune donnée n'est échangée, votre sshclient vérifiera toutes les 15 secondes s'il peut obtenir une réponse du serveur. Si 3 contrôles échouent, il se déconnectera et démontera.

Totor
la source