/usr/share/doc/HOWTO/fr-html/Loopback-Root-FS.html is in doc-linux-fr-html 2013.01-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.69">
<title>The Loopback Root Filesystem HOWTO</title>
</head>
<body>
<h1>The Loopback Root Filesystem HOWTO</h1>
<h2>par Andrew M. Bishop, <code><a href=
"mailto:amb@gedanken.demon.co.uk">amb@gedanken.demon.co.uk</a></code><br>
traduction par Eric Cano <code><a href=
"mailto:Eric.Cano@cern.ch">Eric.Cano@cern.ch</a></code></h2>
v1.0.0, 12 juin 1998, traduction octobre 1998
<hr>
<em>Ce HOWTO explique comment utiliser le
périphérique loopback pour faire une installation sur
un système de fichier Linux natif, qui peut résider
dans une partition DOS sans repartitionnement. D'autres
utilisations de cette technique sont aussi
présentées.</em>
<hr>
<h2><a name="s1">1. Principes des périphériques
"loopback" et des disques virtuels</a></h2>
<p>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.</p>
<h2><a name="ss1.1">1.1 Périphérique
loopback</a></h2>
<p>Sous Linux, un <b>périphérique loopback</b> est un
périphérique virtuel, qui peut être
utilisé comme tout autre périphérique.</p>
<p>Des exemples de périphériques normaux sont les
partitions de disques durs comme <code>/dev/hda1</code>,
<code>/dev/hda2</code>, <code>/dev/sda1</code>, ou des disques
entiers comme les disquettes <code>/dev/fd0</code>, 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.</p>
<p>Le périphérique loopback associe un fichier
à un périphérique complet. Ce fichier peut
appartenir à un autre système de fichiers.</p>
<p>Il peut alors être monté comme tout autre
périphérique cité plus haut. Pour cela le
périphérique appelé <code>/dev/loop0</code> ou
<code>/dev/loop1</code> ou etc... est associé au fichier,
puis ce nouveau périphérique virtuel est
monté.</p>
<h2><a name="ss1.2">1.2 Les disques virtuels</a></h2>
<p>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 <b>disque virtuel</b>
(<em>ramdisk</em>).</p>
<p>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.</p>
<p>Un disque virtuel peut être créé à
tout moment en écrivant dans le périphérique
correspondant <code>/dev/ram0</code> ou <code>/dev/ram1</code>,
etc... Il peut alors être formaté et monté de
la même façon que le périphérique
loopback.</p>
<p>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.</p>
<h2><a name="ss1.3">1.3 Le disque virtuel initial</a></h2>
<p>Le <b>disque virtuel initial</b> 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.</p>
<p>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é
<code>linuxrc</code>) 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 <code>/initrd</code> si celui-ci est
présent, ou accessible à travers le
périphérique <code>/dev/initrd</code>.</p>
<p>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.</p>
<h2><a name="ss1.4">1.4 Le système de fichiers
racine</a></h2>
<p>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é
<code>/</code> après le démarrage.</p>
<p>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 <code>rc</code>
sont lancés ; ce sont soit les fichiers dans
<code>/etc/rc.d</code> ou <code>/etc/rc?.d</code>, suivant la
version du programme <code>/etc/init</code>.</p>
<p>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.</p>
<h2><a name="ss1.5">1.5 La séquence d'amorçage de
Linux</a></h2>
<p>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.</p>
<ol>
<li>Le noyau est chargé en mémoire, ceci est
effectué par <code>LILO</code> ou <code>LOADLIN</code>. Vous
pouvez voir le message <code>Loading...</code> pendant que ceci
arrive.</li>
<li>L'image du disque virtuel est chargée en mémoire,
à nouveau ceci est réalisé par
<code>LILO</code> ou <code>LOADLIN</code>. Vous pouvez voir le
message <code>Loading...</code> à nouveau quand ceci
arrive.</li>
<li>Le noyau est initialisé, y compris la lecture des
options de ligne de commande et le montage du disque virtuel en
tant que racine.</li>
<li>Le programme <code>/linuxrc</code> est lancé sur le
disque virtuel initial.</li>
<li>Le périphérique racine est changé pour
celui spécifié dans les paramètres du
noyau.</li>
<li>Le programme <code>/etc/init</code> est lancé, et va
exécuter la séquence de démarrage
paramétrable par l'utilisateur.</li>
</ol>
<p>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é.</p>
<h2><a name="s2">2. Comment créer un
périphérique loopback.</a></h2>
<p>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.</p>
<h2><a name="ss2.1">2.1 Pré-requis</a></h2>
<p>La création du périphérique loopback va
nécessiter un certain nombre de choses.</p>
<ul>
<li>Un système Linux installé.</li>
<li>Un moyen pour copier des gros fichiers sur la partition DOS de
destination.</li>
</ul>
<p>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.</p>
<p>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.</p>
<p>Vous aurez besoin des logiciels suivants :</p>
<ul>
<li><code>LOADLIN</code> version 1.6 ou supérieure</li>
<li>Une version de <code>mount</code> qui supporte les
périphériques loopback</li>
<li>Une version du noyau qui inclut les options requises.</li>
</ul>
<p>Tout ceci devrait être disponible en standard sur des
installations récentes de Linux.</p>
<h2><a name="ss2.2">2.2 Création du noyau Linux</a></h2>
<p>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.</p>
<p>Les options du noyau que vous devrez sélectionner sont
les suivantes :</p>
<ul>
<li>RAM disk support (<code>CONFIG_BLK_DEV_RAM</code>).</li>
<li>Initial RAM disk (initrd) support
(<code>CONFIG_BLK_DEV_INITRD</code>).</li>
<li>Loop device support (<code>CONFIG_BLK_DEV_LOOP</code>).</li>
<li>fat fs support (<code>CONFIG_FAT_FS</code>).</li>
<li>msdos fs support (<code>CONFIG_MSDOS_FS</code>).</li>
</ul>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>Le fichier <code>/init/main.c</code> a juste besoin qu'on lui
ajoute une seule ligne comme montré dans la version
modifiée ci-dessous. La ligne qui dit <code>"loop",
0x0700</code> est celle qui a été ajoutée.</p>
<blockquote>
<pre>
<code>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 }
};
...
}
</code>
</pre></blockquote>
<p>Une fois le noyau configuré, il devra être
compilé pour produire une fichier <code>zImage</code>
(<code>make zImage</code>). Ce fichier devrait être
<code>arch/i386/boot/zImage</code> une fois compilé.</p>
<h2><a name="ss2.3">2.3 Création du
périphérique disque virtuel initial</a></h2>
<p>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 (<code>/root</code>).</p>
<blockquote>
<pre>
<code>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
</code>
</pre></blockquote>
<p>Il y a un certain nombre d'étapes, mais on peut les
décrire comme ceci.</p>
<ol>
<li>Créez un point de montage pour le disque virtuel initial
(un répertoire vide).</li>
<li>Créez un fichier vide de la taille requise. Ici j'ai
utilisé 1024ko, vous pourriez avoir besoin de plus ou de
moins suivant le contenu. (la taille est le dernier
paramètre).</li>
<li>Créez un système de fichiers ext2 dans le fichier
vide.</li>
<li>Montez le ficher au point de montage, ceci utilise le
périphérique loopback.</li>
<li>Changez le répertoire courant pour le
périphérique loopback.</li>
<li>Créez les fichiers requis (voir plus bas pour les
détails).</li>
<li>Sortez du périphérique loopback
monté.</li>
<li>Démontez le périphérique.</li>
<li>Créez une version compressée pour l'utiliser plus
tard.</li>
</ol>
<p><b>Contenu du disque virtuel initial</b></p>
<p>Les fichiers dont vous avez besoin sur le disque virtuel
représentent le minimum nécessaire pour pouvoir
d'exécuter une commande.</p>
<ul>
<li><code>/linuxrc</code> Le fichier qui est lancé pour
monter le système de fichiers msdos (voir plus bas).</li>
<li><code>/lib/*</code> L'éditeur de liens dynamiques et les
librairies dont les programmes ont besoin.</li>
<li><code>/etc/*</code> Le cache utilisé par
l'éditeur de liens dynamiques (pas strictement requis, mais
ça l'empêche de se plaindre).</li>
<li><code>/bin/*</code> Un interpréteur de commandes
(<code>ash</code> car il est plus petit que <code>bash</code>). Les
programmes <code>mount</code> et <code>losetup</code> pour
manipuler le disque DOS et configurer les
périphériques loopback.</li>
<li><code>/dev/*</code> Les périphériques qui seront
utilisés. Vous avez besoin de <code>/dev/zero</code> pour
<code>ld-linux.so</code>, <code>/dev/hda*</code> pour monter le
disque msdos et <code>/dev/loop*</code> pour les
périphériques loopback.</li>
<li><code>/mnt</code> Un répertoire vide pour y monter le
disque msdos.</li>
</ul>
<p>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.</p>
<blockquote>
<pre>
<code>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
</code>
</pre></blockquote>
<p>La seule étape complexe est la création des
périphériques dans <code>dev</code>. Utilisez le
programme <code>mknod</code> pour les créer, et servez vous
des périphériques dans <code>/dev</code> comme
modèles pour les paramètres requis.</p>
<p><b>Le fichier /linuxrc</b></p>
<p>Le fichier <code>/linuxrc</code> sur le disque virtuel initial
est nécessaire pour mettre en place le
périphérique loopback, avant de l'utiliser comme
racine.</p>
<p>L'exemple suivant essaye de monter <code>/dev/hda1</code> comme
une partition msdos et en cas de réussite assigne les
fichiers <code>/linux/linuxdsk.img</code> et
<code>/linux/linuxswp.img</code> respectivement aux
périphériques <code>/dev/loop0</code> et
<code>/dev/loop1</code>.</p>
<blockquote>
<pre>
<code>#!/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
</code>
</pre></blockquote>
<p>Le premier périphérique, <code>/dev/loop0</code>
deviendra la racine et le second, <code>/dev/loop1</code> deviendra
la mémoire virtuelle.</p>
<p>Si vous voulez pouvoir écrire sur la partition racine en
tant qu'utilisateur normal quand vous aurez fini, alors vous
devriez plutôt utiliser <code>mount -n -t msdos /dev/hda1
/mnt -o uid=0,gid=0,umask=000</code>. Ceci associera tous les
accès à la partition DOS à l'utilisateur root
et placera les permissions en conséquences.</p>
<h2><a name="ss2.4">2.4 Création du
périphérique racine</a></h2>
<p>Le périphérique racine que vous utiliserez est le
fichier <code>linuxdsk.img</code>. 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.</p>
<p>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.</p>
<p>En supposant que ceci est fait, vous avez encore des
modifications mineures à apporter.</p>
<p>Le fichier <code>/etc/fstab</code> 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.</p>
<blockquote>
<pre>
<code>/dev/loop0 / ext2 defaults 1 1
/dev/loop1 swap swap defaults 1 1
</code>
</pre></blockquote>
<p>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.</p>
<p>Si vous voulez être capable d'accéder à la
partition DOS après le démarrage de Linux, vous
devrez faire quelques petites modifications.</p>
<p>Créez un répertoire appelé
<code>/initrd</code>, qui sera le point de montage du disque
virtuel initial une fois que le système de fichier racine
sera monté en loopback.</p>
<p>Créez un lien symbolique appelé <code>/DOS</code>
qui pointe sur <code>/initrd/mnt</code> où la partition DOS
sera montée.</p>
<p>Ajoutez un ligne dans le fichier rc qui monte les disques. Il
devra lancer la commande <code>mount -f -t msdos /dev/hda1
/initrd/mnt</code> ; ceci créera un montage "fictif" de la
partition DOS pour que tous les autres programmes (comme
<code>df</code>) sachent que la partition DOS est montée et
où la trouver. Si vous avez utilisé des options
différentes dans <code>/linuxrc</code>, vous devrez
évidemment utiliser les mêmes ici.</p>
<p>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.</p>
<h2><a name="ss2.5">2.5 Création du
périphérique de mémoire virtuelle.</a></h2>
<p>Le périphérique que vous utiliserez sera le
fichier <code>linuxswap.img</code>. Le périphérique
de mémoire virtuelle <em>(swap)</em> 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 <code>mkswap linuxswap.img</code> pour
l'initialiser.</p>
<p>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.</p>
<h2><a name="ss2.6">2.6 Création du répertoire
MSDOS</a></h2>
<p>Les fichiers qui seront utilisés devront être
déplacés sur la partition DOS.</p>
<p>Les fichiers qui devront être dans le répertoire
DOS appelé <code>C:\LINUX</code> sont les suivants :</p>
<ul>
<li><code>LINUXDSK.IMG</code> L'image de la partition qui deviendra
le périphérique racine.</li>
<li><code>LINUXSWP.IMG</code> L'espace de mémoire
virtuelle.</li>
</ul>
<h2><a name="ss2.7">2.7 Création de la disquette de
démarrage.</a></h2>
<p>La disquette de démarrage qui est utilisée est
juste une disquette amorçable au format DOS.</p>
<p>On la crée en utilisant <code>format a: /s</code> sous
DOS.</p>
<p>Sur ce disque vous devrez créer un fichier
<code>AUTOEXEC.BAT</code> (comme ci-dessous) et copier le noyau, le
disque virtuel initial sous forme compressée et
l'exécutable <code>LOADLIN</code>.</p>
<ul>
<li><code>AUTOEXEC.BAT</code> Le fichier de commandes
exécuté automatiquement par le DOS.</li>
<li><code>LOADLIN.EXE</code> L'exécutable du programme
<code>LOADLIN</code>.</li>
<li><code>ZIMAGE</code> Le noyau Linux.</li>
<li><code>INITRDGZ.IMG</code> L'image compressée du disque
virtuel initial.</li>
</ul>
<p>Le fichier <code>AUTOEXEC.BAT</code> devrait contenir une seule
ligne comme ci-dessous.</p>
<blockquote>
<pre>
<code>\loadlin \zImage initrd=\initrdgz.img root=/dev/loop0 ro
</code>
</pre></blockquote>
<p>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.</p>
<h2><a name="s3">3. Démarrage du système</a></h2>
<p>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.</p>
<p>Vous verrez les événement suivants se
succéder :</p>
<ol>
<li>Chargement du DOS.</li>
<li>Démarrage AUTOEXEC.BAT</li>
<li>Lancement de LOADLIN</li>
<li>Copie du noyau Linux dans la mémoire</li>
<li>Le disque virtuel initial est copié en
mémoire</li>
<li>Le noyau Linux démarre</li>
<li>Le fichier <code>/linuxrc</code> sur le disque virtuel initial
est exécuté</li>
<li>La partition DOS est montée, ainsi que les
périphériques racine et de swap</li>
<li>La séquence de démarrage continue depuis le
périphérique loopback</li>
</ol>
<p>Une fois ceci accompli, vous pouvez retirer la disquette et
utiliser le système Linux.</p>
<h2><a name="ss3.1">3.1 Problèmes possibles et leurs
solutions</a></h2>
<p>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.</p>
<p>Le démarrage du DOS est facile à reconnaître
grâce au message qu'il affiche à l'écran :
<code>Démarrage de MS-DOS...</code> . 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.</p>
<p>Quand le fichier <code>AUTOEXEC.BAT</code> 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 <code>LOADLIN</code>.</p>
<p>Quand <code>LOADLIN</code> 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 <code>Loading...</code> .</p>
<p>Le noyau commence par se décompresser, ceci peut
engendrer des erreur <b>crc</b> 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.</p>
<p>Quand le fichier <code>/linuxrc</code> 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.</p>
<p>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
'<code>ro</code>' pour <code>LOADLIN</code> 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
<code>/etc/fstab</code>.</p>
<p>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.</p>
<h2><a name="ss3.2">3.2 Documents de
référence</a></h2>
<p>Les document que j'ai utilisés pour créer mon
premier périphérique racine en loopback sont :</p>
<ul>
<li>Les sources du noyau Linux, en particulier
<code>init/main.c</code></li>
<li>La documentation du noyau Linux, en particulier
<code>Documentation/initrd.txt</code> et
<code>Documentation/ramdisk.txt</code>.</li>
<li>La documentation de <code>LILO</code>.</li>
<li>La documentation de <code>LOADLIN</code>.</li>
</ul>
<h2><a name="s4">4. Autres possibilités de
périphériques racine en loopback</a></h2>
<p>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.</p>
<h2><a name="ss4.1">4.1 Installation "tout sur un disque
DOS"</a></h2>
<p>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.</p>
<p>Un menu de choix de configuration au démarrage peut
être utilisé pour donner l'option de lancer
<code>LOADLIN</code> depuis l'<code>AUTOEXEC.BAT</code>. Ceci
donnera une séquence de démarrage plus rapide, mais
c'est la seule différence.</p>
<h2><a name="ss4.2">4.2 Installation démarrée avec
LILO</a></h2>
<p>Utiliser <code>LOADLIN</code> n'est qu'une des options possibles
pour charger un noyau Linux. Il y a aussi <code>LILO</code> qui
fait pratiquement la même chose, mais sans nécessiter
DOS.</p>
<p>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.</p>
<p>La raison pour laquelle j'ai choisi la méthode avec
<code>LOADLIN</code> est que les arguments qui doivent être
données à <code>LILO</code> 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.</p>
<h2><a name="ss4.3">4.3 Installation VFAT / NTFS</a></h2>
<p>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. <a href=
"http://www.informatik.hu-berlin.de/~loewis/ntfs/">http://www.informatik.hu-berlin.de/~loewis/ntfs/</a>.
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.</p>
<p>Les seuls changements pour les options VFAT ou NTFS sont sur le
disque virtuel initial, le fichier <code>/linuxrc</code> doit
monter un système de fichiers de type vfat ou ntfs
plutôt que msdos.</p>
<p>Je ne connais pas de raison pour laquelle ceci ne marcherait pas
aussi sur une partition VFAT.</p>
<h2><a name="ss4.4">4.4 Installer Linux sans
repartitionner</a></h2>
<p>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.</p>
<p>Ceci pourrait être une alternative à une
installation <code>UMSDOS</code>, 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.</p>
<h2><a name="ss4.5">4.5 Démarrer depuis un
périphérique non amorçable</a></h2>
<p>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.</p>
<ul>
<li>CD-Rom</li>
<li>Disques Zip</li>
<li>Lecteurs de disques sur port parallèle</li>
</ul>
<p>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.</p>
</body>
</html>
|