Skip to content

Comandos para monitorizar el uso de disco en Linux

Resulta muy importante, como ya sabemos, monitorizar el consumo de recursos en equipos informáticos, máxime cuando se trata de servidores que cumplen alguna función crítica en entornos productivos. La CPU, la memoria RAM/Swap, el ancho de banda…

Uno de los recursos a los que se deja un poco más de lado, hasta que aparecen problemas de lentitud (aunque por supuesto no tiene por qué ser este el único caso de uso) es la monitorización del sistema de archivos en Linux, más concretamente las operaciones de lectura/escritura y el ancho de banda consumido.

Normalmente, empezaremos descartando un uso elevado de CPU, luego un consumo de memoria (que pueda provocar el uso elevado de swap) y luego, según mi experiencia, conviene descartar factores como este.

Hablamos de operaciones de escritura (input) y escritura (output).Un término muy relacionado y de moda con los SSD, cuyo rendimiento suele contemplarse con valores de IOPS (entradas y salidas por segundo).

Diferentes formas de medir el Input/output de disco en Linux

Iotop

Del mismo modo que la utilidad top (o alguna de sus alternativas) nos permite conocer el consumo de recursos como CPU o memoria en tiempo real, iotop nos permite monitorizar el consumo de operaciones IO por segundo y ancho de banda, para según qué usuarios y procesos.

Es nativo de systemas Linux y lo abriremos simplemente escribiendo:

iotop
iotop-linux

Por defecto, se nos mostrarán todos los procesos en ejecución y sus diferentes hilos.

Si escribimos el comando seguido de –oP, filtraremos para ver únicamente aquellos procesos que escriben o leen del filesystem en tiempo real.

iotop-linux-2

Iostat

Comando que nos interesa cuando queremos medir las operaciones de IO/segundo, poniendo los datos en contraste con su utilización promedio. Es recomendable para estudiar, por medio de sus reportes, si es necesario hacer ajustes en la configuración del sistema de archivos, para mejorar su ancho de banda o IOPS.

La sintaxis básica es:

iotop <opción> <intervalo> <conteo>

Nos genera dos tipos de informe diferentes. Por un lado, el de uso de la CPU y por otro el de utilización del dispositivo.

Para un uso básico, podemos lanzar la utilidad con refresco cada 10 segundos, así:

iostat -c 10
$ iostat ALL -c 10
Linux 4.14.68-sunxi64 (Firewalla) 12/05/2020 aarch64 (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
9.10 0.03 7.13 0.14 0.00 83.60

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
loop1 0.00 0.00 0.00 0 0
loop2 0.00 0.00 0.00 0 0
loop3 0.00 0.00 0.00 0 0
loop4 0.00 0.00 0.00 0 0
loop5 0.00 0.00 0.00 0 0
loop6 0.00 0.00 0.00 0 0
loop7 0.00 0.00 0.00 0 0
mmcblk0 2.36 19.74 43.81 6385397 14172948
zram0 0.36 0.55 0.88 176368 284648
zram1 0.35 0.54 0.87 175544 282520
zram2 0.35 0.54 0.88 175040 283400
zram3 0.35 0.54 0.87 174996 282256
zram4 0.35 0.53 0.87 172768 279944
zram5 0.00 0.00 0.00 0 0
sda 0.00 0.09 0.11 27912 35076

Para entender los diferentes valores mostrados, diremos que:

  • tps equivale al número de transferencias por segundo- Una transferencia es una petición de I/O al dispositivo.
  • Kb_read/s muestra el ancho de banda de lectura consumido cada segundo
  • Kb_wrtn/s muestra el ancho de banda de escritura consumido cada segundo
  • Kb_read es el valor acumulado de lecturas en KB.
  • Kb_wrtn es valor acumulado de escrituras en KB.

Más información escribiendo man iostat o iostat –help.

Ioping

Una sencilla utilidad que nos permite, al igual que las interfaces de red, hacer «ping» a los dispositivos de bloques, en tiempo real. Esto nos permite ni más ni menos que medir el valor de latencia de acceso al dispositivo para operaciones de Input/Output por segundo.

Si no la tenemos instalada, lo haremos con nuestro gestor de paquetes. Ejemplo para Debian:

sudo apt install ioping

En el siguiente ejemplo, hemos lanzado el comando para el directorio actual, como sigue.

ioping .
linux-ioping

Si queremos cambiar el valor de refresco de la utilidad, haremos lo siguiente (valor de 4 segundos como ejemplo):

ioping -i 4 .
 4 KiB from . (overlay overlayroot): request=1 time=542 us
 4 KiB from . (overlay overlayroot): request=2 time=3.47 ms
 4 KiB from . (overlay overlayroot): request=3 time=3.45 ms
 4 KiB from . (overlay overlayroot): request=4 time=3.49 ms
 4 KiB from . (overlay overlayroot): request=5 time=17.0 ms
 4 KiB from . (overlay overlayroot): request=6 time=3.52 ms
 4 KiB from . (overlay overlayroot): request=7 time=3.47 ms
 4 KiB from . (overlay overlayroot): request=8 time=3.51 ms
 4 KiB from . (overlay overlayroot): request=9 time=3.54 ms

Esta herramienta tiene más capacidades que podéis listar en la ayuda.

Sar

La utilidad sar es un must have por su versatilidad (nos vale para medir diferentes recursos en tiempo real) como por ser nativa del sistema Linux. Esto lo hace ideal en entornos productivos en donde no tenemos permisos de instalación.

La sintaxis básica es:

iotop <opción> <intervalo> <conteo>

Para generar una salida que muestre 10 informes de I/O diferentes, a intervalos de 2 segundos, usarmeos el comando como sigue:

sar -b 2 10

Este es el resultado.

sar-linux

Para entender los diferentes valores mostrados, diremos que:

  • tps equivale al número de transferencias por segundo- Una transferencia es una petición de I/O al dispositivortps es el total de operaciones de lectura, acometidas cada segundo
  • wtps es el total de opaciones de escritura, acometidas cada segundo
  • bread/s muestra el total de datos leídos desde el dispositivo cada segundo, en bloques
  • bwrtn/s muestra el total de datos leídos desde el dispositivo cada segundo, en bloques

Dstat

dstat es una utilidad que permite generar informes estadísticos de utilización de recursos de sistema. Actúa como reemplazo para otras como vmstat, ifstat o iostat. Permite listar individualmente todos los dispositivos de bloques que componen cada filesystem o sistema de almacenamiento.

En su forma simple, dstat nos ofrece todos estos datos:

dstat
dstat-linux

Para ver estadísticas de disco en Linux según porcentaje de uso, además de las transacciones acometidas por segundo, usaremos esta sintaxis:

dstat -d --disk-tps --disk-util
dstat-linux-2

Dstat podría no venir incluida en nuestra distribución Linux actual, así que la buscaremos con nuestro gestor de paquetes y la instalaremos si procede. Ejemplo.

apt search dstat

Df

Si os fijáis, el artículo habla de monitorizar el «uso» (que no el espacio) en sistemas de archivos Linux. Es posible que este concepto algo ambiguo haya traído algún lector aquí, buscando como ver el espacio ocupado en disco, en sistemas Linux.

Así que, para no decepcionar a nadie, aquí va un método sencillo para obtener el valor de ocupación para los los diferentes sistemas de archivos, montados en los dispositivos de bloques.

Mostrar espacio ocupado con salida «humana» (no se usa la medida de bytes)

df -h

La salida se parecerá a esto:

Filesystem Size Used Avail Use% Mounted on
udev 430M 0 430M 0% /dev
tmpfs 100M 14M 87M 14% /run
/dev/mmcblk0p1 5.3G 1.9G 3.3G 37% /media/root-ro
/dev/mmcblk0p4 6.1G 664M 5.1G 12% /media/root-rw
overlayroot 6.1G 664M 5.1G 12% /
tmpfs 498M 0 498M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 498M 0 498M 0% /sys/fs/cgroup
tmpfs 498M 20K 498M 1% /tmp
/dev/mmcblk0p2 1.9G 19M 1.8G 2% /data
/dev/mmcblk0p3 772M 97M 620M 14% /log
cgmfs 100K 0 100K 0% /run/cgmanager/fs
tmpfs 30M 384K 30M 2% /bspool
tmpfs 100M 0 100M 0% /run/user/1000
/dev/sda1 466G 158G 308G 34% /mnt/backups

Para obtener una salida aún más completa, usaremos el comando df -th (para ver el tipo de filesystem) o incluso la siguiente, si queremos que aparezcan otros valores como inodes libres/ocupados.

df --output

Espero que el artículo de hoy hos haya resultado útil. Espero vuestros comentarios y vuestras sugerencias, soy consciente de que hay todavía más utilidades y étodos para monitorizar la actividad de disco en Linux, así que no dudéis en proponer todo aquello que os parezca interesante, quizá se pueda ampliar el artículo 😉

deweloper View All

Trabajo como consultor de ciberseguridad y me gusta lo que hago. Aficionado a la informática / tecnología en general, me gusta compartir con la gente lo poco que sé. También soy aficionado al deporte y los videojuegos.

2 thoughts on “Comandos para monitorizar el uso de disco en Linux Leave a comment

  1. Genial como siempre.

    Simplemente un apunte. No sé si los comandos que mencionas son nativos de Linux, pero al menos en Manjaro, que es la distro que utilizo, no viene instalado ninguno de ellos.

    Salu2.

Deja un comentario