View previous topic :: View next topic |
Author |
Message |
bouleetbil Guru
Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
Posted: Wed Apr 12, 2006 7:33 pm Post subject: howto [unionfs] |
|
|
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.
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 |
|
|
Enlight Advocate
Joined: 28 Oct 2004 Posts: 3519 Location: Alsace (France)
|
Posted: Wed Aug 30, 2006 3:36 am Post subject: |
|
|
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 |
|
|
bouleetbil Guru
Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
|
Back to top |
|
|
|
|
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
|
|