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.
rsignifica lectura,wsignifica escritura,usignifica lectura/escritura. Si veswou, 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