Introducción
Hola Fronters 👋
Llegamos a la cuarta entrega de nuestra serie sobre monitorización de hardware en Linux. Hoy toca el turno del almacenamiento — discos, particiones, uso de espacio, rendimiento de I/O y salud de los dispositivos.
Un buen monitoreo de almacenamiento te permite anticipar falta de espacio, detectar discos defectuosos antes de que fallen y optimizar el rendimiento de lecturas/escrituras. Vamos a cubrir las herramientas esenciales.
1. df — Espacio en sistemas de archivos
El comando rey para ver el uso de disco a nivel de sistema de archivos:
$ df -h
S.archivo Tipo Tamaño Usado Disp Uso% Montado en
/dev/sda1 ext4 100G 45G 55G 45% /
/dev/sdb1 ext4 500G 320G 180G 64% /datos
tmpfs tmpfs 7.9G 2.1G 5.8G 27% /dev/shm
Flags útiles:
-h→ formato humano (MB/GB)-T→ muestra el tipo de sistema de archivos--total→ suma total al final-i→ muestra uso de inodos (importante en sistemas con muchos archivos pequeños)
Tip: Un sistema puede tener espacio libre pero quedarse sin inodos. Siempre revisa ambos con df -hi.
2. du — Uso de espacio por directorio
Para encontrar qué directorios están consumiendo más espacio:
$ du -sh /var/log
2.3G /var/log
$ du -sh /var/log/*
12M /var/log/apache2
34M /var/log/mysql
2.1G /var/log/syslog
45M /var/log/nginx
Comandos prácticos:
du -sh *→ resumen de cada directorio en el directorio actualdu -sh /* | sort -rh | head -10→ los 10 directorios que más pesan en raízdu -sh /var/log/*.gz→ espacio usado por logs comprimidos
Tip: du puede tardar en discos grandes. Combínalo con ncdu para una interfaz interactiva mucho más rápida.
3. lsblk — Dispositivos de bloque
Muestra todos los discos y particiones en un árbol:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 100G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 19.2G 0 part [SWAP]
sdb 8:16 0 465.8G 0 disk
└─sdb1 8:17 0 465.8G 0 part /datos
nvme0n1 259:0 0 931.5G 0 disk
└─nvme0n1p1 259:1 0 931.5G 0 part /backup
Flags útiles:
lsblk -f→ muestra sistema de archivos y UUIDlsblk -m→ muestra permisos y propietario
4. fdisk — Gestión de particiones
Para un vistazo detallado a las tablas de particiones:
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 119.24 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SanDisk SSD PLUS
Units: sectors of 1 * 512 = 512 bytes
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 209717247 209715200 100G 83 Linux
/dev/sda2 209719294 250068991 40349698 19.2G 5 Extended
/dev/sda5 209719296 250068991 40349696 19.2G 82 Linux swap
5. blkid — UUID y tipo de sistema de archivos
$ blkid
/dev/sda1: UUID="a1b2c3d4-..." TYPE="ext4" PARTUUID="12345678-01"
/dev/sdb1: UUID="e5f6g7h8-..." TYPE="xfs" PARTUUID="87654321-01"
/dev/nvme0n1p1: UUID="i9j0k1l2-..." TYPE="ext4" PARTUUID="abcdef01-01"
Esencial para configurar /etc/fstab correctamente.
6. iostat — Rendimiento de I/O
iostat es la herramienta estrella para medir el rendimiento de los discos:
$ iostat -x 2 3
Device r/s w/s rkB/s wkB/s await svctm %util
sda 45.2 67.8 5678.9 12345.6 4.5 0.8 45.6
sdb 123.4 234.5 23456.7 45678.9 12.3 2.1 78.9
Columnas clave:
- r/s / w/s: Operaciones de lectura/escritura por segundo
- rkB/s / wkB/s: Kilobytes leídos/escritos por segundo
- await: Tiempo promedio de respuesta (ms) — incluye cola
- svctm: Tiempo de servicio promedio (ms)
- %util: Porcentaje de tiempo que el disco estuvo ocupado
Regla de oro: Si %util se acerca a 100% y await es alto (>30ms para HDD, >5ms para SSD), el disco es un cuello de botella.
7. iotop — I/O por proceso
¿Qué procesos están escribiendo o leyendo del disco? iotop te lo muestra en tiempo real:
$ sudo iotop -o
Total DISK READ: 12.34 M/s | Total DISK WRITE: 45.67 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
2345 be/4 mysql 5.67 M/s 23.45 M/s 0.00 % 12.34 % mysqld
3456 be/4 rsync 3.45 M/s 12.34 M/s 0.00 % 8.90 % rsync
1234 be/4 root 1.23 M/s 4.56 M/s 0.00 % 3.45 % apache2
Tip: Usa iotop -o para mostrar solo procesos con actividad activa de I/O.
8. smartctl — Salud del disco (SMART)
Los discos modernos tienen tecnología SMART que permite predecir fallos:
$ sudo smartctl -a /dev/sda
=== START OF INFORMATION SECTION ===
Model Family: SanDisk SSD PLUS
Device Model: SanDisk SDSSDA-120G
Serial Number: 123456789ABC
Firmware Version: X2310RL
User Capacity: 128,035,676,160 bytes [128 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 12345
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 567
177 Wear_Leveling_Count 0x0013 098 098 000 Pre-fail Always - 89
194 Temperature_Celsius 0x0022 067 063 000 Old_age Always - 33
Qué monitorear:
- Reallocated_Sector_Ct: Sectores reasignados. Si crece o es > 0, el disco está degradándose.
- Temperature_Celsius: Temperatura del disco. > 55°C sostenido es preocupante.
- Wear_Leveling_Count (SSD): Desgaste del SSD. Cerca de 0 = fin de vida útil.
- Power_On_Hours: Horas encendido.
Para un test rápido de salud:
$ sudo smartctl -H /dev/sda
SMART overall-health self-assessment test result: PASSED
9. /proc/diskstats — Estadísticas del kernel
Como siempre, el kernel expone toda la información en /proc:
$ cat /proc/diskstats
8 0 sda 123456 234567 9876543 456789 654321 789012 12345678 345678 0 456789 678901
8 16 sdb 234567 345678 10987654 567890 765432 890123 23456789 456789 0 567890 789012
Campos (por dispositivo): major, minor, nombre, reads completadas, reads mergeadas, sectores leídos, tiempo de lectura (ms), writes completadas, writes mergeadas, sectores escritos, tiempo de escritura (ms), I/Os en progreso, tiempo de I/O (ms), weighted time de I/O (ms).
Útil para scripts de monitoreo personalizados.
10. fsck — Revisión del sistema de archivos
Para verificar la integridad del sistema de archivos:
$ sudo fsck -f /dev/sda1
fsck from util-linux 2.34
e2fsck 1.45.6 (20-Mar-2020)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Verificando la conectividad de directorios
Paso 4: Verificando contadores de referencia
Paso 5: Revisando suma de grupo
/dev/sda1: 123456/6553600 ficheros (0.1% no contiguos), 12345678/26214400 bloques
Importante: El disco debe estar desmontado o montado como solo lectura para ejecutar fsck.
11. dmesg — Errores de disco del kernel
El kernel reporta errores de disco en el ring buffer:
$ dmesg | grep -i "error\|fail\|bad\|disk"
[12345.678901] sd 0:0:0:0: [sda] Unhandled error code
[12345.678902] sd 0:0:0:0: [sda] CDB: Read(10): 28 00 00 00 00 00 00 00 00 00
[23456.789012] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
[23456.789015] ata1.00: failed command: READ DMA
Si ves mensajes como estos, el disco está fallando o el cable tiene problemas. Actúa de inmediato.
Conclusión
Hemos cubierto las herramientas fundamentales para monitorizar el almacenamiento en Linux:
- Uso de espacio con
dfydu - Identificación de dispositivos con
lsblk,fdisk,blkid - Rendimiento de I/O con
iostateiotop - Salud del disco con
smartctl - Integridad del sistema de archivos con
fsck - Estadísticas crudas del kernel via
/proc/diskstatsy errores condmesg
Con todo esto, estás preparado para mantener cualquier servidor Linux funcionando sin problemas de almacenamiento. ¡Un sysadmin informado vale por dos!
No olvides dejar tu ❤️, comentar y compartir para que llegue a más Fronters 💪