"Creando" espacio a partir de la nada

Antes: ¡Mierda! ¡Se me ha llenado el disco y no puedo borrar nada!
Ahora: Vaya, me he quedado sin espacio, voy a crear un poco de la nada.

¿Quieres saber como? Pues sigue leyendo.

El problema

Si haces un df -h en una consola verás algo así.

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda8             113G   98G  9,4G  89% /home.ant

No hace falta ser un experto en matemáticas para darse cuenta de que el espacio ocupado (98G) mas el disponible (9.4G) es menor que el espacio total del disco (113G) ya que la suma es de 107.4G. ¿Donde se han ido los otros 5.6G restantes?

Están reservados para el usuario root.

El problema del Sistema Operativo

Imagínate que realmente se pudiera llenar el disco. Al llenarse el sistema operativo no podría escribir los archivos temporales que necesita para funcionar. No podría arrancar ni parar servicios. No podría hacer nada. Si apagaras la máquina nunca más podrías volver a arrancarla salvo que arrancaras con una unidad de almacenamiento externa y borraras datos.

La solución al problema del Sistema Operativo

Cuando se formatea una partición se reserva una cantidad de espacio en el disco que solo root puede llenar. Ese espacio son los 5.6G fantasmas.

Busca la cadena "reservados para el superusuario" aquí:

beleg:~# mkfs.ext3 /tmp/file
mke2fs 1.41.3 (12-Oct-2008)
/tmp/file no es un dispositivo especial de bloques.
¿Continuar de todas formas? (s,n) s
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=1024 (bitácora=0)
Tamaño del fragmento=1024 (bitácora=0)
128 nodos-i, 1024 bloques
51 bloques (4.98%) reservados para el superusuario
Primer bloque de datos=1
Número máximo de bloques del sistema de ficheros=1048576
1 bloque de grupo
8192 bloques por grupo, 8192 fragmentos por grupo
128 nodos-i por grupo

Escribiendo las tablas de nodos-i: hecho                           

El sistema de ficheros es demasiado pequeño para un fichero de transacciones
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de ficheros se revisará automáticamente cada 34 montajes o
180 días, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.
beleg:~#

¿A que no te habías fijado nunca? Yo tampoco. :-D

Recuperando espacio de disco

5.6G es algo extremadamente exagerado. Con 100Mb va que chuta y mete gol.

Usaremos tune2fs para modificar este parámetro.
Antes:

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda8             113G   98G  9,4G  89% /home.ant

Se cambia con tune2fs -r 25600 /dev/sda8:

jmferrerm@path:~$ sudo tune2fs -r 25600 /dev/sda8
tune2fs 1.41.11 (14-Mar-2010)
Setting reserved blocks count to 25600
jmferrerm@path:~$

Quedando finalmente:

jmferrerm@path:~$ df -h | grep sda8
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda8             113G   98G   15G  87% /home.ant
jmferrerm@path:~$

Con lo que hemos ganado 5.5G.

Reservar por porcentaje

También puedes reservar por porcentaje usando el parámetro -m:

jmferrerm@path:~$ sudo tune2fs -m 1 /dev/sda8
tune2fs 1.41.11 (14-Mar-2010)
Setting reserved blocks percentage to 1% (296820 blocks)
jmferrerm@path:~$

Los bloques suelen ser de 4096 así que si quieres reservar 100MB (100*1024*1024) necesitarás reservar 25600 bloques.

El problema de los discos grandes

Por omisión se reserva un 5% de los bloques (man mkfs.ext3 y busca la opción -m). En un disco de 50G solo son 500MB pero en un disco de 1TB son 50GB y eso empieza a ser demasiado reservar. ¿no?

A lo mejor puede que quizá sea una mala idea por parte de los desarrolladores reservar por porcentaje en vez de por bloques a partir de un cierto tamaño de disco.

Moraleja

Lo primero que deberías hacer cuando te llegue un disco es pasarle un

tune2fs -r 25600

para ganarle unos cuantos GB.

Yo por mi parte según me vaya quedando sin espacio en los servidores les iré bajando el espacio reservado.

El álbum de hoy

Un poco de buena música de piano para amenizar la tarde:

Comentarios

-m 0

Uff... Esto era fundamental hace años, cuando el espacio era un bien escaso. Yo le ponía siempre -m 0, incluso a la partición raíz (salvo que fuera un servidor, claro... :D)