Présentation du projet GEFS
GEFS est un système de fichiers conçu initialement pour 9front, un dérivé de Plan 9. Il repose sur un modèle copy‑on‑write (COW) et propose des snapshots atomiques ainsi qu’une protection contre les plantages. Le code du noyau compte actuellement moins de 9 000 lignes, selon l’auteur, et il est en cours de portage vers OpenBSD. La version disponible est décrite dans un PDF de 30 pages (https://orib.dev/gefs.pdf) et le dépôt Git est accessible via un serveur dédié.
Architecture et mécanismes copy‑on‑write
Le système stocke chaque modification dans de nouveaux blocs, laissant les blocs originaux intacts. Un snapshot correspond à un point de référence où le superbloc pointe vers un arbre de blocs immuables. Lors d’une écriture, le nouveau bloc est alloué, les métadonnées sont mises à jour, puis le superbloc est réécrit. Cette séquence garantit que, même en cas de panne, le système peut revenir à la dernière version cohérente. Le PDF indique que le protocole de cohérence exige que l’écriture du superbloc intervienne uniquement après que tous les blocs du snapshot aient été physiquement écrits sur le disque.
Problèmes de portage et limites actuelles
Le portage vers OpenBSD expose plusieurs lacunes : la gestion des erreurs est largement commentée et doit être ré‑implémentée, car la stratégie utilisée sur 9front n’est pas acceptable pour OpenBSD. Le protocole de cohérence reste le principal point d’incertitude ; l’auteur signale que « une écriture du superbloc doit intervenir après toutes les écritures du snapshot », mais aucune implémentation fiable n’est encore en place. D’autres contraintes POSIX apparaissent, notamment la nécessité d’ajuster les appels système pour respecter les exigences de verrouillage et de synchronisation. Le système ne supporte pas encore les liens durs, les notifications kqueue, ni l’export NFS. Des problèmes de performances sont observés lors de la suppression de gros fichiers, et aucune suite de tests automatisés n’a été adaptée à OpenBSD.
Perspectives d’évolution et intégration
L’auteur propose de maintenir le code proche de la version 9front afin de faciliter le partage des correctifs. Les étapes prévues incluent la réécriture du traitement des erreurs, l’ajout d’un compteur de références pour les liens durs, l’implémentation des ioctl de gestion de snapshots, et le support de quotas. Le processus de mise à jour du code repose sur un flux Git :
# clone du dépôt OpenBSD
git clone https://github.com/openbsd/src
cd src
# ajout du remote GEFS
git remote add gefs git://shithub.us/ori/openbsd
git fetch gefs
git checkout -b gefs gefs/gefs
Ces commandes illustrent la méthode de récupération du diff GEFS sans surcharger le serveur d’origine. Tant que les problèmes de cohérence et de fiabilité ne seront pas résolus, le système reste destiné à la recherche et aux tests, et aucune utilisation en production n’est recommandée.