Sistemas de ficheros Journaling

Texto íntegro de Carlos Morales, 26 Octubre del 2003
Resumen
-

Desde la década de los 90 hasta ahora los discos duros han aumentado su capacidad y han reducido su coste. Desde entonces se han creado muchos sistemas de ficheros para satisfacer las nuevas características de los discos duros. Han aparecido para Linux sistemas de ficheros llamados 'journaling' entre los que se encuentra ext3, JFS, ReiserFS y XFS entre otros. La pregunta lógica es: ¿cúal debemos utilizar? ¿Cúal es mejor? En este artículo introduce estos sistemas de ficheros, explica como instalarlos y testea mediante pruebas de comparación (en inglés benchmarking: misma prueba varios sistemas) cúal es el mejor.

Vuestros comentarios son importantes:

Introducción
-

El sistema de ficheros es la forma que tiene el sistema operativo de manejar los ficheros. En el caso de Linux, existe una interfaz llamada Virtual File System (VFS) que hace de puente entre las llamadas a disco del sistema operativo y el sistema de ficheros. El sistema de ficheros es quien especifica cómo se guarda la información en el disco duro, quien implementa las funciones de búsqueda, acceso, creación y eliminación de ficheros a disco. Cada sistema de ficheros tiene una estructura específica para guardar los ficheros, igual que tiene una forma específica de indexarlos (listas simples, árboles, árboles balanceados, ...). Dependiendo de esta implementación cada sistema de ficheros será más o menos rápido efectuando las operaciones necesarias. Algunos manejan mejor los grandes ficheros, otros borran más rápidamente que el resto, etc...

Nuevas necesidades
-

Tras aparecer discos duros tan grandes existen varias necesidades, estas hacen que sea necesario crear nuevos sistemas de ficheros. Entre estas necesidades se encuentra el tamaño máximo de las particiones y de los ficheros, cómo tratar el espacio de disco no usado, mejorar velocidad de acceso, etc...

Tamaño máximo de ficheros y particiones
Como anécdota aún recuerdo el primer PC (8086) de IBM que me compró mi padre cuando era un niño: tenía un disco duro de sólo 20MB, aunque físicamente era muy grande y lo mejor era que guardaba información incluso despues de haberlo apagado, no como el Spectrum. Los antiguos sistemas de ficheros (FAT16) estaban pensados para ese tipo de discos duros, pero desde la década de los 80 hasta ahora los discos duros han aumentado su capacidad y han reducido su coste. Ya no sirven los sistemas que como máximo pueden manejar particiones de 2GigaBytes y discos duros con un máximo de 8GigaBytes del obsoleto FAT16. Otro ejemplo es ext2 que como máximo podía manejar ficheros de 2GigaBytes y particiones de 2TeraBytes, para la mayoría de aplicaciones domésticas es suficiente, pero para grandes corporaciones es insuficiente.

Mejorar la velocidad
Existen dos necesidades relacionadas con la velocidad a la que se accede a los ficheros. La primera está relacionada con la distancia física entre los ficheros y el número de ficheros y la segunda necesidad viene dada a la diferencia de velocidad entre el disco duro y los nuevos procesadores.

1. El número de ficheros aumenta en relacion al tamaño del disco duro, esto implica que la indexación de los ficheros debe mejorarse y debe ser lo más rápida posible. Por eso los programadores de sistemas de ficheros utilizan técnicas de acceso similares a las que usan los gestores de bases de datos, como por ejemplo el uso de Árboles B+ para indexar.

2. Los procesadores han ido aumentando rápidamente su velocidad, en cambio los discos duros casi no han aumentado la suya en proporción a la del procesador. Por este motivo se usa la cache del microprocesador central (CPU) y la memoria RAM para acceder a disco de manera más rápida. Pero esta solución conlleva otro problema, la información que se guarda en la cache o en la RAM es volátil, esto implica que si se apaga el ordenador sin antes haber sincronizado la información de disco con la de la cache esta información se pierde, creando inconsistencias en el disco duro.

Por estos motivos la comunidad de Internet al igual que importantes compañías han creado sistemas de ficheros que pudiesen manejar las nuevas necesidades.
Jorunaling y sus soluciones
-

Los nuevos sistemas de journaling solucionan las necesidades que derivan del incremento masivo del tamaño del disco duro. Entre estas soluciones las más importantes a destacar son:

Consistencia de la información
Esta es la mejora más visible por eso el nombre de 'journaling' (que viene a decirnos más o menos que la información está actualizada). El acceso a disco es muy costoso en relación al tiempo que necesita el microprocesador para hacer otras operaciones, es tal el coste que cuando hay una operación de escritura o lectura a disco el proceso se para y cede el uso de la CPU a otro proceso para volver a activarse cuando la operación de disco haya concluido. Por eso se usa la cache, esta simula que la escritura o lectura se hace a disco aunque en realidad se haga a la cache (que tiene mucha menos latencia de acceso), todo ello manejado por el sistema operativo pero sin que el programa lo sepa. Como resultado se mejora el rendimiento del sistema. Pero ¿qué pasa cuando el sistema se apaga inesperadamente? Pues que la información que se encontraba en la cache se pierde. Y por eso antes cuando se apagaba el ordenador inesperadamente, al reiniciarse era necesario hacer un chequeo con la herramienta fsck (file system check) para el sistema de ficheros ext2, y así llevarlo a un estado de consistencia.

Con los nuevos sistemas de journaling, el sistema de ficheros usa una idea que proviene de las bases de datos: las transacciones. El objetivo de estas es tener los ficheros consistentes, pero si en algún momento no lo están asegurar que pueda retrocederse a un estado consistente. Existe un sistema de log que guarda las operaciones que se realizan a disco, de manera que si hay un fallo del sistema en medio de una operación se puede retroceder mediante este sistema hasta llegar a un estado que no sea corrupto.

A modo de ejemplo, al borrar un fichero hay que marcar los nodos de ese fichero como libres entre otras operaciones, el sistema de journaling guardará en el fichero de log qué operaciones va a hacer y dónde las va a hacer, lo que se llama información de meta-data (no guarda datos, sino que guarda qué operaciones hace). Cuando se termina la operación de borrado al disco (o tras sincronizar la información de disco con la de memoria), en el fichero log se marca que el estado actual del sistema es consistente y continua guardando otras operaciones. En caso de que en medio de la operación de borrado (información de disco está corrupta) y exista un fallo de sistema, el sistema de ficheros se dará cuenta de ello al reiniciarse y retrocederá por el fichero de log deshaciendo las operaciones necesarias hasta encontrar que el sistema es consistente.


Tamaño
Los ficheros se guardan en el disco en bloques de 512Bytes o 1024Bytes, que es el tamaño de la estructura que se pasa a las funciones del kernel (read_dev_sector(), etc...). Este tamaño y los bits que se usen para direccionar los bloques indican el tamaño máximo del sistema de ficheros. Para un sistema de 32bits de direccionamiento, con unsigned int (que puedan usarse los 32bits) y bloques de 512bytes tenemos que el tamaño máximo es el siguiente:
	2^32 bloques * 512 bytes/bloque = 2,199.023,255.552 bytes = 2TeraBytes
	

Por eso las dos maneras de aumentar el tamaño total del sistema de ficheros: aumentar el tamaño de los bloques y/o aumentar el número de direccionamiento. El tamaño máximo de un bloque actualmente puede llegar a ser de 64KBytes (en XFS) y el direccionamiento es de 64bytes en la mayoria de nuevos sistemas de ficheros. Bajo esta configuración tenemos que el tamaño máximo viene dado de la siguiente manera:

	2^64 bloques * 64 Kbytes/bloque = 1.180,591.620,717.411,303.424 Kbytes =
	= 1180 PetaBytes = Muchos Bytes
	

Y eso no es el máximo, en XFS el tamaño máximo teórico de una partición es de 18,000 PetaBytes = 18 x 10^8 Bytes y límite para los ficheros esta en 9,000 PetaBytes. (Más que suficiente).

Pero todavía no se puede usar este tamaño de particiones (kernels 2.4), debido a que el tamaño máximo viene dado por el kernel de linux, específicamente por el Virtual File System (VFS). El bloque máximo en una máquina ia32 (32bits) es de 4KBytes. Por eso en los kernels de 2.4 actuales es necesario parchear el kernel para conseguir Bloques de mayor tamaño. Aunque a partir de los kernels 2.5.29 y por consiguiente los kernels 2.6 ya no existe esta restricción por haber incluido el patch.


Velocidad
Los modernos sistemas de ficheros usan técnicas de bases de datos para reducir el tiempo de acceso a los ficheros. Estos usan sofisticadas técnicas de indexación usando tecnologia de Árboles B+. Estos árboles contienen información de los directorios, de la estructura de los ficheros, y allá donde pueda usarse con el fin de aumentar la velocidad de acceso, especialmente cuando se trata de grandes ficheros o de sistemas con muchos ficheros. Antes se usaban esquemas de direccionamiento distribuidos en varios niveles, lo que requeria múltiples lecturas para encontrar la información deseada.

Además existen sistemas, como por ejemplo el de XFS que optimiza el lugar donde se encuentran los ficheros, intentando situar cerca los ficheros de un mismo directorio. De la misma manera que intenta situar cerca los bloques de un mismo fichero, de manera que los cabezales del disco duro recorran menos distancias cuando se recorra la información.

fdisk
-

Antes de empezar a crear ningún sistema de fichero necesitamos una partición. Podremos usar una que ya exista, lo que significa que los datos que allí haya serán eliminados, o bien crear una nueva si disponemos de espacio extra en el disco. Si lo que queremos es hacer lo segundo debemos disponer de una partición de disco que esté vacia o almenos parte de disco que no se esté usando, para particionar un disco usaremos la herramienta fdisk. Y aquí hay que tener mucho cuidado! Antes de hacer nada hay que crear copias de seguridad. Para más información sobre esta herramienta seguir el HOWTO en inglés de cómo particionar un disco.

Para los ejemplos se utiliza /dev/hda8 aunque para evitar que alguien caiga en la tentación de hacer un copiar y pegar en la mayoria de ejemplos está como /dev/hdaXX. También se ha creado un directorio llamado /mnt/testfs, como puede verse solo para hacer tests, pero para producción se recomienda usar otro nombre de directorio más significativo.

ext3
-

Ext3 se hizo para dar soporte a ext2, y la única mejora que se hace es la de añadir un sistema de journaling. Admite bloques entre 1024Bytes y 4096Bytes, si nuestro sistema tiene muchos ficheros pequeños es recomendable usar la primera configuración. Disponible en la serie de kernels 2.4, es actualmente el sistema de ficheros de facto para la mayoria de distribuciones. Es el único sistema de ficheros de los que aquí se compara que al hacer journaling hace log de los datos y no sólo del metadata, por lo tanto las transacciones también incluyen datos, lo hace que sea más lento pero un poco más seguro para según que condiciones. La principal ventaja de ext3 es que se puede pasar de un sistema con ext2 a ext3 sin tener que desmontar el sistema, y por lo tanto trabajando con el propio sistema de ficheros sin tener que eliminar ni modificar ningun fichero. El comando para hacerlo es:

	#/sbin/tune2fs -j /dev/hdaXX
	
Tras ello habría que modificar el fichero /etc/fstab de manera que la siguiente manera que se reinicie el sistema este cargue automáticamente el sistema ext3.
	/dev/hda1       /               ext2    errors=remount-ro       0       1
	
Modificar allá donde exista un 'ext2' y poner 'ext3'. Para pasar a ser:
	/dev/hda1       /               ext3    errors=remount-ro       0       1
	

Así de sencillo es pasar de un sistema de ext2 a ext3. En el caso de tener una partición vacia y querer usar el sistema de ficheros ext3 es nececesario formatearla con la siguiente orden:

	# mke2fs -j /dev/hdaXX
	

Nótese la opción '-j' que indica que el sistema es journaling.
Atención! después de formatear la partición toda la información en dicho dispositivo se pierde.

XFS
-

XFS lo ha producido también una compañia, en este caso una de las mejores compañias de computación, especializada en render de imágenes. Ahora hablar de XFS es hablar de SGI (la antigua Silicon Graphics). Es el sistema de ficheros que corría en las máquinas IRIX, pero que SGI liberó el código con licencia GNU GPL (General Public License). Y no solo eso, sino que existe mucha documentación propia de SGI, donde especifica todos los estudios realizados a este sistema de ficheros. El tamaño máximo de los bloques para XFS, son los mayores de entre todos los sistemas comparados, de 64KiloBytes

Está a partir de los kernels 2.5.36, y por consiguiente en los futuros 2.6. Pero en los kernels 2.4 al ser demasiado intrusivo no lo han añadido dentro del kernel, pero eso no significa que no pueda usarse con los kernels 2.4 simplemente es necesario parchearlo. Para parchearlo es necesario bajarse el kernel de Linux y el parche de xfs que sea consecuente a la versión del kernel. Todo ello se debe hacer en el directorio /usr/src para mantener la uniformidad, aunque puede hacerse en otros directorios. A día de hoy el último kernel disponible es el 2.4.22, así lo muestra los ejemplos:

	$ cd /usr/src
	$ su
	# wget http://kernel.org/pub/linux/kernel/v2.4/linux-2.4.22.tar.bz2
	# bunzip2 linux-2.4.22.tar.bz2
	# tar xvfz linux-2.4.22.tar
		......
	# wget ftp://oss.sgi.com/projects/xfs/patches/2.4.22/xfs-2.4.22-all-i386.bz2
	# bunzip2 xfs-2.4.22-all-i386.bz2
	# cat xfs-2.4.22-all-i386 | patch -p1 
	
Estos pasos pueden variar mucho debido a la versión del kernel y debido a los patches disponibles de XFS. Lo mejor es pasarse por kernel.org y por el servidor FTP de SGI para ver las últimas versiones del parche disponible.

Tras estas operaciones debemos empezar a compilar el kernel de Linux y añadir la opción del sistema de ficheros XFS.

	# cd linux-2.4.22
	# make menuconfig
		File systems  ---> 
			 < M > XFS filesystem support
				[*]   ACL support
				[*]   Quota support
				[ ]   DMAPI support
	# make dep
	# make bzImage
	# make modules
	# make modules_install
	# cp /usr/src/linux-2.4.22/arch/i386/boot/bzImage     /boot/bzImage-2.4.22-26Oct-xfs
	
Como puede verse se ha añadido soporte para las ACL's de disco, permite asignar permisos a los ficheros de una forma más compleja que usando las típicas herramientas de chmod, chown y chgrp. También se ha añadido soporte para crear quotas a los usuarios, y así controlar el espacio máximo de disco que éstos usan. Y no se ha añadido el soporte a DMAPI que es una interfaz para usar "Data Storage Management (XDSM)".

En este caso se edita el fichero /etc/lilo.conf para añadir la nueva versión del kernel. El siguiente texto es un buen ejemplo:

	image=/boot/bzImage-2.4.22-26Oct-xfs
	        label=Linux2.4.22
	        read-only
	
Advertencia! Tras modificar /etc/lilo.conf es obligatorio ejecutar /sbin/lilo.
	# /sbin/lilo
		Added Linux2.4.22 *
		Added Linux2.2.20
		Added OLDLinux ...
	
Ahora debemos reiniciar la máquina y usar el nuevo kernel que acabamos de compilar. Tras ello hay que instalar las heramientas necesarias para poder formatear(mkfs.xfs), hacer copia de seguridad (xfsdump), igual que para restaurarla (xfsrestore), administrar (xfs_admin) y otras operaciones sobre una partición con XFS. Estas herramientas están agrupadas en el paquete xfsprogs que habrá que bajarse del servidor FTP de SGI. O bien si disponemos de una distribución Debian como es mi caso podremos hacer lo siguiente:
	# apt-get install xfsprogs
		Reading Package Lists... Done
		Building Dependency Tree... Done
		...
	
Y ahora ya podremos crear una partición con el sistema de ficheros XFS.
	# mkfs -t xfs -f /dev/hdaXX
		meta-data=/dev/hdaXX    isize=256    agcount=8, agsize=46688 blks
		data     =              bsize=4096   blocks=373503, imaxpct=25
		         =              sunit=0      swidth=0 blks, unwritten=0
		naming   =version 2     bsize=4096
		log      =internal log  bsize=4096   blocks=1200
		realtime =none          extsz=65536  blocks=0, rtextents=0

	
En este ejemplo ya existía un sistema de ficheros en la partición hdaXX, por eso ha sido necesario usar el flag -f (force). Aunque disponemos de otras opciones para modificar el sistema de ficheros:

Con la opción -b size= se puede modificar el tamaño de los bloques (desde 512 hasta 4096 Bytes) aunque en Linux actualmente solo se soporta bloques con el mismo tamaño que el utilizado para las páginas, debido al motivo antes explicado.

Otra opción interesante es -d agcount= con esta opción podemos cambiar el número por defecto de los grupos localizadores (alocation groups), estos se encargan de asignar y localizar bloques e inodos. Cuanto mayor sea el número de agcount, mayor es el paralelismo localizando e indexando bloques. Pero cuantos más haya mayor serán los recursos del sistema asignados a ello, así pues para equipos medianos con el valor por defecto es suficiente para servidores de disco donde las particiones son mayores debemos aumentar el número de agcount.

Otras opciones disponibles modifican los inodos y los ficheros de log para hacer realizar las transacciones. Mediante estas modificaciones podremos mejorar el rendimiento de la máquina. Y esto es especialmente interesante para servidores de ficheros. Si este es el caso es recomendable buscar más información en la propia documentación suministrada por SGI.

Tras haber creado la partición con el sistema de ficheros XFS debemos montarlo de la siguiente manera:

	# mount -t xfs /dev/hdaXX /mnt/testfs
	
Si todo ha ido correctamente deberíamos añadir una línea al fichero de /etc/fstab para que la próxima vez arranque el ordenador con este sistema de ficheros cargado:
	/dev/hdaXX       /mnt/testfs   xfs    defaults   0       2
	
Esto debería ser suficiente. Tras esto reiniciar la máquina y mirar con la herramienta mount si está cargado correctamente.
JFS
-

Hablar de JFS (Journaled File System) es hablar de IBM. Y es que allá en el 2000 IBM liberó el código del sistema de ficheros que tenía hasta entonces el sistema operativo de IBM OS/2 Warp, portándolo a Linux y asignándole una licencia GNU (General Public License). Todos los datos de direccionamiento son de 64bits y el tamaño de los bloques está situado entre los 512Bytes y 4096Bytes.

Los directorios de hasta 8 entradas (excluyendo los directorios . y ..) usa un direccionamiento propio del i-nodo del directorio, para directorios mayores crea un Árbol B+ para mejorar el tiempo de búsqueda. Tiene también una política para situar los bloques de forma más compacta posible para ficheros cercanos, lo que hace que mejore su velocidad.

Incluido a partir de los kernels 2.4.20-pre4 y 2.5.6-pre2, así que cualquier kernel posterior a estos debe incluirlo. Si se desea instalar este sistema solo debemos seleccionarlo en la compilación del kernel. Aquí puede verse como se ha instalado JFS en módulo:

	# make menuconfig
	 
	 File systems  --->
		< M > JFS filesystem support
			[ ]   JFS debugging
			[*]   JFS statistics 
	
JFS Statistics lo he seleccionado, de esta manera tendremos estadísticas y reports en el directorio /proc/fs/jfs/.

Tras compilar el kernel y arrancar con él, debemos instalar las utilidades de jfs para poder formatear una partición con este sistema de ficheros. Para ello se puede bajar el programa de la web oficial de JFS y allá bajarse las jfsutils. O bien si tenemos un Debian usar la orden siguiente:

	# apt-get install jfsutils
	
Tras ello ya está preparado el sistema para formatear la partición y montarla para poder así ser usada. Para hacer estas operaciones necesitamos una partición del disco duro, en el ejemplo /dev/hdaXX, sustituirla por lo que sea necesario.
	# mkfs -t jfs /dev/hdaXX
		mkfs.jfs version 1.0.14, 28-Jan-2002
		Warning!  All data on device /dev/hdaXX will be lost!

		Continue? (Y/N) Y
   		-

		Format completed successfully.
	
	# mount -t jfs /dev/hdaXX /mnt/testfs/
	

Atención! después de formatear la partición toda la información en dicho dispositivo se pierde.

Tras realizar estos pasos se debería crear una línea en /etc/fstab para que la siguiente vez que se reinicie el sistema se monte automáticamente esta partición. Para comprobar si se está ustando esta partición utilizar el comando mount, como puede verse en el ejemplo que se ha instalado en la partición hda8:

	$ mount -l
		/dev/hda1 on / type ext3 (rw,errors=remount-ro)
		...
		/dev/hda8 on /mnt/testfs type jfs (rw)
	
ReiserFS
-

Otro sistema de ficheros journaling, este está creado por Hans Reiser y desarrollado conjuntamente con su grupo de desarrolladores de Namesys. En general es un sistema rápido, pero es especialmente eficiente trabajando con ficheros pequeños y directorios con muchos ficheros. También usa Árboles B+ para la búsqueda de ficheros, lo que lo hace un sistema de ficheros muy rápido.

El tamaño del bloque depende del sistema que estemos usando, el tamaño será el mismo que el de una página. Por ejemplo en un Intel x86 con GNU/Linux el tamaño de los bloques es de 4096Bytes. Según ellos y como dicen en su web de Namesys la razón para usar este tamaño es porque es más fácil y más limpio para programar y no porque hayan hecho comparaciones para ver cúal es mejor. "There is no measured empirical reason to think this size is better than others, it is just the one that Gnu/Linux makes easiest and cleanest to program into the code, and we have been too busy to experiment with other sizes."

Sea esta una razón suficiente o no, los tamaños de los ficheros son suficientemente grandes. Aunque para la versión 3.5 del ResierFS el tamaño máximo de un fichero es de 4GigaBytes, para la versión 3.6 el tamaño máximo de un fichero es de 1 ExaBytes (recordemos que 1 ExaByte es 10^18 Bytes, 1 PetaByte es 10^15 Bytes, 1 TeraByte es 10^12 Bytes y 1 Giga es 10^9 Bytes), aunque es un tamaño teórico porque está limitado por la cache a 17.6 TeraBytes.

Disponible a partir del kernel 2.4.1-pre4 para hacer que funcione es relativamente parecido al anterior ejemplo.

	# make menuconfig
	 
	 File systems  --->	
		< M > Reiserfs support
			[ ]   Enable reiserfs debug mode
			[*]   Stats in /proc/fs/reiserfs 
	
E igual que con JFS se ha optado por la opción de módulo cargable (LKM), en el ejemplo < M > de Module. Y también igual que antes es necesario instalar a parte unas utilidades para poder formatear el sistema, entre otras utilidades. Bajarse de Namesys Dowload las utilidades reiserfsprogs, y seguir las instrucciones para instalarlas. Otra fomra de hacerlo es mediante la aplicación apt de Debian de la siguiente manera:
	# apt-get install reiserfsprogs
	
Una vez tengamos el kernel compilado para poder utilizar ReiserFS, hayamos arrancado con él y hayamos instalado este programa podremos crear una partición de disco, para ello haremos lo siguiente:
	# mkreiserfs /dev/hdaXX

	<-------------mkreiserfs, 2002------------->
	reiserfsprogs 3.x.1b
	
	mkreiserfs: Guessing about desired format..
	mkreiserfs: Kernel 2.4.22-xfs is running.
	Format 3.6 with standard journal
	Count of blocks on the device: 373503
	Number of blocks consumed by mkreiserfs formatting process: 8223
	Blocksize: 4096
	Hash function used to sort names: "r5"
	Journal Size 8193 blocks (first block 18)
	Journal Max transaction length 1024
	inode generation number: 0
	UUID: c186ce18-4fc0-4bb4-8ef4-b03d27652b6a
	ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
	        ALL DATA WILL BE LOST ON '/dev/hdaXX'!
	Continue (y/n):y
	Initializing journal - 0%....20%....40%....60%....80%....100%
	Syncing..ok
 	
De este texto podemos sacar varias conclusiones, la primera que el tamaño del bloque es de 4096Bytes, la segunda el tamaño de la partición ( 373503 Bloques x 4096 Bytes/Bloque = 1.529,868.288 Bytes = 1,5 GigaBytes), que todos los datos serán borrados tras el formateo y que en caso de haber usado Fdisk para crear la partición debemos haber reiniciado la máquina al menos una vez.

Tras hacer estas operaciones debemos igual que antes modificar el fichero /etc/fstab para que cargue este sistema de ficheros tras encender el ordenador. Para montar el sistema o bien para saber si el sistema está cargado correctamente debemos usar la herramienta mount:

 	#mount -t reiserfs /dev/hdaXX /mnt/testfs
 	
 	# mount -l
	/dev/hda1 on / type ext3 (rw,errors=remount-ro) []
	...
 	/dev/hdaXX on /mnt/testfs type reiserfs (rw)
	
Recordar que hdaXX debe cambiarse por el disco duro (hda, hdb, sda, etc...) y el número de partición ( hda1, hda8, etc...).
Tests
-

Existen muchas formas de hacer pruebas al sistema de ficheros, y lo mejor es que cada uno utilice estas herramientas y haga las propias debidas, ya que cada ordenador es diferente, igual que el tipo de disco y lo que vamos buscando.

Las pruebas que podemos hacer son las siguientes:

Bonnie
Este programa realiza las siguientes pruebas: Sequential Output, Sequential Input, búsquedas aleatorias, crea, lee y borra secuencialmente y aleatoriamente.
Bonnie++
Se basa en el anterior programa, se supone que con mejoras de rendimiento, aunque hace las mismas pruebas.
IOzone Filesystem Benchmark
Herramienta muy trabajada que prueba hace las siguientes pruebas: Read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write. Además el resultado lo muestra a través de unos gráficos en 3D donde puede observarse claramente las variaciones según las variables.
Debemos realizar las pruebas mediante alguno de estos benchmarks, en nuestro caso vamos a probar el bonnie++. Se recomienda crear un script como por ejemplo testfs.sh y hacer las pruebas. Tras realizar las pruebas este es el resultado que se ha sacado: resultados.txt, estas pruebas deberían de ser válidas para la mayoria de instalaciones normales, donde la media de tamaño de ficheros es aproximadamente 91 KiloBytes y no para servidores de ficheros donde podemos encontrarnos con ficheros mucho más grandes. Según estas pruebas los más rápidos son XFS y JFS, aunque se trataba de archivos pequeños, las pruebas que he hecho con archivos grandes de más de 1 GigaByte XFS sale ganando en tiempo.

Comentarios:

-
XFS: A Next Generation Journalled 64-Bit Filesystem
The Virtual File System
Concurrency Control Algorithms for Real-Time Database Systems (1994)
B+ TREES
Introduction to Relational Database Systems
A high performance cluster file system using SCI