Cómo Expulsar un Disco Externo desde Terminal en Mac

Terminal te da más control sobre la expulsión de discos que Finder. Aquí están todos los comandos que necesitas para diagnosticar y resolver problemas de expulsión.

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

Si te sientes cómodo con la línea de comandos, Terminal es la forma más poderosa de manejar expulsiones obstinadas de discos 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

El comando de expulsión más directo en Terminal:

diskutil eject /Volumes/NombreDeTuDisco

Esto hace lo mismo que hacer clic en el botón de expulsar en Finder. Si funciona, el disco se desmonta y listo. Si falla, obtienes un mensaje de error más informativo que el que proporciona 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 múltiples particiones. unmount remueve un volumen. eject remueve el dispositivo físico y todos sus volúmenes.

Encontrando el identificador de tu disco

Antes de usar comandos más avanzados, necesitas conocer el identificador de 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:

diskutil list external

Esto filtra solo los discos externos, haciéndolo más fácil de encontrar el tuyo.

Desmontaje forzado

Si un desmontaje normal falla, fuérzalo:

diskutil unmount force /Volumes/NombreDeTuDisco

O desmonta todos los volúmenes en un disco 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 porque el sistema todavía vacía los cachés y notifica a los procesos, pero no espera a que los procesos cierren archivos limpiamente.

Usa el desmontaje forzado cuando sabes que nada importante está siendo escrito. Es el equivalente en línea de comandos de forzar la expulsión desde Utilidad de Discos.

Encontrando qué bloquea la expulsión con lsof

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

lsof /Volumes/NombreDeTuDisco

lsof significa “listar archivos abiertos.” Muestra cada proceso que tiene un archivo abierto en el volumen especificado. La salida incluye el nombre del proceso, ID del proceso (PID), el usuario ejecutándolo y qué archivo está abierto.

Si la salida es larga, redúcela:

lsof /Volumes/NombreDeTuDisco | head -20

Esto muestra las primeras 20 entradas, que generalmente es suficiente para identificar el problema.

Importante: para resultados completos, ejecútalo con sudo:

sudo lsof /Volumes/NombreDeTuDisco

Sin sudo, solo ves procesos de tu cuenta de usuario. Los procesos del sistema que podrían estar bloqueando tu disco no aparecerán. Con sudo, ves todo.

Leyendo 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. Esto te dice qué está bloqueando.
  • 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 en el disco, y forzar la expulsión es más riesgoso.
  • NAME: El archivo específico siendo accedido. Esto frecuentemente revela por qué el proceso está ahí.

Matando procesos bloqueadores

Una vez que conoces el PID de un proceso bloqueador, puedes terminarlo:

kill 789

Esto envía una señal de terminación gracioso. El proceso tiene oportunidad de cerrar archivos y limpiar. Dale unos segundos para que salga.

Si no responde a un kill gracioso:

kill -9 789

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

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

sudo lsof -t /Volumes/NombreDeTuDisco | xargs kill

El flag -t hace que lsof muestre solo PIDs, y xargs los alimenta a kill. Ten cuidado con esto porque matará cada proceso usando el disco, incluyendo los que podrían estar haciendo trabajo importante.

Combinando todo en un flujo de trabajo

Aquí tienes una secuencia completa de solución de problemas 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)
kill 12345

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

# Paso 5: Si todavía está atascado, desmontaje forzado
diskutil unmount force /Volumes/NombreDeTuDisco

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

Variaciones útiles

Verifica si un proceso específico está usando tu disco:

lsof /Volumes/NombreDeTuDisco | grep Spotlight

Lista solo los nombres de procesos (sin duplicados):

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

Ve cuánto I/O está haciendo cada proceso en el disco:

sudo fs_usage -f diskio | grep NombreDeTuDisco

Esto se ejecuta continuamente y muestra operaciones de disco en tiempo real. Presiona Control-C para detener. Usa esto para saber si un proceso está leyendo/escribiendo activamente o solo manteniendo un archivo obsoleto.

Cuando Terminal es demasiado trabajo

Estos comandos son poderosos, y una vez que los has usado unas cuantas veces, se vuelven segunda naturaleza. Pero hay un costo real en cambiar contexto de tu trabajo a una ventana de Terminal, ejecutar comandos de diagnóstico, analizar la salida y decidir qué matar.

Ejecta hace todo lo de este artículo automáticamente. Monitorea tus discos, identifica procesos bloqueadores y te da un botón para cerrar cada uno. La misma información que obtendrías de lsof, presentada visualmente con resolución de un clic.

Terminal te da control completo sobre la expulsión de discos. Ejecta te da ese mismo control sin tener que pensarlo. Por $7.99, obtienes una herramienta que reemplaza un flujo de trabajo de múltiples pasos en la línea de comandos con un solo clic desde tu barra de menús.