El comando lsof explicado para usuarios de Mac
Domina el comando lsof para averiguar qué procesos tienen archivos abiertos en tu Mac. Una guía para desarrolladores y usuarios avanzados.
Tu disco externo no se expulsa. macOS te da el mensaje exasperantemente vago de que “uno o más programas podrían estar usándolo”. ¿Cuáles programas? No lo dice. Aquí es donde entra lsof.
El nombre significa “list open files” (listar archivos abiertos), y hace exactamente eso. En los sistemas basados en Unix como macOS, casi todo se trata como un archivo, incluyendo las conexiones de red, los dispositivos y los volúmenes de disco. Cuando no puedes expulsar un disco, lsof te dice con precisión qué proceso lo tiene secuestrado.
Sintaxis básica
La forma más simple de usar lsof para los problemas de expulsión es:
lsof /Volumes/NombreDeTuDisco
Reemplaza “NombreDeTuDisco” con el nombre real de tu disco. Si el nombre tiene espacios, encierra toda la ruta entre comillas:
lsof "/Volumes/Mi Disco de Respaldo"
Esto devuelve una lista de cada proceso que tiene un identificador de archivo abierto en ese volumen. Cada línea muestra el nombre del proceso, su ID (PID), el usuario que lo ejecuta e información sobre el archivo específico al que se accede.
Leer la salida
Una salida típica de lsof se ve más o menos así:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mds_store 1234 root 4r REG 1,12 524288 ... /Volumes/External/.Spotlight-V100/...
Finder 5678 you 3r DIR 1,12 1024 ... /Volumes/External
Las columnas que más importan son COMMAND (el nombre del proceso), PID (el ID del proceso que usarías para terminarlo) y NAME (la ruta real del archivo al que se accede).
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.
Averiguar qué está bloqueando tu disco
Para los problemas de expulsión en específico, por lo general solo necesitas saber qué nombres de procesos aparecen. Los culpables comunes incluyen mds y mds_stores (indexación de Spotlight), Finder, QuickLookUIService (generación de miniaturas) y fsevents (observador del sistema de archivos).
Si ves mucha salida y quieres acotarla, puedes usar grep:
lsof /Volumes/NombreDeTuDisco | grep -v "^COMMAND"
Esto quita la línea de encabezado para que solo veas los procesos reales. Si quieres solo los nombres únicos de los procesos:
lsof /Volumes/NombreDeTuDisco | awk '{print $1}' | sort -u
Opciones útiles
La opción -c filtra por nombre de comando. Si sospechas que Spotlight es el problema:
lsof -a -c mds /Volumes/NombreDeTuDisco
Esto muestra solo los procesos cuyos nombres empiezan con “mds”.
La opción +D lista de forma recursiva todos los archivos abiertos en un directorio:
lsof +D /Volumes/NombreDeTuDisco
Esto es más exhaustivo que la sintaxis básica, pero puede ser lento en discos grandes con muchos archivos.
Para ver qué procesos tiene abiertos un usuario específico en el disco:
lsof -a -u tunombredeusuario /Volumes/NombreDeTuDisco
Usar lsof sin sudo
De forma predeterminada, lsof solo muestra los procesos que pertenecen a tu cuenta de usuario. Los procesos del sistema que ejecuta root (como mds de Spotlight) no aparecerán a menos que ejecutes lsof con sudo:
sudo lsof /Volumes/NombreDeTuDisco
Tendrás que escribir tu contraseña. Para solucionar problemas de expulsión, usar sudo casi siempre es necesario, ya que los procesos del sistema con frecuencia son los bloqueadores.
Terminar el proceso que bloquea
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 1234
Reemplaza 1234 con el PID real. Si eso no funciona, puedes forzarlo:
kill -9 1234
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.
Para las aplicaciones que son tuyas (como una ventana de Terminal con un shell parado en el directorio del disco), es más limpio simplemente cerrar la aplicación de forma normal o salir del disco antes de intentar expulsar.
Escenarios comunes
Terminal con el directorio actual en el disco: Si hiciste cd a una carpeta de tu disco externo, ese proceso de shell mantendrá el disco abierto. Haz cd a otro lado (cd ~) o cierra esa ventana de Terminal.
Ventanas del Finder: Si el Finder tiene una ventana abierta en el disco, o incluso si tiene el disco seleccionado en la barra lateral, puede impedir la expulsión. Cierra cualquier ventana del Finder que muestre el contenido del disco.
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.
Apps en segundo plano con archivos abiertos: Algunas aplicaciones mantienen referenciados los archivos recientes incluso después de que cierras los documentos. Las aplicaciones creativas como Photoshop o los editores de video son culpables comunes. Cerrar la app por completo normalmente libera los archivos.
Más allá de la línea de comandos
Si no te sientes cómodo con la Terminal o no quieres descifrar la salida de lsof cada vez que necesitas desconectar un disco, hay opciones gráficas.
El Monitor de Actividad puede mostrarte los archivos abiertos de un proceso específico, pero ya tienes que saber qué proceso inspeccionar. No responde con facilidad a la pregunta “¿qué está usando este disco?”.
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.
La línea de comandos es poderosa para quienes la prefieren, pero no debería ser obligatoria para algo tan simple como desconectar un disco.
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 ahora -Artículos relacionados
diskutil eject: cómo expulsar discos desde la Terminal de Mac
Expulsa cualquier disco de Mac desde la Terminal con diskutil: incluyendo cómo forzar el desmontaje de un …
Cómo arreglar el error 'El disco no se expulsó correctamente' en Mac
La advertencia 'El disco no se expulsó correctamente' significa que un proceso tomó tu disco antes de que se …
Cómo expulsar discos externos de forma segura en macOS Sequoia y Sonoma
Apple cambió la forma en que funciona la expulsión de discos en las versiones recientes de macOS. Aquí te …
APFS vs exFAT: Qué formato elegir para tu disco externo en Mac
Elegir el sistema de archivos correcto para tu disco externo afecta todo, desde el rendimiento hasta la …