492 - ¿Que pasó en mi Linux?¿Como se llenó el disco?

PodcastPodcast

492 - ¿Que pasó en mi Linux?¿Como se llenó el disco?

¿Te preocupa el llenado del filesystem en tu sistema Linux? Descubre las causas comunes, como los logs, archivos temporales y datos de aplicaciones

1:25
-3:15

Hace algunos días, a uno de los miembros del grupo de Telegram de atareao con Linux, se le llenó una de las particiones de su equipo. En ese momento se ofrecieron soluciones para intentar resolver el problema, y que pudiera continuar trabajando de forma normal. Sin embargo, a raíz de esto, me surgió la idea de hacer un episodio del podcast en el que tratara lo relativo a los llenados de disco, es decir, lo que dice en el título del podcast ¿Que pasó en mi Linux?¿Como se llenó el disco?.

Así, en este episodio del podcast quiero tratar precisamente este tema de los llenados de filesystem. ¿Porque se llena un filesystem?¿Como determinar quien es el responsable de ese llenado?¿Como resolver un llenado de filesystem?¿Como intentar reducir o minimizar los daños colaterales de un llenado de filesystem?.

Los puristas me tendrán que disculpar con lo del llenado del disco. Deben entender que para los menos iniciados en el mundo Linux, hablar de filesystem o mejor de sistema de archivos no tiene tanta pegada.

# ¿Que pasó en mi Linux?¿Como se llenó el disco?

¿Que pasó en mi Linux?¿Como se llenó el disco?

¿Cuales son las razones para el llenado de un sistema de archivos?

En Linux, el llenado del filesystem (sistema de archivos) puede ser causado por varias razones. Aquí hay algunas de las causas más comunes:

  • Archivos y directorios innecesarios: La acumulación de archivos y directorios no utilizados o innecesarios puede ocupar espacio en el filesystem. Esto puede incluir archivos temporales, registros antiguos, archivos de caché, copias de seguridad no utilizadas y archivos de instalación.
  • Logs (registros) excesivos: Los sistemas Linux generan registros para diversas actividades, como registros del sistema, registros de aplicaciones y registros de servicios. Si los registros no se administran correctamente, pueden crecer rápidamente y ocupar un espacio considerable.
  • Espacio reservado para el sistema: En algunos casos, el espacio en el filesystem se reserva para el sistema operativo y sus componentes, como el espacio reservado para el journaling en sistemas de archivos como ext4. Si se llena el espacio reservado, el filesystem puede quedar sin espacio para otros archivos.
  • Archivos de caché y temporales: Algunas aplicaciones generan archivos de caché y temporales para mejorar el rendimiento. Si estos archivos no se eliminan de manera regular, pueden acumularse y consumir espacio en el filesystem.
  • Creación y almacenamiento de archivos grandes: La creación y almacenamiento de archivos grandes, como archivos de video, imágenes de alta resolución o bases de datos, pueden llenar rápidamente el filesystem si no se gestiona adecuadamente el espacio disponible.
  • Programas maliciosos o archivos no deseados: La presencia de programas maliciosos, como virus o malware, o la descarga de archivos no deseados pueden llenar el filesystem con archivos innecesarios o duplicados.

Algunos ejemplos de aplicaciones y servicios que llenan el filesystem

Hay varias aplicaciones y servicios, que pueden contribuir, en gran medida, al llenado de un sistema de archivos si no se gestionan adecuadamente.

  • Sistemas de gestión de bases de datos: Las bases de datos como MySQL, PostgreSQL u Oracle pueden ocupar una gran cantidad de espacio en el filesystem. Si no se realiza un mantenimiento adecuado, los archivos de datos, los registros de transacciones y los archivos de copia de seguridad pueden crecer y llenar el filesystem.
  • Servidores web y aplicaciones de almacenamiento en la nube: Aplicaciones como Apache, Nginx o Dropbox pueden generar archivos de registro, archivos de caché y almacenamiento local de archivos que, si no se administran, pueden ocupar espacio en el filesystem.
  • Aplicaciones de correo electrónico: Los servidores de correo electrónico como Postfix, Sendmail o Dovecot generan archivos de registro, archivos de cola de correo y buzones de correo. Si estos elementos no se gestionan correctamente, pueden ocupar un espacio significativo en el filesystem.
  • Aplicaciones de virtualización: Las plataformas de virtualización como VMware o VirtualBox pueden generar archivos de imagen de máquinas virtuales que pueden ocupar un espacio considerable en el filesystem si no se eliminan o gestionan adecuadamente.
  • Sistemas de gestión de contenido (CMS): Algunos CMS populares como WordPress, Drupal o Joomla generan archivos de caché, registros y copias de seguridad que pueden llenar el filesystem si no se administran regularmente.
  • Aplicaciones de desarrollo: Las herramientas de desarrollo como compiladores, editores de código, entornos de desarrollo integrados (IDE) y sistemas de control de versiones como Git pueden generar archivos temporales, registros y copias de seguridad que pueden llenar el filesystem si no se eliminan.

Los nuevos sistemas de paquetería

Pero no solamente estos, también algunos de los sistemas de empaquetados mas extendidos, así como los navegadores, son grandes devoradores de espacio.

Snap y Flatpak son sistemas de empaquetado y distribución de aplicaciones en Linux que utilizan el concepto de «sandboxing» para encapsular aplicaciones y sus dependencias, lo que permite una mayor portabilidad y seguridad. Aunque estas tecnologías pueden ayudar a mantener el filesystem más ordenado al aislar las aplicaciones y sus archivos, también pueden contribuir al llenado del filesystem de las siguientes maneras:

  • Snap y Flatpak pueden ocupar espacio en el filesystem al almacenar las aplicaciones y sus dependencias. Cada aplicación empaquetada en formato Snap o Flatpak tiene su propia versión de las bibliotecas y dependencias necesarias, lo que puede resultar en una duplicación de archivos en comparación con las instalaciones tradicionales.
  • Las actualizaciones de aplicaciones Snap y Flatpak pueden generar archivos adicionales durante el proceso de actualización. Esto puede incluir archivos de respaldo, versiones antiguas de aplicaciones y metadatos relacionados.
  • Las aplicaciones Snap y Flatpak pueden generar archivos de caché y datos temporales que se almacenan en el filesystem. Estos archivos pueden ocupar espacio si no se administran adecuadamente.

Puedes revisar lo que ocupan las aplicaciones y paquetes que tienes instalados de estos dos sistemas en sus respectivos directorios. Así,

  • Flatpak: Las aplicaciones Flatpak se almacenan en el directorio ~/.var/app/. Cada aplicación Flatpak tiene su propia carpeta dentro de este directorio, con un nombre que generalmente sigue el formato com.nombre_de_la_aplicacion. Por ejemplo, la ruta completa para una aplicación llamada «example-app» sería ~/.var/app/com.example-app/.
  • Snap: Las aplicaciones Snap se almacenan en el directorio /var/lib/snapd/snap/. Al igual que con Flatpak, cada aplicación Snap tiene su propia carpeta dentro de este directorio, con un nombre que sigue el formato nombre_de_la_aplicacion.version. Por ejemplo, la ruta completa para una aplicación llamada «example-app» en la versión 1.0 sería /var/lib/snapd/snap/example-app_1.0/.

Docker

Aunque Docker en sí mismo no contribuye directamente al llenado de un filesystem, el uso de contenedores Docker puede tener implicaciones en el almacenamiento y el uso del espacio en el filesystem del host.

A continuación se presentan algunas formas en las que Docker puede afectar el llenado del filesystem:

  • Capas de imágenes Docker: Docker utiliza capas de imágenes para construir los contenedores. Cada vez que se crea o se actualiza una imagen, se añade una nueva capa. Con el tiempo, esto puede aumentar el tamaño de las imágenes y consumir espacio en el filesystem. Es importante gestionar adecuadamente las imágenes y eliminar las versiones antiguas o no utilizadas para evitar un consumo excesivo de espacio.
  • Datos persistentes en contenedores: Los contenedores Docker pueden almacenar datos persistentes mediante el uso de volúmenes o montando directorios del host dentro del contenedor. Si se almacenan grandes cantidades de datos en estos volúmenes, pueden ocupar espacio en el filesystem del host.
  • Logs de contenedores: Los contenedores Docker generan logs que pueden almacenarse en el host. Si los logs no se gestionan adecuadamente, pueden aumentar con el tiempo y consumir espacio en el filesystem.
  • Uso de recursos del sistema: Los contenedores Docker pueden consumir recursos del sistema, incluyendo espacio en disco, cuando se ejecutan aplicaciones dentro de ellos. Si las aplicaciones dentro de los contenedores generan y almacenan grandes cantidades de datos, esto puede contribuir al llenado del filesystem del host.

Para evitar problemas de llenado de filesystem al utilizar Docker, se recomienda seguir las mejores prácticas:

  • Realizar un seguimiento y una gestión adecuada de las imágenes de Docker, eliminando las versiones antiguas o no utilizadas.
  • Limitar el tamaño de los logs generados por los contenedores y configurar la rotación y purga de logs de forma adecuada.
  • Monitorizar el espacio disponible en el filesystem del host y establecer alertas para detectar posibles problemas antes de que se produzcan llenados graves.
  • Utilizar estrategias adecuadas para gestionar los datos persistentes generados por los contenedores, como eliminar los datos no necesarios o utilizar almacenamiento externo para los datos persistentes.

Los navegadores

En cuanto a Firefox y Chrome también pueden contribuir al llenado del filesystem de las siguientes maneras:

  • Al navegar por la web, los navegadores web como Firefox y Chrome almacenan archivos temporales, como caché de páginas web, cookies, historial de navegación y archivos descargados. Si no se eliminan regularmente, estos archivos pueden ocupar espacio en el filesystem.
  • Las actualizaciones de los navegadores pueden generar archivos adicionales, como copias de seguridad de la configuración anterior, antes de realizar la actualización. Estos archivos pueden ocupar espacio adicional si no se eliminan después de la actualización.
  • Algunas extensiones y complementos instalados en los navegadores también pueden generar archivos adicionales, como cachés o datos locales.

En mi caso siempre ha sido la caché la responsable de un consumo desmesurado de recursos, en lo que a sistema de archivos se refiere. Le puedes dar un vistazo a lo que ocupan en tu equipo, revisando la caché de cada uno de ellos,

  • La caché de Firefox se encuentra en el directorio ~/.cache/mozilla/firefox/ en la carpeta de inicio del usuario. Dentro de esa carpeta, encontrarás una subcarpeta que tiene un nombre alfanumérico único, seguido de «.default». Por ejemplo, la ruta completa podría ser ~/.cache/mozilla/firefox/xxxxxxxx.default/, donde «xxxxxxxx» representa el nombre único de la carpeta.
  • La caché de Chrome se encuentra en el directorio ~/.cache/google-chrome/ en la carpeta de inicio del usuario. Dentro de esa carpeta, encontrarás varias subcarpetas, incluidas «Default» y otras con nombres alfanuméricos únicos para los perfiles de usuario adicionales si los has creado.

Es importante tener en cuenta que los nombres de las carpetas pueden variar dependiendo de la distribución de Linux y de la versión del navegador que estés utilizando. Además, si has modificado la configuración predeterminada del navegador, es posible que la ubicación de la caché sea diferente.

Los logs

Los logs (registros) pueden ocupar espacio considerable en un filesystem en Linux, especialmente si no se gestionan adecuadamente. La cantidad de espacio utilizado por los logs dependerá de varios factores, como la cantidad y la frecuencia de los registros generados, la configuración del sistema y las aplicaciones instaladas. Aquí hay algunos puntos a considerar:

  • Volumen de registros: Algunas aplicaciones y servicios generan una gran cantidad de registros, especialmente aquellos que manejan transacciones intensivas o procesos complejos. Esto puede incluir servidores web, servidores de bases de datos, sistemas de correo electrónico, servidores de aplicaciones, entre otros. Si no se configuran adecuadamente, estos registros pueden crecer rápidamente y ocupar espacio en el filesystem.
  • Nivel de detalle y configuración de registro: La configuración de registro de las aplicaciones y servicios puede variar según el nivel de detalle deseado. Si se establece un nivel de registro muy alto, se generarán más registros y ocuparán más espacio. Es importante ajustar la configuración de registro según las necesidades y limitar el nivel de detalle a lo necesario.
  • Rotación y compresión de logs: Para evitar el llenado excesivo del filesystem, es común aplicar políticas de rotación de logs, lo que implica almacenar registros durante un período de tiempo específico y luego eliminarlos o comprimirlos. Esto ayuda a mantener el espacio utilizado por los logs bajo control.
  • Logs de sistema: El sistema operativo Linux también genera sus propios logs, como el registro del kernel, registros de inicio (boot), registros de errores (syslog) y otros. Estos logs pueden ocupar espacio adicional, especialmente si el sistema ha estado en funcionamiento durante mucho tiempo sin una gestión adecuada.

Así como en otros casos, es mas complejo evitar un llenado de filesystem, en el caso de los logs es algo relativamente sencillo. Simplemente se trata de, establecer políticas y prácticas de gestión de logs que incluyan la rotación y compresión regular de los logs, el monitoreo del crecimiento del espacio utilizado y la revisión periódica de los registros generados por las aplicaciones y servicios instalados.

De esta manera, te recomiendo que le des un vistazo al artículo sobre rotado de logs con logrotate que seguro te será de gran utilidad.

¿Como puedo localizar que aplicación o servicio es el que está llenando el filesystem?

Yo siempre trabajo de la misma forma. Primero ejecuto un df -h para saber cual es el sistema de archivos afectados. Esto me da una visión general, para poder, posteriormente, ir navegando por el mismo. Así, por ejemplo,

$ df -h

S.ficheros     Tamaño Usados  Disp Uso% Montado en
dev               32G      0   32G   0% /dev
run               32G   1,3M   32G   1% /run
/dev/nvme0n1p2   458G   164G  271G  38% /
tmpfs             32G    84K   32G   1% /dev/shm
tmpfs             32G    40K   32G   1% /tmp
/dev/nvme0n1p1   300M   288K  300M   1% /boot/efi
/dev/sda1        1,8T   442G  1,3T  26% /data
tmpfs            6,3G    64K  6,3G   1% /run/user/1000

El siguiente paso, es entrar en el filesystem afectando y navegar hacia abajo en busca del directorio donde tenemos el problema. Igual que antes, yo suelo utilizar du -csh *, pero existen mas herramientas para hacer esto mismo.

  • du (Disk Usage): El comando du es una herramienta estándar de Unix/Linux que muestra el uso del espacio en disco de archivos y directorios. Puedes ejecutar du en diferentes directorios para determinar cuáles están utilizando más espacio. Por ejemplo, puedes usar el comando du -h --max-depth=1 / para ver el tamaño de los directorios en la raíz del filesystem y determinar cuáles son los más grandes.
  • ncdu (NCurses Disk Usage): Es una herramienta más avanzada que proporciona una interfaz de usuario en modo texto y permite explorar y analizar el uso del espacio en disco de manera interactiva. Puedes instalar ncdu con el gestor de paquetes de tu distribución y luego ejecutar ncdu / para analizar el espacio utilizado en todo el filesystem.
  • baobab (Disk Usage Analyzer): Es una herramienta gráfica que proporciona una representación visual del espacio utilizado en el filesystem. Puedes instalar baobab desde los repositorios de tu distribución y luego ejecutarlo para escanear el filesystem y mostrar los directorios y archivos más grandes.
  • iotop: Aunque no identifica directamente la aplicación que está llenando el filesystem, el comando iotop te permite monitorear y ver las operaciones de entrada y salida de disco (I/O) en tiempo real. Esto puede ayudarte a identificar qué procesos o aplicaciones están realizando una gran cantidad de lecturas o escrituras en el filesystem.

¿Como resolver un llenado de filesystem?

Para resolver un llenado de filesystem en Linux, puedes seguir estos pasos:

  • Identificar el origen del llenado: utiliza alguna de las herramientas de las que hemos visto anteriormente para determinar qué directorios o archivos están consumiendo la mayor cantidad de espacio en el filesystem. Esto te ayudará a identificar las aplicaciones o procesos que están contribuyendo al llenado.
  • Eliminar archivos y directorios innecesarios: Una vez identificados los archivos o directorios que ocupan espacio, puedes eliminar aquellos que sean innecesarios o que ya no se utilicen. Asegúrate de tener una copia de seguridad de los archivos importantes antes de eliminarlos.
  • Limpiar los logs: Revisa y gestiona los logs generados por el sistema operativo y las aplicaciones instaladas. Puedes rotar y comprimir los logs antiguos o ajustar las configuraciones para limitar el crecimiento excesivo de los logs.
  • Optimizar el almacenamiento de aplicaciones: Algunas aplicaciones, como bases de datos o servidores web, pueden generar archivos temporales o datos de caché que ocupan espacio en el filesystem. Asegúrate de revisar y limpiar estos archivos de forma regular.
  • Controlar las descargas y archivos temporales: Verifica si hay descargas o archivos temporales que ocupen espacio innecesario en el filesystem. Puedes limpiar la carpeta de descargas y utilizar comandos como tmpwatch para eliminar archivos temporales antiguos.
  • Considerar la expansión del filesystem: Si el llenado es recurrente o el espacio disponible es insuficiente, puedes considerar expandir el tamaño del filesystem o redistribuir el espacio entre particiones. Esto requerirá conocimientos avanzados y precaución para evitar la pérdida de datos.
  • Automatizar la gestión del filesystem: Puedes configurar tareas automatizadas, como scripts o cron jobs, para realizar limpiezas regulares y mantener el filesystem limpio y optimizado de manera continua.

¿Como puedo eliminar archivos y directorios innecesarios?

Para eliminar archivos y directorios innecesarios en Linux, puedes utilizar el comando rm (remove) para archivos y el comando rmdir (remove directory) para directorios.

Si deseas eliminar archivos o directorios que requieren permisos de administrador, puedes utilizar sudo antes del comando rm o rmdir para ejecutarlos con privilegios de superusuario.

También puedes dejar un archivo completamente vacío haciendo una redirección, como te indico a continuación,

cat /dev/null > nombre_del_archivo

Por otro lado, también puedes comprimir un archivo concreto, y posteriormente vaciarlo, tal y como te indico a continuación,

tar -czvf archivo.tar.gz archivo.log
cat /dev/null > archivo.log

En el caso particular de los logs tienes la opción de realizar o forzar un rotado de logs. El proceso de rotación de logs en Linux puede variar dependiendo del sistema y las aplicaciones que utilices. Sin embargo, a continuación, te proporcionaré algunas técnicas generales para forzar la rotación de logs,

  • Reiniciar el servicio: En algunos casos, reiniciar el servicio asociado con el log puede provocar la rotación de logs. Puedes reiniciar el servicio utilizando el comando systemctl restart nombre_del_servicio si estás utilizando systemd como sistema de inicio, o utilizando el comando adecuado para tu sistema y servicio en particular.
  • Enviar una señal al proceso del servicio: Puedes enviar una señal al proceso del servicio para que vuelva a abrir el archivo de log y comience a escribir en uno nuevo. Esto se puede hacer utilizando el comando kill junto con el identificador del proceso (PID) del servicio. Por ejemplo: kill -SIGUSR1 PID_del_proceso.
  • Utilizar el comando logrotate: El comando logrotate es una herramienta comúnmente utilizada para la rotación de logs en Linux. Puedes ejecutar logrotate manualmente para forzar la rotación de logs utilizando el archivo de configuración asociado con el log en cuestión. Por ejemplo: logrotate -f /etc/logrotate.d/nombre_del_archivo_de_configuracion.

En general yo utilizo la opción de logrotate, puesto que en el archivo de configuración se siguen los pasos necesarios para hacer un rotado de logs de forma correcta, y así evitarme disgustos.

¿Como minimizar el impacto de un llenado de filesystem?

Para minimizar el impacto de un llenado de filesystem en Linux, puedes seguir algunas prácticas recomendadas:

  • Monitorear el espacio disponible: Mantén un monitoreo regular del espacio disponible en el filesystem para identificar cualquier aumento inusual en el uso del espacio antes de que se convierta en un problema grave.
  • Establecer alertas de espacio: Configura alertas o notificaciones para recibir avisos cuando el espacio disponible en el filesystem alcance un umbral crítico. Esto te permitirá tomar medidas preventivas antes de que el llenado se convierta en un problema.
  • Realizar limpiezas regulares: Realiza limpiezas periódicas para eliminar archivos y directorios innecesarios. Puedes utilizar comandos como du y ncdu para identificar los directorios más grandes y eliminar archivos no utilizados o temporales.
  • Gestionar adecuadamente los logs: Configura políticas de rotación de logs para evitar que crezcan indefinidamente. Asegúrate de comprimir y eliminar logs antiguos de manera regular. También puedes considerar enviar los logs a un servidor centralizado o utilizar herramientas de análisis de logs para reducir el impacto en el filesystem local.
  • Ajustar configuraciones de aplicaciones: Algunas aplicaciones tienen configuraciones que permiten limitar el tamaño o la cantidad de logs que generan. Ajusta estas configuraciones para evitar que las aplicaciones llenen el filesystem con registros innecesarios.
  • Utilizar herramientas de compresión: Puedes utilizar herramientas de compresión como gzip o zstd para comprimir archivos grandes y ahorrar espacio en el filesystem. Esto es especialmente útil para archivos que no se modifican con frecuencia.
  • Separar particiones: Considera separar diferentes partes del sistema en particiones distintas. Esto puede ayudar a prevenir que el llenado de un filesystem afecte a otros componentes críticos del sistema.
  • Planificar la capacidad del filesystem: Al diseñar o administrar un sistema, planifica la capacidad del filesystem para asegurarte de que haya suficiente espacio para el crecimiento esperado de los archivos y logs. Esto evitará que el llenado se convierta en un problema recurrente.

¿Que particiones deberíamos hacer?

Las recomendaciones de particiones en Linux pueden variar según tus necesidades y el tipo de sistema que estés configurando. Sin embargo, a continuación te proporciono algunas recomendaciones generales que podrían ser útiles:

  • Partición raíz (/): Es la partición principal y debe contener el sistema operativo y los archivos del sistema. Se recomienda asignar un tamaño suficiente para el sistema operativo y los programas, pero no es necesario que sea demasiado grande. Un tamaño de alrededor de 20-30 GB suele ser adecuado para la mayoría de las instalaciones.
  • Partición /boot (opcional): Si estás utilizando el sistema de arranque tradicional (no UEFI), puedes considerar crear una partición separada para /boot. Esta partición almacena los archivos de arranque y el cargador de arranque. Por lo general, no necesita ser muy grande y 500 MB a 1 GB suele ser suficiente.
  • Partición /home (opcional): Es recomendable crear una partición separada para /home si deseas mantener los archivos personales y configuraciones de los usuarios en una ubicación separada. Esto puede ser útil en caso de reinstalar o actualizar el sistema operativo sin perder los datos personales. El tamaño de la partición /home dependerá del espacio necesario para los archivos personales.
  • Partición de intercambio (swap): La partición de intercambio se utiliza como espacio de intercambio cuando la memoria RAM está llena. Su tamaño depende de la cantidad de RAM instalada y las necesidades específicas de tu sistema. En general, el tamaño de la partición de intercambio puede ser igual o ligeramente mayor que la cantidad de RAM (por ejemplo, si tienes 8 GB de RAM, puedes asignar 8-16 GB para la partición de intercambio). Sin embargo, si tienes mucha RAM (por ejemplo, 16 GB o más), es posible que necesites menos espacio de intercambio o incluso puedes optar por no tener una partición de intercambio y utilizar un archivo de intercambio (swap file) en su lugar.

Estas son solo algunas recomendaciones básicas y pueden variar según tus necesidades y preferencias. También puedes considerar particiones adicionales para /var (archivos de logs y datos variables), /tmp (archivos temporales), /usr (programas y bibliotecas) o cualquier otra partición específica según los requisitos de tu sistema.

Por ejemplo, en el caso de Docker, este utiliza /var/lib/docker para almacenar los archivos de contenedores, imágenes y volúmenes. Así, dependiendo de tu caso particular, a lo mejor es interesante hacer una partición específica para Docker.


1 comentario en “¿Que pasó en mi Linux?¿Como se llenó el disco?

  1. davidochobits hace 7 horas

    Hola,
    Llave, es utilizar el comando «find» con el comando «du», por ejemplo:
    find / -type f -mtime -30 -size +1024k |xargs du -sh
    O bien:
    find -type f -mtime -30 -size +1024k -exec du -sh {} \;
    Así sabes los ficheros creados y/o modificados en los últimos 30 días que ocupan más de 1MB.
    Y si los quieres borrar (Ojo, esto con precaución)
    find -type f -mtime -30 -size +1024k |xargs rm rf
    Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *