JFFS2
# JFFS2

JFFS2 (Journaling Flash File System version 2) est un système de fichiers journalisé utilisé sur les systèmes à mémoire flash. Il succède à JFFS, et ne sera finalement pas remplacé par JFFS3 mais par UBIFS. JFFS2 a été inclus dans le noyau Linux depuis la version 2.4.10.

## Caractéristiques

JFFS2 a apporté :

* le support des systèmes flash NAND. Cela a impliqué une quantité de travail considérable étant donné que les systèmes NAND ont une interface entrée/sortie séquentielle et ne peuvent pas être accessibles en lecture comme de la mémoire.
* les liens durs. C'était impossible dans JFFS à cause des limitations du format sur disque.
* la compression. Trois algorithmes sont disponibles : zlib, rubin et rtime.
* une meilleure performance. JFFS traitait le disque comme un journal purement circulaire. Cela générait une grande quantité de communications superflues. L'algorithme du ramasse-miettes dans JFFS2 évite cela.

## Conception

Comme avec JFFS, les changements apportés aux fichiers et répertoires sont enregistrés dans la flash dans des nodes, dont il existe deux types:

* les inodes : un en-tête avec des métadonnées, suivie des données du fichier (s'il y en a). Les données compressées sont limitées à une page.
* les nodes dirent : directory entries, (entrées de répertoire) possédant chacune un nom et un numéro d'inode. Les liens durs sont représentés comme différents noms avec le même numéro d'inode. Le numéro spécial d'inode 0 représente un non-lien. Comme avec JFFS, les nœuds commencent comme valides quand ils sont créés, et deviennent obsolètes quand une nouvelle version a été créée ailleurs.

Toutefois, contrairement à JFFS, il n'y a pas de journal circulaire. Au lieu de cela, JFFS2 traite des blocs, une unité de la même taille que le segment d'effacement du média flash. Les blocs sont remplis, un par un, avec des nœuds de bas en haut. Un bloc propre est un bloc qui ne contient que des nœuds valides. Un bloc sale contient au moins un nœud obsolète. Un bloc libre ne contient aucun nœud.

Le ramasse-miettes tourne en tâche de fond, changeant les blocs sales en blocs libres. Il le fait en copiant les nœuds valides à la tête du journal et en sautant les nœuds obsolètes. Ceci fait, il efface le bloc et le marque pour empêcher toute confusion si l'alimentation est coupée durant une opération d'effacement.

Pour répartir l'usure sur la mémoire flash et empêcher les effacements d'être trop concentrés sur des systèmes de fichiers principalement statiques, le ramasse-miettes consommera occasionnellement des blocs propres.

## Inconvénients

* Tous les nœuds doivent être examinés au moment du montage. C'est d'autant plus lent que le média flash a une grande capacité.
