Le boot
Introduction
Le boot est la phase d'initiation du système, le bootmanager ( ou gestionnaire de boot en francais ) ce charge de charger le système en mémoire, celui ci termine l'initiation du materiel, et parametre un interfacage entre le logiciel et le matériel, cette initiation du matériel à déja commencer lors du fonctionnement du programme contenu dans le matériel : le ou plutot les bios.
Le bootmanager, ou programme qui ce charge de charge le noyau ( linux par exemple ) est générallement contenu sur le disque. Il doit pour pouvoir être chargé, se trouver à un endroit précit du disque, ou de la mémoire. On peut ainsi booter un systè à partir du disque dur, du reseau, mais aussi d'une disquette ou d'un cdrom.
Commençons par les disques durs
Le disque dur
Un disque dur est générallement composer de plusieurs plateau, et dans la grande majorité de plusieurs tètes, cependant pour pouvoir acceder aux disque dur il y a une emulation qui fait croire a l'ordinateur qu'il y a plus de têtes que ce qu'il y a en réalité, ceci est liée a des problèmes historique d'adressages. Un disque dur fait générallement actuellement ( en 2005 ) entre 20 et 400 Go. On les découpe souvant en partition dans lesquels viennent ce metre des fichiers qui sont reférencer par un arbre ( arborescence ) contenu dans une table d'allocation des fichiers, elle peut directement liée les noms de fichiers a l'endroit ou ceci ce trouvent ou de façon plus indirecte pointer vers un ellement qui pointe vers les fichiers et details la façon d'y accéder. Donc pour trouver un fichier sur un disque ce n'est pas si évident que cela, pour cela le bios, qui est le programme qui initie les différents composant matériel de la machine, sais faire un minimum d'acces aux fichier, et dans ceux ci il y a faire un appel a un endroit précis du disque. Une fois que le bios a terminer son exécution, celui ci cede la mains soit à un programme présent toutes au début du disque : le MBR ( Master Boot Recorde ). Ou si celui- ci n'est pas présent ( cette zone ne contient pas le petit programme ) le bios exécute le secteur de boot d'une partition marquée comme bootable.
Le partitionnement
Il peut y avoir différent intéret a partitionner un disque dur : on sépart des information, on souhaites utiliser différent systèmes de fichiers, on veut une partition d'une taille bien défini afin d'utiliser du raid software avec un autre disque dur, ou simplement pour crée des zone ayant un espace limiter ceci ne peut helas être réalisé que partiellement par des quotas, par exemple on ne peut pas limiter séparrement l'usage qui est fait du /tmp et du /home, a moins que ces deux soit des partitions différentes.
Cependant à l'origine le partionnement à beaucoup été utilisé à des butes beaucoup moins glorieux : évité de perdre de la place a cause de block de taille minimal d'écritures : des clusters qui existait il y a pas tellement longtemps avec le système de fichier fat, les bloque prennais 32ko voir plus ( selon la taille du système de fichier ) ce qui engendrais une forte utilisation de place quand de très grand nombre de fichiers sont allouer, sous gnu/Linux en utilisant du ext2/3 on a par défaut des bloques de 4ko, ce qui sur 80000 fichiers représente 312 Mo, à la place de 2.44 Go.
Sur une machine x86 standare, il y a peut y avoir au max 4 partition r&eacut;el, suivie d'un grand nombre de partition etendu. Une premiere table : celle des partitions principale est contenu dans le secteur MBR ( master boot record ), juste apres l'eventuel programme de 446 octets, l'ensemble en fessant 512. La table en elle meme est contenu de case decrivant chaque partition 1 octet dissant si oui ou non elle est activer, puis 1 octet donnant le type, puis sur 2 fois 3 octets l'endroit de depart et l'endroit de fin ( e addressage CHS (voulant dire cylinder, head, sector )), suivie de 2 fois 4 octets une fois pour le secteur de depart suivie du nombre de secteurs totale. En principe ce format de table des partition n'est pas obligatoir pour pouvoir booter, et encore moins pour un disque qui ne boot pas, car le MBR peut directement pointer vers le chargeur du noyau, ce qui permet d'avoir bessoin de savoir quelle partition fait quoi uniquement lors du boot de l'os, le noyau linux est capable de gerer d'autre format de table de partition que celui utilisé par defaut.
Les partitions étendues
Il existe des types de partition speciaux : les partition étendu qui permettent d'augementer le nombre de partition que l'on peut faire.
Types des paritions
Donner les bon type aux partitions peut être important pour certains systeme d'exploitation mais ne l'est pas pour linux, cependant c'est toujours plus propre de laisser ce genre d'information.
Les types souvant rencontrer sont:
- 83 : paritition linux
- 82 : paritition linux swap
- 6,b,c : paritition vfat ( FAT16, FAT 32, FAT 32 LBA )
- 7 : paritition ntfs
Outilage
Certains programme de gestion de disque ce servent aussi de ces informations. Pour partitionner le disque il existe differents outils sous gnu/Linux, tel que fdisk ( celui que j'utilise ), cfdisk ( plus graphique avec curse ), sfdisk quand a lui permet de cree des partitions, et une gestion complete a partir de la ligne de commande, ce qui est assez symatique dans certains cas, il existe aussi parted que je ne connais pas.
Avant de manipuler les partitions il est conseiller de faire une sauvegardes des donner qui sont sur le disque, à moins d'être sure de ce que l'on fait
- options de fdisk
- -l : liste
- -u : fdisk fonctionne en unité secteurs
- commande fdisk :
- m : affiche l'aide
- d : supprime une partition
- n : ajoute une partition
- u : fdisk fonctionne en unité secteurs
- t : change le type d'une partition
- p : affiche la table des partition
- w : écrit la table modifié
- q : part de fdisk sans ecrire les modification
- a : rend une partition bootable
Nomenclature des disques durs sous gnu/Linux.
Le systeme de nomenclature est assez simple :
/dev/hd pour les disques durs ide
/dev/sd pour les disques durs scsi
puis
a,b,c... : selon la position du disque sur le controleur, les controleur pouvant en generale utiliser deux disque chaqu'un on aurra sur une machine avec une carte mere comportant 2 connecteurs ide : hda,hdb sur le premier cable et hdc et hdd sur le second. hdb et hdd &eacut;tant les disque en mode esclave.
Les choses ce compliquent un peu quand on a un controleur type sata, ceux si sont souvant pas détecté par le noyau, il faut alors charger un module, ce module devra être inclus dans un ramdisque ( un disque virtuel de quelques Mo contenu dans la mémoire vive ) celui ci est nommée initrd. Le probleme est que selon les noyau tout particulierement entre le passage de deux version majeurs de noyau la façon de prendre en charge le disque change, une fois les disque sur le controleur sata sont reconnu comme des disque scsi, auxquel cas on parlera de /dev/sda ... dans d'autres cas on parlera de /dev/hde ou hdg ... ceci peut être génant pour le boot du noyau, moins pour lilo car lilo n'utilise pas des drivers pour fonctionner, il passe par un acces bios. Ceci est un point très important, qui pose souvant des probleme : lilo fonctionne : il charge le noyau correctement, générallement avec le ramdisk, mais le noyau ne peut pas charge le systeme : il affiche un message du type "Kernel Panick"
Permissions des disques
Bon c'est souvant une erreur que l'on peut faire : il faut laisser les partition inaccesibles en lecture ainsi qu'en ecriture aux utilisateurs ( others ). Le fichier de configuration de lilo pouvant contenir un mot de passe, il est bon d'interdire son acces a tous les utilsateurs,
Lilo
Lilo permet le debut du chargement du noyau, ou permet de charger un autre chargeur de boot, en générale celui est fait par tous les boot manager, on peut utiliser des gestionnaire de disque qui ne savent pas charger un noyau comme linux. Un fichier "/etc/lilo.conf" permet en générale de préciser les options sur comment installer lilo, l'installation de celui-ci doit ce faire après la modification des fichier de configuration, par la commande "lilo" ( /sbin/lilo ). Lors d'une installation d'un nouveau noyau il est absolument indispensable de modifier le fihcier lilo.conf, il est conseiller de garder une version dont on est sure du fonctionnement, le noyau par défaut, ce précise avec default=", "image=" ou other permettent de préciser une partition ou booter et démarrent une section ou l'on précise au moins un label : "label=", label qui servira a préciser le noyau qui boot par défaut. Lilo permet de chargement d'un ramdisk en plus du noyau. Celui ci se precise par l'option initrd= , on peut specifier ou installer la partie "lourde" du chargeur de boot install=, il faut aussi preciser un "map=" qui permet de precisser l'endroit ou ce trouve le 'programme' d'addressage par secteur cette option est necessaire sur les vielle ( très vielles ) machines <98 . On dispose d'une option permettant l'affichage d'un menu a choix : "prompt". Il faut préciser l'endroit ou l'on veut installer lilo par exemple /dev/hda l'endroit ou l'on install lilo : soit le MBR, soit au début d'une partition ( secteur de boot des partitions), soit dans un fichiers que l'on pourra faire charger par des programme qui utilise des fichier pour continuer le boot, on peut par exemple citer le chargeur de boot de windows ntdlr+ntdetect, la partition racine
root=
. On précise aussi une partition par défaut default=
et un timeout=
: temps au bout du quelle le choix par défaut se charge. On peut égallement préciser l'option lba32 qui permet a lilo d'utiliser l'adressage par secteur ( permet d'adresser des noyau sur des partition éloigné du début du disque
En utilisant lilo on remarque que l'on peut rajouter des options aux noyau, parmis ces options, il y a root= qui permet de changer le root ce qui peut être très utile lors de changement de version de noyau quand certains controleurs ide ou sata sont prise en compte d'autre façons. On pourra voir les options choissi dans le fichier du systeme de fichier proc /proc/cmdline.. L'option "read-only" dans le fichier de configuration de lilo dans les sections permettent de faire que au debut le noyau charge le disque en lecture seul.
+
On peut ce réfferer au manuel de lilo et de lilo.conf, avec la commande man lilo... . On peut ainsi avec lilo echanger les lettre bios des disque, c'est a dire par exemple faire croire que le lecteur disquette b est en faite le a..., ceci ce fait avec "map-drive", on peut aussi metre un mot de passe ( il faudra dans ce cas rendre /etc/lilo.conf innaccessible en lecture sauf par root ), metre l'option restricted qui permet d'empecher d'ajouter des options ( en plus de celle qui sont dans la liste append ), ce qui est tr&eagrave;s utile, indispensable pour des ordinateurs accessible au public. On peut aussi changer les types de partitions, ces changement ne serront pas garder reelement sur le disque mais apparaiteront à l'os. L'option "backup=[fichier]", permet de faire des backup des ancien MBR, ca peut être assé pratique, les ancienne version des backup ne sont pas écrasé. L'option "prompt" permet de l'affichage d'un menu a choix ou l'on peut ce déplacer avec les fleches, les options "bitmap=" ou "message=" permettent quand à elle de préciser une bitmap afficher lors du boot ou bien ( on peut pas mêtre les 2 à la fois ) un message. On peut égallement préciser un autre fichier de configuration pour lilo, faire parler lilo un peu plus avec le paramètre -v...
Bon on doit a peu près avoir fait le tour avec lilo
Problème avec lilo
Il arrive a mon sence pour des raisons misterieuses que lilo ne fonctionne pas, il affiche alors seullement un bout de Lilo: genre Li et s'arrète. dans ce type de cas une simple réinstallation de lilo peut aider. Cependant ceci n'est pas ci facile que ca car la machine ne boot plus :-) a moins d'avoir une solution de secoure par un loadlin ( chargeur de linux a partir de dos ), ou une disquette. On peut cependant s'en sortir sans trop de probleme grace a un cd de démarrage d'installation de debian ou d'autre distribution, on fait un CTRL-ALT-F2, ou FX avec X tel que l'on ai un terminal, une fois que l'on a un terminal, il faut monter la partition dans target par exemple, puis on monte le systeme de fichier proc, on chroot, puis on lance lilo. Il peut être sympatique d'avoir configurer le clavier en francais. Cette procédurs fonctionnera aussi à partir d'une demolinux ou un systeme de secours
Commande a executer :
busybox-bash# mount /dev/hda4 /target
busybox-bash# mount -t proc proc /target/proc
busybox-bash# cd /target
busybox-bash# chroot .
bash# lilo
bash# exit
busybox-bash# cd /
busybox-bash# umount /target/proc
busybox-bash# umount /target
Autres options de boot
Le root constitue deja une option importante, mais il en existe d'autre, les options peuvent après le chargement du noyau être recupperer par le fichier /proc/cmdline.
- noapic : l'apic est un gestionnaire d'interuption, il pose souvant des probleme lors du chargement du noyau
- nodevfs : le devfs est un systeme de fichier dynamique qui cree les fichier qui sont dans les dev, mais ceux si sont disposer dans des répertoires, ranger en fonction du type de peripherique
- init : précise le programme qui se charge avec le pid=0 : on peut ainsi utiliser un autre programme que init
- hdX=ide-scsi : précise que hdX doit être utiliser avec l'emulation scsi, le peripherique serra alors accessible par /dev/sr0
- nfsroot= précise le répertoire racine
On trouve d'autres options dans le fichiers /etc/src/linux/Documentation/kernel-parameters.txt
Initrd
Le initrd est un fichier que lilo charge en mémoire, il est générallement constitué des quelques programme de configuration de la machine, de modules qui se charge, il peut gerrer le raid software pour le root, ou l'usage d'un disque crypte, ou encore monter un systeme de fichier reseau autre que nfs en root, ou simplement utiliser un controleur disque un peu particulier sans avoir a inclure celui ci dans le noyau ( ce qui évite juste d'avoir a recompiler le noyau, cela n'augemente pas la sécurite de le laisser juste en module ). Ces fichier sont aux sur un systeme de fichier cramfs qui est un systeme de fichier unix ( avec permission ), compresser.
On trouve de la documentation au sujet des disque initrd dans /usr/src/Documentation/initrd.txt
L'utilitaire mkinitrd permet de crée des ramdisk de façon simple.
Mkinitrd
Plus loin dans le boot
Une fois que le noyau est charger il y a chargement du programme /sbin/init, qui s'occupe de monter les partitions ( ou pour / de la remonter en read-write (rw) ) et de les vérifier en utilisant la les points de montage et les vérification qu'il faut faire qui sont préciser dans le fichier "/etc/fstab". Il lit aussi "/etc/inittab" qui demande a init de lancer un certain niveau des démarage, et précise ou quelle commande charger le systeme à tel ou tel niveau. Ce script chargera les programmes du genres apache, enfin tout ce qui se trouve dans le /etc/rc2.d/ ( sous debian ), ce sont des liens symboliques vers des scriptes qui se trouve dans /etc/init.d/. Ceux qui démarrent commence par S, pour l'arret du système, ils commencent par K ( répertoire /etc/rc0 et /etc/rc6 pour l'arret ou le redémarrage ). Les script sont lancé avec le parametre start, qui les démarrent, ou avec l'option stop pour les arreters, lors de l'arret du système. Le programme init monte les partition tel qu'indiqué dans /etc/fstab. Le fichier /etc/module permettera de charger des modules qui ne sont pas essentielle au chargement du système, le son par exemple.