Je vais d'abord décrire quelques-uns des principes généraux utilisés pour la mise en place d'un système de fichier en loopback comme racine.
Sous Linux, un périphérique loopback est un périphérique virtuel, qui peut être utilisé comme tout autre périphérique.
Des exemples de périphériques normaux sont les partitions de disques durs comme
/dev/hda1
, /dev/hda2
, /dev/sda1
, ou des disques
entiers comme les disquettes /dev/fd0
, etc... Ce sont tous des périphériques
qui peuvent contenir une structure de fichiers et de répertoires. Ils peuvent être
formatés avec le système de fichier voulu (ext2fs, msdos, ntfs, etc...) puis montés.
Le périphérique loopback associe un fichier à un périphérique complet. Ce fichier peut appartenir à un autre système de fichiers.
Il peut alors être monté comme tout autre périphérique cité plus haut.
Pour cela le périphérique appelé /dev/loop0
ou /dev/loop1
ou etc... est associé au fichier, puis ce nouveau périphérique virtuel est monté.
Sous Linux, il est aussi possible d'avoir un autre type de périphérique virtuel monté en tant que système de fichiers, c'est le disque virtuel (ramdisk).
Dans ce cas, le périphérique ne se réfère pas à un élément du matériel, mais à une portion de la mémoire qui est mise de côté dans ce but. La mémoire allouée ainsi n'est jamais swapée sur le disque, mais reste dans le cache disque.
Un disque virtuel peut être créé à tout moment en écrivant dans le périphérique
correspondant /dev/ram0
ou /dev/ram1
, etc... Il peut alors être
formaté et monté de la même façon que le périphérique loopback.
Quand un disque virtuel est utilisé pour l'amorçage (comme c'est souvent le cas avec les disquettes d'installation de Linux et les disquettes d'urgence), l'image du disque (le contenu complet du disque sous forme d'un seul fichier) peut être stocké sur la disquette de démarrage sous une forme compressée. L'image est automatiquement détectée par le noyau quand celui-ci démarre et décompressée dans le disque virtuel avant d'être montée.
Le disque virtuel initial est, sous Linux, un autre mécanisme important dont nous aurons besoin pour utiliser le périphérique loopback comme système de fichier racine.
Quand le disque virtuel initial est utilisé, l'image du système de fichiers est copiée dans la mémoire et montée
pour que les fichiers soient accessibles. Un programme sur ce disque virtuel (appelé
linuxrc
) est lancé.
Une fois terminé un nouveau périphérique est monté comme système de fichiers racine. Le disque virtuel précédent existe toujours,
il est monté sur le répertoire /initrd
si celui-ci est présent,
ou accessible à travers le périphérique /dev/initrd
.
C'est un comportement peu habituel, puisque la séquence de démarrage normale se lance depuis la partition racine choisie et continue à tourner ainsi. Avec l'option de disque virtuel initial, la partition racine a la possibilité de changer avant que ne commence la séquence de démarrage principale.
Le système de fichiers racine est le périphérique qui est monté en premier, et
qui apparaît donc dans le répertoire appelé /
après le démarrage.
Il y a un certain nombre de complications a propos du système de fichiers
racine, qui sont dues au fait qu'il contient tous les fichiers. Au boot, les
scripts rc
sont lancés ; ce sont soit les fichiers dans /etc/rc.d
ou /etc/rc?.d
, suivant la version du programme /etc/init
.
Quand le système a démarré, il n'est plus possible de démonter la partition racine ou d'en changer car tout les programmes l'utiliseront plus ou moins. C'est pourquoi le disque virtuel initial est si utile, puisqu'il peut être utilisé de façon telle que la partition racine finale n'est pas la même que celle qui est chargée au moment de l'amorçage.
Pour montrer comment le disque virtuel initial opère pendant la séquence de démarrage, l'ordre des événements est présenté ci dessous.
LILO
ou LOADLIN
. Vous pouvez voir le message Loading...
pendant
que ceci arrive.
LILO
ou LOADLIN
. Vous pouvez voir le message Loading...
à nouveau quand ceci arrive.
/linuxrc
est lancé sur le disque virtuel initial.
/etc/init
est lancé, et va exécuter la
séquence de démarrage paramétrable par l'utilisateur.Ceci est juste une version simplifiée de ce qui arrive, mais c'est suffisant pour expliquer comment le noyau démarre et où le disque virtuel est utilisé.