Initrd / fstab / aufs (unionfs) : problèmes de compréhension

Salut,

Je suis toujours en train de me monter un clef USB from debootstrap, et sans utiliser les helpers, j’avance bien. J’ai un problème concernant la compréhension global du “montage” (mount) durant la chaine d’initialisation du boot (initrd) au prompt du bash, et mes méthodes ne sont peut être pas des plus académiques, je prends donc tous conseils…

fran.b, m’a vite dissuadé d’utiliser des liens symboliques en RAM, et il a bien fait, je me suis tourné vers AUFS, un autre unionfs à priori bien moins buggé et avec beaucoup moins d’overhead (5% contre 10% théorique).

Après un debootstrap et quelques apt-get de paquets essentiel, j’ai décompresser mon initrd avec cpio et gunzip.

  • J’ai collé les 2 modules aufs.ko et exportfs.ko dans /lib/modules/…/kernel de mon initrd
  • Puis j’ai modifié mon script init, à la racine de l’initrd, juste avant l’appel a l’init, pour monter la partition / en AUFS (je le collerais ici en rentrant du boulot)
    Dans le fichier init de l’initrd :
    • Je créer /aufs /ro /rw
    • Je créer un tmpfs sur /rw
    • Je monte (–move) /root sur /ro
    • Je monte /aufs en union avec /ro et /rw
    • Je monte (–move) /ro sur /aufs/ro et /rw sur /aufs/rw (pour pouvoir y accéder après)
    • Je monte (–move) /root sur /aufs
    • Et l’init est lancé, j’imagine qu’il chroot ou pivot_root sur le /root

Ça marche bien, je vois bien l’effet du copy-on-write dans le tmpfs /rw, ca arrache bien !

Le seul truc que j’ai omis de dire, c’est que mon fstab, est pratiquement vide, c’est a dire que j’ai laissé que la /proc et lorsque je regarde mon mtab, j’ai plein de truc de monter.
Mon fstab serait-il inutile ?

QUESTIONS

  • Je crois que le fstab sert surtout lors d’un “mount -a”, mais dans quel cas on fait ca ? En plus le initrd se charge de monter tout ce qu’il faut, donc finalement, que fait le fstab ? (oui oui je suis perdu)

  • Admettons que quelqu’un me fasse comprendre les subtilités du fstab, j’imagine que je vais devoir ajouter un ligne pour ma racine, mais comme elle est en AUFS
    j’imagine que je peux remettre la chaine (br=… en aufs équivaut a dirs=… en unionfs) qui m’a servis a monter la racine dans mon initrd.

De tête :

none        /proc       proc    defaults        0 0
/           /           aufs    br=/ro:/rw=rw   1 1
  • Comment puis-je faire pour que mon init (initrd) detecte le bon device “root=” au démarrage (sans forcement utiliser les UUID ou LABEL des partitions) ?
    J’ai vu des types qui, dans un petite boucle for, essayaient de monter sda1, sdb1, sdc1, puis sdd1, etc… jusqu’au succès et essaye de lire un fichier qui confirme la présence de la partition voulue.
    Est ce fiable ? y’a t’il mieux ?

  • J’ai vu aussi que après recompression , mon initrd (même sans les modules) fait presque le double de la taille de celui d’origine.
    Dois je utiliser mkinitrd -u ? dans ce cas, comment taper dans le fichier init directement ?
    (Sans passer par des script top, bottom, etc…)

Voila, merci d’avance pour le coup de main

Molux

Là, je ne peux pas trop t’aider, j’ai entièrement refait la séquence du boute poiur ClefAgreg. Je suis partit du script de Feather (version 1.x) puis, vu le bazar, j’ai finalement tout refait de A jusqu’à Z avec un programme perso cherchant où se trouve le fichier contenant la racine (CDROM IDE, SCSI, SATA, Clef USB, etc), ensuite je construis la racine en cherchant les éventuelles extensions et appelle /sbin/init qui finit le travail. Mais cela est du essentiellement au fait que je voulais que ma clef reste en VFAT afin d’être utilisable à coté sous WIndows.

Salut Fran.b,

Merci pour ta réponse, je suis en train de faire la même chose du coup.
De plus SysVinit commence à ce faire des cheveux blanc, (je comprend pas pourquoi une telle usine à gaz reste encore un standard sur la plus part des distros) Il existe un script simple, Upstart, qui ressemble beaucoup au système d’initialisation propriétaire que j’utilise. De plus les types indiquent des gains de temps de démarrage de cinglé (20 à 30 ses o_O ) !

Donc c’est refonte complète de l’initrd et de ses scripts, pour ma clef !

Merci encore Fran.d

Molux

Ton script est adapté à une architecture donnée et une configuration donnée. sysvinit de concerne que le boute après le lancement de /sbin/init, je n’ai pas touché après ça, ça fonctionnait bien.

Salut,

Concernant les scripts “après” le /sbin/init c’est sur cette partie que j’avais un problème, rapport a mon fstab. En fait je n’avais pas compris qu’après le lancement /sbin/init, un certain script (j’ai pas le nom en tête) remontait les points de montages par rapport au fstab.

J’ai donc commencer à essayer de comprendre comment faire pour modifer mon fstab, au boot, depuis le script init de l’initrd, pour le rendre compatible avec la suite du process (que ce soit sur sysVinit ou Upstart puisque de toute façon ce sont les même script /etc/init.d qui sont utilisé tu as raison).

Bref, je patauge un peu mais grâce à tes conseils je commence à comprendre le process de boot dans son entièreté. J’ai encore quelques script init.d a lire pour tout comprendre mais c’est en bonne voie.

Merci encore

Molux

PS : Je crois qu’il va falloir que regarde de plus prêt ta clef…

Salut,

Whaa ! y’a du boulot sur la ClefAgreg !
Je me permet de regarder ton travail

Molux

Tu peux à partir de ClefAgregBase te faire ta propre clef…

Salut,

Bah j’ai regardé à titre informatif sur le script init, mais je suis partis sur une autre stratégie, j’ai un script qui me créer un partition ou une image de ma clef à partir d’un deboostrap, comme ça je peux refaire mes essais sur une distrib propre quand je le souhaite.
De plus je me base sur l’archi de l’initrd d’origine que je “patch” en quelques sorte avant de le reconstruire.

En tout cas merci pour les coups de mains

Molux