# JFFS2

Journalling Flash File System versió 2 o JFFS2 és un sistema de fitxers estructurat en registre per utilitzar-lo amb dispositius de memòria flash. És el successor de JFFS. JFFS2 s'ha inclòs al nucli de Linux des del 23 de setembre de 2001, quan es va fusionar a la línia principal del nucli de Linux com a part de la versió 2.4.10 del nucli. JFFS2 també està disponible per a uns quants carregadors d'arrencada, com Das U-Boot, Open Firmware, eCos RTOS, RTEMS RTOS i RedBoot. L'ús més destacat del JFFS2 prové d'OpenWrt. esenvolupat almenys tres sistemes de fitxers com a substituts de JFFS2: LogFS, UBIFS i YAFFS.

## Característiques

JFFS2 va presentar:
* Suport per a dispositius flash NAND. Això va implicar una quantitat considerable de treball, ja que els dispositius NAND tenen una interfície d'E/S seqüencial i no es poden assignar a la memòria per llegir.
* Enllaços durs. Això no va ser possible a JFFS a causa de les limitacions en el format del disc.
* Compressió. Hi ha cinc algorismes disponibles: zlib, rubin, lzma, rtime i lzo.
* Millor rendiment. JFFS va tractar el disc com un registre purament circular. Això va generar una gran quantitat d'E/S innecessàries. L'algoritme de recollida d'escombraries de JFFS2 fa que això sigui gairebé innecessari.

## Disseny

Igual que amb JFFS, els canvis als fitxers i directoris es "registren" per flashejar als nodes, dels quals n'hi ha de dos tipus:
* inodes: una capçalera amb metadades del fitxer, seguida d'una càrrega útil de dades del fitxer (si n'hi ha). Les càrregues útils comprimides estan limitades a una pàgina.
* nodes dirent: entrades de directori cadascuna amb un nom i un número d'inode. Els enllaços durs es representen com a noms diferents amb el mateix número d'inode. L'inode especial número 0 representa un desenllaç.
Igual que amb JFFS, els nodes comencen com a vàlids quan es creen i queden obsolets quan s'ha creat una versió més nova en un altre lloc.
A diferència de JFFS, però, no hi ha cap registre circular. En canvi, JFFS2 tracta en blocs, una unitat de la mateixa mida que el segment d'esborrat del suport flash. Els blocs s'omplen, un a la vegada, amb nodes de baix a dalt. Un bloc net és aquell que només conté nodes vàlids. Un bloc brut conté almenys un node obsolet. Un bloc lliure no conté nodes.
El col·lector d'escombraries passa al fons, convertint els blocs bruts en blocs lliures. Ho fa copiant nodes vàlids a un bloc nou i saltant els obsolets. Fet això, esborra el bloc brut i l'etiqueta amb un marcador especial que el designa com a bloc lliure (per evitar confusions si es perd energia durant una operació d'esborrat). Per fer que l'anivellament del desgast sigui més uniforme i evitar que els esborrats es concentrin massa en sistemes de fitxers majoritàriament estàtics, el col·lector d'escombraries de tant en tant també consumirà blocs nets.

## Referències

* ↑ «Memory Technology Device (MTD) Subsystem for Linux.» (en anglès). www.linux-mtd.infradead.org. [Consulta: 15 maig 2021].
* ↑ «The OpenWrt Flash Layout - OpenWrt Wiki» (en anglès). Wiki.openwrt.org, 18-01-2010. [Consulta: 4 març 2014].
* ↑ «Software Profile: Journaling Flash File System, Version 2 (JFFS2)» (en anglès). micron.com. Arxivat de l'original el 2014-03-07. [Consulta: 4 març 2014].
* ↑ «Software Profile: Journaling Flash File System, Version 2 (JFFS2)» (en anglès). micron.com. Arxivat de l'original el 2014-03-07. [Consulta: 4 març 2014].
* ↑ «Software Profile: Journaling Flash File System, Version 2 (JFFS2)» (en anglès). micron.com. Arxivat de l'original el 2014-03-07. [Consulta: 4 març 2014].