UnionFS, vous connaissez?

UnionFS (Union File System) est un service du système de fichiers de Linux qui permet de fusionner plusieurs points de montage appelés "branches" : c'est un union mount. L'utilisation habituelle de ce système est de fusionner une partition système en lecture seule avec une partition en écriture permettant d'enregistrer les nouveaux fichiers et fichiers modifiés, le système UnionFS se chargeant de ne présenter que la dernière version de chaque fichier.

Points forts

  • Permet même de fusionner plusieurs branches en lecture-écriture !

À quoi peut-il servir?

  • Aux LiveCD des distributions Linux
  • À fusionner plusieurs répertoires ensemble (exemple retenu: éviter de dupliquer des fichiers sur un serveur NFS pour contenir des fichiers d'installation de LInux, s'ils sont stockés sur trois CD dans le répertoire "packages"; au lieu de retrouver cd1-packages, cd2-packages, cd3-packages et tous les paquetages (copiés) dans un répertoire all-packages; un union-mount des trois lecteurs CD dans all-packages tout simplement.
  • Concrètement, peut souvent servir lors de "patch" de sources (à cause du copy-on-write):
    Je me suis souvent retrouvé à vouloir mettre des patch sur un kernel déjà décompressé; par contre, le patchs ne sont pas toujours fonctionnels (différente version du kernel, autre patch déjà appliqué, etc.). Dans le but de ne pas perdre mon kernel déjà fonctionnel, j'en prenais habituellement un tar-ball-bzippé et appliquais le patch; si cela fonctionnait tant mieux, sinon je pouvais essayer de résoudre les conflits et dans le pire des cas revenir à la version tar-ball-bzippé. Ce processus est fonctionnel, mais la création de l'archive prends quelque temps.
    Il est possible d'utiliser UnionFS pour faire ces mêmes tâches, beaucoup mieux!
    Créer une union entre le répertoire du kernel actuel en lecture seule (ajouter =ro à la l'option du union mount) et d'un tmpfs (/dev/shm/src/patchX fonctionne bien si vous voulez).
    Appliquer le patch sur le nouveau mount point unionfs; les fichiers originaux ne sont pas touchés, vous pouvez résoudre les conflits et même tenter une compilation (voir si tout passe, mais attention à la mémoire utilisée, peut-être vaut-il mieux de ne pas prendre un tmpfs dans ce cas, mais plutôt un autre répertoire sur disque)
    Si ça ne fonctionne pas, rien de brisé, une fois le mount point enlevé, la source du kernel revient à son état original.
    Si cela fonctionne bien, il suffit de ramener les changements effectués avec "snapmerge" (c'est la partie où je serais rendu à essayer)
  • Créer des instantannés (snapshots) d'un répertoire sans en bloquer l'accès

Quel cas m'intéresse présentement?

J'ai débuté il y a quelques jours un projet de convertir le disque dur de mon portable (HP nx9030) en RAID-0 sur deux cartes CompactFlash; bien que le projet est déjà fonctionnel, les écritures sont quelques peu lentes (c'est du CF après tout). J'aimerais réussir à faire un tampon d'écriture TMPFS à l'aide de UnionFS sur /home pour réduire au minimum les écritures sur les cartes CF (à-la LiveCD), mais d'avoir une option "commit" pour mettre la version actuelle de mes paramètres à jour sur la carte CF (sans paralyser le système pendant les écritures) avec snapshot et snapmerge.
Source officielle: http://www.am-utils.org/project-unionfs.html
Source référence: http://www.linuxjournal.com/article/7714
Source wikipédia: http://en.wikipedia.org/wiki/UnionFS

Développement Le blogue de Michel Belleau | Vous devez vous connecter pour poster des commentaires