Reclamando espacio reservado en particiones Ext en Linux

El otro día se me presento un problema simple en muchos ambientes informáticos, falta de espacio en discos (en este caso de servidores). Grave problema, sin embargo no es que se necesitara mucho.

Para verificar el espacio en disco en un equipo con Linux basta con usar el siguiente comando en la terminal:

df -h

Este comando sirve para mostrar cuanto espacio hay disponible en las diferentes particiones que se encuentran montadas.

Al revisar estos datos me di cuenta de que algo no cuadraba. En el porcentaje de disco usado aparecía 100%!! Pero el servidor aun seguía funcionando con normalidad, salvo algunos servicios, los principales se encontraban en buen estado, por lo que me dio curiosidad, sera que existía alguna partición temporal o algo similar que permitiera esto? Pues bien buscando un poco encontré la razón (http://backdrift.org/freeing-disk-space-in-linux.

Al parecer en las particiones de disco ext (ext1, ext2, ext3, ext4) se reserva un porcentaje de disco para el usuario root, este porcentaje es de 5% y no es visible a simple vista, ni siquiera quitando la opción -h a el comando df (esto muestra el espacio disponible en bytes, y no en Gigabytes, Megabytes o nomenclatura sencilla para el “humano”).

Esta funcionalidad de reservar espacio es bastante útil en muchos casos, debido a que si el servidor se encontraba quedándose sin espacio los servicios primordiales (como ssh, u otros) para conectarse y poder solucionar el inconveniente aun seguirán arriba y funcionando, dado que se ejecutan como usuario root.

Sin embargo actualmente tenemos capacidades inmensas de almacenamiento y los procesos que comentaba no requieren tampoco Gigabytes de espacio para funcionar, por lo que 5% de espacio en discos de 10 GB puede que no sea mucho, pero en unidades de 2 Teras o mas, puede ser una cantidad bastante grande y que esta siendo desaprovechada en nuestros sistemas. Por lo cual como en Linux (y en casi todo el software libre) todo lo podemos modificar, podemos elegir el porcentaje mas adecuado para nuestros sistemas.

En la captura anterior se puede ver que / esta montado en el dispositivo /dev/sda2, y que este tiene 8.1 Gigabytes libres, ejecutando solo df obtenemos los siguientes datos:

darkhole@devolo:~$ df
S.ficheros     1K-bloques     Usado Disponible Uso% Montado en
/dev/sda2        14947420   5799384    8398060  41% /
udev              1999596         4    1999592   1% /dev
tmpfs              802748       972     801776   1% /run
none                 5120         0       5120   0% /run/lock
none              2006860       188    2006672   1% /run/shm
/dev/sda5       225038232 219050860    3734296  99% /home
/dev/sda3        62914556  53979008    8935548  86% /windows
darkhole@devolo:~$

Lo que nos nos muestra 8398060 bytes disponibles. Para ver que cantidad de bytes tenemos reservada al usuario root podemos usar el comando tune2fs de la siguiente manera:

darkhole@devolo:~$ sudo tune2fs -l /dev/sda2
[sudo] password for darkhole:
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          15538882-88ce-4446-9f9e-14e132155dcc
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              938400
Block count:              3749888
Reserved block count:     187494
Free blocks:              2287126
Free inodes:              670455
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      915
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8160
Inode blocks per group:   510
RAID stride:              1
RAID stripe width:        1
Flex block group size:    16
Filesystem created:       Sun Oct  2 08:09:59 2011
Last mount time:          Sun Mar 25 19:28:07 2012
Last write time:          Sun Mar 25 23:06:16 2012
Mount count:              17
Maximum mount count:      20
Last checked:             Sat Mar 17 11:15:19 2012
Check interval:           15552000 (6 months)
Next check after:         Thu Sep 13 11:15:19 2012
Lifetime writes:          181 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       509
Default directory hash:   half_md4
Directory Hash Seed:      c746e6e0-cc7d-481c-9e0f-fd024886127e
Journal backup:           inode blocks
darkhole@devolo:~$

Aquí podemos ver que tenemos reservados (Reserved block count) 187494 bytes para el usuario root (lo que hace un promedio de 5 %, el valor predeterminado). Aunque esta partición no sea muy grande, mi equipo no es un servidor y no tiene servicios críticos, por lo cual no deseo que ese 5% este reservado para root, por lo cual puedo cambiarlo con el comando tune2fs y definir un porcentaje deseado, en este caso 1%:

darkhole@devolo:~$ sudo tune2fs -m 1 /dev/sda2
tune2fs 1.42 (29-Nov-2011)
Setting reserved blocks percentage to 1% (37498 blocks)
darkhole@devolo:~$

Con esto ya tenemos mas espacio que podemos corroborar usando de nuevo el comando df:

darkhole@devolo:~$ df -h
S.ficheros     Tamaño Usado  Disp Uso% Montado en
/dev/sda2         15G  5,6G  8,6G  40% /
udev             2,0G  4,0K  2,0G   1% /dev
tmpfs            784M  972K  783M   1% /run
none             5,0M     0  5,0M   0% /run/lock
none             2,0G  188K  2,0G   1% /run/shm
/dev/sda5        215G  209G  3,6G  99% /home
/dev/sda3         60G   52G  8,6G  86% /windows
darkhole@devolo:~$

Puede que no sea mucho el tamaño que logramos, pero en unidades de Teras de almacenamiento pueden ser Gigabytes valiosos los que no estamos usando, o en mi caso mi partición /home también es bastante grande como para poder obtener ese 4% que me es muy útil (aunque se nota ya estoy corto de espacio!).