Problema comum quando se tenta desmontar um dispositivo de armazenamento, entenda as possíveis causas do erro “target is busy”!
| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. Mais detalhes clicando aqui.
1. Introdução
No dia a dia de operações num sistema linux você eventualmente vai plugar um pendrive, um SSD, uma dispositivo de rede como uma pasta SAMBA ou FTP, ou mesmo outro dispositivo de armazenamento quaisquer e montá-lo, torná-lo legível pelo sistema e assim poder trabalhar neste dispositivo.
Porém a desmontagem que é relativamente simples:
$ sudo umount /caminho/da/mídia
e deveria imediatamente desmontar o dispositivo pode gerar o erro de:
umount /caminho/da/mídia: target is busy
Ou seja, o dispositivo ainda está sendo usado. Por padrão o KERNEL LINUX não vai deixar desmontá-lo para evitar corrupções de dados, uma vez que não se sabe ao certo quem ou o quê está utilizando este dispositivo, lendo ou gravando dados nele!
2. Possíveis Soluções
2.1 Matando o Processo
A primeira das soluções para resolver o erro target is busy é investigar e se possível matar qual processo está usando o dispositivo mantendo-o ocupado.
Primeiro para identificar o processo use o comando:
$ sudo lsof /caminho/do/dispositivo
Caso seu sistema não possua o comando lsof, instale-o do repositório da sua distribuição.
O Ubuntu, Debian e derivados costumam ter o lsof por padrão, porém aqui no Endeavour, baseado em ArchLinux, não tinha.
Instalei pelo pacman:
$ sudo pacman -S lsof
No resultado você verá uma listagem com os processos que estejam utilizando o dispositivo. Junto à lista há uma PID.
Com essa PID em mãos, mate o processo!
$ sudo kill -9 [PID]
Com isso você deverá conseguir repetir o comando umount e desmontar o dispositivo.
Atento ao possível processo que esteja ocupando o dispositivo, também há a possibilidade de perder dados caso esteja gravando algo e você não esteja se lembrando exatamente do que seja!
2.2 Desmontagem Forçada
Esse método é mais indicado para pastas compartilhadas na rede via SFTP, SAMBA ou outros métodos, principalmente quando não há um processo listado, como no item 2.1 acima e não há um motivo para o dispositivo continuar com erro de target is busy. Uma vez que o servidor perca conexão por N motivos, seu sistema poderá ficar “instável” buscando aquela pasta e impedir o desmonte do dispositivo virtual de rede.
Para forçar o desmonte use a flag -f:
$ sudo umount -f /caminho/do/dispositivo
2.3 A Desmontagem Cega
Essa solução para o erro target is busy é mais como uma desmontagem de Schrödinger, quando você nunca tem certeza se o sistema de arquivos está desmontado ou não!
Você vai “desmontá-lo” de forma “bruta” ignorando se o kernel está ou não trabalhando no dispositivo.
Esta opção não desmonta seu alvo, mas apenas remove o alvo do namespace.
E desmontará automaticamente o alvo quando a unidade não estiver mais sendo utilizada!
É a opção mais arriscada em termos de perdas de dados mas ainda há uma possibilidade de que o dispositivo realmente foi removido e não há porque mantê-lo ativo.
O comando é o mesmo porém com a flag de -l (L minúsculo) de “lazy” – que significa preguiçoso!
$ sudo umount -l /caminho/do/dispositivo
Assim você terá removido o dispositivo da userspace e em teoria poderá remover o dispositivo.
3. Target is in use
Removi o dispositivo com umount acima e ele não aparece mais como montado na minha lista de dispositivos! Pode ser conferido com:
$ df -h
Porém quando tento fazer qualquer operação nesse dispositivo, por exemplo, era um HDD que eu desmontei pra rodar um fsck, ou mesmo fazer uma formatação do disco, ele imediatamente acusa o seguinte:
umount /caminho/da/mídia: target is in use
Mas como é possível que esteja em uso se eu desmontei o dispositivo?
Isso pode ocorrer porque há algo junto ao kernel utilizando o dispositivo!
Normalmente isso ocorre se você está com um pacote snap, um container docker, um container criado pelo distrobox utilizando o dispositivo ou ainda um container LXC do Waydroid pode fazer isso. Acredito que um pacote flatpak mal configurado, com permissões de gravação definidas manualmente, pode causar a mesma situação. E claro, não esquecendo que podem haver máquinas virtuais executando no dispositivo!
Em suma, algo que está fora do controle do kernel e geralmente possui gestão própria está usando aquele dispositivo!
A solução é mais simples, verifique se há algo citado acima que possa estar causando o conflito que gere o erro “target is in use” mesmo que o dispositivo já foi desmontado e não deu mais o erro de “target is busy”.
4. Conclusão
Qual método escolher? Depende.
Se possível sempre use o desmonte típico e não force nada uma vez que operações pendentes podem estar sendo gravadas ainda no sistema! Se for um sistema crítico eu recomendo reiniciar o computador normalmente uma vez, assim ele tentará esvaziar os caches e desmontar os dispositivos da forma menos agressiva possível com o menor risco de dados.
Ou numa emergência apele para o REISUB como solução menos dolorosa.
Quando se trata de desmontar um dispositivo, por mais que se tenham formas diferentes de fazer isso, todas implicam riscos de perdas de dados caso o desmonte não seja feito de forma natural com o comando padrão do começo desta publicação!
Fonte:
LinuxHandbook
Autodidata, me aprofundei em sistemas operacionais baseados em UNIX®, principalmente Linux. Também procuro trazer assuntos correlacionados direta ou indiretamente, como automação, robótica e embarcados.