Linux:Какой процесс вызывает “устройство занято” при выполнении umount?[закрыто]

StackOverflow https://stackoverflow.com/questions/624154

Вопрос

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)

Анонимные индексные индексы может быть создан с помощью:

Это самый неуловимый тип покемонов, и появляются они в 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'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top