Use lsof | grep /media/whatever para descobrir o que está usando a montagem.
Além disso, considere umount -l (umount lento) para impedir que novos processos usem a unidade enquanto você limpa.
Por vezes, gostaria de desmontar um dispositivo usb , mas obtenho um erro drive is busy .
Como descubro quais processos ou programas estão acessando o dispositivo?
Na maioria das vezes, o melhor comando para usar é lsof (“ l i s t o caneta f iles ").
lsof +f -- /media/usb0
onde /media/usb0 é o ponto de montagem da unidade USB ou outro sistema de arquivos a ser desmontado. +f -- diz ao lsof para tratar o argumento subsequente como um ponto de montagem; normalmente, mas nem sempre, gerencia por conta própria, de modo que lsof /media/usb0 também funciona. Isso encontra arquivos abertos (mesmo os desvinculados), arquivos mapeados na memória, diretórios atuais e alguns usos mais obscuros. Você precisará executar o comando como root para obter informações sobre os processos de outros usuários (e acho que há unices em que lsof precisa ser executado como root).
Existem usos que o lsof não encontrará; estes são incomuns em mídia removível. Eles incluem:
/foo se /foo/bar for um ponto de montagem. /foo se /foo/bar for um dispositivo de bloco montado ou um arquivo regular montado em loop ou se for a origem de uma montagem de ligação do Linux. Outro comando que pode ser usado em uma pitada é o fusor, que lista apenas PIDs de processos com arquivos abertos no dispositivo:
fuser -m /media/usb0
Você pode usar lsof , como Peter disse, ou se tiver certeza de que quer matar todas essas coisas e desmontá-las, provavelmente poderá fazer algo como:
fuser -Mk /mnt/path
umount /mnt/path
Se você usar o GNOME, a desmontagem via Nautilus exibirá uma mensagem informando qual processo ainda está usando a unidade e o arquivo que está sendo usado.
Processos com arquivos abertos são os culpados usuais. Exibi-los:
lsof +f -- <mountpoint or device>
Há uma vantagem em usar /dev/<device> em vez de /mountpoint : um ponto de montagem desaparecerá após um umount -l ou pode estar oculto por uma montagem sobreposta.
fuser também pode ser usado, mas em minha opinião lsof tem uma saída mais útil. No entanto, fuser é útil quando se trata de matar os processos que causam seus dramas, para que você possa continuar com sua vida.
Listar arquivos em <mountpoint> (veja a advertência acima):
fuser -vmM <mountpoint>
Mata interativamente apenas os processos com arquivos abertos para gravação:
fuser -vmMkiw <mountpoint>
Após remontar somente leitura ( mount -o remount,ro <mountpoint> ), é seguro (r) matar todos os processos restantes:
fuser -vmMk <mountpoint>
O culpado pode ser o próprio kernel. Outro sistema de arquivos montado no sistema de arquivos que você está tentando umount causará sofrimento. Verifique com:
mount | grep <mountpoint>/
Para montagens de loopback ( obrigado Stephen Kitt ), verifique também a saída de:
losetup -la
Inodes anônimos podem ser criados por:
open com O_TMPFILE ) Este é o tipo de pokemon mais evasivo e aparece na coluna lsof do TYPE como a_inode (que não está documentado no lsof man page ).
Eles não aparecerão em lsof +f -- /dev/<device> , então você precisará:
lsof | grep a_inode
Para matar processos que contêm inodes anônimos, consulte: Listar os atuais relógios inotify (nome do caminho, PID) .
inotify watches (Linux) Este comentário explica por que inotify deveria 't impedir uma desmontagem, mas esta nota descreve as situações em que será :
an unmount can hang in the
vx_softcnt_flush()call. The hang occurs because inotify watches increment thei_countvariable and cause thev_os_hold valueto remain elevated until the inotify watcher releases the hold.
Para (pelo menos) OpenBSD:
$ fstat /mnt/mountpoint
Por exemplo (usando doas para executar fstat como root, caso contrário, veríamos nossos próprios processos):
$ doas fstat /usr/ports
USER CMD PID FD MOUNT INUM MODE R/W SZ|DV NAME
_pbuild make 15172 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
_pbuild make 40034 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
Nesse caso, eu não seria capaz de desmontar /usr/ports até que o usuário _pbuild tenha terminado de executar esses dois make processos.
Essa é uma armadilha comum: você su para um usuário diferente (raiz ou qualquer outro usuário), muda para o diretório de um dispositivo montado e efetua logout como esse usuário. Quando você esquece que você saiu naquele diretório, você pode tentar e encontrar até que você esteja cego. lsof mostra o shell que o diretório atual está usando esse dispositivo. Você pode querer su como aquele usuário novamente para mudar seu diretório.
Tags process unmounting open-files