Способ проверить fuser -vm /mnt/dir
, который должен быть запущен от имени пользователя root. Он скажет вам, какие процессы обращаются к точке монтирования.
Альтернатива lsof /mnt/dir
, которая покажет каждый открытый файл на монтировании. Опять лучше всего запускать с правами root.
Вы можете запустить любой из них как не-root, но тогда вывод будет ограничен вашими процессами - те, что от других пользователей, будут просто молча не показываться, даже если они будут препятствовать размонтированию файловой системы.
Пример:
Watt:~# fuser -vm /mnt/Zia/src
USER PID ACCESS COMMAND
/mnt/Zia/src: root kernel mount /mnt/Zia/src
anthony 24909 ..c.. bash
anthony 25041 F.c.. gvim
Поле «доступ» сообщает вам, как к нему обращаются. В этом случае ядро использует его в качестве монтирования (да, но с размонтированием все будет в порядке только с этим). bash
имеет текущий рабочий каталог ( cd
перед размонтированием должен перейти в другой каталог), а у gvim есть текущий каталог и открытый файл (необходимо закрыть этот gvim).
Watt:~# lsof /mnt/Zia/src
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 24909 anthony cwd DIR 0,26 12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim 25041 anthony cwd DIR 0,26 12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim 25041 anthony 6u REG 0,26 16384 3526219 /mnt/Zia/src/perl/.utf8.c.swp (zia.vpn.home:/home/anthony/src)
В этом выводе вы можете увидеть текущие каталоги для bash и gvim (как тип DIR
). Вы также можете увидеть, какой файл gvim открыт для записи.
Как заставить проблему:
fuser
есть -k
опция, которая отправляет сигнал (по умолчанию:) SIGKILL
каждому процессу, используя монтирование. Это довольно силовой способ не дать маунту быть занятым. (И конечно, будь осторожен с тем, что ты SIGKILL
!)
umount
имеет -l
возможность выполнить ленивое размонтирование. Монтирование будет удалено из пространства имен файловой системы (так что /mnt/Zia/src
в этом примере вы его больше не увидите ), но оно остается смонтированным, поэтому программы, обращающиеся к нему, могут продолжать это делать. Когда последняя программа, получающая доступ к нему, завершает работу, произойдет размонтирование.
Существует еще одна решаемая причина сбоя при размонтировании, и это отказ сервера NFS. Здесь вы можете использовать umount -f
, но вы рискуете потерей данных, если вы это сделаете. (Возможно, клиент кэшировал записи, которые еще не были подтверждены сервером, и эти записи будут отброшены. Однако приложениям уже было сообщено, что запись прошла успешно.)