Устройство sshfs занято

30

Я смонтировал удаленную файловую систему, используя sshfs (версия 2.8.4)

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

но размонтировать его не удается

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

Любые идеи относительно того, что может быть причиной этой ошибки и как ее можно исправить?

ctuffli
источник

Ответы:

14

Некоторая программа использует файл в файловой системе, которую вы пытаетесь размонтировать. Это может быть файл, открытый для чтения или записи, текущий каталог или еще несколько неясных случаев. Это может даже быть связано с тем, что каталог в файловой системе является точкой монтирования.

Чтобы исследовать, бегите lsof +f -- example. Он скажет, какой процесс (ы) используют файловую систему. Сделайте свое собственное суждение относительно того, чтобы заставить их закрыть файлы, убить их или отложить операцию размонтирования.

Жиль "ТАК - перестань быть злым"
источник
Как ни странно, lsof не показывал процесс gvfsd-archive, который был оставлен после открытия (и закрытия?) Файла архива из графического интерфейса файлового менеджера. Итак, также проверьте ps aux | grep gvfsd-archive.
Алексей
Дали предупреждения, что lstat не может быть выполнен и что информация может быть неполной, и не перечислили виновника. В моем случае у меня был открытый терминал с рабочим каталогом внутри смонтированного.
Янис Элмерис
36

Я думаю, что вы хотите, чтобы ленивый демонтировать

sudo umount -l example
Крис
источник
1
Я думаю, что ваше предложение неверно. Согласно руководству страница ленивая umount Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore. Так что это не решит исходную проблему. Согласился с @Gilles, lsofдолжен помочь тут.
2
На самом деле, это сработало для меня. lsof не мог найти открытых файлов, но umount -lработал.
геррит
1
Это решение также сработало для меня!
Дан
1
Испытывал ту же проблему с sshfs, это работало и для меня.
Орун
4

У меня просто была эта проблема и я не смог kill -9прочитать процесс из смонтированной файловой системы. kill -9не работал даже после fusermount -zu /mount/pointили umount -l /mount/point(который работал). Единственное, что сработало, было pkill -9 sshfs.

CTN
источник
1
fusermount -zu /mount/pointработал на меня. Благодарность!
Острокач
3

Запуск Ubuntu man fusermountрассказывает о -zпараметре, который задокументирован как «lazy unmount». Кажется, что он связан, но нуждается в подтверждении, которое дается на другой странице руководства : fusermount (man.he.net) , в котором говорится «lazy unmount (работает, даже если ресурс все еще занят)». Нужно использовать его с-u , на -zвариант один, приведет к ошибке. Я попробовал этот -zвариант, и могу подтвердить, что он добился цели, но это слишком похоже на хитрость: что он делает именно? Сделать его размонтированным автоматически, как только каталог больше не будет занят? Я не знаю, не задокументировано, так что небезопасно.

Итак, вот еще один вариант, более подробный, но более безопасный: попытка размонтироваться, пока он не преуспеет, столько раз, сколько необходимо, в цикле.

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;

Есть минимальная обратная связь о прогрессе, так что каждый знает, что происходит, и не верит, что он завис.

Эта опция приемлема из сценария оболочки; для взаимодействия с командной строкой использование -zопции более удобно, но, вероятно, следует помнить, что страница руководства не документирует ее, и могут возникнуть сомнения относительно того, что именно она делает.

Hibou57
источник
2

Я часто вижу «устройство занято» с sshfs, когда у меня есть окно терминала, открытое для каталога в общей папке sshfs. Выход из терминала или смена каталогов на локальный общий ресурс, а затем запуск fusermount -u решает мои проблемы.

Си Джей Трэвис
источник
1

На OS X попробуйте:

diskutil unmount force /mount/point
ReaperSoon
источник
1

Если вы уже убедились, что ни один процесс еще не использует файловую систему, прежде чем пытаться выполнить «обычный» размонтирование:

  • fuser -vm /mount/point и / или
  • lsof /mount/point найти их,
  • выйти / убить / do_something_with_them, чтобы они больше не использовали /mount/point,

Пытаться:

  • pkill -KILL sshfs а потом
  • fusermount -u /mount/point,

Это помогло мне, когда я потерял сетевое соединение и не смог размонтировать не отвечающую точку монтирования sshfs.

Кроме того, если вы хотите, чтобы sshfs автоматически размонтировался при потере сетевого подключения , сообщая приложениям, использующим sshfs, об ошибке ввода-вывода (чтобы они не зависали бесконечно), выполните монтирование с помощью:

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

Когда данные не передаются, ваш sshклиент будет каждые 15 секунд проверять, может ли он получить ответ от сервера. Если 3 проверки не пройдены, он отключится и размонтируется.

Totor
источник