Recientemente, en mi caja de servidor Linux, una de las particiones del disco estaba llena y tuvo que eliminar cientos de MB de archivos grandes para liberar espacio. Después de despejar el espacio, la partición aún se mostraba llena y no había espacio libre para guardar mis archivos. Más tarde, para mi sorpresa, noté la disparidad a continuación:
¡El comando de uso del disco (du) mostró el espacio utilizado como solo 11G!
-bash-3.2# du -chs /myhome/ 11G /myhome/ 11G total -bash-3.2#
El comando anterior no incluye archivos y directorios de puntos ocultos. Use el siguiente comando para encontrar el uso del disco mediante archivos y directorios de puntos ocultos también.
-bash-3.2#du -sch .[!.]* /myhome/*
Si aún desea enumerar los archivos exactos y sus rutas absolutas, use el siguiente comando:
-bash-3.2# du -h -x /myhome/*
¡Pero el comando df mostró que la partición del disco /myhome/ estaba llena!
-bash-3.2$ df -h Filesystem Size Used Avail Use% Mounted on /dev/cciss/c0d0p8 20G 14G 4.7G 75% / /dev/cciss/c0d0p9 9.7G 1.3G 8.0G 14% /tmp /dev/cciss/c0d0p3 30G 4.3G 24G 16% /usr /dev/cciss/c0d0p10 44G 41G 0G 100% /myhome /dev/cciss/c0d0p6 30G 27G 670M 98% /var /dev/cciss/c0d0p5 30G 20G 8.0G 72% /opt /dev/cciss/c0d0p2 78G 21G 54G 28% /export /dev/cciss/c0d0p1 4.9G 173M 4.5G 4% /boot tmpfs 7.9G 0 7 .9G 0% /dev/shm tmpfs 491M 61M 431M 13% /var/lib/ganglia/rrds
Ahora el desafío es averiguar dónde está el espacio restante. ¿Está escondido en alguna parte?
Utilice el comando LSOF para encontrar los archivos abiertos
Es posible que haya eliminado algunos de los archivos, pero el proceso aún se habría mantenido abierto. Hasta que cierre esos archivos, el espacio no se liberará. Debajo del comando "lsof" le indicará qué archivos eliminados aún se mantienen abiertos.
-bash-3.2# /usr/sbin/lsof | grep deleted |grep /myhome java 10249 ramya 1u REG 104,10 45866276291 4645619 /myhome/var/container.log (deleted) java 10249 ramya 2u REG 104,10 45866276291 4645619 /myhome/var/container.log (deleted)
Ahora tendrías alguna pista, ¿no es así? Sí, el archivo /myhome/var/container.log que se eliminó todavía está abierto por la identificación del proceso:10249. Ahora vaya al directorio de identificación del proceso correspondiente en /proc como se muestra a continuación:
-bash-3.2# cd /proc/10249/fd/
Enumere los archivos para ver el enlace del controlador de archivos al archivo eliminado.
-bash-3.2# ls -lrt | grep /myhome/ lrwx------ 1 ramya ramya 64 Feb 13 14:04 2 -> /myhome/var/container.log (deleted) lrwx------ 1 ramya ramya 64 Feb 13 14:04 1 -> /myhome/var/container.log (deleted)
Ahora borre el controlador de archivos correspondiente para liberar espacio usando el siguiente comando:
-bash-3.2# cat /dev/null > /proc/10249/fd/1 -bash-3.2# cat /dev/null > /proc/10249/fd/2
Tenga en cuenta que el inodo aún estaría abierto, pero ahora tiene una longitud de 0.
-bash-3.2# /usr/sbin/lsof | grep deleted |grep /myhome java 10249 ramya 1u REG 104,10 0 4645619 /myhome/var/container.log (deleted) java 10249 ramya 2u REG 104,10 0 4645619 /myhome/var/container.log (deleted)
Ahora revisa la partición del disco para tener una sonrisa en tu rostro.
-bash-3.2# df -h |grep /myhome /dev/cciss/c0d0p10 44G 12G 30G 28% /myhome