22

Я смонтировал удаленную файловую систему, используя 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))

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

6 ответов6

31

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

sudo umount -l example
10

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

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

3

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

2

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

1

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

diskutil unmount force /mount/point
1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .