¿Cómo se encuentran los archivos que ocupan el 80% del espacio en un servidor web Linux?


15

La unidad se está llenando constantemente. Has buscado todos los archivos de repuesto y aleatorios que puedas. grep'd para archivos coredump e incluso eliminó algunas de las copias de seguridad innecesarias ...

¿Cuál sería tu próximo movimiento?

El servidor real en cuestión tiene 10 GB de archivos de sitio web y el sistema operativo no debería ocupar más de 10 GB, entonces, ¿cómo rastrear lo que está llenando un disco de 50 GB (virtual)?


Respuestas:



23

Seguramente hay formas más elaboradas, pero la que recuerdo es

du --max-depth = 1 -h /

Ahora tome el directorio que usa más espacio (du --max-depth=1 -h /yourdir)y profundice hasta encontrar a su culpable.
Si desea que su salida esté ordenada por tamaño y no le interese el formato legible por humanos, también puede hacerlodu --max-depth=1 /your_dir | sort -n


Si. Hago casi lo mismo "du -S | sort -n -r | less". Realmente me encantaría ver un programa que se pareciera a htop y cron me gustaría mlocate, pero cuando lo ejecuté le proporcionó información precisa y contemporánea sobre los archivos en su sistema.
Gareth el

1
En lugar de comenzar desde / en el servidor web, intente comenzar desde http_root. Si no hay éxito allí, entonces uno puede ir por '/'. El directorio que se ejecuta en '/' tomará mucho tiempo.
Saurabh Barjatiya

4

Yo uso el programa Gnome baobab. Puede ejecutar esto en su escritorio y puede conectarse a través de SSH al servidor. Muestra un mapa gráfico fácil de leer sobre el uso del espacio en disco. Se instala en Gnome como "Analizador de uso de disco"



2

df -k muestra qué fs son el problema. Luego cd al directorio de nivel superior para ello y ejecute du -xk | ordenar -n | tail -25 esto mostrará los 25 principales directorios, ordenados, para sun 9 o anterior, reemplace la x con una d.


Sí, similar a lo que acabo de mencionar en la respuesta de @Marie Fischer. ¿Por qué usar -k (tamaño de bloque) aunque en lugar de -h para humanos?
Gareth el

-k se usa para que todos los tamaños se informen en kb. Esto es útil para sort. Sort sort pondría 10kb antes de 20mb mientras ordena.
Saurabh Barjatiya

1

Tenga en cuenta que los archivos se pueden eliminar mientras todavía se están escribiendo, por lo que utilizan el espacio en disco mientras se ejecuta su proceso de creación, pero no tienen un nombre de archivo.

Esto lo hace imposible de encontrar con las herramientas habituales: puede usar lsof para investigar qué procesos tienen archivos abiertos.


Yo uso /usr/sbin/lsof | grep deletedpara conseguir esto.
Kevin M

0

Si puede ejecutar software en el sistema, entonces xdiskusage le mostrará gráficamente qué directorios / archivos están consumiendo su espacio. Extremadamente útil.

Creo que KDE contiene algo similar.

Si es solo de texto y no puede instalar software adicional, entonces el uso creativo de duprobablemente lo llevará allí también.


0
  1. cd al directorio de inicio de los servidores web (directorio de inicio de apache)
  2. ejecuta el comando "du -a | head -30 | sort -nr"
  3. le dará los 30 archivos / directorios más grandes que consumen discos
  4. puedes encontrarlos y eliminarlos (si no son útiles)

Esto no va a funcionar a menos que cambie el orden de heady sort. También debe hacer uso de las funciones de formato.
kasperd

0

Puede usar los siguientes comandos para encontrar qué archivos o carpetas ocupan demasiado espacio.

Por ejemplo, para mostrar los 20 directorios principales más grandes de la carpeta actual, use el siguiente one-liner:

du -ah . | sort -rh | head -20

o:

du -a . | sort -rn | head -20

Para los 20 archivos más grandes del directorio actual (recursivamente):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

o con tamaños legibles por humanos:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

El segundo comando para trabajar en OSX / BSD correctamente (como sortno tiene -h), debe instalar sortdesde coreutils. Luego agregue la carpeta bin a su PATH.

Puede definir estos comandos como alias (por ejemplo, agregar a sus archivos rc como .bash_profile):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

Luego, ejecute bigo big-filesdentro de las carpetas que cree que tienen lugar (por ejemplo, en /home).


0

Aquí hay algo que improvisé para rastrear algunos procesos corruptos en nuestros servidores de bases de datos: rabbitfinder

#!/bin/sh
tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp

Es un poco grosero y no muy robusto, pero funciona así:

  1. generar una lista de árbol recursiva del directorio actual
  2. espera 5 segundos
  3. generar otra lista
  4. compara las dos salidas
  5. fusionar los archivos que han cambiado de tamaño y
  6. ps -lFp mostrará los archivos de qué proceso los posee

    user@poseidon:~$ tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp
    ./tmp/output:       
    F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
    0 R 1000     14310 14275 23  80   0 -  1072 -        748   1 22:19 pts/2    00:00:06 dd if /dev/zero of ./output bs 1024 count 10000000
    
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.