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

Linux: какой процесс вызывает "занятие устройства" при выполнении umount?

Ответ 1

Посмотрите на команду lsof (список открытых файлов) - он может сказать вам, какие процессы хранят открытые. Иногда это сложно, но часто что-то простое, как sudo lsof | grep (your device name here) может сделать это для вас.

Ответ 2

На всякий случай... иногда случается, что вы вызываете umount с терминала, а ваш текущий каталог принадлежит смонтированной файловой системе.

Ответ 3

Вы должны использовать команду fuser.

Например. fuser/dev/cdrom вернет pid процесса, используя /dev/cdrom.

Если вы пытаетесь размонтировать, вы можете -k процесс, используя переключатель -k (см. man fuser).

Ответ 4

Проверьте, что устройства с открытым контуром сопоставлены файлу файловой системы с параметром "losetup -a". Они не появятся ни с lsof, ни с фьюзером.

Ответ 5

Также проверьте /etc/exports. Если вы экспортируете пути в точку монтирования через NFS, это приведет к этой ошибке при попытке размонтировать и ничего не появится в fuser или lsof.

Ответ 6

lsof +f -- /mountpoint

(как перечислены процессы, использующие файлы на монтировании, смонтированном на /mountpoint. Особенно полезно найти, какие процессы используют смонтированный USB-накопитель или CD/DVD.

Ответ 7

lsof и fuser действительно два способа найти процесс, который поддерживает определенный файл открытым. Если вы просто хотите, чтобы umount был успешным, вы должны изучить его параметры -f и -l.

Ответ 8

Именно поэтому существует "фьюзер -m/mount/point".

Кстати, я не думаю, что "фьюзер" или "lsof" укажут, когда ресурс удерживается модулем модуля, хотя обычно у меня нет этой проблемы.

Ответ 9

lsof и фьюзер тоже не дали мне ничего.

После процесса переименования всех возможных каталогов в .old и перезагрузки системы каждый раз после внесения изменений я нашел один конкретный каталог (относящийся к постфикс), который был ответственным.

Оказалось, что я однажды сделал символическую ссылку из /var/spool/postfix в/disk2/pers/mail/postfix/varspool, чтобы минимизировать записи на диск в корневой файловой системе на основе SDCARD (Sheeva Plug).

С этой символической ссылкой даже после остановки служб postfix и dovecot (как ps aux, так и netstat -tuanp не отображали ничего связанного), я не смог отключить /disk 2/pers.

Когда я удалил символическую ссылку и обновил файлы конфигурации postfix и dovecot, чтобы указать непосредственно на новые dirs on/disk2/pers/I, я смог успешно остановить службы и отключить каталог.

В следующий раз я буду более внимательно смотреть на вывод:

ls -lR /var | grep ^l | grep disk2

Вышеуказанная команда будет рекурсивно перечислить все символические ссылки в дереве каталогов (здесь начиная с /var ) и отфильтровать те имена, которые указывают на конкретную целевую точку монтирования (здесь disk2).

Ответ 10

Открыть файлы

Процессы с открытыми файлами являются обычными преступниками. Отобразите их:

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

Анонимные inodes (Linux)

Анонимные иноды могут быть созданы:

  • Временные файлы (open с O_TMPFILE)
  • inotify часы
  • [eventfd]
  • [eventpoll]
  • [timerfd]

Это наиболее неуловимый тип pokemon и отображаются в столбце lsof TYPE как a_inode (который недокументирован в lsof man).

Они не будут отображаться в lsof +f -- /dev/<device>, поэтому вам нужно будет:

lsof | grep a_inode

Для уничтожения процессов, содержащих анонимные иноды, см. Список текущих часов inotify (путь, PID).

Ответ 11

Если вы все еще не можете отключить или перемонтировать свое устройство после остановки всех служб и процессов с открытыми файлами, тогда может быть файл подкачки или раздел подкачки, чтобы ваше устройство было занято. Это не будет отображаться с помощью 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

В моем случае необходимо было отключить своп, в дополнение к остановке любых служб и процессов с открытыми для записи файлами, чтобы я мог перемонтировать мой корневой раздел как прочитанный только для запуска fsck в моем корневом разделе без перезагрузка. Это было необходимо на малине Пи, в которой работала распутинская Джесси.

Ответ 12

Две вещи:

1) убедитесь, что cd из папки, к которой вы хотите подключиться. 2) в моем случае, я пытаюсь установить корень диска nas. переход от WDMyCloud к WDMyCloud/Public исправил его

Ответ 13

Файловые системы, смонтированные в файловой системе, которую вы пытаетесь размонтировать, могут вызвать ошибку target is busy в дополнение к любым файлам, которые используются. (Например, если вы mount -o bind /dev /mnt/yourmount/dev, чтобы использовать chroot там.)

Чтобы определить, какие файловые системы установлены в файловой системе, выполните следующее:

mount | grep '/mnt/yourmount'

Чтобы узнать, какие файлы используются, совет, предложенный другими здесь:

lsof | grep '/mnt/yourmount'