Às vezes, eu gostaria de desmontar um dispositivo USB com umount /run/media/theDrive
, mas eu recebo um drive is busy
erro.
Como descubro quais processos ou programas estão acessando o dispositivo?
process
open-files
unmounting
Stefan
fonte
fonte
Respostas:
Use
lsof | grep /media/whatever
para descobrir o que está usando o suporte.Além disso, considere
umount -l
(preguiçoso umount) impedir que novos processos usem a unidade enquanto você limpa.fonte
fuser -mv /path/to/mountpoint
pode ser uma alternativa mais legível para descobrir processos usando um ponto de referência.lsof | grep
funciona melhor para mim.fuser -mv
parece apenas despejar 80 + de processos não relacionados. Eu estou usando diretórios de montagem ligada.umount -l
é perigoso . em vez disso,mount -o bind
um000
diretório vazio de modo no topo e faça a limpeza vialsof +f -- /dev/device
.Na maioria das vezes, o melhor comando para uso é lsof ( “ l i s t o pen f iles”).
onde
/media/usb0
é o ponto de montagem da unidade USB ou outro sistema de arquivos para desmontar.+f --
diz ao lsof para tratar o argumento subsequente como um ponto de montagem; geralmente, mas nem sempre, gerencia por conta própria, o quelsof /media/usb0
também funciona. Ele encontra arquivos abertos (mesmo os não vinculados), 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 existem unidades ondelsof
deve ser executado como root).Existem usos que 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
é um dispositivo de bloco montado ou um arquivo regular montado em loop ou se é a fonte de uma montagem de ligação do Linux.Outro comando que pode servir em uma pitada é o fusor, que lista apenas os PIDs de processos com arquivos abertos no dispositivo:
fonte
Você pode usar
lsof
como Peter disse, ou se tiver certeza de que deseja matar todas essas coisas e desmontá-las, provavelmente poderá fazer algo como:fonte
-M
a segurança.-M
deve ser aplicado.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.
Abrir arquivos
Processos com arquivos abertos são os culpados de sempre. Mostre-os:
Há uma vantagem em usar, em
/dev/<device>
vez de/mountpoint
: um ponto de montagem desaparece após umumount -l
ou pode ser oculto por um suporte sobreposto.fuser
também pode ser usado, mas na minha opiniãolsof
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 sua vida.Liste os arquivos
<mountpoint>
(veja a advertência acima):Interativamente, mate apenas processos com arquivos abertos para gravação:
Após remontar somente leitura (
mount -o remount,ro <mountpoint>
), é seguro (r) eliminar todos os processos restantes:Pontos de montagem
O culpado pode ser o próprio kernel. Outro sistema de arquivos montado no sistema de arquivos que você está tentando
umount
causar luto. Verificar com:Para montagens de loopback ( obrigado Stephen Kitt ), verifique também a saída de:
Inodes anônimos (Linux)
Inodes anônimos podem ser criados por:
open
comO_TMPFILE
)Estes são o tipo mais evasivo de pokemon, e aparecem em
lsof
'sTYPE
coluna comoa_inode
(o que não é documentado nalsof
página do manual ).Eles não aparecerão
lsof +f -- /dev/<device>
, então você precisará:Para processos de eliminação que contêm inodes anônimos, consulte: Listar os relógios atuais para identificação (nome do caminho, PID) .
inotify
relógios (Linux)Este comentário explica porque
inotify
não deve impedir um desmontar, mas esta nota descreve as situações em que vontade :fonte
lsof
.Mountpoints
seção.Se você usa o GNOME, a desmontagem via Nautilus exibirá uma mensagem informando qual processo ainda está usando a unidade e o arquivo que está usando.
fonte
Para (pelo menos) OpenBSD:
Por exemplo (usar
doas
para executarfstat
como root, caso contrário, veríamos apenas nossos próprios processos):Nesse caso, não seria possível desmontar
/usr/ports
até o usuário_pbuild
concluir a execução desses doismake
processos.fonte
Essa é uma armadilha comum: você faz uso de um usuário diferente (root 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 saiu desse diretório, pode tentar encontrar até ficar cego.
lsof
mostra ao shell qual diretório atual está usando esse dispositivo. Você pode querer su como esse usuário novamente para alterar seu diretório.fonte