# ReiserFS

ReiserFS es un sistema de archivos de propósito general, diseñado e implementado por un equipo de la empresa Namesys, liderado por Hans Reiser.
A partir de la versión 2.4.1 de Linux, ReiserFS se convirtió en el primer sistema de ficheros con journal en ser incluido en el núcleo estándar. También fue el sistema de archivos predefinido en varias distribuciones, como SuSE (hasta 2006, cuando fue sustituido por ext3), Knoppix y otras distribuciones actualmente discontinuadas como Xandros, Yoper, Linspire, Kurumin Linux, FTOSX, Libranet.
Con la excepción de actualizaciones de seguridad y parches críticos, Namesys ha cesado el desarrollo de ReiserFS (también llamado reiser3) para centrarse en Reiser4, el sucesor de este sistema de archivos.
ReiserFS está actualmente soportado por Linux, aunque se ha ido discutiendo su eliminación del kernel de Linux desde principios de 2022 debido a la falta de soporte, mantenimiento y errores técnicos inherentes al sistema de archivos, como el problema del año 2038. De momento se ha fijado la eliminación del sistema del núcleo de Linux en 2025.

## Características

ReiserFS ofrece funcionalidades que pocas veces se han visto en otros sistemas de archivos:
* Journaling. Esta es la mejora a la que se ha dado más publicidad, ya que previene el riesgo de corrupción del sistema de archivos.
* Reparticionamiento con el sistema de ficheros montado y desmontado. Podemos aumentar el tamaño del sistema de ficheros mientras lo tenemos montado y desmontado (en línea y offline). Para disminuirlo, únicamente se permite estando offline (desmontado). Namesys proporciona las herramientas para estas operaciones, e incluso, podemos usarlas bajo un gestor de volúmenes lógicos como LVM o EVMS.
* Tail packing, un esquema para reducir la fragmentación interna.

## Rendimiento

Comparado con ext2 y ext3 en el uso de archivos menores de 4k, ReiserFS es normalmente más rápido en un factor de 10–15. Esto proporciona una elevada ganancia en las news, como por ejemplo Usenet, cachés para servicios HTTP, agentes de correo y otras aplicaciones en las que el tiempo de acceso a ficheros pequeños debe ser lo más rápida posible.

## Desventajas

* Los usuarios que usen como sistema de ficheros ext2, deben formatear sus discos, aunque no así los que usen ext3.
* ReiserFS en versiones del kernel anteriores a la 2.4.10 se considera inestable y no se recomienda su uso, especialmente en conjunción con NFS
* Algunas operaciones sobre archivos (por ejemplo unlink(2)) no son síncronas bajo ReiserFS, lo que pueden causar comportamientos extraños en aplicaciones fuertemente basadas en locks de archivos.
* No se conoce una forma de desfragmentar un sistema de archivos ReiserFS, aparte de un volcado completo y su restauración.
* Tempranas implementaciones de ReiserFS (anteriores a la incluida en el kernel 2.6.2), eran susceptibles de problemas de escrituras fuera de orden, lo que provocaba que archivos siendo escritos durante una caída del sistema, ganaran un pico de bytes extras de basura en el siguiente montado del sistema de archivos. La implementación actual de journaling, es correcta en este aspecto, manteniendo el journaling ordenado, del estilo de ext3.

## Diseño

ReiserFS almacena metadatos sobre los ficheros, entradas de directorio y listas de inodos en un único árbol B+ cuya clave principal es un identificador único. Los bloques de disco asignados a los nodos del árbol son los "bloques internos formateados" y los bloques de las hojas son los "bloques de hojas formateados". Todos los bloques restantes son los "bloques sin formatear", que contienen los datos de los ficheros. Los directorios con muchas entradas, ya sean directas o indirectas, que no caben en un solo nodo, se reparten con el nodo vecino de la derecha. La asignación de bloques se lleva a cabo mediante un bitmap de espacio libre almacenado en localizaciones fijas.
En contraste, ext2 y otros sistemas de ficheros, usan una fórmula fija para calcular localizaciones de inodos, por lo que limitan el número de archivos que pueden almacenar. Otros también almacenan los directorios como una simple lista de entradas, lo que provoca que las búsquedas y modificaciones sean operaciones lineales temporalmente y degradan el rendimiento de directorios con muchos archivos. El árbol B+ en ReiserFS evita estos problemas.

## Versiones

Existen principalmente dos versiones de este sistema de ficheros: la 3 y la 4. Las características son las siguientes:
| | 3.5 | 3.6 |
| Número máximo de ficheros | 2 $^{32}$ - 3 = 4 Gi - 3 | 2$^{32}$ - 3 = 4 Gi - 3 |
| Número máximo de ficheros que puede contener un directorio | 518701895, pero en la práctica este valor se encuentra limitado por una función de hash. El hash r5 permite entre 1 y 200000 nombres de ficheros sin colisiones. | 2$^{32}$ - 4 = 4 Gi - 4, pero en la práctica este valor se encuentra limitado por una función de hash. El hash r5 permite entre 1 y 200000 nombres de ficheros sin colisiones. |
| Tamaño máximo de un fichero | 2$^{31}$ - 1 = 2 Gi - 1 | 2$^{60}$ - algunos bytes = 1 Ei, pero la caché de páginas lo limita a 8 Ti en arquitecturas de 32 bits. |
| Número máximo de links a un fichero | 2$^{16}$ = 64 Ki | 2$^{32}$ = 4 Gi |
| Tamaño máximo del sistema de ficheros | 2$^{32}$ (4K) bloques = 16 Ti | 2$^{32}$ (4K) bloques = 16 Ti |