Linux:Какой процесс вызывает “устройство занято” при выполнении umount?[закрыто]
Вопрос
Linux:Какой процесс вызывает "устройство занято" при выполнении umount?
Решение
Посмотрите на lsof команда (список открытых файлов) - она может сообщить вам, какие процессы держат какие файлы открытыми.Иногда это сложно, но часто бывает что-то такое простое, как sudo lsof | grep (your device name here)
мог бы сделать это за тебя.
Другие советы
На всякий случай ... иногда случается так, что вы вызываете umount из терминала, а ваш текущий каталог принадлежит смонтированной файловой системе.
Вам следует использовать термоблок команда.
Например. fuser /dev/cdrom
вернет pid (ы) процесса, используя /dev/cdrom
.
Если вы пытаетесь размонтировать, вы можете прервать этот процесс, используя -k
переключатель (см. man fuser
).
Проверьте устройства с разомкнутым контуром, сопоставленные с файлом в файловой системе с помощью параметра "losttup -a". Они не будут появляться с lsof или fuser.
Также проверьте / etc / exports
. Если вы экспортируете пути в пределах точки монтирования через NFS, это приведет к этой ошибке при попытке размонтирования, и ничего не будет отображаться в fuser
или lsof
.
lsof +f -- /mountpoint
(as перечисляет процессы, использующие файлы на монтируемом в / mountpoint файлах. Особенно полезно для определения того, какие процессы используют монтированный USB-накопитель или CD / DVD.
lsof и fuser - действительно два способа найти процесс, который сохраняет определенный файл открытым. Если вы просто хотите, чтобы umount преуспел, вам следует изучить его параметры -f и -l.
Именно поэтому " fuser -m / mount / point " существует.
Кстати, я не думаю, что "термоблок" или "lsof" покажет, когда ресурс удерживается модулем ядра, хотя у меня обычно такой проблемы нет.
lsof и fuser мне тоже ничего не дали.
После процесса переименования всех возможных каталогов в .old и перезагрузки системы каждый раз, когда я вносил изменения, я обнаружил один конкретный каталог (относящийся к postfix), который был ответственным.
Оказалось, что однажды я сделал символическую ссылку из / var / spool / postfix на / disk2 / pers / mail / postfix / varspool, чтобы минимизировать записи на диск в корневой файловой системе на основе SDCARD (Sheeva Plug). р>
С этой символической ссылкой даже после остановки служб postfix и dovecot (как ps aux, так и netstat -tuanp ничего не показывали) я не смог размонтировать / disk2 / pers.
Когда я удалил символическую ссылку и обновил файлы конфигурации postfix и dovecot, чтобы они указывали прямо на новые каталоги в / disk2 / pers /, я смог успешно остановить службы и размонтировать каталог.
В следующий раз я посмотрю более внимательно на вывод:
ls -lR /var | grep ^l | grep disk2
Приведенная выше команда рекурсивно выведет список всех символических ссылок в дереве каталогов (здесь начиная с / var) и отфильтрует те имена, которые указывают на конкретную целевую точку монтирования (здесь disk2).
Открывать файлы
Процессы с открытыми файлами являются обычными виновниками.Покажите их:
lsof +f -- <mountpoint or device>
В использовании есть преимущество /dev/<device>
вместо того , чтобы /mountpoint
:точка монтирования исчезнет после umount -l
, или же он может быть скрыт накладным креплением.
fuser
тоже можно использовать, но, на мой взгляд lsof
имеет более полезный результат.Однако fuser
это полезно, когда дело доходит до уничтожения процессов, вызывающих ваши драмы, чтобы вы могли продолжать жить своей жизнью.
Список файлов на <mountpoint>
(смотрите предостережение выше):
fuser -vmM <mountpoint>
Интерактивно уничтожайте только процессы с файлами, открытыми для записи:
fuser -vmMkiw <mountpoint>
После повторного подключения только для чтения (mount -o remount,ro <mountpoint>
), безопасно (r) завершить все оставшиеся процессы:
fuser -vmMk <mountpoint>
Точки крепления
Виновником может быть само ядро.Другая файловая система, смонтированная в файловой системе, которую вы пытаетесь umount
это вызовет огорчение.Проверьте с помощью:
mount | grep <mountpoint>/
Для петлевых креплений также проверьте выходные данные:
losetup -la
Анонимные индексные индексы (Linux)
Анонимные индексные индексы может быть создан с помощью:
- Временные файлы (
open
сO_TMPFILE
) - инициализировать Часы
- [eventfd] [событие]
- [eventpoll]
- [таймер fd]
Это самый неуловимый тип покемонов, и появляются они в lsof
's TYPE
столбец как a_inode
(который недокументирован в lsof
справочная страница).
Они не появятся в lsof +f -- /dev/<device>
, поэтому вам нужно будет:
lsof | grep a_inode
Об уничтожении процессов, содержащих анонимные inode, см.: Перечислите текущие просмотры inotify (путь, PID).
Если вы по-прежнему не можете размонтировать или повторно смонтировать свое устройство после остановки всех служб и процессов с открытыми файлами, возможно, файл подкачки или раздел подкачки удерживают ваше устройство занятым.Это не будет отображаться с fuser
или lsof
.Отключите замену с помощью:
sudo swapoff -a
Вы могли бы проверить заранее и показать сводку по любым разделам подкачки или файлам подкачки с помощью:
swapon -s
или:
cat /proc/swaps
В качестве альтернативы использованию команды sudo swapoff -a
, вы также можете отключить обмен , остановив службу или systemd ( система ) единица измерения.Например:
sudo systemctl stop dphys-swapfile
или:
sudo systemctl stop var-swap.swap
В моем случае было необходимо отключить swap в дополнение к остановке любых служб и процессов с файлами, открытыми для записи, чтобы я мог повторно смонтировать свой корневой раздел как доступный только для чтения, чтобы запустить fsck
на моем корневом разделе без перезагрузки.Это было необходимо на Raspberry Pi, работающем под управлением Raspbian Jessie.
Файловые системы, смонтированные в файловой системе, которую вы пытаетесь размонтировать, могут вызвать ошибку target is busy
в дополнение к любым используемым файлам. (Например, когда вы монтируете -o bind / dev / mnt / yourmount / dev
, чтобы использовать там chroot
.)
Чтобы определить, какие файловые системы смонтированы в файловой системе, выполните следующее:
mount | grep '/ mnt / yourmount'
Код>
Чтобы узнать, какие файлы используются, совет, уже предложенный другими здесь:
lsof | grep '/ mnt / yourmount'
Код>