Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
howto [unionfs]
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Wed Apr 12, 2006 7:33 pm    Post subject: howto [unionfs] Reply with quote

Bonsoir,
Je viens de passer un peu de temps à faire des recherches sur unionfs en voici la synthèse :
Le système UNIONFS

1. Introduction :
Unionfs permet de réunir plusieurs systèmes de fichier sur un même point de montage.
unionfs se compile en tant que module pour le noyau. Il est disponible pour la branche 2.4 à partir de la version 2.4.20 et pour la branche 2.6 à partir de la version 2.6.9.

Ce type de système de fichier est de plus en plus utilisé dans les LiveCD. Cela permet d'ajouter des programmes qui ne sont pas sur le CD ou même de définir un nouveau repertoire /home qui pointe vers une partition d'un disque dur. Ce type de système de fichiers peut être utile même un système déjà installé. Par exemple, vous venez d'acheter un disque votre partition /home est pleine et ne peux pas être transféré vers le nouveau disque (pas assez de place), il suffit de fusionner les deux disques vers /home. Ou vous avez des documents que vous ne voulez pas que l'on puisse modifier sur une partition et d'autres sur une autre partition qui sont accéssible en lecture/écriture. Il suffit de monter la première partition en lecture seule puis la seconde en lecture/ecriture.

2. Installation :
Code:
# emerge unionfs
# modprobe unionfs

A partir de maintenenant unionfs est disponible sur votre système

3. Utilisation :
Exemple :
Deux lecteurs cdrom sont montés sur /mnt/cdrom et /mnt/cdrom2. Vous voulez qu'il soit accessibles tous les deux sur /mnt/union.
Code:
# mount -t unionfs -o dirs=/mnt/cdrom1=ro:/mnt/cdrom2=ro unionfs /mnt/union

Maintenant le contenu des deux lecteurs est accéssible sur /mnt/union.
Les différentes options :
=ro signifie que le système de fichiers n'est monté qu'en lecture seul
=rw signifie que le système de fichiers n'est monté qu'en lecture/écriture

4. Utilitaire unionctl :
unionctl est un outil qui est installé avec le paquet unionfs. Il permet de visualiser ou de modifier les branches du montage de type unionfs.
Pour visualiser la liste des unions de /mnt/union :
Code:
# unionctl /mnt/union --list

Cela affichera :
/mnt/cdrom1 (r-)
/mnt/cdrom2 (r-)
Pour ajouter une partition à /mnt/union en écriture :
Code:
# unionctl /mnt/union --add --after /mnt/cdrom2 --mode rw /mnt/hda7

Pour vérifier l'ajout de /mnt/hda7.
Code:
# unionctl /mnt/union --list

/mnt/cdrom1 (r-)
/mnt/cdrom2 (r-)
/mnt/hda7 (rw)
A partir de maintenant, si vous écrivez sur /mnt/union cela écrira sur /mnt/hda7
Pour supprimer une branche :
Code:
# unionctl /mnt/union --remove /mnt/hda7

La branche /mnt/hda7 n'est plus disponible.

5. Unionfs sur liveCD :
Je vais décomposer le lancement du liveCD SLAX pour donner une idée des possibilités de unionfs.
Le fichier /linuxrc trouvé dans le ramdisk est éxecuté en premier par le noyau, si init=/linuxrc est passé en paramètre. L'éxecution de ce fichier sur SLAX lance les opérations qui suivent :

. Monte le système de fichier /proc
. Monte le système de fichier /sys
. Chargement des modules contenu dans le ramdisk
. Active le DMA
. Charge les modules de prise en charge usb si demandé
. Création des répertoires pour l'union :
/union
/memory
. Monte le système de fichier tmpfs dans /memory
. Création des répertoires :
/memory/images
/memory/changes
. Monte /memory/changes en mode lecture/ecriture sur /union grâce à unionfs.
. Recherche du cdrom contenant le liveCD et renseigne $DATA
. Création /union/boot
. Monte le contenu du répertoire /boot du liveCD dans /union/boot
. Ajoute le contenu des modules de type squashfs contenu sur le livecd sur /memory/images puis une fois monté, ajoute pour chacun une branche à /union.
. Copie le contenu du repertoire /rootcopy du liveCD vers /union
. Mise à jour du fichier /etc/fstab de /union
. Création des répertoires système de /union :
/union/proc
/union/sys
/union/dev
/union/tmp
. Donne les droits en écriture à /union/tmp
. Création du repertoire /mnt/live
. Rentre dans le répertoire /union (Important pour faire le pivot_root)
. Démonte /sys
. Création du périphérique console dans /union/dev si besoin.
. Défini l'emplacement de l'éxecutable chroot
. Fait un pivot_root du répertoire en cours vers /mnt/live
Page Man de pivot_root : pivot_root remplace le répertoire racine et le répertoire courant de tous les processus en cours d'exécution (ayant anc_rac comme racine ou répertoire courant) par celui spécifié par le chemin nouv_rac. Ce répertoire sera utilisé comme origine des chemins commençant par /. Le répertoire racine est hérité par tous les enfants du processus ayant fait le changement. Seul le Super-User peut effectuer un changement de répertoire racine. Notez que cet appel-système modifie le répertoire de travail.
. Lance init system V par le biais d'un chroot
Voici une petit graphique de la mise en place du LiveCD SLAX :

Code:
/(initrd, 4MB)
     |
     |---- /memory(tmpfs, 80% of RAM)
     |        |-- images
     |        |     |-- base.mo   <--loop--+
     |        |     |      |-- bin         |
     |        |     |      |-- usr         |
     |        |     |      +-- var         |
     |        |     |                      |
     |        |     |-- xwindow.mo <-loop------+   
     |        |     |      |-- etc         |   |
     |        |     |      |-- usr         |   |
     |        |     |      +-- var         |   |
     |        |     |                      |   |
     |        |     +-- kde.mo     <-loop----------+
     |        |            |-- opt         |   |   |
     |        |            |-- usr         |   |   |
     |        |            +-- var         |   |   |
     |        |                            |   |   |
     |        +-- changes                  |   |   |
     |                                     |   |   |
     +---- /union                          |   |   |
              |---- /mnt/cdrom             |   |   |
              |          |--- base.mo -----+   |   |
              |          |--- xwindow.mo ------+   |
              |          +--- kde.mo --------------+
              +---- /mnt/live


5. Prochainement :
Genkernel devrait intégrer prochainement le support de unionfs dans l'initrd. Pour le moment il faut soit se créer un ramdisk manuellement soit si vous n'avez pas l'utiliter de unionfs dans le ramdisk le charger à chaque démarrage.

Conclusion :
L'utilisation de unionfs en soit n'est pas compliqué et peut rendre quelques services, même sur un système déjà installé. (Cela rappelle LVM en version très simplifié)
Par contre j'ai rencontré des freeze avec les versions supérieur à la 1.0.14 de unionfs.

Bidouille :
Pour ceux et celles qui se fabriquent un liveCD from scratch (cf guide sympa => http://gentoo-wiki.com/Talk:HOWTO_build_a_LiveCD_from_scratch ) Voici une petite astuce pour intégrer unionfs au ramdisk en attandant une mise à jour qui l'intègre.
Code:
# emerge genkernel
# genkernel kernel --gensplash"Le gensplash utilisé" --install
# emerge unionfs

A partir de la unionfs est disponible en tant que module.
Editer /usr/share/genkernel/generic/linuxrc
A la ligne 230 ajouter
Code:
good_msg  'Mise en place unionfs'
modprobe unionfs

A la ligne 290 modifier la facon de monter le fichier squashfs
Code:
elif [ "${LOOPTYPE}" = 'squashfs' ]
   then
      good_msg 'Monte le systeme squashfs'
      mkdir -p ${NEW_ROOT}/mnt/squash
      mount -t squashfs -o loop,ro ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP} ${NEW_ROOT}/mnt/squash
      test_success 'Mount filesystem'
      FS_LOCATION='mnt/livecd'
      mkdir -p ${NEW_ROOT}/mnt/livecd
      mount -t unionfs -o dirs=${NEW_ROOT}/mnt/squash=ro unionfs ${NEW_ROOT}/mnt/livecd     


Editer /usr/share/genkernel/gen_initramfs.sh
A la ligne 43 ajouter
Code:
cp -av /usr/sbin/unionctl  ${TEMP}/initramfs-base-temp/sbin/
cp -av /usr/sbin/uniondbg ${TEMP}/initramfs-base-temp/sbin/
cp -av /usr/sbin/unionimap ${TEMP}/initramfs-base-temp/sbin/

A la ligne 356 ajouter
Code:
cp -axv --parents ./lib/modules/2.6.15-suspend2-r8/fs/unionfs.ko "${TEMP}/initramfs-modules-${KV}-temp"

ou 2.6.15-suspend2-r8 représente le noyau utilisé.
Maintenant la création du ramdisk :
Code:
# genkernel initrd --install

Et voila unionfs est disponible dans le ramdisk. :lol:


Donc maintenant, livecd.squashfs est monté sur /mnt/squash et /mnt/livecd est unioné si vous ajoutez une branche à /mnt/livecd celle ci apparaitra sur la partition /. car / pointe en parti sur /mnt/livecd. J'espere avoir été à peu pres clair.
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Wed Aug 30, 2006 3:36 am    Post subject: Reply with quote

juste une remarque, pour pas s'embeter avec unionfs en module, on a la possibilité de faire un simple emerge -f unionfs, de l'unpacker où bon nous semble puis d'executer le script patch.sh (avec comme argument le répertoire des sources) là on retourne dans son menuconfig et pouf, on peut le metre en dur.
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sat Sep 02, 2006 4:12 pm    Post subject: Reply with quote

Je ne connaissais pas cette possibilité.
Merci ,je vais essayer pour plus m'embeter avec le ramdisk
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum