Пристрій 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, який залишився від відкриття (і закриття?) Архівного файлу з графічного інтерфейсу файлового менеджера. Отже, також перевіряйте ps aux | grep gvfsd-archive.
alexei

Попереджував, що 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працював.
gerrit

1
Це рішення теж працювало для мене!
День

1
Зіткнувся з тією ж проблемою, що і з sshfs, і це працювало і для мене.
Орун

4

У мене просто була ця проблема і не вдалося kill -9прочитати процес із змонтованої файлової системи. kill -9не працював навіть після fusermount -zu /mount/pointабо umount -l /mount/point(що працював). Єдине, що працювало, було pkill -9 sshfs.


1
fusermount -zu /mount/pointпрацював на мене. Спасибі!
ostrokach

3

Запуск Ubuntu, man fusermountрозповідає про -zваріант, який задокументований як "ледачий відключення". Здається, це пов’язано, але потребує підтвердження, яке надає ця інша сторінка: fusermount (man.he.net) , де написано "ледачий вимкнення (працює навіть якщо ресурс все ще зайнятий)". Потрібно використовувати його разом із -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варіанту є більш зручним, але, мабуть, слід знати, що сторінка man не документує її, і може виникнути сумнів у тому, що саме вона робить.


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.