el dispositivo sshfs está ocupado


30

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

sshfs -o allow_root joeuser@example.com: ./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?

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.


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

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.


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.


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.



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á.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.