Устройство 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))

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

Ответы:


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.


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опции более удобно, но, вероятно, следует помнить, что страница руководства не документирует ее, и могут возникнуть сомнения относительно того, что именно она делает.


2

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



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 проверки не пройдены, он отключится и размонтируется.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.