eliminando archivos pero el espacio en disco todavía está lleno

26

Al tratar con el antiguo cuadro CentOS 5.6, sin configuración de lvm, mi sistema de archivos raíz / está lleno, he borrado muchos archivos de registro y archivos de aplicaciones antiguos que no necesito, que tenía más de 2 a 5 GB de tamaño, sin embargo, mi sistema Todavía informa que el disco está lleno.

[root@tornms1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             130G  124G     0 100% /
/dev/sdb1             264G  188M  250G   1% /data
/dev/sda1              99M   24M   71M  26% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm



[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

¿Alguna idea de lo que debería intentar hacer a continuación? desafortunadamente reiniciar la caja no es una opción en este momento.

user1007727
fuente
1
Perdón por hacer una pregunta estúpida, pero ¿te aseguraste de que la tuya /.Trash/esté vacía? Has hecho sudo rm -Rf ~/.Trash/*?
Art Gertner
Este es un servidor, no tengo instalado xwindow, por lo tanto, no tengo la carpeta .trash en mi cuenta raíz.
user1007727
Lo malo es que supuse que /.Trash/ existe en todos los sistemas tipo Unix.
Art Gertner
también puede probar el comando sync ( linux.die.net/man/8/sync ) tal vez todas sus operaciones aún estén en caché.
weberik

Respuestas:

38

Dos cosas podrían estar sucediendo aquí.

Primero , su sistema de archivos ha reservado algo de espacio en el que solo rootpuede escribir, para que el proceso crítico del sistema no se caiga cuando los usuarios normales se quedan sin espacio en disco. Es por eso que ves 124G de 130G usados, pero cero disponible. Quizás los archivos que eliminó redujeron la utilización a este punto, pero no por debajo del umbral para los usuarios normales.

Si esta es su situación y está desesperado, puede alterar la cantidad de espacio reservado para root. Para reducirlo al 1% (el valor predeterminado es 5%), su comando sería

# tune2fs -m 1 /dev/sda3

En segundo lugar , el sistema operativo no liberará espacio en disco para los archivos eliminados que aún están abiertos. Si ha eliminado (digamos) uno de los archivos de registro de Apache, deberá reiniciar Apache para liberar espacio.

Flup
fuente
1
sí, el segundo debería ser el primero!
mulya
Esta pregunta y respuesta (s) agregan más información superuser.com/questions/444269/… .
luka5z
18

Si elimina un archivo que está siendo utilizado por un proceso, ya no podrá ver el archivo ls. El proceso todavía está escribiendo en ese archivo hasta que detenga el proceso.

Para ver esos archivos eliminados, simplemente ejecute lsof|grep delete

Tao Zhou
fuente
1
Este fue el problema en mi caso. Gracias, información muy útil.
Dag Sondre Hansen
Respuesta relacionada: unix.stackexchange.com/questions/34140/…
icc97
10

Otras dos formas de obtener el disco es un problema completo :

1) oculto debajo de un punto de montaje: Linux mostrará un disco completo con archivos "ocultos" debajo de un punto de montaje. Si tiene datos escritos en el disco y monta otro sistema de archivos sobre él, Linux observa correctamente el uso del disco a pesar de que no puede ver los archivos debajo del punto de montaje. Si tiene monturas nfs, intente desmontarlas y verifique si algo se escribió accidentalmente en esos directorios antes de la montura.

2) archivos corruptos: veo esto ocasionalmente en la transferencia de archivos de Windows a Linux a través de SMB. Un archivo no puede cerrar el descriptor de archivo y terminas con un archivo de basura de 4GB.

Esto puede ser más tedioso de solucionar, porque necesita encontrar el subdirectorio en el que se encuentra el archivo, pero es fácil de solucionar porque el archivo en sí es fácilmente extraíble. Uso el ducomando y hago una lista de los subdirectorios raíz para averiguar dónde se está utilizando el espacio de archivos.

cd /
du -sh ./* 

El número de directorios de nivel superior generalmente es limitado, así que configuré el indicador legible por humanos-h para ver qué subdirectorio es el cerdo espacial.

Luego, ingresa el problema secundario y repite el proceso para todos los elementos que contiene. Para que sea fácil detectar los elementos grandes, cambiamos ligeramente el du y lo combinamos con una especie.

cd /<suspiciously large dir>
du -s ./* | sort -n

que produce una salida más pequeña a más grande por tamaño de byte para todos los archivos y directorios

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List

Una vez que detecte el archivo de gran tamaño, generalmente puede eliminarlo.

Dan L
fuente
Grandes consejos! Rastreé las carpetas en / usando du y encontré varias imágenes de sistema extremadamente grandes en Android SDK. Los eliminó y todo volvió a la normalidad :)
Pupper
4

Puede averiguar qué archivos están abiertos con lsof. Puede producir una gran cantidad de resultados, por lo que me limité en el ejemplo a continuación a las líneas que terminan con log:

# lsof | grep log$
rsyslogd   2109     syslog    0u     unix 0xffff88022fa230c0      0t0       8894      /dev/log
rsyslogd   2109     syslog    1w      REG              252,6    62393         26 /var/log/syslog
rsyslogd   2109     syslog    2w      REG              252,6   113725        122 /var/log/auth.log
rsyslogd   2109     syslog    3u     unix 0xffff88022fa23740      0t0       8921 /var/spool/postfix/dev/log
rsyslogd   2109     syslog    5w      REG              252,6    65624        106 /var/log/mail.log
/usr/sbin  2129       root    2w      REG              252,6    93602         38 /var/log/munin/munin-node.log
/usr/sbin  2129       root    4w      REG              252,6    93602         38 /var/log/munin/munin-node.log
...
jris198944
fuente
1

Si se eliminan algunos archivos pero aún los utiliza algún proceso, no se liberará su espacio. En este caso, reinicie un proceso que esté utilizando el archivo o anule el archivo. Siempre es una buena práctica anular dichos archivos en lugar de eliminarlos. Para encontrar archivos eliminados pero todavía están en uso por algún proceso

#lsof +L1

le dará la identificación del proceso y el descriptor de archivo. Para anular el archivo eliminado por el descriptor de archivo

#echo "" > /proc/$pid/fd/$fd 
Sagar Jagnade
fuente
1

Escribe el comando

#lsof +L1

Que mostrará la lista de archivos que contienen memoria con cita eliminada.

Tenga en cuenta el pid (Id. De proceso) del archivo

Matar el proceso

#kill <pid>

El proceso liberará la memoria.

Verifíquelo por comando

#df -h
Javeed Shakeel
fuente
0

Además de lo explicado, el problema podría ser que hay otro punto de montaje del directorio de archivos eliminados en otro dispositivo de disco conectado en el mismo servidor. Verifique los montajes actuales y las entradas fstab.

Laith Leo Alobaidy
fuente
0

Problema real observado en la naturaleza:

Asegúrese de eliminar los archivos reales y no los enlaces simbólicos a los archivos. Este puede ser el caso de los archivos de registro especialmente.

icc97
fuente