el dispositivo sshfs está ocupado

30

Monté un sistema de archivos remoto usando sshfs (versión 2.8.4)

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

pero desmontarlo falla

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

¿Alguna idea de qué podría estar causando este error y cómo se podría solucionarlo?

ctuffli
fuente

Respuestas:

14

Algún programa está usando un archivo en el sistema de archivos que está intentando desmontar. Podría ser un archivo abierto para leer o escribir, un directorio actual o algunos casos más oscuros. Incluso podría deberse a que un directorio en el sistema de archivos es un punto de montaje.

Para investigar, corre lsof +f -- example. Le dirá qué proceso (s) está utilizando el sistema de archivos. Haga su propio juicio sobre si hacerlos cerrar archivos, eliminarlos o aplazar la operación de desmontaje.

Gilles 'SO- deja de ser malvado'
fuente
Curiosamente, lsof no mostró un proceso de archivo gvfsd, que quedó por haber abierto (¿y cerrado?) Un archivo de archivo desde una GUI de administrador de archivos. Entonces, también verifique ps aux | grep gvfsd-archive.
alexei
Dio advertencias de que lstat no puede ejecutarse y que la información puede estar incompleta, y no enumeró al culpable. En mi caso, tenía un terminal abierto con el directorio de trabajo dentro del montado.
Jānis Elmeris
36

Creo que quieres un desmontaje perezoso:

sudo umount -l example
Chris
fuente
1
Creo que tu sugerencia es incorrecta. De acuerdo con la página del manual uzyunt Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore. Por lo tanto, no resolverá el problema original. De acuerdo con @Gilles, lsofdebería ayudar aquí.
2
En realidad, esto funcionó para mí. lsof no pudo encontrar ningún archivo abierto pero umount -lfuncionó.
gerrit
1
¡Esta solución también funcionó para mí!
Dan
1
Experimenté el mismo problema con sshfs, esto también funcionó para mí.
Orun
4

Acabo de tener este problema y no pude kill -9leer el proceso del sistema de archivos montado. kill -9no funcionó incluso después fusermount -zu /mount/pointo umount -l /mount/point(que funcionó). Lo único que funcionó fue pkill -9 sshfs.

ctn
fuente
1
fusermount -zu /mount/pointtrabajó para mi. ¡Gracias!
ostrokach
3

Al ejecutar Ubuntu, se menciona man fusermountuna -zopción, que se documenta como "desmontaje diferido". Parece estar relacionado, pero necesita una confirmación, dada por esta otra página de manual : fusermount (man.he.net) , que dice "desmontaje diferido (funciona incluso si el recurso aún está ocupado)". Hay que utilizarlo con el -u, la -zopción solo, producirá un error. Probé la -zopción y puedo confirmar que funciona, pero esto parece demasiado un truco: ¿qué hace exactamente? ¿Desmontarlo automáticamente tan pronto como el directorio ya no esté ocupado? No sé, no documentado, tan inseguro.

Así que aquí hay otra opción, más detallada, pero más segura: intenta desmontar hasta que tenga éxito, tantas veces como sea necesario, en un bucle.

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;

Hay una retroalimentación de progreso mínima, para que uno sepa lo que está sucediendo y no crea que está colgado.

Esta opción es aceptable desde un script de shell; para la interacción de la línea de comandos, el uso de la -zopción es más útil, pero probablemente se debe tener en cuenta que la página del manual no lo documenta y puede haber dudas sobre lo que hace exactamente.

Hibou57
fuente
2

A menudo veo "dispositivo ocupado" con sshfs cuando tengo una ventana de terminal abierta a un directorio en el recurso compartido sshfs. Salir del terminal o cambiar los directorios a un recurso compartido local y luego ejecutar fusermount -u resuelve mis problemas.

CJ Travis
fuente
1

En OS X intente:

diskutil unmount force /mount/point
SegadorPronto
fuente
1

Si ya se aseguró de que ningún proceso sigue utilizando el sistema de archivos antes de intentar un montaje "normal":

  • fuser -vm /mount/point y / o
  • lsof /mount/point para encontrarlos
  • salir / kill / do_something_with_them para que ya no se usen /mount/point,

Tratar:

  • pkill -KILL sshfs y entonces
  • fusermount -u /mount/point.

Me ayudó cuando perdí la conexión de red y no pude desmontar el punto de montaje sshfs que no respondía.

Además, si desea que sshfs se desmonte automáticamente cuando se pierde la conexión de red , informando a las aplicaciones que usan sshfs de un error de E / S (para que no se atasquen infinitamente), monte con:

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

Cuando no se intercambian datos, su sshcliente verificará cada 15 segundos si puede obtener una respuesta del servidor. Si fallan 3 verificaciones, se desconectará y desmontará.

Totor
fuente