Cómo resolver el problema de que los archivos del sistema Linux se han eliminado pero el espacio no se libera

  

Cuando está operando el sistema Linux, a veces se encontrará con el problema de que los archivos se eliminan pero el espacio no se libera. ¿Cuál es la razón? Cómo resolverlo, la siguiente pequeña serie le presentará la solución de que el archivo se elimina pero el espacio no se libera.

1. Fenómeno de error

El sistema de monitoreo de operación y mantenimiento envió una notificación, informando que un espacio del servidor está lleno, iniciando sesión en el servidor para ver, la partición raíz no tiene espacio, como se muestra a continuación: Br>

Aquí explicamos primero algunas de las estrategias de eliminación del servidor. Como Linux no tiene la función de Papelera de reciclaje, todos los archivos que se eliminarán en nuestro servidor en línea se moverán primero al directorio system /tmp, y luego /tmp se borrarán con regularidad. Los datos bajo el directorio. La estrategia en sí no tiene problemas, pero se encuentra que la partición /tmp no está particionada por separado en la partición del sistema de este servidor, por lo que los datos bajo /tmp realmente ocupan el espacio de la partición raíz. Ahora que ha encontrado el problema, elimine algunos datos grandes en el directorio /tmp. Ejecute el siguiente comando para verificar los tres archivos de datos más grandes en /tmp, como se muestra a continuación:

[root @ localhost ~] # Du -s /tmp /* | Ordenar -nr | Head -3

69206016 /tmp /access_log

36 /tmp /hsperfdata_root

36 /tmp /hsperfdata_mapred

Se encuentra en el directorio /tmp a través del comando de salida Hay un archivo access_log de tamaño 66G. Este archivo debe ser el archivo de registro de acceso generado por apache. Desde el tamaño del registro, debe pasar mucho tiempo sin limpiar el archivo de registro de apache. La decisión básica es que el espacio raíz causado por este archivo está lleno. Después de que se pueda eliminar el archivo, realice la siguiente operación de eliminación:

[root @ localhost ~] # rm /tmp /access_log

Luego verifique si se libera el espacio de partición raíz del sistema, como se muestra a continuación:

Como puede ver en la salida, el espacio de la partición raíz todavía no se libera. ¿Qué está pasando?

2, ideas de solución

En términos generales, no habrá espacio después de que se elimine el archivo, pero hay excepciones, como que el archivo esté bloqueado por el proceso o que haya habido un proceso en este archivo. Escriba datos, etc., para comprender este problema, debe conocer el mecanismo de almacenamiento y la estructura de almacenamiento de los archivos en Linux.

Un archivo se almacena en el sistema de archivos en dos partes: la parte de datos y la parte de puntero. El puntero se encuentra en los metadatos del sistema de archivos. Después de eliminar los datos, el puntero se borra de los metadatos. La parte de datos se almacena en el disco. Una vez que el puntero correspondiente a los datos se borra de los metadatos, el espacio ocupado por la parte de datos del archivo se puede sobrescribir y escribir en el contenido nuevo. El espacio no se elimina después de eliminar el archivo access_log. Lanzado, debido a que el proceso httpd todavía está escribiendo contenido en este archivo, lo que resulta en la eliminación del archivo access_log, pero la parte del puntero del archivo no se borra de los metadatos debido al bloqueo del proceso, y como el puntero no se ha eliminado, Luego, el núcleo del sistema piensa que el archivo no se ha eliminado, por lo que no es sorprendente que el comando df no libere el espacio de consulta.

3, solución de problemas

Ahora que hay una solución al problema, a continuación, para ver si hay un proceso, se han estado escribiendo datos en el archivo acess.log, aquí debe usar Linux lsof, este comando se puede obtener a través de una lista de archivos que han sido borradas pero aún está ocupada por la aplicación, ejecutar el comando como se muestra a continuación:

se puede ver en la salida, /tmp /Acess. El archivo de registro está bloqueado por el proceso httpd y el proceso httpd ha estado escribiendo datos de registro en este archivo. Desde la séptima columna, el tamaño del archivo de registro es solo de 70G, y el tamaño total de la partición raíz del sistema es de solo 100G. Esto demuestra que este archivo está causando El culpable del agotamiento del espacio de la partición raíz del sistema, en la última columna del estado "eliminado", indica que el archivo de registro se ha eliminado, pero debido a que el proceso todavía está escribiendo datos en este archivo, el espacio no se libera.

4, resuelva el problema

El problema está básicamente revisado aquí, hay muchas maneras de resolver este tipo de problema, la forma más sencilla es cerrar o reiniciar el proceso httpd, por supuesto, Reinicie el sistema operativo, pero esta no es la mejor manera de tratar este tipo de proceso para escribir registros en el archivo. Para liberar el espacio en disco ocupado por el archivo, la mejor manera es vaciar el archivo en línea, lo que se puede hacer con el siguiente comando:

[root @ localhost ~] # echo " " ”/tmp/acess.log

Con este método, el espacio en disco se puede liberar inmediatamente y se puede garantizar que el proceso continuará en el archivo. Escribir registros, este método se usa a menudo para limpiar archivos de registro generados por servicios web como Apache, Tomcat y Nginx. Gracias por leer, espero ayudarlo, continúe prestando atención a la casa de guiones, intentaremos compartir más artículos excelentes.

Lo anterior es la introducción de la solución de que el archivo de Linux se elimina pero el espacio no se libera. El archivo se elimina, pero el espacio es realmente molesto y el espacio no se puede utilizar de manera efectiva. Si encuentra un problema así , pruebe el método descrito en este artículo.

Copyright © Conocimiento de Windows All Rights Reserved