При беге umount /path
я получаю:
umount: /path: device is busy.
Файловая система огромна, поэтому lsof +D /path
это нереальный вариант.
lsof /path
, lsof +f -- /path
И fuser /path
все не возвращает ничего. fuser -v /path
дает:
USER PID ACCESS COMMAND
/path: root kernel mount /path
что нормально для всех неиспользуемых смонтированных файловых систем.
umount -l
и umount -f
не достаточно хорош для моей ситуации.
Как мне выяснить, почему ядро считает эту файловую систему занятой?
fuser -vm /path
...--force
будет стараться , чтобы отключить и-v
или-vvv
даже будет reaveal более чем проблема с креплением. Так что попробуйте:umount -vvv --force /babdmount
Ответы:
Кажется, причиной моей проблемы
nfs-kernel-server
был экспорт каталога.nfs-kernel-server
, Вероятно , идет позади обычных открытых файлов и , таким образом , не перечисленыlsof
иfuser
.Когда я остановился,
nfs-kernel-server
я могumount
каталог.До сих пор я сделал страницу с примерами всех решений здесь: http://oletange.blogspot.com/2012/04/umount-device-is-busy-why.html
источник
sudo service samba stop
сначала, ваш ответ действительно помог!sudo service nfs stop
и вам, возможно, (не) потребуется такжеsudo exportfs -u
неэкспортировать. Не забудьте тогдаsudo exportfs -r
иsudo service nfs start
повторно экспортировать и перезапустить сервис.exportfs -u
рассматриваемый каталог.Чтобы добавить BruceCran «s комментарий выше, причина для моего проявления этой проблемы только сейчас был несвежий петлевой крепление. Я уже проверил вывод
fuser -vm <mountpoint>
/lsof +D <mountpoint>
,mount
иcat /proc/mounts
проверил, работал ли какой-то старый nfs-kernel-сервер, отключил квоты, попытался (но потерпел неудачу) aumount -f <mountpoint>
и почти смирился с тем, что отказался от времени безотказной работы 924 дней, прежде чем наконец проверить вывод изlosetup
и нахождения двух устаревших сконфигурировано-но-не-смонтированных шлейфов:тогда
В сообщении на форуме Gentoo также перечислены файлы подкачки как потенциальный преступник; хотя обмен файлами, вероятно, довольно редок в наши дни, проверить выходную информацию не помешает
cat /proc/swaps
. Я не уверен, могли ли когда-нибудь квоты помешать демонтировать - я держался за соломинку.источник
Вместо того, чтобы использовать lsof для обхода файловой системы, просто используйте общий список открытых файлов и создайте его. Я считаю, что этот возврат должен быть быстрее, хотя и менее точным. Это должно сделать работу.
источник
lsof /path
, я сказалlsof | grep '/path'
. Разница в том, что lsof без аргументов показывает все открытые файлы, используя какую-то кеш-таблицу, а grep очень быстро просматривает ее. То, что вы попробовали с lsof, заставляет его сканировать файловую систему, что занимает много времени.lsof /path
смотрит только на путь. Он не смотрит на каждый файл. Это часто намного быстрее, чемlsof | grep /path
(в моем ненаучном тесте это было в 20 раз быстрее YMMV), поскольку он не просматривает все открытые файлы, а только файлы по этому пути.lsof /path
ничего не дало, хотяlsof | grep /path
показал процесс, который удерживал открытые файлы и мешал мне отключить том.Для меня оскорбительным процессом был демон, запущенный в chroot. Потому что это было в chroot,
lsof
иfuser
не нашел бы его.Если вы подозреваете, что у вас есть что-то, работающее в chroot,
sudo ls -l /proc/*/root | grep chroot
вы найдете виновника (замените «chroot» на путь к chroot).источник
sudo ls -l /proc/*/status | grep HOST
где HOST - это имя хоста тюрьмыlsof /mountpoint
и то иfuser /mountpoint
другое находит процесс, даже если у него есть chrooted.Открытые файлы
Процессы с открытыми файлами являются обычными виновниками. Показать их:
Преимущество использования
/dev/<device>
вместо/mountpoint
: точка монтирования исчезнет послеumount -l
или может быть скрыта наложенным монтированием.fuser
Также можно использовать, но на мой взгляд,lsof
есть более полезный вывод. Однакоfuser
это полезно, когда дело доходит до уничтожения процессов, вызывающих ваши драмы, чтобы вы могли продолжить свою жизнь.Список файлов
<mountpoint>
(см. Предостережение выше):Интерактивно уничтожать только процессы с открытыми для записи файлами:
После перемонтирования только для чтения (
mount -o remount,ro <mountpoint>
) можно (r) убить все оставшиеся процессы:точки монтирования
Виновником может быть само ядро. Другая файловая система, смонтированная в той файловой системе, к которой вы пытаетесь
umount
, вызовет горе. Проверить с:Для петлевых монтировок также проверьте вывод:
Анонимные иноды (Linux)
Анонимные иноды могут быть созданы:
open
сO_TMPFILE
)Это самый неуловимый тип покемона, и появляются в
lsof
«sTYPE
столбец какa_inode
(который без документов наlsof
странице человека ).Они не появятся
lsof +f -- /dev/<device>
, поэтому вам нужно:Для процессов уничтожения, содержащих анонимные inode, смотрите: Список текущих наблюдений inotify (pathname, PID) .
источник
Чтобы fuser мог сообщить о PID, которые держат монтируемое устройство открытым, вы должны использовать -m
источник
lsof /path
предоставляет тот же список PID, что иfuser -m /path
.fuser -M /path
проверим,/path
является ли точка монтирования.У нас есть собственная система, в которой корневая файловая система обычно доступна только для чтения. Иногда, когда файлы должны быть скопированы, перемонтируется чтение-запись:
А потом перемонтировал обратно:
На этот раз, однако,
mount
продолжал даватьmount: / is busy
ошибку. Это было вызвано процессом, содержащим открытый дескриптор файла, который был заменен некоторой командой, которая выполнялась, когда файловая система находилась в режиме чтения-записи. Важной строкой изlsof -- /
вывода является (имена были изменены):Обратите внимание
DEL
на вывод. Простая перезагрузка процесса, держась за удаленный файл, решила проблему.источник
lsof
иfuser
ничего не дал мне тоже.После процесса переименования всех возможных каталогов в .old и перезагрузки системы каждый раз, когда я вносил изменения, я обнаружил один конкретный каталог (связанный с postfix), который отвечал за это.
Оказалось, что я когда - то сделал симлинк от
/var/spool/postfix
до/disk2/pers/mail/postfix/varspool
того , чтобы минимизировать запись на диск на SDCARD основе корневой файловой системы (Штекер Шива).С этой линке, даже после остановки
postfix
иdovecot
услуг (какps aux
иnetstat -tuanp
ничего не связанный показывают) я был не в состоянииunmount /disk2/pers
.Когда я удалил символическую ссылку и обновил файлы конфигурации
postfix
и,dovecot
чтобы они указывали непосредственно на новые каталоги,/disk2/pers/
я смог успешно остановить службы иunmount
каталог.В следующий раз я посмотрю более внимательно на вывод:
Приведенная выше команда рекурсивно выведет список всех символических ссылок в дереве каталогов (здесь начиная с
/var
) и отфильтрует те имена, которые указывают на конкретную целевую точку монтирования (здесь disk2).источник
У меня была эта проблема, и оказалось, что на заднем плане были активные сеансы экрана, о которых я не знал. Я подключился к другому активному экранному сеансу, а его оболочка даже в данный момент не находилась в смонтированном каталоге. Убийство тех других сессий оболочки решило проблему для меня.
Просто подумал, что поделюсь своим решением.
источник
Сегодня проблема была в открытом сокете (конкретно
tmux
):источник
У меня есть пара
bind
иoverlay
монтирует под моим горе, блокировали меня, проверьте автодополнению на точку монтирования , которую вы хотите отключить. Я подозреваю, что это было наложение, в частности, но могло быть и связываниемисточник
Это скорее обходной путь, чем ответ, но я выкладываю его на случай, если это кому-нибудь поможет.
В моем случае я пытался изменить LVM, так как хотел увеличить раздел / var, поэтому мне нужно было его размонтировать. Я попробовал все комментарии и ответил в этом посте (спасибо всем и особенно @ ole-tange за их сбор) и все равно получил ошибку «устройство занято».
Я пытался убить большинство процессов в порядке, указанном в уровне запуска 0, просто на случай, если порядок был уместен в моем случае, но это тоже не помогло. Поэтому я создал собственный уровень выполнения (объединяющий вывод команды chkconfig в новые команды chkconfig --level), который был бы очень похож на 1 (однопользовательский режим), но с сетевыми возможностями (с сетью ssh и xinet).
Поскольку я использовал redhat, уровень запуска 4 помечен как «неиспользуемый / определенный пользователем», поэтому я использовал его и запустил.
init 4
В моем случае это было нормально, так как мне нужно было перезагрузить сервер в любом случае, но, вероятно, это будет так кто-нибудь настраивал диски.источник