Descubra qué procesos están escribiendo en el disco duro

32

En mi Lenovo T400 y Ubuntu, la luz para escribir en el disco duro sigue parpadeando. Me preguntaba si en Linux es posible averiguar qué procesos están haciendo E / S en el disco duro. Al igual que antes top, puede averiguar qué procesos están utilizando la mayoría de la CPU y la memoria.

Tim
fuente

Respuestas:

42

Iotop es una buena herramienta para lo que quieres. También le permite a uno mostrar la cantidad acumulada de E / S en cualquiera de DISK READ, DISK WRITE, SWAPIN y IO (porcentaje general). Esto es a través de una interfaz ingeniosa:

  • Simplemente presiona ael teclado y clasificará los procesos más hambrientos en la parte superior.
  • Invertir el orden, solo presiona r.
  • Si desea ordenar por otras columnas, simplemente presione la tecla izquierda / derecha.

Como top, la presentación está bastante ocupada. Otra cosa es que no tiene las innumerables opciones que toptiene (por ejemplo, no puedo elegir ocultar ninguna de las columnas en las que no estoy interesado), pero la herramienta es más que suficiente para su propósito específico.

tshepang
fuente
3
Powertop también es útil para encontrar qué está gastando la batería en una computadora portátil; Iotop sigue siendo el primer lugar para buscar accesos a disco.
Gilles 'SO- deja de ser malvado'
se puede pasar -o( --only) para filtrar todas las tareas que no realizan ninguna E / S. Esto hace que la lista esté menos llena
Marcin Orlowski
15

Puedes usar lsof( man lsof ). Lo siguiente devolverá una lista de todos los archivos que están abiertos para escritura:

lsof | grep -e "[[:digit:]]\+w"
James Sumners
fuente
1
Los archivos que están abiertos y los archivos a los que se accede realmente son dos cosas diferentes.
psusi
@psusi Es muy probable que se "acceda" a un archivo abierto para escribir. Además, se puede obtener más información al aprender lsof a través de su página de manual.
James Sumners
55
Los archivos abiertos para escritura pueden escribirse en algún momento, pero no necesariamente en este momento. Muchos archivos se mantienen abiertos, pero rara vez se escriben en ellos. Por otro lado, los archivos en los que se está escribiendo pueden abrirse y cerrarse rápidamente y, por lo tanto, no aparecerán en lsof. De cualquier manera, es de poca ayuda averiguar qué proceso está realmente escribiendo en el disco en este momento.
psusi
El wcomando del comando anterior lo hace grep para los archivos que están abiertos solo para escritura . Los archivos abiertos para escritura y lectura ( u) no se mostrarán, pero también se pueden escribir en ellos. Si desea ver los archivos abiertos para escritura y para lectura + escritura, creo que esto es lo que está buscando:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
Martijn
1
@Martijn Querrás usar grep -e**w**para evitar coincidencias [0-9]\+[wu]dentro de otras columnas
2

Uso strace.

Mehrdad
fuente
66
Eso le dirá qué está haciendo un proceso en particular, no ayudará encontrar qué proceso está haciendo algo.
Gilles 'SO- deja de ser malvado'
2

Especialmente para la baja actividad del disco, es necesario usar iotop en modo por lotes, para evitar que las líneas de acceso cortas desaparezcan rápidamente. La respuesta de ¿Cómo registro / lee el sistema de archivos por nombre de archivo en Linux? muestra cómo hacer esto.

Hasta ahora iotopes la mejor solución general. El siguiente comando le proporciona una salida en tiempo real de todos los procesos que utilizan el disco.

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds

Una vez que tenga la identificación del proceso, también puede encontrar los archivos con

 lsof -p $PID
Frank Breitling
fuente
1
¿Cómo difiere esta respuesta de las respuestas (muy antiguas) anteriores? Al responder una pregunta anterior, es bueno explicar cómo su respuesta difiere de las respuestas anteriores. Esto ayuda al lector a clasificar entre las respuestas.
Stephen Rauch
Gracias por señalar esto. He editado esta respuesta teniendo en cuenta tu comentario.
Frank Breitling