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.

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.

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 — te dice qué está bloqueando la expulsión.
  • PID: el ID del proceso — lo usarás para matar el proceso si es necesario.
  • FD: descriptor de archivo y modo de acceso. r significa lectura, w significa escritura, u significa lectura/escritura. Si ves w o u, algo está escribiendo activamente en el disco y forzar la expulsión es arriesgado.
  • NAME: el archivo específico al que se accede — a menudo revela exactamente por qué el proceso está ahí.

Culpables habituales: mds (indexado 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

Una vez que conoces el PID de un proceso bloqueante, termínalo de forma controlada:

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

Esto fuerza la terminación inmediata. El proceso no tiene oportunidad de limpiar. Úsalo como último recurso — especialmente para procesos del sistema.

Para matar todos los procesos que usan un volumen específico en un solo comando:

sudo lsof -t /Volumes/NombreDeTuDisco | xargs kill

El flag -t hace que lsof muestre solo los PIDs, y xargs los pasa a kill. Ten cuidado: esto mata todos los procesos que estén usando el disco, incluidos los que podrían estar en medio de un trabajo importante.

Flujo de trabajo completo de solución de problemas

Aquí está la secuencia completa para un disco que no se expulsa:

# Paso 1: Intenta la expulsión normal
diskutil eject /Volumes/NombreDeTuDisco

# Paso 2: Si falla, ve qué está bloqueando
sudo lsof /Volumes/NombreDeTuDisco

# Paso 3: Mata el proceso ofensivo (reemplaza el PID con el número real)
kill 12345

# Paso 4: Intenta expulsar de nuevo
diskutil eject /Volumes/NombreDeTuDisco

# Paso 5: Si sigue atascado, fuerza el desmontaje
diskutil unmountDisk force /dev/disk4

La mayoría de los problemas se resuelven en el Paso 3. Identifica el bloqueador, mátalo, expulsa limpiamente.

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 poderosos y, una vez que los has usado unas cuantas veces, se vuelven segunda naturaleza. Pero hay un coste real en cambiar de contexto de tu trabajo a una ventana de Terminal — ejecutar comandos de diagnóstico, leer la salida técnica, decidir qué PID es seguro matar.

Ejecta hace todo lo anterior automáticamente. Monitorea tus discos, identifica todos los procesos bloqueantes y te da un botón de un clic para cerrar cada uno. La misma información que obtendrías de sudo lsof, presentada visualmente en tu barra de menús — sin comandos que recordar, sin salida que analizar.

Por $9.99, obtienes una herramienta que reemplaza todo este flujo de trabajo de Terminal con un solo clic. Si te enfrentas a este problema más de una vez al mes, se paga sola en frustración ahorrada en la primera semana. Prueba Ejecta gratis durante 7 días — sin necesidad de Terminal.

Si prefieres no usar Terminal cada vez, Ejecta te muestra exactamente qué proceso está bloqueando tu disco y te permite cerrarlo con un clic, desde la barra de menú.

Comprar — $9.99