diskutil eject: cómo expulsar discos desde la Terminal del Mac

Usa diskutil eject /Volumes/Nombre para expulsar discos desde la Terminal del Mac. Guía completa: listar discos, forzar el desmontaje y matar procesos bloqueantes con lsof.

(Updated )

Finder te dice que el disco está en uso. No te dice qué lo está usando ni qué hacer al respecto. La Terminal hace ambas cosas.

Respuesta rápida: Ejecuta diskutil eject /Volumes/NombreDeTuDisco para expulsar un disco desde el Terminal. Si falla, usa sudo lsof /Volumes/NombreDeTuDisco para ver qué está bloqueando la expulsión, kill <PID> para detener el proceso causante y vuelve a expulsarlo. Como último recurso, diskutil unmountDisk force /dev/diskN fuerza la desconexión del disco, pero hazlo solo cuando no haya nada escribiendo en ese momento.

Si te sientes cómodo con la línea de comandos, la Terminal es la forma más poderosa de manejar expulsiones obstinadas en macOS. Y si todavía no te sientes cómodo, estos comandos son un buen lugar para empezar.

Expulsión básica con diskutil eject

La forma más directa de expulsar un disco externo desde la Terminal del Mac:

diskutil eject /Volumes/NombreDeTuDisco

Reemplaza NombreDeTuDisco con el nombre real del disco, exactamente como aparece en Finder. Si el nombre tiene espacios, ponlo entre comillas:

diskutil eject "/Volumes/Mi Disco"

Esto hace lo mismo que hacer clic en el botón de expulsar en Finder. Si funciona, el disco se desmonta limpiamente y listo. Si falla, obtienes un mensaje de error mucho más informativo que el que da Finder.

También puedes desmontar sin expulsar (el disco permanece visible en Utilidad de Discos pero no está montado):

diskutil unmount /Volumes/NombreDeTuDisco

La diferencia importa para discos con varias particiones. unmount quita un volumen. eject quita el dispositivo físico y todos sus volúmenes a la vez.

Encontrar el identificador del disco con diskutil list

Antes de usar comandos más avanzados, necesitas el identificador del disco. Lista todos los discos conectados:

diskutil list

La salida muestra cada disco y sus particiones. Tu disco externo será algo como disk4 o disk5. Los discos internos generalmente son disk0 y disk1.

Para una vista más legible solo de los discos externos:

diskutil list external

Una vez que conoces el identificador, también puedes expulsar usando la ruta /dev/ en lugar del nombre del volumen:

diskutil eject /dev/disk4

Esto es útil cuando el nombre del volumen tiene caracteres inusuales o cuando el volumen no está montado pero el disco sigue conectado.

Cómo expulsar todos los discos externos a la vez

Si necesitas expulsar todos los discos externos en un solo comando, hay dos enfoques.

Usando diskutil para encontrar y expulsar todos los discos externos:

diskutil list external | grep -o 'disk[0-9]*$' | while read disk; do diskutil eject "/dev/$disk"; done

O usando AppleScript desde la Terminal, que reproduce lo que hace Finder:

osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'

El enfoque con AppleScript solo expulsa los discos que Finder considera expulsables: omite el disco de arranque y los volúmenes de red, que normalmente es lo que quieres.

Desmontaje forzado cuando diskutil eject falla

Si una expulsión normal falla con un error como «no se pudo desmontar el disco», fuérzala:

diskutil unmount force /Volumes/NombreDeTuDisco

O desmonta todos los volúmenes de un disco específico de una vez:

diskutil unmountDisk force /dev/disk4

El desmontaje forzado le dice a macOS que libere el volumen sin importar qué lo esté usando. Es más controlado que desconectar físicamente el disco (el sistema todavía vacía los cachés y notifica a los procesos), pero no espera a que los procesos cierren los archivos limpiamente.

Usa el desmontaje forzado cuando sepas que nada importante se está escribiendo. Es el equivalente en línea de comandos de forzar la expulsión desde Utilidad de Discos. Lee nuestra guía sobre cuándo es seguro forzar la expulsión y cuándo es arriesgado antes de usar esto en un disco que estaba en uso.

Encontrar qué bloquea la expulsión con lsof

Este es el comando que hace que la Terminal sea invaluable para problemas de expulsión:

lsof /Volumes/NombreDeTuDisco

lsof significa «list open files» (listar archivos abiertos). Muestra cada proceso que tiene un archivo abierto en ese volumen: el nombre del proceso, el ID del proceso (PID), el usuario que lo ejecuta y qué archivo está abierto.

Para resultados completos (incluidos los procesos del sistema), ejecútalo con sudo:

sudo lsof /Volumes/NombreDeTuDisco

Sin sudo, solo ves procesos de tu cuenta de usuario. Procesos del sistema como mds (Spotlight) o backupd (Time Machine) no aparecerán. Con sudo, ves todo lo que realmente está manteniendo abierto el disco.

Leer la salida de lsof

La salida se ve algo así:

COMMAND   PID   USER   FD   TYPE   DEVICE   SIZE/OFF   NODE   NAME
mds       123   root   12r  REG    1,8      4096       789    /Volumes/MiDisco/.Spotlight-V100/...
Finder    456   aaron  15r  DIR    1,8      1024       2      /Volumes/MiDisco
Dropbox   789   aaron  8u   REG    1,8      8192       345    /Volumes/MiDisco/Proyectos/.dropbox

Las columnas que más importan:

  • COMMAND: el nombre del proceso, que te dice qué está bloqueando la expulsión.
  • PID: el ID del proceso, que usarás para matar el proceso si es necesario.
  • FD: FD indica cómo se abrió el archivo: r para lectura, w para escritura y u para ambas. No indica la actividad actual ni demuestra que no haya escrituras pendientes en el volumen.
  • NAME: el archivo específico al que se accede, que a menudo revela exactamente por qué el proceso está ahí.

Culpables habituales: mds (indexación de Spotlight), backupd (Time Machine), Dropbox, Google Drive, el propio Finder. Mira nuestras guías detalladas sobre Spotlight bloqueando la expulsión y iCloud/Dropbox impidiendo la expulsión para soluciones específicas.

Matar procesos bloqueantes

Cierra las apps compatibles desde la barra de menús. Los procesos del sistema se gestionan por separado y pueden requerir esperar o apagar el Mac. Guarda tu trabajo, termina las copias y los backups y cierra las apps normalmente antes de reintentar la expulsión. Forzar el cierre o la expulsión puede causar pérdida de datos; Ejecta no certifica la seguridad de las escrituras.

kill 789

Esto envía una señal de terminación amable. El proceso tiene oportunidad de cerrar archivos y limpiar. Dale unos segundos para salir y luego intenta expulsar de nuevo.

Si no responde a un kill amable:

kill -9 789

Forzar el cierre es el último recurso. Puede perder trabajo sin guardar o interrumpir escrituras. Guarda primero y espera a que terminen las transferencias. Los nombres de los procesos de Spotlight no demuestran que solo estén leyendo. No fuerces el cierre de mds o mds_stores para liberar un disco. Espera, cierra tus apps e intenta una expulsión normal. Ejecta identifica estos procesos, pero no ofrece el cierre habitual de procesos del sistema. Si el disco sigue bloqueado, guarda todo y apaga completamente el Mac antes de desconectarlo.

Guarda tu trabajo, termina las copias y los backups y cierra las apps normalmente antes de reintentar la expulsión.

Flujo de trabajo completo de solución de problemas

Guarda tu trabajo, termina las copias y los backups y cierra las apps normalmente antes de reintentar la expulsión.

diskutil eject "/Volumes/YourDriveName"
sudo lsof "/Volumes/YourDriveName"

Los nombres de los procesos de Spotlight no demuestran que solo estén leyendo. No fuerces el cierre de mds o mds_stores para liberar un disco. Espera, cierra tus apps e intenta una expulsión normal. Ejecta identifica estos procesos, pero no ofrece el cierre habitual de procesos del sistema. Si el disco sigue bloqueado, guarda todo y apaga completamente el Mac antes de desconectarlo.

El nombre de un proceso o la lista de archivos abiertos no demuestra que no haya escrituras en curso. Guarda tu trabajo, termina las copias y los backups y cierra las apps normalmente antes de reintentar la expulsión. Forzar el cierre o la expulsión puede causar pérdida de datos; Ejecta no certifica la seguridad de las escrituras.

Variaciones de diagnóstico útiles

Verifica si Spotlight en concreto está reteniendo tu disco:

lsof /Volumes/NombreDeTuDisco | grep mds

Lista solo los nombres únicos de los procesos que bloquean la expulsión (sin líneas duplicadas):

lsof /Volumes/NombreDeTuDisco | awk '{print $1}' | sort -u

Observa la E/S de disco en tiempo real para ver si algo está escribiendo activamente:

sudo fs_usage -f diskio | grep NombreDeTuDisco

Esto se ejecuta continuamente y muestra cada operación de disco a medida que sucede. Pulsa Control-C para detenerlo. Úsalo cuando lsof muestre un proceso pero no estés seguro de si está escribiendo activamente o solo manteniendo un descriptor obsoleto.

Cuando la Terminal cuesta más de lo que ahorra

Estos comandos son potentes y, una vez que los has usado unas cuantas veces, se vuelven algo natural. Pero cambiar de contexto, de tu trabajo a una ventana de Terminal, tiene un coste real: ejecutar comandos de diagnóstico, leer la salida técnica, decidir qué PID es seguro matar.

Ejecta: Ejecta ofrece diagnóstico gratuito de discos sin periodo de prueba. La licencia de pago desbloquea el cierre y la expulsión para apps compatibles, Expulsar todo y los controles de Time Machine. Los procesos del sistema pueden requerir esperar, autorización o apagar el Mac. Guarda tu trabajo y termina las transferencias primero.

Sin límite de equipos ni activaciones. Solicita el reembolso en un plazo de 30 días.

Ejecta ofrece diagnóstico gratuito de discos sin periodo de prueba. La licencia de pago desbloquea el cierre y la expulsión para apps compatibles, Expulsar todo y los controles de Time Machine. Los procesos del sistema pueden requerir esperar, autorización o apagar el Mac. Guarda tu trabajo y termina las transferencias primero.

Comprar - $29 $9.99