El espacio en disco no se libera inmediatamente después de que el servidor elimina el archivo.

El espacio en disco no se libera inmediatamente después de que el servidor elimina el archivo.

Escenario empresarial: se descubre que un servidor no tiene suficiente espacio en disco y necesita ser procesado. Después de iniciar sesión, se descubre que el uso del disco ha alcanzado el 100%. Después de eliminar algunos archivos e información de registro, el espacio aún permanece sin cambios.

1. Descripción del fenómeno

Sistema operativo: CentOS 6.8 x64

Usando el comando df -h, vi que el espacio en disco en el directorio / raíz estaba lleno (100%), así que limpié manualmente los archivos de registro grandes.

\1. [root@local ~]# df -h

\2. Filesystem          Size Used Avail Use% Mounted on

\3. /dev/mapper/rootvg-LogVol00  59G  59G   0 100% /

\4. /dev/sda1           190M  13M 168M  8% /boot

\5. tmpfs             2.0G   0 2.0G  0% /dev/shm

Utilice el comando du -sh para buscar un archivo de registro que ocupe mucho espacio, así que utilice rm -rf para eliminarlo.

\1. [root@local ~]# cd /var/nginx/logs/

\2. [root@local ~]# rm -rf t-access.log t-error.log

Luego verifique el uso del espacio en disco y descubra que el espacio de / (directorio raíz) no ha cambiado.

\1. [root@local ~]# df -h

\2. Filesystem          Size Used Avail Use% Mounted on

\3. /dev/mapper/rootvg-LogVol00  59G  56G   0 100% /

\4. /dev/sda1           190M  13M 168M  8% /boot

\5. tmpfs             2.0G   0 2.0G  0% /dev/shm

¿Qué está sucediendo?

2. Análisis de causa

Razones por las que no se libera espacio en disco:

En un sistema Linux o Unix, eliminar un archivo a través de rm o un administrador de archivos desvinculará la estructura de carpetas del sistema de archivos. Sin embargo, suponiendo que el archivo esté abierto (está siendo utilizado por un proceso), el proceso aún podrá leerse y el espacio en disco todavía está ocupado. Lo que eliminé fue el archivo de registro de acceso de nginx, que se estaba utilizando en el momento de la eliminación.

3. Solución

Primero obtenga una lista de archivos que se han eliminado pero que aún están ocupados por la aplicación. He aquí cómo hacerlo:

\1. [root@local ~]# lsof |grep deleted

\2. nginx    4399   root  38w   REG        253,0  19304448  10835682 /var/nginx/logs/t-access.log (deleted)

\3. nginx    4399   root  39w   REG        253,0  3502080  10835684 /var/nginx/logs/t-error.log (deleted)

\4. nginx    4401  nobody  38w   REG        253,0  19304448  10835682 /var/nginx/logs/t-access.log (deleted)

\5. nginx    4401  nobody  39w   REG        253,0  3502080  10835684 /var/nginx/logs/t-error.log (deleted)

\6. nginx    4402  nobody  38w   REG        253,0  19304448  10835682 /var/nginx/logs/t-access.log (deleted)

\7. nginx    4402  nobody  39w   REG        253,0  3502080  10835684 /var/nginx/logs/t-error.log (deleted)

\8. nginx    4403  nobody  38w   REG        253,0  19304448  10835682 /var/nginx/logs/t-access.log (deleted)

\9. nginx    4403  nobody  39w   REG        253,0  3502080  10835684 /var/nginx/logs/t-error.log (deleted)

\10. nginx    4404  nobody  38w   REG        253,0  19304448  10835682 /var/nginx/logs/t-access.log (deleted)

\11. nginx    4404  nobody  39w   REG        253,0  3502080  10835684 /var/nginx/logs/t-error.log (deleted)

En los resultados de salida, podemos ver que /var/nginx/logs/t-access.log y t-error.log todavía están en uso, por lo que no se libera espacio.

Entonces, ¿cómo liberar el proceso?

Método 1: elimine el proceso correspondiente directamente o detenga la aplicación que utiliza este archivo y deje que el sistema operativo recupere activamente espacio en el disco.

Dado que hay otros proyectos que utilizan la aplicación (servicio nginx), el servicio nginx no se puede detener, así que use el comando kill para eliminar el proceso correspondiente.

\1. [root@local ~]# kill -9 4399

\2. [root@local ~]# kill -9 4401

\3. [root@local ~]# kill -9 4402

\4. [root@local ~]# kill -9 4403

\5. [root@local ~]# kill -9 4404

Nuevamente, verifique el uso del espacio en disco y descubra que el espacio ha sido recuperado.

\1. [root@local ~]# df -h

\2. Filesystem          Size Used Avail Use% Mounted on

\3. /dev/mapper/rootvg-LogVol00  59G  56G   0 95% /

\4. /dev/sda1           190M  13M 168M  8% /boot

\5. tmpfs             2.0G   0 2.0G  0% /dev/shm

Método 2: cuando limpie archivos de registro grandes que se leerán y escribirán en el futuro, utilice directamente el comando echo "" > xxx.log, lo que significa vaciar directamente el archivo. No afecta el uso del servicio. El archivo También se controla el tamaño y se reduce el espacio en disco.

おすすめ

転載: blog.csdn.net/itScholar001/article/details/131003852