Espacio libre/usado en disco

Al trabajar con cualquier tipo de sistema (sobre todo cuando lo hacemos en máquinas virtuales, contenedores docker o similares) tenemos un espacio de disco limitado, y es muy frecuente que nos quedemos sin espacio libre después de instalar varios paquetes o generar ficheros grandes como contenido multimedia o logs y registros de gran tamaño.

Por lo tanto, sería interesante conocer algunos comandos para conocer cuanto espacio de disco estamos usando, cuanto espacio libre tenemos y que paquetes, carpetas o ficheros son los que más ocupan, facilitándonos la tarea de saber por donde atacar y eliminar datos para hacer espacio libre.

Espacio en disco libre (df)

El comando df (disk free) nos informa del espacio libre en cada partición del disco. Así pues, la salida del comando df en un sistema Linux sobre WSL, mostraría algo similar a lo siguiente (entre otras entradas):

$ df -h

Filesystem       Size   Used Avail Use% Mounted on
/dev/sdc         251G    19G  220G   8% /
tmpfs            3,9G      0  3,9G   0% /wsl
/dev/sdb         251G    12G  227G   5% /wsl/docker-desktop-data/isocache
none             3,9G    12K  3,9G   1% /wsl/docker-desktop/shared-sockets/host-services
/dev/sda         251G   117M  239G   1% /wsl/docker-desktop/docker-desktop-proxy
/dev/loop0       246M   246M     0 100% /wsl/docker-desktop/cli-tools
tools            111G   106G  5,3G  96% /init
none             3,9G      0  3,9G   0% /dev
tmpfs            3,9G      0  3,9G   0% /sys/fs/cgroup
C:\              111G   106G  5,3G  96% /c

Obsérvese que en la columna Size se nos muestra el tamaño total de cada partición de disco, mientras que en la siguiente se nos muestra el tamaño del espacio ocupado y en la siguiente el tamaño del espacio libre. A modo de resumen, la siguiente columna nos muestra el porcentaje de espacio utilizado. Esto nos da una idea del espacio en disco que nos queda en cada partición.

Nota: Obviamente, debemos conocer un poco el sistema que estamos utilizando para saber que particiones son las que nos interesan. Generalmente, los dispositivos que comienzan por /dev/sd son los discos físicos del sistema, como por ejemplo, en este caso serían sda, sdb y sdc. Un cuarto disco conectado se etiquetaría como sdd.

Los parámetros más interesantes del comando df podrían ser los siguientes:

Opción Significado
-h Formato humano. Añade la letra de la unidad (K = Kibibytes, M = Mebibytes, ...). 1KiB= 1024 bytes.
-H, --si Formato humano. Añade la letra de la unidad (K = Kilobytes, M = Megabytes, ...). 1kB= 1000 bytes.
-T Muestra el tipo de sistema de ficheros de la partición de disco.

Espacio en disco usado (du)

Sin embargo, podemos querer rizar el rizo y hacer justo la operación opuesta. En lugar de ver el espacio libre en disco, querer ver el espacio ocupado en disco de una forma un poco más minuciosa. Esta aproximación nos permite que podamos ver el tamaño ocupado por carpetas del sistema y tener una idea más aproximada de donde estamos invirtiendo más espacio en disco.

Para ello, utilizaremos el comando du (disk usage), que recorrerá el disco a partir de la ruta que le indiquemos (o de la carpeta actual si no se indica ruta), mostrándonos el tamaño que ocupa cada carpeta encontrada.

$ du -h --max-depth 1

4.0K    ./home
4.0K    ./srv
1.4M    ./etc
4.0K    ./opt
32K     ./root
12M     ./lib
4.0K    ./mnt
196M    ./usr
4.0K    ./media
4.0K    ./lib64
0       ./sys
0       ./dev
5.2M    ./sbin
4.0K    ./boot
6.5M    ./bin
8.0K    ./run
0       ./proc
4.0K    ./tmp
26M     ./var
246M    .

En este ejemplo, nos hemos colocado en la ruta raíz de todo el sistema / y hemos utilizado el parámetro --max-depth establecido a 1, para que sólo mire un nivel de profundidad de carpetas, y no siga mirando subcarpetas, ya que en caso de no establecerlo, lo haría de forma recursiva, entrando en cada subcarpeta sucesivamente.

Al final, nos muestra el tamaño total ocupado, es decir, la suma de todas las carpetas anteriores.

Nota: Esto es una buena forma de analizar el espacio usado en disco por carpetas, y donde es más probable que tengamos más oportunidades para liberar espacio en disco.

Algunos parámetros interesantes del comando du son los siguientes:

Opción Significado
-a Muestra también ficheros, no sólo carpetas.
-h Formato humano. Añade la letra de la unidad. 1KiB= 1024 bytes.
-H, --si Formato humano. Añade la letra de la unidad. 1kB= 1000 bytes.
-b, -k, -m Muestra el tamaño en -b bytes, -k kilobytes o -m megabytes, sin letra.
--max-depth [n] Sólo avanza el nivel n de profundidad en subcarpetas.

Alternativa a du (ncdu)

Existe una versión mejorada del comando du llamada ncdu (nCurses du). Se trata de una versión que añade ciertos detalles y muestra la información en paneles de texto de forma un poco más agradable y visuales, permitiendo moverse de forma interactiva por las carpetas y realizando ciertas tareas:

ncdu: disk usage (du) mejorado

La primera columna nos muestra el tamaño total que ocupa dicha carpeta (y todas sus subcarpetas), la columna que le sigue a continuación refleja el porcentaje sobre el resto de carpetas. Existe otra columna numérica que nos indica el número de ítems (ficheros y carpetas) que incluye dicha carpeta.

Opción Significado
--color [tema] Muestra la interfaz con un tema concreto. Opciones posibles: off y dark.
-o [fichero] En lugar de mostrar por pantalla, guarda los resultados en un fichero JSON.
-f [fichero] Carga los datos del fichero JSON indicado (guardado por el método anterior).
--si Usa potencias de 1000 (KB, MB...) en lugar de potencias de 1024 (KiB, MiB...).

Recuerda que puedes manejar la interfaz interactiva de ncdu con los siguientes atajos rápidos, moviéndonos entre las carpetas y accediendo a ellas:

Atajo Acción
k / Retroceder al fichero o carpeta anterior.
j / Avanzar al fichero o carpeta siguiente.
ENTER Acceder a la carpeta seleccionada y ver su contenido.
i Información sobre la carpeta o fichero
n Ordena por nombre (orden alfabético).
s Ordena por tamaño ocupado de la carpeta.
C Ordena por número de items que contiene.
d Borrar carpeta o fichero.
g Mostrar porcentaje en disco
c Mostrar la cantidad de archivos y carpetas que contiene

Alternativa a du (dutree)

Otra alternativa que nos puede resultar interesantes es dutree. Está desarrollada en Rust, y puede instalarse con cargo install dutree. Tiene un enfoque más básico y menos interactivo que ncdu pero puede resultar más interesante o flexible en algunos casos.

dutree: alternative to du

Por ejemplo, en la imagen anterior le pedimos a dutree que nos muestre solo las carpetas del primer nivel de profundidad con --depth=1, mientras que le decimos que descarte y agrupe todas las carpetas que ocupen menos de 20 MiB con --aggr=20M.

Otros parámetros interesantes podrían ser --no-hidden que excluye los ficheros ocultos (los que empiezan por .) o --files-only que excluye las carpetas y se centra en ficheros, por si lo que queremos es analizar el contenido de la carpeta actual y no centrarnos en subcarpetas.

Otro comando muy similar es du-dust (dust), el cuál también está desarrollado en Rust.

Manz
Publicado por Manz

Docente, divulgador informático y freelance. Autor de Emezeta.com, es profesor en la Universidad de La Laguna y dirige el curso de Programación web FullStack y Diseño web FrontEnd de EOI en Tenerife (Canarias). En sus ratos libres, busca GIF de gatos en Internet.