[email protected]
[email protected]
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�.
Maintenant que les principes g�n�raux ont �t� pr�sent�s, la m�thode pour cr�er le p�riph�rique loopback peut �tre expliqu�e.
La cr�ation du p�riph�rique loopback va n�cessiter un certain nombre de choses.
Le point le plus important est l'acc�s � un syst�me Linux d�j� install�. Ce point est n�cessaire car le p�riph�rique loop ne peut �tre cr�� que sous Linux. Cela signifie qu'il ne sera pas possible d'installer un syst�me � partir de rien. Le syst�me Linux que vous utilisez devra �tre capable de compiler un noyau.
Une fois le p�riph�rique loopback cr��, il repr�sentera un gros fichier. J'ai utilis� un fichier de 80 Mo, mais si c'�tait suffisant pour un terminal X, �a ne sera sans doute pas suffisant pour une utilisation plus importante. Ce fichier doit �tre copi� sur la partition DOS, donc un r�seau ou beaucoup de disquettes seront mis a contribution.
Vous aurez besoin des logiciels suivants :
LOADLIN
version 1.6 ou sup�rieuremount
qui supporte les p�riph�riques loopbackTout ceci devrait �tre disponible en standard sur des installations r�centes de Linux.
J'ai cr�� le p�riph�rique loopback avec le noyau Linux version 2.0.31, d'autres versions devraient faire l'affaire, mais elles devront avoir au moins les options list�es ci-dessous configur�es.
Les options du noyau que vous devrez s�lectionner sont les suivantes :
CONFIG_BLK_DEV_RAM
).CONFIG_BLK_DEV_INITRD
).CONFIG_BLK_DEV_LOOP
).CONFIG_FAT_FS
).CONFIG_MSDOS_FS
).Les deux premi�res sont le disque virtuel lui-m�me et le disque virtuel initial. La suivante est le support pour les p�riph�riques loopback. Les deux derni�res sont le support pour les syst�mes de fichiers msdos, qui est requis pour monter des partitions DOS.
La compilation d'un noyau sans modules est la plus simple, mais si vous voulez utiliser les modules �a devrait �tre possible, bien que je ne l'aie pas essay�. Si vous utilisez des modules, vous devez configurer les options pr�c�dentes dans le noyau, et non comme des modules.
Le code source du noyau lui-m�me devra �tre modifi� d'une fa�on tr�s simple. La version 2.0.34 du noyau telle que fournie ne permet pas au p�riph�rique loopback d'�tre utilis� comme racine. Une tr�s petite modification du noyau peut rendre ceci possible.
Le fichier /init/main.c
a juste besoin qu'on lui ajoute une seule
ligne comme montr� dans la version modifi�e ci-dessous. La ligne qui dit
"loop", 0x0700
est celle qui a �t� ajout�e.
static void parse_root_dev(char * line)
{
int base = 0;
static struct dev_name_struct {
const char *name;
const int num;
} devices[] = {
{ "nfs", 0x00ff },
{ "loop", 0x0700 },
{ "hda", 0x0300 },
...
{ "sonycd", 0x1800 },
{ NULL, 0 }
};
...
}
Une fois le noyau configur�, il devra �tre compil� pour produire une fichier
zImage
(make zImage
). Ce fichier devrait �tre arch/i386/boot/zImage
une fois compil�.
Le disque virtuel initial est simplement cr�e comme un p�riph�rique loopback
au d�part. Vous devrez faire ceci en tant que root. Les commandes que vous devez
ex�cuter sont list�es ci dessous, elles supposent �tre lanc�es depuis le r�pertoire
principal de root (/root
).
mkdir /root/initrd
dd if=/dev/zero of=initrd.img bs=1k count=1024
mke2fs -i 1024 -b 1024 -m 5 -F -v initrd.img
mount initrd.img /root/initrd -t ext2 -o loop
cd initrd
[cr�ez les fichiers]
cd ..
umount /root/initrd
gzip -c -9 initrd.img > initrdgz.img
Il y a un certain nombre d'�tapes, mais on peut les d�crire comme ceci.
Contenu du disque virtuel initial
Les fichiers dont vous avez besoin sur le disque virtuel repr�sentent le minimum n�cessaire pour pouvoir d'ex�cuter une commande.
/linuxrc
Le fichier qui est lanc� pour monter le syst�me de
fichiers msdos (voir plus bas)./lib/*
L'�diteur de liens dynamiques et les librairies dont les
programmes ont besoin./etc/*
Le cache utilis� par l'�diteur de liens dynamiques
(pas strictement requis, mais �a l'emp�che de se plaindre)./bin/*
Un interpr�teur de commandes (ash
car il est
plus petit que bash
). Les programmes mount
et losetup
pour manipuler le disque DOS et configurer les p�riph�riques loopback./dev/*
Les p�riph�riques qui seront utilis�s. Vous avez besoin
de /dev/zero
pour ld-linux.so
, /dev/hda*
pour monter
le disque msdos et /dev/loop*
pour les p�riph�riques loopback./mnt
Un r�pertoire vide pour y monter le disque msdos.Le contenu du disque virtuel initial que j'ai utilis� est �num�r� ci-dessous. Ces fichiers repr�sentent environ 800ko, une fois pris en compte l'espace perdu par les structures du syst�me de fichiers.
total 18
drwxr-xr-x 2 root root 1024 Jun 2 13:57 bin
drwxr-xr-x 2 root root 1024 Jun 2 13:47 dev
drwxr-xr-x 2 root root 1024 May 20 07:43 etc
drwxr-xr-x 2 root root 1024 May 27 07:57 lib
-rwxr-xr-x 1 root root 964 Jun 3 08:47 linuxrc
drwxr-xr-x 2 root root 12288 May 27 08:08 lost+found
drwxr-xr-x 2 root root 1024 Jun 2 14:16 mnt
./bin:
total 168
-rwxr-xr-x 1 root root 60880 May 27 07:56 ash
-rwxr-xr-x 1 root root 5484 May 27 07:56 losetup
-rwsr-xr-x 1 root root 28216 May 27 07:56 mount
lrwxrwxrwx 1 root root 3 May 27 08:08 sh -> ash
./dev:
total 0
brw-r--r-- 1 root root 3, 0 May 20 07:43 hda
brw-r--r-- 1 root root 3, 1 May 20 07:43 hda1
brw-r--r-- 1 root root 3, 2 Jun 2 13:46 hda2
brw-r--r-- 1 root root 3, 3 Jun 2 13:46 hda3
brw-r--r-- 1 root root 7, 0 May 20 07:43 loop0
brw-r--r-- 1 root root 7, 1 Jun 2 13:47 loop1
crw-r--r-- 1 root root 1, 3 May 20 07:42 null
crw-r--r-- 1 root root 5, 0 May 20 07:43 tty
crw-r--r-- 1 root root 4, 1 May 20 07:43 tty1
crw-r--r-- 1 root root 1, 5 May 20 07:42 zero
./etc:
total 3
-rw-r--r-- 1 root root 2539 May 20 07:43 ld.so.cache
./lib:
total 649
lrwxrwxrwx 1 root root 18 May 27 08:08 ld-linux.so.1 -> ld-linux.so.1.7.14
-rwxr-xr-x 1 root root 21367 May 20 07:44 ld-linux.so.1.7.14
lrwxrwxrwx 1 root root 14 May 27 08:08 libc.so.5 -> libc.so.5.3.12
-rwxr-xr-x 1 root root 583795 May 20 07:44 libc.so.5.3.12
./lost+found:
total 0
./mnt:
total 0
La seule �tape complexe est la cr�ation des p�riph�riques dans dev
.
Utilisez le programme mknod
pour les cr�er, et servez vous des
p�riph�riques dans /dev
comme mod�les pour les param�tres requis.
Le fichier /linuxrc
Le fichier /linuxrc
sur le disque virtuel initial est n�cessaire pour
mettre en place le p�riph�rique loopback, avant de l'utiliser comme racine.
L'exemple suivant essaye de monter /dev/hda1
comme une partition msdos
et en cas de r�ussite assigne les fichiers /linux/linuxdsk.img
et
/linux/linuxswp.img
respectivement aux p�riph�riques /dev/loop0
et /dev/loop1
.
#!/bin/sh
echo INITRD: Essaye de monter /dev/hda1 comme partition msdos
if /bin/mount -n -t msdos /dev/hda1 /mnt; then
echo INITRD: Montage r�ussi
/bin/losetup /dev/loop0 /mnt/linux/linuxdsk.img
/bin/losetup /dev/loop1 /mnt/linux/linuxswp.img
exit 0
else
echo INITRD: Echec du montage
exit 1
fi
Le premier p�riph�rique, /dev/loop0
deviendra la racine et le second,
/dev/loop1
deviendra la m�moire virtuelle.
Si vous voulez pouvoir �crire sur la partition racine en tant qu'utilisateur normal
quand vous aurez fini, alors vous devriez plut�t utiliser mount -n -t msdos /dev/hda1 /mnt -o uid=0,gid=0,umask=000
.
Ceci associera tous les acc�s � la partition
DOS � l'utilisateur root et placera les permissions en cons�quences.
Le p�riph�rique racine que vous utiliserez est le fichier linuxdsk.img
.
Vous devrez le cr�er de la m�me fa�on que le disque virtuel initial, en plus grand.
Vous pouvez y mettre l'installation de Linux de votre choix.
La m�thode la plus simple est de copier une installation Linux existante sur ce disque. une alternative est d'y installer une distribution de Linux.
En supposant que ceci est fait, vous avez encore des modifications mineures � apporter.
Le fichier /etc/fstab
doit r�f�rencer les partitions racine et
swap en utilisant les deux p�riph�riques loopback qui sont mis en place
par le disque virtuel initial.
/dev/loop0 / ext2 defaults 1 1
/dev/loop1 swap swap defaults 1 1
Ceci permettra de s'assurer que quand le p�riph�rique racine sera utilis�, le noyau ne sera pas induit en erreur sur son emplacement. L'espace de swap pourra ainsi �tre ajout� de la m�me fa�on qu'une partition de swap normale. Vous devez aussi retirer toute autre r�f�rence vers un disque racine ou swap.
Si vous voulez �tre capable d'acc�der � la partition DOS apr�s le d�marrage de Linux, vous devrez faire quelques petites modifications.
Cr�ez un r�pertoire appel� /initrd
, qui sera le point de montage
du disque virtuel initial une fois que le syst�me de fichier racine sera mont�
en loopback.
Cr�ez un lien symbolique appel� /DOS
qui pointe sur /initrd/mnt
o� la partition DOS sera mont�e.
Ajoutez un ligne dans le fichier rc qui monte les disques. Il devra lancer la
commande mount -f -t msdos /dev/hda1 /initrd/mnt
; ceci cr�era un
montage "fictif" de la partition DOS pour que tous les autres programmes (comme
df
) sachent que la partition DOS est mont�e et o� la trouver.
Si vous avez utilis� des options diff�rentes dans /linuxrc
, vous devrez
�videmment utiliser les m�mes ici.
Il n'y a plus de raison d'avoir le noyau Linux sur le p�riph�rique racine puisqu'il a �t� charg� plus t�t. Toutefois, si vous utilisez les modules, vous devrez les inclure normalement sur ce p�riph�rique.
Le p�riph�rique que vous utiliserez sera le fichier linuxswap.img
.
Le p�riph�rique de m�moire virtuelle (swap) est tr�s simple � fabriquer.
Cr�ez un fichier vide de la m�me fa�on que pour le disque virtuel initial,
puis ex�cutez mkswap linuxswap.img
pour l'initialiser.
La taille de la m�moire virtuelle d�pendra de ce que vous comptez faire avec le syst�me install�, mais je recommanderais entre 8 Mo et la quantit� de RAM que vous avez.
Les fichiers qui seront utilis�s devront �tre d�plac�s sur la partition DOS.
Les fichiers qui devront �tre dans le r�pertoire DOS appel� C:\LINUX
sont les suivants :
LINUXDSK.IMG
L'image de la partition qui deviendra le p�riph�rique
racine.LINUXSWP.IMG
L'espace de m�moire virtuelle.La disquette de d�marrage qui est utilis�e est juste une disquette amor�able au format DOS.
On la cr�e en utilisant format a: /s
sous DOS.
Sur ce disque vous devrez cr�er un fichier AUTOEXEC.BAT
(comme
ci-dessous) et copier le noyau, le disque virtuel initial sous forme
compress�e et l'ex�cutable LOADLIN
.
AUTOEXEC.BAT
Le fichier de commandes ex�cut� automatiquement
par le DOS.LOADLIN.EXE
L'ex�cutable du programme LOADLIN
.ZIMAGE
Le noyau Linux.INITRDGZ.IMG
L'image compress�e du disque virtuel initial.Le fichier AUTOEXEC.BAT
devrait contenir une seule ligne comme
ci-dessous.
\loadlin \zImage initrd=\initrdgz.img root=/dev/loop0 ro
Ceci sp�cifie l'image du noyau � utiliser, l'image du disque virtuel initial, et le p�riph�rique racine apr�s que le disque virtuel ait fait son office, avec la partition racine mont�e en lecture seule.
Pour d�marrer depuis le nouveau p�riph�rique racine, il suffit de faire d�marrer le PC sur la disquette pr�par�e plus haut.
Vous verrez les �v�nement suivants se succ�der :
/linuxrc
sur le disque virtuel initial est ex�cut�Une fois ceci accompli, vous pouvez retirer la disquette et utiliser le syst�me Linux.
Il y a un certain nombre d'�tapes de ce processus qui peuvent �chouer. Je vais essayer d'expliquer lesquelles, et ce qu'il faut v�rifier.
Le d�marrage du DOS est facile � reconna�tre gr�ce au message qu'il affiche
� l'�cran : D�marrage de MS-DOS...
. Si ceci n'est pas visible,
soit la disquette n'est pas amor�able, soit le PC ne d�marre pas sur le lecteur
de disquettes.
Quand le fichier AUTOEXEC.BAT
est ex�cut�, les commandes qu'il contient
devraient �tre affich�es sur l'�cran par d�faut. Dans le cas pr�sent, il
n'y a d'une seule ligne dans le fichier, qui lance LOADLIN
.
Quand LOADLIN
se lancera, il ex�cutera deux actions facile � distinguer :
premi�rement il chargera le noyau en m�moire, ensuite il copiera le disque virtuel
en m�moire. Chacune de ces actions est indiqu�e par un message Loading...
.
Le noyau commence par se d�compresser, ceci peut engendrer des erreur crc si l'image du noyau est corrompue. Ensuite, il lancera la s�quence d'initialisation qui est tr�s prolixe en messages de diagnostic. Le chargement du p�riph�rique disque virtuel sera aussi visible durant cette phase.
Quand le fichier /linuxrc
est lanc�, il n'y a pas de message de
diagnostic, mais vous pouvez les ajouter pour vous aider � debugger.
Si cette �tape �choue dans le montage du p�riph�rique loopback en tant
que p�riph�rique racine, vous verrez un message avertissant qu'il n'y
a pas de p�riph�rique racine, et le noyau interrompra son ex�cution.
La s�quence de d�marrage normale du nouveau syst�me de fichiers racine va
maintenant continuer, et cette partie est � nouveau g�n�reuse en messages.
Il pourrait y avoir des probl�mes d�s au fait que le syst�me de fichiers
racine est mont� en lecture-�criture, mais l'option de ligne de commande
'ro
' pour LOADLIN
devrait arranger �a. Un autre probl�me
qui peut appara�tre est la confusion de la s�quence de d�marrage � propos
de l'emplacement du syst�me de fichiers racine ; ceci sera probablement d� �
un probl�me avec /etc/fstab
.
Quand la s�quence de d�marrage est r�alis�e, le probl�me qui reste est que les programmes ne savent pas si la partition DOS est mont�e ou non. C'est pourquoi c'est une bonne id�e d'utiliser une fausse commande mount d�crite plus t�t. Ceci rend la vie nettement plus simple si vous voulez acc�der au fichiers sur le p�riph�rique DOS.
Les document que j'ai utilis�s pour cr�er mon premier p�riph�rique racine en loopback sont :
init/main.c
Documentation/initrd.txt
et Documentation/ramdisk.txt
.LILO
.LOADLIN
.Une fois que le principe de d�marrer sur un syst�me de fichiers dans une partition DOS est acquis, il y a de nombreuses autres choses que l'on peut faire.
S'il est possible de charger Linux depuis un fichier sur un disque dur DOS en utilisant une disquette de d�marrage, alors il est clair qu'on peut faire la m�me chose en utilisant le disque dur lui-m�me.
Un menu de choix de configuration au d�marrage peut �tre utilis� pour donner
l'option de lancer LOADLIN
depuis l'AUTOEXEC.BAT
. Ceci
donnera une s�quence de d�marrage plus rapide, mais c'est la seule
diff�rence.
Utiliser LOADLIN
n'est qu'une des options possibles pour charger un
noyau Linux. Il y a aussi LILO
qui fait pratiquement la m�me chose,
mais sans n�cessiter DOS.
Dans ce cas, la disquette au format DOS peut �tre remplac�e par une disquette au format ext2fs. A part cela, les d�tails restent tr�s similaires, le noyau et le disque virtuel initial �tant encore des fichiers sur cette disquette.
La raison pour laquelle j'ai choisi la m�thode avec LOADLIN
est que
les arguments qui doivent �tre donn�es � LILO
sont l�g�rement plus
complexes. Le contenu de la disquette est aussi plus clair pour un observateur
lambda, puisqu'on peut la lire sous DOS.
J'ai essay� la m�thode NTFS, et je n'ai pas eu de probl�me avec. Le support du syst�me de fichier NTFS n'est pas une option standard du noyau, mais vous devez appliquer le patch de Martin von Löwis, qui est disponible sur sa page web. http://www.informatik.hu-berlin.de/~loewis/ntfs/. Ce logiciel est en version alpha et requiert un patch qui n'est pas totalement trivial � appliquer au noyau, mais pas trop difficile non plus.
Les seuls changements pour les options VFAT ou NTFS sont sur le disque virtuel
initial, le fichier /linuxrc
doit monter un syst�me de fichiers
de type vfat ou ntfs plut�t que msdos.
Je ne connais pas de raison pour laquelle ceci ne marcherait pas aussi sur une partition VFAT.
Le processus d'installation de Linux sur un PC avec une distribution standard requiert de d�marrer sur une disquette et de repartitionner le disque dur. Cette �tape pourrait �tre remplac�e par une disquette de d�marrage qui cr�e un p�riph�rique loopback vide et un fichier de swap. Ceci permettrait � l'installation de proc�der normalement, sur le p�riph�rique loopback plut�t que sur une partition.
Ceci pourrait �tre une alternative � une installation UMSDOS
, et serait
plus efficace pour l'utilisation du disque, puisque l'unit� d'allocation minimale
sur un syst�me de fichiers ext2 est de 1ko contre 32ko sur une partition DOS. On peut
aussi l'utiliser sur des disques VFAT et NTFS qui sinon posent un probl�me.
Cette m�thode peut aussi �tre utilis�e pour d�marrer un syst�me Linux depuis un p�riph�rique qui n'est pas normalement amor�able.
Evidemment, de nombreux autres p�riph�riques pourraient �tre utilis�s, les partitions racines en NFS sont d�j� incluses dans le noyau comme une option, mais la m�thode pr�sent�e ici pourrait �tre utilis�e � la place.