A medida que las aplicaciones y los servicios se ejecutan continuamente en una instancia Linux, los registros, la caché y los datos del negocio se acumulan con el tiempo y consumen gradualmente el espacio de almacenamiento disponible. Cuando el disco se llena, no es posible escribir nuevos datos, lo que provoca directamente interrupciones en el servicio o comportamientos anómalos.
Síntomas
Al crear archivos o ejecutar aplicaciones en una instancia Linux, aparece el mensaje de error No space left on device, lo cual indica que los recursos de almacenamiento están agotados.
Diagnóstico y soluciones
Antes de realizar cambios, create a manual snapshot para respaldar sus datos y evitar pérdidas accidentales que puedan afectar su negocio.
Escenario 1: Espacio en disco agotado
-
Compruebe el uso del disco.
Ejecute
sudo df -hpara consultar el uso del disco en cada punto de montaje. Si el valor deUse%es del 100%, el espacio correspondiente está lleno. -
Localice y limpie los archivos o directorios grandes que consumen espacio en disco.
Desde el directorio raíz, ejecute
sudo du -sh /*para investigar nivel por nivel y acotar rápidamente el alcance hasta encontrar el directorio que más espacio consume.-
Según la salida obtenida, localice el directorio con mayor uso y repita el comando
sudo du -sh <directory name>/*sobre ese directorio para profundizar nivel por nivel e identificar los archivos grandes.Por ejemplo, ejecute
sudo du -sh /mnt/*para consultar el espacio consumido por los archivos y subdirectorios dentro del directorio/mnt.A continuación se listan los objetos comunes que pueden limpiarse. Elimine los archivos innecesarios según sus requisitos reales de negocio.
Tipo
Ubicación común
Descripción y recomendación
Archivos de registro
/var/log
Registros de aplicaciones y del sistema. Puede limpiar los registros históricos archivados. Para los registros de systemd, utilice
sudo journalctl --vacuum-size=200Mpara limitar el tamaño en lugar de usar directamentermpara eliminar registros que aún se están escribiendo.Archivos temporales
/tmp, /var/tmp
Datos temporales. Límpielos tras confirmar que ningún proceso los está utilizando.
Caché de aplicaciones o registros de negocio
Directorios de negocio personalizados
Requiere evaluación según su negocio. Antes de limpiar, asegúrese de confirmar que los datos no son críticos para evitar eliminaciones accidentales.
Si el espacio sigue siendo insuficiente después de la limpieza, scale out your disk.
Escenario 2: Recursos de inodos agotados
Cada archivo consume un inodo. Si su disco contiene muchos archivos pequeños, los inodos pueden agotarse incluso cuando aún queda espacio en disco disponible, lo que impide la creación de nuevos archivos.
-
Compruebe el uso de inodos.
Ejecute
sudo df -i. Si el valor deIUse%alcanza el 100%, los recursos de inodos están agotados. -
Limpie los archivos o carpetas innecesarios.
Utilice
sudo du -sh --inodes <folder name>/*para consultar la cantidad de inodos utilizados por los archivos y subcarpetas en un directorio especificado. Si es necesario, navegue hacia el interior del directorio y use este comando de forma recursiva para localizar las áreas con alto uso de inodos.Por ejemplo, utilice
sudo du -sh --inodes /mnt/*para comprobar la cantidad de inodos utilizados por los archivos y subdirectorios en el directorio/mnt. Si el recuento de inodos sigue siendo insuficiente después de la limpieza, scale out your disk.
Escenario 3: Los archivos eliminados siguen ocupando espacio
Incluso después de eliminar un archivo, el sistema no libera su espacio en disco si un proceso todavía lo está utilizando (es decir, mantiene un identificador de archivo abierto). El espacio solo se libera cuando el proceso finaliza o cierra explícitamente el archivo.
-
Instale la herramienta
lsof.Los archivos que han sido eliminados pero aún retienen espacio no pueden verse con
dfni condu. Utilice la herramientalsofpara listarlos.Alibaba Cloud Linux, CentOS
sudo yum install -y lsofDebian, Ubuntu
sudo apt install -y lsof -
Consulte el espacio de almacenamiento retenido por los archivos eliminados.
sudo lsof | grep delete | sort -k7 -rn | moreLa séptima columna en la salida muestra el tamaño del archivo en bytes. Sume estos valores para calcular el espacio total no liberado.
tail 619544 root 3r REG 253,1 50000000 136507 /home/test_file (deleted) aliyun-se 347980 root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347997 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347996 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347995 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347994 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347983 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347982 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347981 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) -
Registre el nombre del proceso y el PID.
Ejecute
sudo lsof | grep deletey anote los camposCOMMANDyPIDpara identificar el nombre del proceso y su ID. -
Reinicie o detenga el servicio correspondiente.
Ejecute
sudo ps -ef | grep <PID>para confirmar el propósito del proceso. Tras evaluar el impacto, reinicie o detenga el servicio.ImportanteReiniciar o detener un servicio puede afectar su negocio. Evalúelo cuidadosamente y realice esta acción durante una ventana de mantenimiento adecuada.
Escenario 4: Punto de montaje superpuesto
Cuando se utiliza un directorio no vacío como punto de montaje para otro dispositivo, su contenido existente queda oculto. Sin embargo, los procesos que ya tienen abierto el directorio aún pueden escribir en el espacio subyacente. Este consumo de espacio "oculto" no puede observarse con el comando df y puede agotar inesperadamente el espacio en disco.
-
Consulte la información sobre carpetas duplicadas.
Ejecute
sudo lsblky revise la columna MOUNTPOINT en busca de nombres de directorio repetidos.sudo lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk ├─vda1 253:1 0 2M 0 part ├─vda2 253:2 0 200M 0 part /boot/efi └─vda3 253:3 0 39.8G 0 part / vdb 253:16 0 40G 0 disk └─vdb1 253:17 0 40G 0 part /mnt vdc 253:32 0 40G 0 disk └─vdc1 253:33 0 40G 0 part /mntEn este ejemplo, tanto la partición
vdb1como lavdc1están montadas en/mnt, lo que indica un riesgo de superposición de puntos de montaje. -
Desmonte el sistema de archivos.
ImportanteDesmontar un sistema de archivos puede interrumpir los servicios que dependen de esa ruta. Evalúe el riesgo y elija un momento adecuado para realizar esta operación.
Puede obtener el
<duplicate mount directory>de the previous step.sudo umount <duplicate mount directory>En este ejemplo,
/mntes el directorio de montaje duplicado. Al ejecutarsudo umount /mntse desmonta el dispositivo montado más recientemente,vdc1. -
Identifique el nombre del dispositivo del punto de montaje superpuesto.
Ejecute
sudo df -hpara localizar el nombre del dispositivo asociado con el punto de montaje activo actualmente.sudo df -hFilesystem Size Used Avail Use% Mounted on devtmpfs 3.7G 0 3.7G 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 3.7G 524K 3.7G 1% /run tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup /dev/vda3 40G 4.5G 33G 12% / /dev/vda2 200M 5.8M 194M 3% /boot/efi /dev/vdb1 40G 40G 0 100% /mnt tmpfs 747M 0 747M 0% /run/user/0En este ejemplo, la partición montada actualmente en
/mntesvdb1. Por lo tanto, el nombre del dispositivo del punto de montaje superpuesto esvdb1. -
Resuelva el problema de espacio en disco lleno.
-
Limpie los archivos o carpetas innecesarios en el espacio superpuesto.
En este ejemplo, limpie el directorio
/mntmontado porvdb1. -
Si el espacio sigue siendo insuficiente después de la limpieza, scale out your disk y móntelo en un directorio vacío diferente.
En este ejemplo, el dispositivo objetivo a escalar es
vdb1.
-
No monte múltiples dispositivos en el mismo directorio.
Montar varios dispositivos en el mismo directorio oculta el espacio del primer dispositivo montado y puede provocar que los datos se escriban en el dispositivo incorrecto. Monte siempre dispositivos diferentes en directorios vacíos separados.
Escenario 5: Los archivos relacionados con Docker consumen mucho espacio
Docker genera muchas imágenes intermedias, contenedores detenidos y cachés de compilación durante su funcionamiento. Con el tiempo, estos elementos se acumulan y consumen espacio en disco.
-
Compruebe el uso de espacio en disco de Docker.
Ejecute
sudo df -h. Si el valor deUse%para unFilesystemde tipooverlayalcanza el 100%, el almacenamiento de Docker está lleno. -
Evalúe el uso de recursos de Docker.
Ejecute
sudo docker system dfy examine los camposSizeyRECLAIMABLEpara comprender el consumo de espacio.sudo docker system dfTYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 21 9 13.94GB 10.66GB(76%) Containers 9 5 30.09MB 0B(0%) Local volumes 6 6 259.9MB 0B(0%) Build Cache 0 0 0B 0BEn el ejemplo, las imágenes de
Dockerocupan 13.94 GB, de los cuales 10.66 GB son recuperables; se recomienda priorizar la limpieza de las imágenes no utilizadas. -
Limpie los archivos innecesarios.
Si no es posible limpiar los archivos de Docker, siga los pasos indicados en Scenario 1: Disk space is exhausted .
Elimine todos los contenedores detenidos: ejecute
sudo docker container prune.Elimine todas las imágenes colgantes (imágenes sin etiqueta): ejecute
sudo docker image prune.Elimine la caché de compilación no utilizada: ejecute
sudo docker builder prune.
Escenario 6: Límite de inotify watches alcanzado
Al ejecutar comandos como sudo tail -f, podría aparecer el error tail: cannot watch '...': No space left on device. Esto no significa que el espacio en disco esté lleno, sino que el sistema ha alcanzado el número máximo de inotify watches utilizados para monitorear cambios en archivos y directorios. Debe aumentar este límite.
-
Compruebe el límite actual de inotify watches.
Ejecute
sudo cat /proc/sys/fs/inotify/max_user_watchespara consultar el límite actual deinotify watches. -
Aumente el límite de inotify watches.
Elevar este límite incrementa el uso de memoria. Evalúelo cuidadosamente antes de realizar el cambio. El
<new limit>generalmente no debe exceder 524288.sudo sh -c "echo fs.inotify.max_user_watches=<new limit> >> /etc/sysctl.conf" -
Cargue la nueva configuración.
Ejecute
sudo sysctl --systempara aplicar la configuración actualizada. -
Verifique el resultado.
Ejecute nuevamente
sudo cat /proc/sys/fs/inotify/max_user_watchespara confirmar que el límite deinotify watchesse haya actualizado correctamente.
Referencias
Para almacenar grandes cantidades de archivos estáticos como imágenes, videos o archivadores, utilice Object Storage Service (OSS).
Para compartir archivos con alto rendimiento y alta concurrencia, almacene los archivos mediante File Storage NAS.
Para la recopilación y análisis de registros a gran escala, almacene los registros en Simple Log Service (SLS) para simplificar las consultas y reducir el uso de almacenamiento local.