diskutil eject: como ejetar discos pelo Terminal do Mac
Use diskutil eject /Volumes/Nome para ejetar discos pelo Terminal do Mac. Guia completo: listar discos, forçar desmontagem, encerrar processos de bloqueio com lsof.
O Finder diz que o disco está em uso. Ele não diz o que o está usando ou o que fazer a respeito. O Terminal faz as duas coisas.
Se você se sente confortável com a linha de comando, o Terminal é a maneira mais poderosa de lidar com ejeções de disco persistentes no macOS. E se você ainda não se sente confortável com ele, esses comandos são um bom lugar para começar.
Ejeção básica com diskutil eject
A maneira mais direta de ejetar um disco externo pelo Terminal do Mac:
diskutil eject /Volumes/NomeDoSeuDisco
Substitua NomeDoSeuDisco pelo nome real do seu disco — exatamente como ele aparece no Finder. Se o nome tiver espaços, envolva-o em aspas:
diskutil eject "/Volumes/Meu Disco"
Isso faz o mesmo que clicar no botão ejetar no Finder. Se funcionar, o disco será desmontado de forma limpa e pronto. Se falhar, você receberá uma mensagem de erro mais informativa do que o Finder jamais fornece.
Você também pode desmontar sem ejetar (o disco permanece visível no Utilitário de Disco, mas não está montado):
diskutil unmount /Volumes/NomeDoSeuDisco
A diferença é importante para discos com várias partições. unmount remove um volume. eject remove o dispositivo físico e todos os seus volumes de uma só vez.
Encontrando o identificador do seu disco com diskutil list
Antes de usar comandos mais avançados, você precisa do identificador do seu disco. Liste todos os discos conectados:
diskutil list
A saída mostra cada disco e suas partições. Seu disco externo será algo como disk4 ou disk5. Os discos internos geralmente são disk0 e disk1.
Para uma visão geral mais legível apenas de discos externos:
diskutil list external
Depois de saber o identificador do disco, você também pode ejetar usando o caminho /dev/ em vez do nome do volume:
diskutil eject /dev/disk4
Isso é útil quando o nome do volume contém caracteres incomuns ou quando o volume não está montado, mas o disco ainda está conectado.
Como ejetar todos os discos externos de uma vez
Se você precisar ejetar todos os discos externos com um único comando, existem duas abordagens.
Usando diskutil para encontrar e ejetar todos os discos externos:
diskutil list external | grep -o 'disk[0-9]*$' | while read disk; do diskutil eject "/dev/$disk"; done
Ou usando AppleScript pelo Terminal, que espelha o que o Finder faz:
osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'
A abordagem do AppleScript ejeta apenas os discos que o Finder considera ejetáveis — ele pula seu disco de inicialização e volumes de rede, que é geralmente o que você deseja.
Forçando a desmontagem quando o diskutil eject falha
Se uma ejeção normal falhar com um erro como “couldn’t unmount disk”, force a ação:
diskutil unmount force /Volumes/NomeDoSeuDisco
Ou desmonte todos os volumes em um disco específico de uma só vez:
diskutil unmountDisk force /dev/disk4
A desmontagem forçada diz ao macOS para liberar o volume independentemente do que o esteja usando. É mais controlado do que desconectar fisicamente o disco — o sistema ainda limpa os caches e notifica os processos — mas não espera que os processos fechem os arquivos de forma limpa.
Use a desmontagem forçada quando souber que nada importante está sendo gravado. É o equivalente na linha de comando a forçar a ejeção pelo Utilitário de Disco. Consulte nosso guia sobre quando a ejeção forçada é segura vs. arriscada antes de usar isso em um disco que estava sendo usado ativamente.
Descobrindo o que está bloqueando a ejeção com lsof
Este é o comando que torna o Terminal inestimável para problemas de ejeção:
lsof /Volumes/NomeDoSeuDisco
lsof significa “list open files” (listar arquivos abertos). Ele mostra todos os processos que têm um arquivo aberto naquele volume — o nome do processo, o ID do processo (PID), o usuário que o está executando e qual arquivo está aberto.
Para resultados completos (incluindo processos do sistema), execute-o com sudo:
sudo lsof /Volumes/NomeDoSeuDisco
Sem o sudo, você verá apenas os processos pertencentes à sua conta de usuário. Processos do sistema como o mds do Spotlight ou o backupd do Time Machine não aparecerão. Com o sudo, você vê tudo o que realmente está mantendo o disco aberto.
Lendo a saída do lsof
A saída se parece com isto:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mds 123 root 12r REG 1,8 4096 789 /Volumes/MeuDisco/.Spotlight-V100/...
Finder 456 aaron 15r DIR 1,8 1024 2 /Volumes/MeuDisco
Dropbox 789 aaron 8u REG 1,8 8192 345 /Volumes/MeuDisco/Projetos/.dropbox
As colunas que mais importam:
- COMMAND: O nome do processo — isso diz o que está bloqueando a ejeção.
- PID: O ID do processo — você usará isso para encerrar o processo, se necessário.
- FD: Descritor de arquivo e modo de acesso.
rsignifica leitura,wsignifica gravação,usignifica leitura/gravação. Se você virwouu, algo está gravando ativamente no disco, e a ejeção forçada é arriscada. - NAME: O arquivo específico sendo acessado — isso geralmente revela exatamente por que o processo está lá.
Culpados comuns: mds (indexação do Spotlight), backupd (Time Machine), Dropbox, Google Drive, o próprio Finder. Veja nossos guias detalhados sobre o Spotlight bloqueando a ejeção e iCloud/Dropbox impedindo a ejeção para correções específicas.
Encerrando processos de bloqueio
Depois de saber o PID de um processo de bloqueio, termine-o de forma graciosa:
kill 789
Isso envia um sinal de término gracioso. O processo tem a chance de fechar arquivos e limpar tudo. Dê a ele alguns segundos para sair e tente ejetar novamente.
Se ele não responder a um encerramento gracioso:
kill -9 789
Isso força o término imediato. O processo não consegue limpar nada. Use isso como último recurso — especialmente para processos do sistema.
Para encerrar todos os processos que usam um volume específico em um único comando:
sudo lsof -t /Volumes/NomeDoSeuDisco | xargs kill
A flag -t faz com que o lsof exiba apenas PIDs, e o xargs os envia para o kill. Tenha cuidado: isso encerra todos os processos que usam o disco, incluindo aqueles que podem estar no meio de um trabalho importante.
Fluxo de trabalho completo de solução de problemas
Aqui está a sequência completa para um disco que não ejeta:
# Passo 1: Tente a ejeção normal
diskutil eject /Volumes/NomeDoSeuDisco
# Passo 2: Se falhar, veja o que está bloqueando
sudo lsof /Volumes/NomeDoSeuDisco
# Passo 3: Encerre o processo infrator (substitua o PID pelo número real)
kill 12345
# Passo 4: Tente ejetar novamente
diskutil eject /Volumes/NomeDoSeuDisco
# Passo 5: Se ainda estiver preso, force a desmontagem
diskutil unmountDisk force /dev/disk4
A maioria dos problemas é resolvida no Passo 3. Identifique o bloqueador, encerre-o e ejete de forma limpa.
Variações de diagnóstico úteis
Verifique se o Spotlight especificamente está prendendo seu disco:
lsof /Volumes/NomeDoSeuDisco | grep mds
Liste apenas os nomes exclusivos dos processos que bloqueiam a ejeção (sem linhas duplicadas):
lsof /Volumes/NomeDoSeuDisco | awk '{print $1}' | sort -u
Observe o E/S de disco em tempo real para ver se algo está gravando ativamente:
sudo fs_usage -f diskio | grep NomeDoSeuDisco
Isso roda continuamente e mostra cada operação de disco conforme ela acontece. Pressione Control-C para parar. Use isso quando o lsof mostrar um processo, mas você não tiver certeza se ele está gravando ativamente ou apenas mantendo um identificador antigo.
Quando o Terminal dá mais trabalho do que vale a pena
Esses comandos são poderosos e, depois de usá-los algumas vezes, tornam-se naturais. Mas há um custo real em trocar o contexto do seu trabalho por uma janela do Terminal — executar comandos de diagnóstico, analisar saídas técnicas, decidir qual PID é seguro encerrar.
O Ejecta faz tudo o que foi descrito acima automaticamente. Ele monitora seus discos, identifica cada processo de bloqueio e oferece um botão de um clique para encerrar cada um. A mesma informação que você obteria do sudo lsof, apresentada visualmente na sua barra de menus — sem comandos para lembrar, sem saídas para analisar.
Por $9.99, você tem uma ferramenta que substitui todo esse fluxo de trabalho de várias etapas do Terminal por um único clique. Se você enfrenta esse problema mais de uma vez por mês, ela se paga em frustração economizada já na primeira semana. Experimente o Ejecta grátis por 7 dias — sem necessidade de Terminal.
Se você prefere não usar o Terminal todas as vezes, o Ejecta mostra exatamente qual processo está bloqueando seu disco — e permite que você o encerre com um clique, direto da sua barra de menus.
Comprar Agora — $9.99