domingo, 29 de noviembre de 2015

Liberar espacio en disco duro.

Alguna vez nos ha pasado que nuestro sistema Debian GNU/Linux no entra en la interfaz gráfica KDE o que los servicios de nuestro servidor ha dejado de responder o lo hacen mal. La causa mas normal es que el disco duro se ha quedado sin espacio, y esto hace que no arranque nuestro entorno gráfico o que nuestro servidor deje de servir peticiones de los clientes, con lo que ya la tenemos un serio problema.

Lo que debemos hacer al detectar este problema en nuestro pc de trabajo o en un servidor Debian, es conectarnos por un terminal de texto (TTY) y comprobar como se encuentran la cpu, memoria y disco con los comandos top, df, etc.... 




Si el problema radica en el espacio libre del disco duro, con el comando df, veremos si alguna de las particiones está llena.

Dependiendo de como tengamos realizado el particionado podremos ver diferentes entradas en esta lista, una para cada partición, existente en el disco duro o virtual. El parámetro -h nos permite visualizar los tamaños en formato “humano” más legible, si no se presentaría en kbytes. 



Cuando una partición está llena aparece de esta forma:

S.ficheros    Tamaño    Usado    Disp    Uso%    Montado en
/dev/sda2      39G          39G        0G      100%        /



Como podemos ver no queda espacio disponible en la partición /dev/sda2, está el 100% ocupado. 
Una vez detectado el problema del espacio libre, veremos como liberar espacio en ese disco.

Para saber donde se encuentran los ficheros que ocupan mucho espacio en el disco duro, utilizamos el comando “du”. Este comando muestra lo que ocupan las carpetas y directorios, aceptando parámetros como -sch, :


- El parámetro s para que no muestre los subdirectorios
- El parámetro c para que nos ofrezca el total al final
- El parámetro h para que lo haga en formato humano (mas legible).

Al usar este comando tenemos que especificar la ruta donde se va a trabajar. Si la ruta acaba en asterisco /ruta/*, nos mostrará detalladamente lo que ocupan las carpetas de dentro de dicha ruta, si acaba sin asterisco /ruta o /ruta/ solo mostrará el total de dicha carpeta.

Por tanto para saber que ocupa cada subcarpeta de /var tendremos que usar el siguiente comando:

# du -sch /var/* 




Observamos como nos muestra cada subcarpeta o fichero y su respectivo tamaño.



Esto, si la lista es muy larga puede hacer que nos cueste ver donde están los que más ocupan, un parámetro para que solo nos muestre las carpetas que superen el Gigabyte es usando las tuberías de Debian GNU/Linux, en este caso el comando grep y filtrar por "G" de Gigas. Solo mostrará cuando haya alguna carpeta que contenga la G mayúscula:

# du -sch /var/* |grep "G"



Una vez detectada la carpeta que contienen un tamaño excesivo podemos volver a repetir la operación añadiéndola a la ruta que hemos usado antes:

# du -sch /var/log/* |grep "G" 



Lo que nos mostrará otra lista de carpetas con sus respectivos tamaños. 
Ya tenemos localizado los ficheros que han ocasionado el problema, ahora tenemos que solucionarlo con alguna de estas opciones:

- moverlos a otro disco vacío
- eliminarlos directamente 

En este tutorial vamos a proceder a eliminarlos definitivamente, con el comando rm o usando el programa mc









 

Una vez eliminados volvemos a utilizar el comando df -h para ver el espacio liberado en el disco duro, y acto seguido recomendamos reiniciar todos los servicios afectados, o el sistema entero, usando el comando reboot





NOTA SUPERIMPORTANTE: A veces después de eliminar los ficheros, si estos estaban siendo utilizados de alguna forma por el sistema, es posible que aunque el fichero ya no se muestre, el espacio siga estando ocupado y nuestro servidor seguirá sin funcionar correctamente.

Para determinar cuales son estos ficheros y liberar el espacio podemos utilizar el comando lsof +L1 que nos mostrará los ficheros abiertos pero que ya no están enlazados al sistema, es decir que han sido marcados como borrados pero aun hay alguna aplicación que los está utilizando.


Información de las columnas:

- COMMAND, nos muestra el comando que lo esta usando en ese momento.
- PID, el identificador del dicho comando
- USER, que usuario este usando dicho fichero
- FD, que tipo de archivo (r=lectura, w=escritura, u= lectura y escritura)
- TYPE, para ver el nodo que tiene asignado a cada fichero
- DEVICE, contiene los números de dispositivo, separados por comas, por un carácter especial, bloque especial, regular, directorio o archivo NFS. 
- SIZE, muestra el tamaño de cada fichero
- NLINK, contiene el número de enlaces de archivos cuando se ha especificado + L
- NODE, Contiene El Número de enlaces de Archivos Cuando Se ha Especificado + L;
- NAME,  es la ruta donde esta el fichero

de esta forma podremos determinar que servicio es el que los tiene retenidos.

Si necesitamos urgentemente liberar ese espacio en disco podemos hacerlo de dos maneras:


- Matando el proceso que lo tiene abierto
- Reiniciando el sistema 

====================================================================
RESUMEN RÁPIDO DE COMANDOS:

- df -h  : Para saber el espacio libre del que disponemos en todos los sistemas de ficheros de nuestra máquina ejecutaremos el siguiente comando:

- df -h /home    : Para un directorio concreto:

- df -h | awk '{print $5 " " $6}' | sort -n | tail -5  : Para mostrar los sistemas de ficheros por orden de ocupación y saber así cuales son los que están más llenos.

- du -sch /var/*   : Para ver el tamaño de un directorio

  El parámetro s para que no muestre los subdirectorios
  El parámetro c para que nos ofrezca el total al final
  El parámetro h para que lo haga en formato humano (mas legible).

- du -sch /var/* |grep "G"    : para que solo nos muestre las carpetas y ficheros que superen el Gigabyte


- du -sch /var/log/* |grep "G"    : para que solo nos muestre las carpetas y ficheros que superen el Gigabyte, pero en este caso mas acotado.

- ls -l /var/log | wc -l      : Cuenta el número de ficheros de un directorio

- du -k /var/log | sort -n | tail -10           : Ver los archivos que mas ocupan en el sistema de ficheros. El tamaño de los ficheros se debe mostrar Kilobytes (parámetro -k), o megabytes (parámetro -m)

- ls -lSr | tail -10      : Ver los archivos que mas ocupan en un directorio


=====================================================================

Otros comando que tenemos que usar para liberar mas espacio en el disco duro


Liberar espacio de la cache de apt-get
La cache de apt se encuentra en: /var/cache/apt/archives, aquí se guardan los paquetes necesarios para instalar programas y aplicaciones.Para saber cuánto espacio están ocupando estos archivos, podemos ejecutar el siguiente comando:

du -sh /var/cache/apt/archives

Para recuperar espacio, se utilizan los siguientes comando:


apt-get autoclean : Elimina del cache los paquetes .deb con versiones anteriores de los programas que tenemos instalados. 

apt-get clean : Elimina todos los paquetes del cache. El único inconveniente que podría resultar es que si quieres reinstalar un paquete, tienes que volver a descargarlo. 

apt-get autoremove : Borra los paquetes huérfanos, o las dependencias que quedan instaladas después de haber instalado una aplicación y luego eliminarla, por lo que ya no son necesarias.



Vaciar la papelera de root 
Algo que suele ser muy necesario ya que podemos borrar ficheros como superusuario (root) pero luego éstos no se eliminarán si vaciamos la papelera como usuario normal.
Lo haremos con uno de estos comandos:
 

rm -fR /root/.Trash excluye los directorios
 

find ~/.local/share/Trash -type f -exec rm ‘{}’ \; se encarga de borrar absolutamente todo.