Иногда я хотел бы размонтировать USB устройство с umount /run/media/theDrive
, но я получаю сообщение об drive is busy
ошибке.
Как узнать, какие процессы или программы обращаются к устройству?
process
open-files
unmounting
Стефан
источник
источник
Ответы:
Используйте,
lsof | grep /media/whatever
чтобы узнать, что использует крепление.Кроме того, рассмотрите возможность
umount -l
(lazy umount), чтобы новые процессы не могли использовать диск во время очистки.источник
fuser -mv /path/to/mountpoint
может быть более читаемой альтернативой для обнаружения процессов, использующих точку отсчета.lsof | grep
работает лучше для меня.fuser -mv
кажется, просто сбросить 80+ несвязанных процессов. Я использую каталоги с привязкой.umount -l
опасно .mount -o bind
режим000
пустой каталог сверху, а очистить черезlsof +f -- /dev/device
.Большая часть времени, лучшая командой использования является Lsof ( « л я с т о авторучке й Ильза»).
где
/media/usb0
точка монтирования USB-накопителя или другой файловой системы для размонтирования.+f --
говорит lsof обрабатывать последующий аргумент как точку монтирования; это обычно, но не всегда, управляет само по себе, так что этоlsof /media/usb0
тоже работает. Он находит открытые файлы (даже несвязанные), отображенные в память файлы, текущие каталоги и некоторые другие неясные варианты использования. Вам нужно будет выполнить команду от имени пользователя root, чтобы получить информацию о процессах других пользователей (и я думаю, что есть устройства, гдеlsof
нужно запускать от имени пользователя root).Есть способы, которые lsof не найдет; это необычно на съемных носителях. Они включают:
/foo
если/foo/bar
это точка монтирования./foo
если/foo/bar
это смонтированное блочное устройство или обычный файл, смонтированный в цикле, или если это источник монтируемого подключения Linux.Еще одна команда, которая может использоваться в крайнем случае, - это fuser, который перечисляет только PID процессов с открытыми файлами на устройстве:
источник
Вы можете использовать,
lsof
как сказал Питер, или если вы уверены, что просто хотите убить все эти вещи и размонтировать его, вы, вероятно, можете сделать что-то вроде:источник
-M
для безопасности.-M
должна применяться.fuser
:-M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
Открытые файлы
Процессы с открытыми файлами являются обычными виновниками. Показать их:
Преимущество использования
/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) .
inotify
часы (Linux)Этот комментарий объясняет, почему
inotify
не следует предотвращать размонтирование, но в этом примечании описываются ситуации, в которых он будет :источник
lsof
.Mountpoints
раздел.Если вы используете GNOME, отключение через Nautilus отобразит сообщение о том, какой процесс все еще использует диск, и файл, который он использует.
источник
Для (как минимум) OpenBSD:
Например (использование
doas
для выполненияfstat
от имени пользователя root, поскольку в противном случае мы видели бы только наши собственные процессы):В этом случае я не смогу размонтировать,
/usr/ports
пока пользователь_pbuild
не закончит эти дваmake
процесса.источник
Это распространенная ошибка: вы можете использовать другого пользователя (либо root, либо любого другого пользователя), перейти в каталог подключенного устройства и выйти из системы под этим пользователем. Когда вы забудете, что оставили в этом каталоге, вы можете попытаться найти его, пока не ослепнете.
lsof
действительно показывает оболочку, какой текущий каталог использует это устройство. Возможно, вы захотите снова ввести в качестве этого пользователя su, чтобы сменить каталог.источник