Module 1
Chapitre 07 - Gestion des disques
1. Boot-loader
1.1 Qu'est ce que le boot-loader?
Le boot loader est un programme lancé juste après le chargement du Bios. Il permettra à l’utilisateur de choisir quel système d’exploitation il veut lancer. Dans le cas de linux, le boot loader permet aussi de choisir quel noyau l’utilisateur veut charger.
Il existe deux principaux bootloaders sous Linux qui sont Grub et Lilo. Il en existe d’autre, mais nous ne les verrons pas dans ce cours.
Le bootloader peut faciliter la réparation d'un système Linux dans certains cas (perte du mot de passe root, maintenance sur les systèmes de fichiers).
1.2 Démarrage
Que se passe-t'il entre le moment où l'on allume sa machine jusqu'au moment où l'on entre son login et mot de passe :

le BIOS effectue une série de tests sur le matériel (RAM, détection des disques, ...) nommé POST : Power On Self Test. C'est pendant cette étape que l'utilisateur peut appuyer sur une touche pour entrer dans le BIOS.
le bootloader est chargé en mémoire, l'utilisateur peut alors choisir le système à démarrer
le noyau linux est chargé en mémoire par le bootloader, il s'initialise, détecte les périphériques, ...
le noyau passe alors la main au programme sysvinit, souvent dénommé init, père de tous les processus. En effet c'est ce programme ayant comme PID 1, qui va lancer tous les services au démarrage.
init lance en dernier un terminal virtuel qui demande un login/password pour ouvrir un shell
Bootloader utilisé suivant les os
Windows | Linux |
NTLDR | Lilo |
Grub |
2. Configuration de lilo et grub
2.1 Lilo
Lilo est le bootloader le plus connu sous linux car c’est l’un des plus vieux. Il ne peut pas être installé sur tous les systèmes de fichier, mais il est compatible avec les plus répandus : ext2, ext3, ...
Lilo est séparé en deux stages
le stage_1 est un petit programme (<= 512 octets) pouvant être placé dans le MBR (Master Boot Record) ou une disquette. Ce stage fait appel au second qui possède plus d'espace mémoire
le stage_2, appelée chargeur d'amorçage, est généralement placé sur le disque dur. Il offre un menu permettant la sélection des systèmes d'exploitations et de charger le noyau en RAM
Lilo est configuré grâce au fichier de configuration : /etc/lilo.conf
A chaque modification du fichier de configuration, la commande /sbin/lilo doit obligatoirement être exécutée pour mettre à jour le stage_1.
boot = /dev/hda # Emplacement du stage_1, ici le MBR
default = Linux # Image à lancer par défaut (voir ci-dessous)
timeout = 100 # Temps en dixeme de secondes
# avant de booter sur l’image par défaut
prompt # Affiche la liste des images
message=/boot/message # Fichier contenant le texte qui sera affiché
password = secret # Le mot de passe en clair
restricted # Un mot de passe sera demande si l’utilisateur
# ajoute des options à une image
## Configuration pour linux
image=/boot/bzImage # Specifie l'emplacement du noyau
label=linux # Nom affiche dans le menu
initrd=/boot/initrd.img # Image ramdisk
read-only # Montera « / » en lecture seul
root=/dev/hda5 # partition où se trouve « / »
## Configuration pour non-Linux
other=/dev/hda1
label=windows
2.2 Grub
Grub (Gnu Grand Unified Bootloader) est un bootloader qui devient de plus en plus courant.
Comme lilo, grub fonctionne par stages.
En plus des 2 stages évoqués dans lilo, grub intègre un stage intermédiaire, le stage 1_5 qui permet de charger le stage 2 sur n'importe quel système de fichier.
Pour installer Grub il faut taper les commandes suivantes.
root@localhost # grub
grub> root (hd0,1) # partition où sont les fichiers
# de configuration de grub
grub> setup (hd0) # Emplacement du stage_1, ici le MBR
grub> quit
Comme lilo, grub possède un fichier de configuration : "/boot/grub/grub.conf"
timeout=30 # Temps d'attente en seconde avant le démarrage par défaut.
default=0 # Système par défaut, ici le premier de la liste.
splashimage=(hd0,1)/grub/splash.xpm.gz # image de fond
## Configuration pour Linux
title Linux # Nom qui apparaitra dans la liste
root (hd1,0) # Partition où sont les fichiers
# de configuration de grub
kernel /boot/vmlinuz-2.4.25 root=/dev/hdb2
# Emplacement de l’image suivit de la partion “/”
initrd /initrd.img # Image ramdisk
## Configuration pour Windows
title Windows
rootnoverify (hd0,0)
chainloader +1
3. Boot loader sur disquette
L'un des autres moyens de booter un système est de placer le boot loader sur disquette.
Ceci peut être très utile si on écrase le MBR, ou si une erreur dans un fichier de configuration empêche la machine de redémarrer.
3.1 Lilo
L'installation de lilo sur disquette se fait en changeant l’option "boot" du fichier de configuration.
boot=/dev/fd0
Puis on exécute la commande lilo pour copier le stage_1 sur une disquette.
3.2 Grub
Pour grub, pas besoin de modifier le fichier de configuration. On va simplement copier les deux stages sur deux disquettes.
Premièrement, formatez les deux disquettes
roto@localhost # fdformat /dev/fd0
root@localhost # mke2fs /dev/fd0
Copiez les deux stages sur deux disquettes différentes, sinon vous écraserez le premier.
root@localhost # dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
root@localhost # dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 count=1
Rendre la disquette contenant le stage 1 bootable
root@localhost # grub
grub> root(fd0)
grub> setup(fd0)
grub> quit
4. Gestion des disques
4.1 Les disques durs sous Linux
Comme vu précédemment, sous Linux tout est représenté par un fichier. Les disques durs n'échappent pas à cette règle. Par convention tous les périphériques sont représentés dans le dossier "/dev". On distingue deux types de disques : les IDE et les SCSI. Ils sont nommés respectivement "hd" et "sd" suivit d'une lettre et d'un chiffre. La lettre représente la position du disque sur le bus et le chiffre représente l'une des partition de ce disque.
Par exemple, le disque maître du premier contrôleur IDE sera nommé "/dev/hda". La seconde partition de ce disque sera "/dev/hda2".
4.2 Partitions
Un disque ne peut contenir que 4 partitions primaires. Mais il est possible de remplacer une partition primaire par une partition étendue. Cette partition étendue peut contenir maximum 12 partitions logiques. Notre disque pourra donc, au maximum, contenir 15 partitions utilisables soit 3 primaires plus les 12 partitions logiques.
Cette méthode est la plus utilisée, indépendemment du système d'exploitation. Il existe une autre méthode appelé LVM (Logic Volume Manager) mais elle ne sera pas abordée dans ce cours.
Sous Linux, contrairement à Windows, chaque partition n'est pas représentée sous forme de lecteur. Nous allons pouvoir monter, c'est à dire ajouter cet espace disponible à notre système de dossier hiérarchique.
Par exemple si notre machine fait office de serveur FTP, nous pourrons créer une partition dédiée qui sera montée dans "/var/ftp/". Ainsi le serveur FTP n'utilisera pas la place réservée aux utilisateurs ou aux fichiers de logs.
Il faudra aussi prévoir une partition réservée à la swap.
4.2.1 Partitionner un disque dur
Il existe plusieurs outils pour partitionner un disque dur sous linux. Les plus communs sont :
fdisk : utilitaire en mode texte avec menu interactif
cfdisk : utilitaire en mode curses (pseudo graphique) avec une liste des partitions.
Ces deux utilitaires se lancent de la même façon :
commande /dev/disk
Il est possible de modifier les partitions d'un disque dur en cours d'utilisation. Mais vous devrez redémarrer pour que les changements soient prises en compte.
Voici un exemple avec fdisk
Nous allons créer 1 partition primaire contenant la swap (512Mo) et une partition logique contenant "/" (5Go)
root@localhost # fdisk /dev/hda
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2434, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-2434, default 2434): +512M
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (64-2434, default 64):
Using default value 64
Last cylinder or +size or +sizeM or +sizeK (64-2434, default 2434):
Using default value 2434
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (64-2434, default 64):
Using default value 64
Last cylinder or +size or +sizeM or +sizeK (64-2434, default 2434): +5000M
Command (m for help): p
Disk /dev/hda: 20.0 GB, 20020396032 bytes
255 heads, 63 sectors/track, 2434 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 63 506016 82 Linux swap
/dev/hda2 64 2434 19045057+ 5 Extended
/dev/hda5 64 672 4891761 83 Linux
Command (m for help): w
Writing table partition
m | Aide |
p | Affiche l'état du disque |
n | Crée une nouvelle partition |
d | Supprime une partition |
t | Change le type de partition (82 : Linux Swap, 83 : Linux Native) |
w | Sauver et quitter |
q | Quitter sans sauver |
4.2.2 Formater une partition
Une fois nos partitions créées, il faut les formater afin de pouvoir créer un système de fichier dessus.
Le système de fichier indique, entre autres, comment organiser les données sur le disque dur.
Dans la majorité des cas, nous utiliserons la commande mkfs. Certains systèmes de fichiers utilisent leur propre commande, nous les verrons ci-dessous.
Il existe deux moyens d'utiliser la commande mkfs :
mkfs -t type /dev/partition
mkfs.type /dev/partition
voici un tableau des systèmes de fichiers utilisables sous linux avec la commande à utiliser.
swap | mkswap |
ext2 | mke2fs, mkfs -t ext2, mkfs.ext2 |
ext3 | mke2fs -j, mkfs -t ext3, mkfs.ext3 |
reiserfs | mkreiserfs |
xfs | mkfs -t xfs, mkfs.xfs |
jfs | mkfs -t jfs, mkfs.jfs |
vfat | mkfs -t vfat, mkfs.vfat |
4.3 Access aux périphériques de stockage
Une fois le disque dur partitionné et formaté, nous allons pouvoir l'utiliser. Comme dit précedemment, pour accéder à ce disque nous allons devoir le monter. Le terme monter signifie que nous allons ajoute un disque ou un partage réseau à notre arborescence.
Concrètement, nous allons définir un répertoire, appelé point de montage, qui va pointer vers la ressource voulue.
Par convention, les points de montage sont regroupés dans le dossier "/mnt".
4.3.1 commande mount / umount
La commande mount va permettre de monter un périphérique. Si l'on utilise la commande mount sans paramètres, on obtiendra la liste des périphériques déjà montés.
Syntaxe :
mount -t type /dev/partition /mnt/dir
L'option -t renseigne le système de fichier utilisé. On peut mettre auto pour que mount essaye de trouver le système de fichier lui-même.
Pour connaître tous les systèmes de fichier supportés par votre noyau, consultez le fichier "/proc/filesystems"
Il est possible de passer plus d'options grâce à l'argument -o (voir tableau ci-dessous)
La commande umount va, au contraire, démonter un périphérique.
Syntaxe :
umount /mnt/dir
4.3.2 fichier /etc/fstab
Ce fichier va nous être utile pour deux choses. Premièrement, on va pouvoir y entrer toutes les partitions à monter automatiquement au démarrage. Deuxièmement, faciliter l'utilisation de la commande mount, en entrant toutes les options à utiliser pour chaque périphérique.
Dans le ficher "/etc/fstab" chaque ligne représente un périphérique à monter. Chaque ligne est composée de six parties :
le chemin du périphérique
le point de montage
le système de fichier
les options (argument -o de mount)
dump : activer ou non la sauvegarde du disque avec l'utilitaire dump (1 ou 0)
fsck : activer ou non la vérification du système de fichier avec l'utilitaire fsck (0, 1, 2 ou 3)
Exemple de fichier /etc/fstab
/dev/hda1 none swap sw 0 0
/dev/hda5 / ext3 defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,users,ro 0 0
Gr?ce à ce fichier, maintenant les deux commandes suivantes sont équivalentes.
mount -t iso9660 -o noauto,users,ro /dev/cdrom /mnt/cdrom
mount /mnt/cdrom
no/auto | Monte automatiquement le périphérique |
defaults | Active rw, suid, exec, auto, nouser |
no/exec | Autorise l'exécution de binaires |
no/suid | Autorise l'utilisation du suid et guid |
ro | Lecture seule |
rw | Lecture écriture |
nom d'utilisateur | Autorise un utilisateur à monter et démonter un périphérique |
no/users | Autorise tous les utilisateurs à monter ou démonter un périphérique |