diego sevilla’s weblog
it is better to remain silent and be thought a fool,
than to open your mouth and remove all doubt -- groucho marx

21/3/2009

Ext4

Filed under: General, español, free software/software libre — Diego Sevilla @ 1:54 — In English

El nuevo núcleo 2.6.28 que trae el Ubuntu Jaunty (disponible también en versiones nightly) permite montar sistemas de ficheros ext4 con la ventaja de los conocidos “extents”. Esta característica mejora la gestión de nodos-i del sistema de ficheros, intentando, por un lado, agrupar al máximo los bloques de un fichero en bloques consecutivos (lo cual también mejora el desempeño del disco), y, por otro, reducir el tamaño de los nodos-i y descriptores de bloques de ficheros usando una sintaxis del estilo: empieza en el bloque X y posee Y bloques consecutivos (parecido a la codificación de matrices sparse, que al fin y al cabo son lo que son los ficheros…), lo que ofrece una especificación mucho más compacta de los metadatos del fichero.

Aunque hay algunos tutoriales de cómo hacer el cambio de ext3 a ext4, siempre da algún tipo de quebradero de cabeza. Contaré más o menos cómo lo he hecho y qué problemas he tenido, para hacer más fácil la conversión.

Normalmente la conversión funciona sin problemas. Ext4 es compatible con ext3 en casi todos los aspectos, salvo en el “extents”, precisamente. Así que una vez establecida esta capacidad, el sistema ya no se puede leer normalmente como ext2 ó ext3. Otra característica de la implementación tal y como está ahora es que el “paso” a extents no se hace automáticamente para todos los ficheros, sino que sólo sucede cuando se crea un nuevo fichero. En siguientes versiones del núcleo se dispondrá de un demonio que irá pasando paulatinamente todos los ficheros al formato extents en segundo plano.

Teniendo un núcleo 2.6.28 bien configurado, se puede pasar a convertir a ext4. Para ello, según dictan los tutoriales, hay que, una vez desmontado el sistema de ficheros (o montado como sólo lectura), ejecutar lo siguiente:

tune2fs -O extents,uninit_bg,dir_index dispositivo/partición

Las otras opciones ayudan a que fsck sea más rápido en su ejecución y a que los directorios estén indexados con árboles B. A continuación hay que ejecutar fsck obligatoriamente para adaptar el sistema de ficheros:

fsck -pf dispositivo/partición

(la opción -p arregla todos los inconvenientes encontrados, es decir, realiza la actualización). Muestra algunas indicaciones de que reconstruye ciertos índices internos. Estos mensajes son normales.

Después, es importante, antes de reiniciar, tener en cuenta modificar el fichero /etc/fstab para indicar el tipo de los ficheros.

El gestor de arranque también es importante. Tanto grub (versión >= 0.97) como grub2 aceptan ext4 con extents. Ahora bien, al menos en grub, es importante tener actualizadas las diferentes etapas de arranque. En mi caso, por ejemplo, he tenido problemas porque las distintas etapas correspondían a una versión de grub que no soportaba extents, y el sistema no arrancaba. Así, como root hay que instalar (por si acaso) la última versión de grub en el sector de arranque (o el MBR, dependiendo de la instalación) del disco de arranque:

/usr/sbin/grub-install dispositivo

(en mi caso, el dispositivo era /dev/sdb, aunque normalmente suele ser /dev/sda en una instalación normal).

El resultado, después del arranque, en mi caso:

$ mount
/dev/sdb4 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/sdb3 on /home type ext4 (rw,relatime)

Como se ha dicho, el paso a extents no es automático, y se debe hacer copiando los ficheros (no moviéndolos), o con rsync o tar entre directorios, entre otros mecanismos de sobra conocidos. Para comprobar el estado de algún fichero, se puede hacer lo siguiente:

$ sudo filefrag yo.jpg
yo.jpg: 28 extents found, perfection would be 1 extent

Conforme el sistema se llena, es más difícil alcanzar la perfección… pero se puede uno acercar :) . Por ejemplo:

$ mv yo.jpg 0yo.jpg
$ cp 0yo.jpg yo.jpg
$ rm 0yo.jpg
$ sudo filefrag yo.jpg
yo.jpg: 1 extent found

En este caso ha habido suerte.

¿El resultado? Al menos en mi caso, y de forma subjetiva, el sistema va mucho más suelto en los accesos a disco, incluso sin pasar muchos ficheros a extents. Ext4 lleva mejoras internas de la implementación que hacen más rápido el acceso, y los extents también mejorarán, porque todos los ficheros creados a partir de ese momento utilizan ese mecanismo.

5 Comments »

  1. DS, deberías utilizar otros sistemas de ficheros más eficientes y mejores como DualFS. El maestro y yo lo vamos a recomendar en lanxarxa.

    Comment by Aprendiz de titiritero — 21/3/2009 @ 15:06

  2. No sé si el tono es de guasa o de realidad. Sin embargo, te diré que DualFS es muy interesante (de mi amigo y compañero Juan Piernas), pero que actualmente no tiene versión para núcleos 2.6, en lo cual están trabajando.

    Comment by Diego Sevilla — 23/3/2009 @ 17:15

  3. No lo decía en tono de guasa, DualFS también me parece un sistema de ficheros interesante pues separa los datos y los metadatos en dos particiones diferentes consiguiendo mejores resultados que los sistemas de ficheros convencionales, incluso cuando las particiones son del mismo disco.
    Seguro que pronto podremos disfrutar de una versión de DUALFS para el kernel 2.6.
    :-)

    Comment by Aprendiz de titiritero — 23/3/2009 @ 18:18

  4. XFS también puede separar los datos y metadatos en distintas particiones

    Comment by Anonymous — 3/4/2009 @ 18:50

  5. Perdona mi desconocimiento, pero, ¿cómo puede XFS separar datos y metadatos en distintas particiones?

    Comment by Anonymous — 21/4/2009 @ 9:01

RSS feed for comments on this post. TrackBack URI

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


Anti-Spam by WP-Morph 

Creative Commons License
This work is licensed under a Creative Commons License.
EWWV  AWStats  Site Meter 24 queries. 0.061 seconds. Powered by WordPress
406022 email messages processed in this box. 10858 were spam

0