"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: