Cramfs

cramfs ( ROM/RAM ) est un système de fichiers compressé en lecture seule conçu pour être utilisé avec le noyau Linux. Il a été conçu pour être simple et tenir le moins de place possible. Il est principalement utilisé dans l'informatique embarquée.

Contrairement à une archive compressée dans un système de fichiers conventionnel, il n'y a pas besoin de décompresser l’image avant de pouvoir accéder à son contenu : celle-ci peut être directement montée dans un système Linux.

Historique 
cramfs fut utilisé en tant qu’initrd par le noyau Linux, et donc par extension dans des distributions Linux comme Debian 3.1 ou encore SuSE Linux. Lors de la sortie de Linux 2.5.46, l'initrd (pouvant être au format cramfs) fut mis de côté pour privilégier le format initramfs, c'est-à-dire sous forme d'archive cpio compressée.

En 2013, les mainteneurs du noyau Linux ont indiqué que cramfs avait été rendu obsolète par SquashFS, mais ce système de fichiers a été réintroduit en 2017 pour les systèmes possédant trop peu de mémoire vive pour pouvoir se permettre d’utiliser SquashFS.

Fonctionnement 
Une image cramfs peut être construite à l’aide des utilitaires mkfs.cramfs (voir util-linux) ou mkcramfs. Elle peut ensuite être montée dans un système Linux par la commande mount -t cramfs. Il est possible de décompresser une image cramfs en espace utilisateur à l’aide d’un programme comme 7-Zip, mais cela n’est pas le but premier de ce format d’image.

Le contenu des fichiers dans une image cramfs sont compressés à l'aide de zlib (voir ), page par page, afin de permettre des lectures aléatoires. Les métadonnées des fichiers et dossiers ne sont pas compressées, mais sont représentées de manière succinctes afin d’utiliser moins de place qu’un système de fichiers conventionnel ; cela entraîne certaines limitations.

Limitations générales
La taille des fichiers est limitée à , tandis que la taille du système de fichiers est limitée à . Il est cependant possible d’arriver à un peu plus de  étant donné que le dernier fichier peut dépasser cette limite totale, dans la limite de sa taille maximale de . Cela donne une taille théorique maximale d’un peu moins de .

Il n'y a pas de répertoire . ou .., qui sont normalement des liens physiques vers respectivement le dossier lui-même et son dossier parent. Les liens physiques sont supportés, mais le compteur de liens sera toujours à 1. Cela implique que l’option -noleaf de la commande find n’est pas nécessaire.

La représentation très succincte des métadonnées fait qu’aucune information d’horodatage n’est présente dans une image cramfs, qui prend alors la valeur par défaut de l’epoch. L'identifiant de groupe (GID) est lui tronqué : seuls les  de poids faibles sont conservés, ce qui peut poser des problèmes de sécurité.

Limitations du noyau Linux
Une image cramfs ne pourra être lue que si son boutisme correspond à celui du noyau utilisé. Par exemple, une image cramfs big-endian ne pourra pas être montée sur par un noyau Linux s’exécutant sur une architecture little-endian. L’utilitaire cramfsswap permet cependant de convertir une image cramfs d’un boutisme vers l’autre.

Elle ne pourra être également lue que si sa taille de bloc correspond à la taille de  du noyau Linux utilisé. Sur de nombreuses architectures comme X86, cette taille est fixée à , mais elle peut varier.

Notes et références

Références

Voir aussi 
 SquashFS, le remplaçant de cramfs
ISO 9660, un autre système de fichiers en lecture seule notamment utilisé dans les CD-ROM et DVD-ROM
 initrd
 initramfs

Système de fichiers
Linux