Vous êtes sur la page 1sur 72

Chapitre 1 - Introduction

Unix est né de la volonté de Ken Thompson et Dennis Ritchie, issue de Bell Labs, de faire un système d'exploitation à la fois
multitâches et multi utilisateurs, ce système a vu le jour en 1969.

Dans la philosophie qui a accompagné la création d'UNIX, il était question de concevoir de petits programmes ne faisant qu'un
nombre limité de tâches, mais le faisant bien.

Afin de les combiner il a été rapidement question d'utiliser des pipes et redirections.

Depuis cette période, une quantité astronomique d'Unix ont vu le jour dont, parmi eux des Unix gratuits, comme celui de
l'université de Berkeley dont sont dérivés les célèbres OpenBSD, NetBSD, FreeBSD, TrustedBSD, BSDi...

Concernant le système GNU/Linux, il a vu le jour en 1991 par un étudiant finlandais, Linus Torvalds.

Linux a su garder, au fil de ses évolutions, l'héritage des tous premiers systèmes Unix.

Parallèlement à cela, une philosophie nouvelle est apparu concernant le partage des connaissances, protégée par une licence
qui garantirait la transparence des fichiers sources et la possibilité de les modifier.

C'est la naissance de la GPL ("Gnu Public License") et de la FSF ("Free Software Foundation") toutes deux fondées par Richard
Stallman.

Depuis cette période, les Unix "conventionnels" ont fait leurs preuves et leur temps, et sont morts de leur manque d'ouverture
vers le monde et les nouvelles technologies. En effet, la plupart des Unix étaient vendus avec des machines propriétaires.

Chapitre 2 - Etayage du shell

1. Les terminaux

Les systèmes Unix/Linux furent à l'origine conçus pour fonctionner en mode texte, sans interface graphique.

Bien qu'aujourd'hui de nombreuses interfaces graphiques permettant de configurer le système ont été développées, il demeure
totalement administrable en ligne de commande (CLI - Command Line Interface), cette méthode restant la plus simple et la plus
puissante.

Cette ligne de commande est accessible via les terminaux qui jouent le rôle d'interface utilisateur/machine et fonctionnent avec
un interpréteur de commandes : le shell.

Il est possible de se connecter sur plusieurs terminaux via la combinaison des touches Alt+Fn où Fn est une touche de fonction
(Ex : F1,F2...).

Note : Depuis un environnement graphique, il est possible de revenir sur un terminal via la combinaison des touches
Ctrl+Alt+Fn. Pour revenir au mode graphique, il faut en général utiliser la combinaison Alt+F7.

2. Le shell
Le rôle du Shell est d'assurer la correspondance entre ce que l'utilisateur tape et le système. Il en existe de nombreuses
versions. Le plus connus d'entre eux, bash est celui que nous utiliserons pendant ce cours.

Chacun des shells existant dispose de ses propres avantages et points faible. L'intérêt d'avoir un shell plutôt qu'un autre dépend
des fonctionnalités offertes par celui-ci, et donc de l'utilisation que l'on souhaite en avoir.

1
Le tableau suivant vous présente les principaux shells ainsi que leurs caractéristiques.

Nom Description
bas (Bourne Again Shell) offre l'édition de la ligne de commande et le rappel des commandes
h précédentes
(C Shell) développé à Berkeley, compatible avec le shell Bourne. Pas d'édition de la ligne de
csh
commande ni d'historique des commandes
ksh (Korn Shell) offre l'édition de la ligne de commande (touches compatibles Emacs)
sh le shell original, pas d'édition de la ligne de commande.
version améliorée du csh, avec un support de l'édition de la ligne de commande avec correction
tcsh
des commandes tapées
shell similaire au Korn shell, avec plus de dynamisme lors des affichages et gère la non
zsh
redondance des commandes.

Un système Unix / Linux fonctionne à l'aide d'une multitude de programmes qui assurent, en général, chacun une fonction bien
distincte et sont capables de communiquer au sein du shell.

Afin de pouvoir accéder au terminal, vous devez au préalable vous identifier grâce à un couple login/mot de passe. En fonction
de cela, vous aurez accès à plus ou moins de programmes sur le système.

On distingue principalement 2 types de comptes utilisables sur le système :

 Le compte utilisateur classique


 Le compte root (Administrateur)

Un symbole de l'invite de commande vous permet de determiner le type de compte que vous utilisez.

 Accés simple utilisateur :

user@localhost $

 Accés root :

root@localhost #

3. Utilisation de l'aide
3.1 Les pages de manuel ou man pages

Sur un système Unix / Linux, la plupart des logiciels sont installés avec un manuel accessible par la commande man.

La syntaxe est la suivante :

man fonction_ou_commande

2
La commande : man man donne des informations sur l'utilisation du manuel en général.

La commande man peut également être utilisée pour rechercher un terme dans l'ensemble des pages de manuel, grâce à
l'option -K

user@localhost $ man -K "disk space"

Celle-ci me retourne :

/usr/share/man/man1p/df.1p.gz? [ynq]

Correspondant à une occurrence de "disk space" dans la liste des manuels disponibles sur le système.

Afin de se déplacer dans les résultats, les commandes suivantes sont disponibles :

Commande Description
y Afficher le manuel du résultat
n L'occurrence continue d'être recherchée dans la liste des manuels
q Retour au shell

Il peut arriver que plusieurs manuels soient disponibles pour une même commande. Il suffit alors de préciser en paramètre de
la commande man la section à rechercher.

Il suffit alors de saisir man 2 ex_prog ou man 7 ex_prog pour avoir l'aide souhaitée.

Afin de naviguer dans le manuel, il convient d'utiliser les touches haut et bas mais aussi les commandes suivantes :

Commande Description
Espace Avance dans le manuel d'une page entière
Entrée Avance dans le manuel d'une ligne
b Recule dans le manuel d'une page
/mot Recherche mot dans le manuel. Ce peut être un nom ou une expression régulière
q Quitte le manuel

3.2 Aide simplifiée

Nous venons de voir qu'il était possible de connaître la définition d'une commande par le manuel de celle-ci, mais il est aussi
possible d'en avoir un résumé via l'option -help.

3
user@localhost $ df --help
Usage: df [OPTION]... [FILE]...
Show information about the filesystem on which each FILE resides,
or all filesystems by default.

Mandatory arguments to long options are mandatory for short options too.
-a, --all include filesystems having 0 blocks
-B, --block-size=SIZE use SIZE-byte blocks
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
-H, --si likewise, but use powers of 1000 not 1024
-i, --inodes list inode information instead of block usage
-k like --block-size=1K

Celle-ci permet donc de voir rapidement ou encore de vérifier l'existence d'une option

Chapitre 3 - Commandes de base

Suite de commandes utiles à l’utilisation de votre machine sous Linux

Opérations sur les fichiers et répertoires

Nous allons lister ici, une suite de commandes utiles à l’utilisation de votre machine sous Linux :

Equivalence
But de la commande Linux
MsDos
Se déplace vers le répertoire rep cd rep cd rep
Liste le contenu d’un répertoire (-R pour un listage récursif) ls rep dir
Copie un fichier source vers un fichier destination (-R pour un cp source
copy
répertoire) destination
Déplace un fichier source vers une destination (peux servir à mv source
move
renommer un fichier destination
Crée un répertoire mkdir rep mkdir rep
del / deltree
Efface un fichier (-rf pour effacer un répertoire) rm fichier
fichier
Crée un lien destination qui va pointer sur une source (-s ln source
non disponible
pour un lien symbolique) destination
Met à jour la date de modification du fichier, ou crée un touch fichier ou
non disponible
fichier vide si le fichier n’existe pas. repertoire

Lecture de fichier

cat fichier Affiche le contenu du fichier sur la sortie standard


Lit le contenu d’un fichier page par page. (Il doit lire l’intégralité du fichier avant de
more fichier
l’afficher)
Equivalent à more sauf qu’il n’est pas obligé de lire l’intégralité du fichier et permet
less fichier
de remonter dans l'affichage
4
N’affiche que les dernières lignes d’un fichier (-n permet de spécifier le nombre de
tail fichier
lignes à afficher)
head fichier Comme tail, mais affiche les N premières lignes d’un fichier (N=10 par défaut)
grep "chaine" Recherche l’occurence d’une chaine de caractères "chaine" dans un ou plusieurs
fichier fichiers

Noms, attributs des fichiers et globbing


3.1 Noms des fichiers

Les noms de fichiers sont "case sensitives", c’est à dire qu’ils tiennent compte des majuscules et des minuscules. Le nom d’un
fichier peut contenir jusqu’à 255 caractères.

Pour accéder à un fichier comportant des caractères spéciaux dans son nom, on doit placer le nom du fichier entre guillemets
(ou utiliser des backslash avant les caractères spéciaux) :

luser@localhost $ vi "ceci est un test.txt"


luser@localhost $ vi ceci\ est\ un\ test.txt

3.2 Attributs des fichiers

Pour lister le contenu d’un répertoire, nous utiliserons la commande ls

Afin de disposer de plus d'informations, nous ajouterons l’option -l

luser@localhost $ cd /tmp
luser@localhost $ mkdir un_repertoire
luser@localhost $ touch un_fichier
luser@localhost $ ln -s un_fichier un_lien

luser@localhost $ ls
un_fichier un_lien un_repertoire

luser@localhost $ ls -l
total 4
-rw-r--r-- 1 ualc galc 10 Dec 3 00:42 un_fichier
lrwxrwxrwx 1 ualc galc 10 Dec 3 00:43 un_lien -> un_fichier
drwxr-xr-x 2 ualc galc 4096 Dec 3 00:42 un_repertoire

Notons que les fichiers ou répertoires débutant par un "." sont cachés, c'est-à-dire qu’ils ne seront pas visible avec la commande
ls. Si nous souhaitons voir les fichiers cachés, on passe en argument -a à ls :

luser@localhost $ ls
toto profile tools

luser@localhost $ ls -a
. .profile
.. .rhosts

5
.cshrc .shrc
.login tools
.login_conf profile
.mail_aliases toto
.mailrc test.c

Le type du fichier est reconnaissable par la présence d'un symbole à l'extrême gauche du listing :

- Fichier ordinaire
d Répertoire
l Lien symbolique

4. Le globbing

Le globbing est l’utilisation de caractères spéciaux tels que "*", "?".

 *: correspond à aucun ou plusieurs caractères


 ? : correspond à un caractère
 [a-z] : correspond à un ensemble de caractères
 [^a-z] : correspond à tous les caractères sauf ceux de cet ensemble

Voici la liste des fichiers utilisés pour l'exemple :

luser@localhost $ ls
index.htm sommaire.htm t0st.c table.htm test.c

On affiche tous les fichiers finissant par ".htm"

luser@localhost $ ls *.htm
index.htm sommaire.htm table.htm

On affiche tous les fichiers sauf les fichiers finissant par la chaîne "htm".

6
luser@localhost $ ls *[^htm]
t0st.c test.c

Exemple avec "?" qui signifie un caractère non vide :

luser@localhost $ ls t?st.c
t0st.c test.c

On affiche tous les fichiers comportant "st" dans le nom :

luser@localhost $ ls *st*
t0st.c test.c

5. L'editeur VIm
Nous avons choisis de vous présenter cet éditeur de texte car c'est le plus utilisé sur la plupart des systèmes UNIX. VIm est une
version améliorée de l'éditeur VI, possédant plus de commandes et d'options. VI est toujours le plus distribué sur les systèmes
Unix, mais une maitrise de VIm vous permettra de vous débrouiller avec l'éditeur VI.

Le logiciel "vimtutor" permet d'apprendre les principales commandes très simplement, en vous les présentants pas à pas.

5.1 Appel de l’éditeur

Editer un fichier s’il existe, sinon, éditer un nouveau fichier vide :

vi fichier

Editer chacun des fichiers :

vi fichier_1 fichier_2

5.2 Modes d’édition

Contrairement aux éditeurs wysiwyg (what you see is what you get) VIm fonctionne par mode.

2 modes bien distincts existent :

Le mode insertion :

Les caractères tapés s'insèrent directement dans le texte en cours

Le mode commande
7
Les caractères tapés sont considérés comme des commandes d'édition de texte

Le logiciel démarre par defaut en mode commande.

i permet de passer en mode insertion

: permet de passer en mode commande

ESC permet de sortir des différents modes.

Le tableau ci-dessous présente les commandes principales à utiliser en mode commande.

Command
Description
e
:w Sauvegarde les changements
:q Quitte le document en cours
:q! Quitte le document en cours sans sauvegarder les changements
:wq Enregistre et quitte l'editeur
:f file2 Enregistre sous un autre nom le document (équivalent de enregistrer sous)
Recherche l'occurence hop et la met en surbrillance, "n" se positionne sur la prochaine
/hop
occurence
v Permet de passer en mode visualisation pour faire une sélection par exemple
d Equivalent de couper, aprés une sélection par exemple
dd Coupe la ligne entière
y Equivalent de copier, après une sélection par exemple
yy Copie la ligne entière
p Coller après le curseur

5.3 Mode Edition

Après l'utilisation de ces commandes, l'éditeur passe en mode édition :

Command
Description
e
a Ajoute après le curseur
A Ajoute après la ligne courante
i Insère avant le curseur
I Insère au debut de la ligne courante avant le premier caractère non-blanc
o Ouvre une nouvelle ligne en-dessous de la ligne actuelle
O Ouvre une nouvelle ligne au-dessus de la ligne actuelle

6. tar, gzip, bzip2

6.1 tar
8
tar [options] [fichiers]

La commande tar est une ancienne commande Unix qui permet aisément d’archiver, c’est-à-dire de réaliser la sauvegarde d’un
ensemble de fichiers en un seul fichier. Ce fichier peut être compressé après, mais tar ne compresse pas les fichiers qu'il
archive.

La plupart des archives se trouvent sous ce format.

fichiers désigne un ensemble de fichiers ou toute une arborescence précédée d’un chemin absolu (à partir de /) ou relatif.

Si c’est un chemin absolu qui est indiqué, il sera conservé dans l’archive et permettra ensuite d'être récupéré par la suite.

options

Command
Description
e
-x Extraire le contenu d’une archive
-c Créer une nouvelle archive
-t Afficher seulement la liste du contenu de l’archive, sans l’extraire
-f fichier Indiquer le nom du fichier archive
-v Mode verbeux, affiche le détails des opérations
-z Compresser ou décompresser en faisant appel à l’utilitaire gzip
-j Compresser ou décompresser avec l’utilitaire bzip2
-p Préserver les permissions des fichiers

Exemples :

Création d'archives

1 - Effectuer la sauvegarde de tous les fichiers du répertoire /home/toto dans le fichier sauve.toto.tar placé dans le répertoire
courant :

luser@localhost $ tar -cvf sauve.toto.tar /home/toto

2 - Effectue, en plus de l’archivage, une compression des fichiers :

luser@localhost $ tar -cvzf sauve.toto.tar.gz /home/toto

Listing

luser@localhost $ tar -tvf sauve.toto.tar

9
Extraction

1 – Extrait tout le contenu de l'archive dans le répertoire courant :

luser@localhost $ tar -xvf sauve.toto.tar

2 - Décompresse et extrait :

luser@localhost $ tar -xvfz sauve.tar.gz

3 – Extrait de l’archive le répertoire passé en argument :

luser@localhost $ tar -xvfz sauve.tar.gz home/toto/tmp

6.2 gzip

Elle est utilisée pour compresser un fichier quelconque, et en particulier une archive tar. L'extraction se fait par la commande
gunzip, ou de manière totalement équivalente par gzip -d.

gzip [options] [fichiers]

Elle peut décompresser les fichiers .gz, mais aussi les fichiers .z , .Z

options :

-1 à
Fixe le niveau de compression -1 etant le plus faible
-9
-d Décompresse l'archive passée en argument
-c Ecrit sur la sortie standard au lieu de remplacer le fichier d’origine
-l Affiche des infos sur les fichiers de l'archive (taux de compression...)
-r Gzip parcoure tous les répertoires de manière récursive lors de la dé/compression

Exemples :

1 - Compresse backup.tar et le remplace par le fichier backup.tar.gz d’une taille beaucoup plus réduite :

luser@localhost$ gzip backup.tar /home/toto

2 - Compresse au maximum chaque fichier .txt séparément, et les renomme en ajoutant le suffixe .gz :

10
luser@localhost $ gzip -9 *.txt

6.3 bzip2

Bzip2 admet la même syntaxe que gzip, mais effectue une compression plus efficace au détriment d'un besoin accru de
mémoire et cpu.

7. Recherches de fichiers
7.1 find

find [chemin] [options] [expression]

Trouve tous les fichiers sur un du répertoire chemin qui correspondent à une expression. find recherche dans les sous
répertoires.

Exemple : pour rechercher tous les fichiers mp3 contenus dans les répertoires personnels des utilisateurs :

luser@localhost $ find /home/ -name "*.mp3"

Option Description
-atime +n (-n) Trouve les fichiers auxquels on a accédé il y a plus de n jours (ou moins de n jours)
-mtime +n (-
Trouve les fichiers modifiés il y a plus de n jours (ou moins de n jours)
n)
-name "toto*" Trouve les fichiers dont le nom commence par toto
-maxdepth n Définit le niveau maximum de sous-répertoire à explorer
Indique le type de fichier à rechercher :

 l pour les liens symboliques


-type
 d pour les répertoires
 f pour les fichiers

Exemple : nous voulons rechercher tous les répertoires du répertoire courant contenant "rep" dans leur nom, en ne
descendant pas dans les sous-répertoires

luser@localhost $ find . -type d -maxdepth 0 "*rep*"

On peut utiliser find pour exécuter une commande sur certains fichiers :

11
find [chemin] [option] -exec cmd {} \;

 Les fichiers trouvés sont passés à cmd comme des paramètres.


 {} sera remplacé par le nom du fichier.
 Le point virgule execute la commande sans demander d'arguments supplémentaires, normalement le cas avec un "\;".

Exemple :

Pour effacer tous les fichiers .avi de mon répertoire :

luser@localhost $ cd ~
luser@localhost $ find . -name "*.avi" -exec rm {} \;

7.2 slocate – locate

locate est un lien symbolique de la commande slocate.

La commande slocate utilise une base de données que vous devez mettre à jour régulièrement.

Des fichiers récemment créés ne sont donc pas forcément référencés. La base de données peut être mise à jour manuellement
par le super utilisateur (root) avec la commande slocate -u ou encore updatedb

L’avantage de slocate est de permettre une recherche beaucoup plus rapide qu’avec la commande find. En effet, lors d'une
recherche, la commande find parcourant à chaque lancement le contenu entier du disque, il est bien plus rapide d'utiliser la
commande locate

Exemple : recherche tous les fichiers dont le nom comporte la chaîne toto :

luser@localhost $ locate toto

8. "Pipes" et Redirections

Une des bases essentielles d'un système Unix / Linux est la redirection d'un flux émanant d'un programme en direction d'un
autre.

8.1 Les flux standards

Les flux standards sont au nombre de trois :

STDIN (0) : STDIN n’est ni plus ni moins que l’entrée au clavier (dite "entrée standard"). Cela veut dire que tout ce que vous
tapez au clavier va passer par ce canal d’entrée/sortie.

STDOUT (1) : STDOUT est ce que l’on appelle la "sortie standard". Les informations qui apparaissent à l’écran passent par le
canal STDOUT.

STDERR (2) : STDERR est la "sortie d’erreur standard". L’utilité d’avoir deux flux de sortie permet de séparer les messages
d’erreurs et la sortie normale.

Les numéros 0,1,2 désignent respectivement STDIN, STDOUT et STDERR, et peuvent être utilisés dans les commandes shell.
12
8.2 Redirections

Ainsi, si nous exécutons un programme comme ls, il va afficher le résultat sur la sortie standard, c'est à dire l'écran par défaut.
Il est possible de rediriger ces différents flux vers des fichiers, d’autres flux…

Ceci se fait par le biais des signes "<" et ">" Une commande "commande > un fichier" va créer un fichier "un fichier" contenant
le résultat de la commande "commande".

De même, avec le signe "<" au lieu de ">" aurait utilisé le contenu du fichier "un fichier" en entrée de la commande
"commande".

Exemple :

$ cd /tmp
$ ls -l /bin
total 4872
-rwxr-xr-x 1 root root 3180 Jan 22 2001 arch
-rwxr-xr-x 1 root root 54905 May 22 2001 attr
-rwxr-xr-x 1 root bin 477692 Mar 22 2000 bash
-rwxr-xr-x 1 root bin 295012 Sep 3 1999 bash1
lrwxrwxrwx 1 root root 5 Nov 10 2000 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
...

$ ls -l /bin > un_fichier


$ cat un_fichier
total 4872
-rwxr-xr-x 1 root root 3180 Jan 22 2001 arch
-rwxr-xr-x 1 root root 54905 May 22 2001 attr
-rwxr-xr-x 1 root bin 477692 Mar 22 2000 bash
-rwxr-xr-x 1 root bin 295012 Sep 3 1999 bash1
lrwxrwxrwx 1 root root 5 Nov 10 2000 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
...

Si on utilise plusieurs fois des redirections sur un même fichier, avec ce que l’on a vu, le fichier est écrasé à chaque fois. Pour
éviter cela il est possible d’utiliser "<<" à la place de "<" et ">>" à la place de ">", auquel cas les données seront concaténées
dans le fichier (mises à la suite).

luser@localhost $ ls linux-lfs/
linux-lfs-flat.vmdk linux-lfs.vmx nvram
linux-lfs.vmdk linux-lfs.vmx.WRITELOCK vmware.log

luser@localhost $ ls evolution/
addressbook-sources.xml config mail shortcuts.xml
cache gtkrc-mail-fonts meta vfolders.xml
camel-cert.db local searches.xml views

luser@localhost $ ls linux-lfs/ >> fichier


luser@localhost $ ls evolution/ >> fichier

luser@localhost $ cat fichier

13
linux-lfs-flat.vmdk
linux-lfs.vmdk
linux-lfs.vmx
linux-lfs.vmx.WRITELOCK
searches.xml
shortcuts.xml
vfolders.xml
views

Voici un exemple montrant la redirection de la sortie standard et de la sortie d’erreur standard :

Avec l’outil find, on va rechercher un fichier dont le nom comporte "tes" dans le répertoire /etc. On redirige les résultats dans le
fichier "fichier" et les erreurs dans le fichier "erreurs" :

2> signifie que l’on redirige l’erreur standard et > signifie implicitement 1>

luser@localhost $ find /etc/ -name "*tes*" > fichier 2> erreurs

luser@localhost $ cat fichier


/etc/CORBA/servers/gnotes_applet.gnorba
/etc/sysconfig/network-scripts/ifup-routes
/etc/dumpdates
/etc/openldap/ldaptemplates.conf

luser@localhost $ cat erreurs


find: /etc/cups/certs: Permission denied
find: /etc/default: Permission denied

Notons que l’on peut rediriger l’erreur standard et la sortie standard vers le même fichier :

luser@localhost $ find /etc/ -name "*tes*" > fichier 2>&1


luser@localhost $ cat fichier
find: /etc/cups/certs: Permission denied
find: /etc/default: Permission denied
/etc/CORBA/servers/gnotes_applet.gnorba
/etc/sysconfig/network-scripts/ifup-routes
/etc/dumpdates
/etc/openldap/ldaptemplates.conf

Voici un dernier exemple montrant la redirection de l’entrée standard :

luser@localhost $ cat .bashrc


export PS1="\[\033[1;35m\][\u@\h \W]$\[\033[0m\] "
export PATH=$PATH:/usr/local/bin:/usr/local/sbin
BLA=‘ps aux | grep XFree86‘
if [ ! "$BLA" == "" ]; then
export TERM=xterm-color
fi
alias ncftp=’ncftp3’
alias ls=’ls -G’

14
alias vi=’vim’

luser@localhost $ tr ’A-Z’ ’a-z’ < .bashrc


export ps1="\[\033[1;35m\][\u@\h \w]$\[\033[0m\] "
export path=$path:/usr/local/bin:/usr/local/sbin
bla=‘ps aux | grep xfree86‘
if [ ! "$bla" == "" ]; then
export term=xterm-color
fi
alias ncftp=’ncftp3’
alias ls=’ls -g’
alias vi=’vim’

Avec tr, on a converti les caractères majuscules en minuscules, le flux d’information venant du fichier ".bashrc".

8.3 Pipes

Les "pipes" ("|") quand à eux sont "des voies de communication" d’un processus vers un autre.

Par exemple si nous faisons "commande 1 | commande 2", le résultat de la commande "commande 1" va être utilisé en entrée
de la commande "commande 2".

Il est possible de chaîner ce type de commande autant que l’on veut. Rien de tel qu’un exemple :

luser@localhost $ ls -la /bin > un_fichier


luser@localhost $ grep "bzip" un_fichier
lrwxrwxrwx 1 root root 5 Feb 12 2001 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover

luser@localhost $ ls -la /bin | grep "bzip"


lrwxrwxrwx 1 root root 5 Feb 12 2001 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover

Chapitre 4 - Organistation du FHS

FHS (Filesystem Hierachy System) est une convention qui organise l'arborescence des répertoires sous Linux. Cette convention
est aussi valable pour Unix. Cette convention est primordiale, grâce au FHS lorsque vous installez un programme sous linux, peu
importe votre distribution, les fichiers iront toujours dans les mêmes répertoires.

1.1 Hiérarchie root

Sous Linux, toute l'arborescence part de "/" appelé root. Ici se trouvent tous les dossiers élémentaires dont voici la description.

Répertoir
Description
e
/bin Contient les binaires (exécutables) vitaux pour l'utilisateur
/boot Contient les fichiers relatifs au bootloader
15
/dev Contient tout les périphériques
/etc Contient les fichiers de configuration et des fichiers nécessaires au démarrage (rc scripts)
/home Contient les répertoires utilisateurs
/lib Contient les librairies partagées et les modules du noyau (/lib/modules)
/mnt Contient les dossiers pour les points de montage temporaires
/proc Contient les informations sur le noyau
/root Répertoire personnel de root
/sbin Contient les binaires vitaux pour l'administrateur (root)
/tmp Contient les dossiers et fichiers temporaires. Le dossier est vidé à chaque démarrage
/usr Contient tout ce qui n'est pas vital au système (voir ci-dessous)
Contient des fichiers qui changent fréquemment, tel que : les logs, les mail, queues
/var
d'impression... (voir ci-dessous)

1.2 Hiérarchie usr

Le répertoire "/usr" contient certains dossiers déjà présents dans "/" (bin, sbin, lib, tmp)

Mais ceux-ci ne sont pas nécessaires au fonctionement minimal du système. On va donc y trouver les fichiers relatifs aux
programmes tierce partie, par exemple le navigateur web ou les lecteurs multimédias.

Répertoire Description
/usr/bin Contient les binaires pour l'utilisateur
/usr/doc Contient la documentation des programmes installés (hors manpages)
/usr/lib Contient les librairies partagées
/usr/man Contient les manpages (pages de manuel)
/usr/sbin Contient les binaires pour l'administrateur
/usr/src Contient les sources du noyau
/
Contient les fichiers du serveur X
usr/X11R6

1.3 Hiérachie var

Un fichier variable est un fichier dont le contenu va changer fréquemment et sans l'intervention directe de l'homme (ex : fichier
de log). Ils sont opposés aux fichiers statiques, fichiers dont le contenu ne varie pas (ex : fichier de configuration)

Le dossier "/var" contient tous les fichiers variables.

/var/log Contient tous les fichiers de log


/var/mail Contient les boites aux lettres de chaque utilisateur
/var/run Contient les fichiers des PID des deamons
/
Contient les queues en cours (envoi de mail, impression, crontab
var/spool

16
Chapitre 05 - Gestion des utilisateurs

1. Gestion des utilisateurs et groupe


1.1 Les utilisateurs

Unix est un système multi-utilisateurs. Plusieurs personnes peuvent l'utiliser de façon simultanée (dans le cas de configurations
en réseau).

Pour le système, un utilisateur n'est pas obligatoirement une personne physique. Un utilisateur peut détenir des fichiers,
exécuter des programmes ou encore déclencher automatiquement des fonctions systèmes.

Par exemple, un utilisateur peut être créé dans le seul but de détenir des fichiers publics. On parle alors de pseudo utilisateur.

Un utilisateur possède un nom d'utilisateur appelé aussi login lui permettant d'établir une connexion. Ce login est associé à un
mot de passe personnel. Pour accéder aux ressources du système, l'utilisateur doit entrer la bonne paire login/mot de passe :
c'est l'authentification(le login).

Les utilisateurs sont identifiés par le système grâce à un UID (identifiant d'utilisateur) unique. Cet identifiant est une valeur
numérique.

1.1.1 Le fichier /etc/passwd

Le fichier /etc/passwd contient les informations relatives à tous les utilisateurs du système. On y touve leur :

 login
 mot de passe (chiffré)
 UID
 GID principal
 nom complet et autres informations
 répertoire principal
 leur shell

La syntaxe de "/etc/passwd" est très simple, chaque ligne concerne un utilisateur. les différents champs sont séparés par des ":"
:

login:mot-de-passe:UID:GID:info-utilisateur:répertoire-principal:shell

Détaillons les champs :

 Login : c'est l'identifiant que doit entrer l'utlisateur pour s'authentifier. La convention veut qu'un utilisateur John Smith
possède jsmith ou smith_j comme login.
 Mot de passe : il est évident que le mot de passe n'apparait pas en clair dans le fichier, il est chiffré en md5. C'est la
commande passwd qui s'occupe de chiffrer le mot de passe. Ce champ peut prendre plusieurs siginifications :
o "*" : il est impossible de s'authentifier sur le système avec ce compte
o "!!" : Le compte est désactivé
o "x" ou "!" : le mot de passe est dans un fichier shadow (voir ci-après)
o champ vide : Il n'y a pas de mot de passe pour ce compte.
 UID : il s'agit de l'identifiant unique de l'utilisateur.
o L'utilisateur root possède l'UID 0

17
o Par convention, les UID inférieurs à 100 sont réservés aux comptes système.
 GID : l'identifiant du groupe principal de l'utilisateur
 Info utilisateur : des informations sur l'utilisateur. chaque information est séparée par une virgule (le nom complet,
numéro de poste ...).
 répertoire personnel : Il s'agit du répertoire dans lequel sont stockés les fichiers appartenant à l'utilisateur. En général
de la forme /home/login.
 shell : c'est l'interpréteur de commandes qui sera lancé après l'authentification.

1.1.2 Le fichier /etc/shadow

Le fichier /etc/passwd est accessible à tout le monde. en effet, certaines commandes ont besoin de connaitre la liste des
utlisateurs ou la correspondance login/UID.

La présence du mot de passe dans /etc/passwd, même crypté, pose un problème de sécurité. La solution à ce problème est
de stocker les mots de passe dans un fichier différent : /etc/shadow. Pour garantir la sécurité, seul l'administrateur peut le
lire.

Note: sous Linux, si le fichier /etc/shadow n'est pas utilisé, l'utilitaire pwconv permet, à partir
d'un fichier /etc/passwd unique, de créer le fichier /etc/shadow qui lui correspond.

1.2 Les Groupes

Le fichier /etc/group contient les information relatives au groupes présents sur le système.

Voici sa syntaxe :

groupe:*:GID:utilisateurs

 groupe : le nom du groupe


 * : la présence de ce champ est lié aux anciennes versions d'Unix et n'est plus utilisé. Il peut rester vide ou contenir le
caractère "*" ou "x".
 GID : c'est l'identifiant unique du groupe sous la forme d'une valeur numérique.
 utilisateur : il s'agit de la liste des utilisateurs appartenant au groupe. Ils sont séparés par des virgules :

compta:x:230:pierre,romain,jerome

1.3 Les commandes de gestion des utilsateurs

Afin de manipuler les fichiers passwd, shadow et group facilement, des commandes ont été crées. Elles automatisent les
vérifications (l'utilisateur à créer existe-t-il déja ? le mot de passe est-il assez compliqué ?...) évitant ainsi toute erreur de saisie.

1.3.1 Ajouter un utilisateur

La commande useradd permet de créer un utilisateur :

useradd [options] login

18
Principales options de useradd

Option Explication
-c commentaire Informations concernant l'utilisateur (nom, poste)
-d répertoire Chemin du répertoire personnel de l'utilisateur
-e date Date d'expiration du compte. Le format est AAAA-MM-JJ
C'est le nombre de jours suivant l'expiration du mot de passe après lequel le
compte est désactivé. La valeur 0 permet de désactiver le compte dès que le mot
-f nombre de jours
de passe expire. La valeur -1 permet de désactiver cette caractéristique. La
valeur par défaut est -1
Le nom du groupe ou le numéro du groupe de connexion initial de l'utilisateur. Le
-g groupe principal nom ou le numéro du groupe doivent exister. Le numéro de groupe par défaut
est 1
-G groupes
Les autres groupes auxquels appartient l'utilisateur (séparés par des virgules)
supplémentaire
-m Le répertoire de l'utilisateur sera créé (par défaut, cela n'est pas fait)
A utiliser si et seulement si l'option -m est présente. Permet de copier les fichiers
-k [ répertoire ] et répertoires contenus dans le répertoire répertoire (/etc/skel si non spécifié)
dans le répertoire de l'utilisateur
Vous pouvez saisir le mot de passe en option. Il doit être chiffré (pour récupérer
-p le mot de passe
la version cryptée d'un mot de passe il faut utliser la bibliothèque crypt). Le
chiffré
comportement par défaut est de désactiver le compte
-s chemin vers un
Shell lancé à la connexion de l'utilisateur
exécutable
-u uid L'identifiant unique de l'utilisateur

Exemple : nous voulons créer l'utlisateur lambda :

 commentaire : "utilisateur lambda"


 son shell : /bin/zsh
 son répertoire personnel : /home/lambda
 nous recopions le contenu de /etc/skel dans son répertoire
 il appartient aux groupes "dev" et "final"
 le compte sera désactivé immédiatement après expiration du mot de passe

root@localhost # useradd -c "utilisateur lambda" -f 0 -G final,dev -m -k /etc/skel -s


/bin/zsh lambda

La commande useradd -D montre les options par défaut :

GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=
SKEL=/etc/skel

19
Il est possible de changer les valeurs par défaut grace aux options suivantes :

Options de useradd -D

Option Explication
-h répertoire Répertoire dans lequel créer les répertoires utilisateurs
-e date La date d'expiration du compte
-f nombre de jours Délai de désactivation après expiration du mot de passe
-g GID Le groupe par défaut
-s chemin vers un
Le shell par défaut
exécutable

1.3.2 Suppression d'un utilisateur

La commande userdel permet de supprimer un utilisateur :

root@localhost # userdel options login

L'option -r efface le répertoire personnel de l'utilisateur.

1.3.3 Changer le mot de passe d'un utilisateur

La commande passwd permet de changer le mot de passe d'un utilisateur. L'administrateur peut changer n'importe quel mot de
passe. Un utilisateur normal ne peut changer que son propre mot de passe.

passwd [ options ] [ login ]

Si l'argument login n'est pas spécifié, le changement de mot de passe s'applique sur l'utilisateur courrant.

Options passwd

Optio
Explication
n
-k Indique que seul le mot de passe doit être mis à jour sans toucher aux propriétés d'expiration
Permet de verrouiller le compte spécifié en préfixant le mot de passe crypté par le caractère
-l
"!". Seul l'utilisateur root peut utiliser cette option
--stdin Le mot de passe doit être lu à partir de l'entrée standard qui peut alors être un tube (pipe)
-u Déverrouille le mot de passe du compte. Seul l'utilisateur root peut utiliser cette option
Supprime le mot de passe d'un compte. Le champ réservé au mot de passe crypté sera
-d
supprimé dans le fichier de configuration. Seul l'utilisateur root peut utiliser cette option
Affiche des informations sur le statut du mot de passe pour un compte donné. Seul
-S
l'utilisateur root peut utiliser cette option

1.3.4 Afficher des informations sur un utilisateur


20
Pour connaître l'identité de l'utilisateur courant (bien que cela soit affiché dans la majorité des prompts par défaut) on utilise la
commande whoami.

Elle affiche le login de l'utilisateur courant. Les commandes who, users et w permettent de connaître les utilisateurs
actuellement connectés sur la machine.

1.4 Les commandes de gestion des groupes

1.4.1 Créer un groupe

La commande groupadd permet de créer un nouveau groupe :

root@localhost # groupadd option groupe

Options de groupadd

Optio
Explication
n
Permet de choisir la valeur numérique du GID du nouveau groupe. Cet identifiant doit être
-g
unique
-r Cette option permet d'ajouter un groupe système (dont le GID est inférieur à 500)
-f Permet de stopper la commande lorsque le groupe ou le GID du nouveau groupe existe déjà

1.4.2 Suppression d'un groupe

Pour supprimer un groupe, on utilise la commande groupdel :

groupdel GID

Note:
on ne peut pas supprimer un groupe si c'est le groupe principal d'un utilisateur.

1.4.3 Modifier les groupes secondaires d'un compte

Pour modifier les groupes secondaire d'un utilisateur, on utilise la commande usermod qui est similaire à useradd et supporte
les mêmes options :

root@localhost # usermod -G toto,users,fileshare,dev toto

Ceci permet d'ajouter l'utilisateur "toto" dans les groupes "toto", "users", "fileshare" et "dev".

Attention : lors de l'utilisation de la commande usermod -G il est nécessaire de rappeler l'ensemble de groupes secondaires
auxquels appartient l'utilisateur.

On peut aussi ajouter et enlever des utilisateurs d'un groupe grâce à la commande gpasswd

21
Options de gpasswd

Optio
Explication
n
-a Ajout d'un utilisateur
-d Suppression d'un utilisateur

1.4.4 Afficher des informations sur les groupes

Pour connaître les groupes auxquels appartient un utilisateur, on utilise la commande groups. Sans argument, elle affiche les
groupes de l'utilisateur courant. Pour connaître less groupes d'un utilisateur particulier, il suffit de passer son login en argument
de la commande :

root@localhost # groups
root wheel disk adm sys daemon bin
luser@localhost $ groups toto
toto users fileshare

Sur de très anciens SystemV, il n'était pas possible d'activer plusieurs groupes simultanément pour le même utilisateur. La
commande id permet de connaître les groupes actifs :

root@localhost # id
uid=0(root) gid=0(root) groupes=0(root), 10(wheel),6(disk),4(adm),3(sys),2(daemon),1(bin)

Pour changer le groupe actif sur un tel système, on utilise la commande newgrp. Lorsqu'elle est utilisée sans argument, elle
active le groupe principal de l'utilisateur (le groupp e qui figure dans "/etc/passwd").

1.5 Changer d'identité

Il se peut qu'un utilisateur soit obligé d'effectuer des tâches avec une identité différente. La situation la plus courante étant un
utilisateur normal voulant effectuer quelques tâches en tant qu'administrateur.

La commande su (switch user), permet de changer d'identité:

Commande Explication
su Sans option, su permet de se connecter en tant qu'administrateur
su lambda Agir en tant qu'utilisateur lambda
Se connecter en tant que lambda. Avec "-" on récupère tout l'environnement
su - lambda
de l'utilisateur lambda
su -c "mount l'option -c permet simplement d'exécuter la commande entre guillemet en
/dev/cdrom tant que root (pas d'option). Une fois la commande terminée, on reprend
/mnt/cdrom" son identit

22
Chapitre 06 - Gestion des permissions

1. Les permissions
Comme vu précédemment, la commande ls -l nous donne beaucoup d'informations sur un fichier.

root@localhost # ls -l
-r-xr-xr-x 1 root wheel 32464 27 May 09:35 /bin/ls

Nous allons nous interesser aux parties : droits et propriétaire du fichier.

1.1 Propriétaire

Un fichier appartient à un utilisateur et un à un groupe. Généralement le groupe dans lequel est l'utilisateur. Dans l'exemple ci-
dessus, root est l'utilisateur propriétaire et wheel le groupe propriétaire.

1.1.1 Changer l'utilisateur propriétaire

Nous allons pouvoir changer l'utilisateur propriétaire grâce à la commande : chown

La commande chown n'est utilisable que par root.

Note:
les options entre crochets [ ] sont des options facultatives

Syntaxe :

chown [-R] user[:group] fichier

L'option -R est utilisée pour changer le propriétaire de façon recursive pour les dossiers.

Exemple :

root@localhost # ls -l fichier
-rw-r--r-- 1 andrew kernel 0 7 Sep 10:52 fichier
root@localhost # chown linus
-rw-r--r-- 1 linus kenrel 0 7 Sep 10:52 fichier
root@localhost # chown richard:gpl
-rw-r--r-- 1 richard gpl 0 7 Sep 10:52 fichier

1.1.2 changer le groupe propiétaire

La commande chown n'étant utilisable que par root, les utilisateurs disposent de la commande chgrp pour changer le groupe
propriétaire. L'utilisateur doit appartenir au nouveau groupe.

23
Syntaxe :

chgrp [-R] group fichier

Exemple :

richard@localhost # ls -l fichier
-rw-r--r-- 1 richard gpl 0 7 Sep 10:52 fichier
richard@localhost # chgrp gnu fichier
-rw-r--r-- 1 richard gnu 0 7 Sep 10:52 fichier

1.2 Les droits

Sous linux il y a trois actions que l'on va autoriser ou non :

 lire : Read
 ecrire : Write
 exécuter : eXecute

Ces trois actions vont être définies pour trois types de personnes :

 l'utilisateur propriétaire : User


 le groupe propriétaire : Group
 les autres : Others

1.2.1 Les fichiers

Read : lire le contenu du fichier

Write : modifier le contenu du fichier

eXecute : exécuter le fichier

1.2.2 Les dossiers

Read : lister le contenu du dossier

Write : modifier le contenu (supprimer un fichier, renommer un fichier)

eXecute : exécuter des commandes à l'interieur du dossier.

1.2.3 Modifier les droits

Nous allons pouvoir modifier les droits avec la commande chmod. Cette commande peut etre utilisée de deux façons
différentes : avec des lettres ou avec des chiffres.

Syntaxe :

24
chmod [–R] droits fichier

1.2.3.1 Mode lettré

Dans ce mode, nous allons utiliser des lettres et des opérateurs pour ajouter ou supprimer des droits.

lettr
signification lettre signification
e
u utilisateur r read
g groupe w write
o others x execute
a tous

Les opérateurs disponibles sont :

+ ajoute un droit
- supprime un droit
= ajoute un droit et supprime les autres

Exemple :

root@localhost # ls -l fichier
-rw-r--r-- 1 root wheel 0 7 Sep 10:52 fichier
root@localhost # chmod u+x fichier
-rwxr--r-- 1 root wheel 0 7 Sep 10:52 fichier
root@localhost # chmod g+wx,o-r fichier
-rwxrwx--- 1 root wheel 0 7 Sep 10:52 fichier
root@lab# chmod a=r fichier
-r--r--r-- 1 root wheel 0 7 Sep 10:52 fichier

1.2.3.2 Mode chiffré

Dans ce mode, nous allons transformer les droits en valeurs octales :

chiffre signification
4 read
2 write
1 execute

En additionant ces chiffres, on arrive à un nombre à trois chiffres. Les centaines pour l'utilisateur, les dizaines pour le groupe et
les unités pour les autres.

25
Exemple :

Nous allons donner les droits de lecture, écriture et exécution à l'utilisateur. Les droits de lecture et exécution au groupe et aux
autres.

4+2+1 = 7
4+1 = 5

root@localhost # ls -l fichier
-rw-r--r-- 1 root wheel 0 7 Sep 10:52 fichier
root@localhost # chmod 755 fichier
-rwxr-xr-x 1 root wheel 0 7 Sep 10:52 fichier

1.3 Umask

Par défaut, tous les fichiers créés ont comme droit 666 et les dossiers 777. L'umask est un masque qui va réduire ces droits.
Lors de la création d'un fichier, le système va soustraitre l'umask aux droits par défaut. Par l'umask est à 0022.

On a donc 666 - 022 = 644.

Vérifions en créant un fichier.

root@localhost # touch document


root@localhost # ls -l document
-rw-r--r-- 1 root wheel 0 7 Sep 11:02 document

On peut définir le umask grâce à la commande umask.

root@localhost # umask 077

1.4 Les droits spéciaux

Il existe trois droits spéciaux : suid, sgid et sticky bit. Il sont ajoutés grâce à la commande chmod.

droit lettre chiffre


suid s 4
sgid s 2
sticky t 1

1.4.1 SUID

Lorsque vous exécutez une commande, celle-ci se lance avec votre uid. Cette commande aura donc accès seulement aux
fichiers où vous possedez des droits.

Si le suid est placé sur un exécutable, ce dernier se lancera avec l'uid de son propriétaire.

26
1.4.2 SGID

Le droit sgid fonctionne de la même façon que le suid en ce qui concerne les exécutables.

Mais le sgid peut aussi être attribué à un dossier. Tout fichier créé dans un dossier portant le sgid aura comme groupe
propriétaire le groupe du dossier.

1.4.3 Sticky

Si vous possedez le droit d'écriture sur un dossier, vous pouvez renommer ou supprimer tous les fichiers qu'il contient. Ce
fonctionnement n'est pas adéquat pour un dossier public, où tout le monde à accès en écriture comme "/tmp". Si le sticky bit
est placé sur un dossier, seul le possesseur d'un fichier pourra le renommer ou le supprimer.

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 :

1. 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.
2. le bootloader est chargé en mémoire, l'utilisateur peut alors choisir le système à démarrer
3. le noyau linux est chargé en mémoire par le bootloader, il s'initialise, détecte les périphériques, ...
4. 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.
5. init lance en dernier un terminal virtuel qui demande un login/password pour ouvrir un shell

Bootloader utilisé suivant les os

Window
Linux
s
NTLDR Lilo
Grub
27
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.

28
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

29
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.

30
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

31
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
reiserf
mkreiserfs
s
xfs mkfs -t xfs, mkfs.xfs
32
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)

33
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
Autorise un utilisateur à monter et démonter un périphérique
d'utilisateur
no/users Autorise tous les utilisateurs à monter ou démonter un périphérique

Chapitre 08 - Gestion des processus

1. La vie d'un processus


Un processus durant tout sa vie évolue par états et ce jusqu'à sa mort. Les principaux états connus sont : l'état "actif", désigné
comme tel lorsque le processus est pris en charge par le processseur, l'état "prêt", indiquant que le processus attend sa prise en
charge par le processeur et l'état "attente" permettant au processus de se mettre en mode sommeil afin d'attendre l'arrivée d'un
signal qui le passera à l'etat prêt. Il existe beaucoup d'autres états qui seront mis en évidence par l'utilisation de certaines
commandes.

Une fois un processus lancé, le système lui affecte non seulement une identification numérique unique portant le nom de PID
(Process Identifier) permettant de le reconnaître dans la masse des processus mais aussi un héritage. En effet lorsqu'un
processus est lancé celui-ci fait partie d'une descendance, tout processus est le "fils","le petit fils" , ou "l'arrière petit fils" d'un
processus parent dénommé "init". C'est le premier processus lancé par le système et c'est lui qui prend en charge l'exécution de
l'ensemble des processus lancés par l'utilisateur par l'intermédiaire du shell (interpréteur de commande).

Ainsi le processus init a un pid égale à 1. De même qu'il existe des commandes indiquant l'état d'un processus, des commandes
mettant en evidence l'arbre généalogique d'un processus existant.

Voyons un peu l'ensemble de ces commandes :

Commande Description

34
ps Permet de lister les processus suivant un certain nombre de critères
Permet d'avoir un suivi de l'évolution des processus et ce faisant, d'effectuer des
top
traitements comme on pourrait le faire avec ps, mais de façon interactive
pstree Permet de lister les processus dans un arbre indiquant les liens de parentés entre eux
jobs Permet de lister les processus lancés dans le shell courant

Découvrons plus précisément les sorties des commandes ps et top qui sont similaires : elles possèdent des champs définis ainsi
:

PID Identifiant du processus


USER Le propriétaire du processus
PRI Priorité de la tâche (plus le chiffre est petit plus la tâche est prioritaire)
SIZE Taille du processus en mémoire incluant la partie données et la pile
Quantité totale de mémoire occupée par la tâche (les bibliothèques chargées sont
RSS
comptabilisées pour les programme ELF)
SHARE Quantité de mémoire partagée
Ce champ identifie par des lettres les différents états possibles pour un processus

 D : En sommeil imperturbable (ce qui arrive souvent à certain modules kernel)


 R : En cours d'exécution
STAT  S : En sommeil
 T : Stoppé ou stracé (notamment pour le débugage)
 Z : Zombie (peut arriver lorsqu'un processus n'a pas attendu la fin de l'exécution
de l'un de ses fils)

Nombre de pages occupées par les bibliothèques (sauf pour les exécutables au format
LIB
ELF ; autant dire que ça ne fonctionne quasiment jamais)
Taux d'occupation du(des) processeur(s) par ce processus. Il peut être supérieur à 100%
%CPU
dans le cadre de machine ayant plusieurs processeurs
%MEM Taux d'occupation de la mémoire physique du processus
TIME Temps total d'exécution au sein du(des) processeur(s) depuis le lancement du processus
COMMAN
Affiche la ligne de commande qui a permis de lancer le processus
D

2. Envoi de signaux aux processus


Ce procédé se concentre essentiellement autour de la commande kill. Il n'est pas, comme son nom pourrait le laisser supposer,
dédié à tuer des processus. Il va permettre de faire effectuer un certain nombre de tâches à l'un ou plusieurs d'entres eux.

Tout dépend, finalement, de comment réagissent les programmes aux signaux qui leurs sont envoyés.

Pour obtenir la liste des signaux disponibles, il suffit de taper dans l'invite de commande du shell : kill -l

35
Voici dans un tableau les principaux signaux utilisés :

Nom du Nombr
Description
SIGNAL e
Ce signal est envoyé directement lors de la déconnection à un modem ou
SIGHUP 1
oblige un daemon à relire son fichier de configuration
SIGKINT 2 Ce signal est équivalent au Ctrl-C et met fin à l'exécution d'un processus
Tue un processus de manière immédiate. Ce signal est à envoyé dans des
SIGKILL 9
mesures drastiques et ne peut être ignoré par le processus
SIGTERM 15 Termine un signal "proprement" si possible
SIGTSTP 18 Mets un processus en attente et , équivalent à Ctrl-Z

3. Arrière plan / Avant plan / Détachement


Lorsque vous lancez un programme, le shell prend en compte l'exécution du processus, ainsi il faut attendre la fin de celui-ci
avant d'avoir à nouveau le prompt. On dit que le processus est en "Avant Plan" dans cet état il peut recevoir directement des
signaux par les combinaisons de touches Ctrl-?. Il existe un autre mode dans lequel le processus est dit en "Arrière plan",
contrairement au mode "Avant Plan" lors de l'exécution du programme, le shell affiche le prompt directement sans attendre la
fin du processus. Afin de mettre le processus dans ce mode il suffit de placer un "&" à la fin de la commande, il est ainsi vu
comme un job possédant un numéro, attaché au terminal (tty) ou pseudo terminal (pts/?) dans lequel il a été lancé. Dans cet
état aucun caractère de contrôle (Ctrl-?) n'est possible.

Si nous nous trouvons dans les cas présentés plus haut, nous savons dès le départ dans quel mode nous voulons être, mais
imaginons que l'on voudrait "switcher" d'un état à un autre. Des commandes ont été crées spécialement à cette effet.

Commande Description
fg %N° de Job * Permet de mettre un processus en avant plan
bg %N° de Job
Permet de mettre un processus en arrière plan
*
Ctrl-Z Permet de mettre un processus en attente

* : lorsque vous utilisez ces commandes et que vous avez mis un processus en attente, il met le processus dans l'état prêt et
dans le mode pour lequel il a été crée.

Toutes les commandes que nous avons vues jusqu'à maintenant sont placées dans un mode d'arrière ou d'avant plan mais le
processus est attaché à un terminal. Il existe un mode appélé mode de "détachement" où un processus n'est attaché à aucun
terminal ou pseudo terminal. Généralement c'est le cas des daemon. On indentifie facilement un daemon par le champ TTY
d'une sortie des commandes ps ou top ou il y a le symbole "?"

La commande permettant le détachement des processus est : disown et possède un paramètre qui est le PID du processus.

Exemple :

36
disown 1394

4. Modification des priorités du Scheduler


Nous avons vu en introduction que les processus avaient des priorités et qu'elles étaient modifiables. En effet les propriétés
évoluent sur une échelle de -20 à +19. Tout processus, au lancement, peut avoir une priorité quelconque supérieure ou égale à
zéro. Par contre un processus lancé par un utilisateur, à son exécution et durant celle-ci ne peut avoir une priorité négative.
Seul l'administrateur système possède ce droit. Par défaut un processus est lancé avec la priorité 10.

les commandes permettant de contrôler les priorités des processus sont nice et renice.

Commande Description Options


Permet d'affecter une priorité aux processus -n N :permet d'ajuster la priorité par
nice priorité
dès leur lancement défaut à N
renice Permet de modifier la priorité d'un processus -u "User" :change la priorité de tous les
priorité alors que celui-ci est déjà lancé processus d'un utilisateur

-p "PID" : change la priorité d'un processus ayant un pid précis

5. Planification de tâches
Il est possible de planifier des tâches sur linux afin que celles-ci s'éxécutent de manière répétitives ou différées. Pour cela deux
daemons existent l'un crond qui est le daemon permettant d'éffectuer des tâches répétitives et le daemon atd destiné aux
tâches différées. Chacun de ces deux daemons possèdent une commande en premier plan : crontab pour crond et at pour atd.
Cependant beaucoup de ces commandes ne peuvent pas être utilisés par n'importe qui.

Pour gérer les accès à ces commandes, l'administrateur dispose de fichiers de permissions situés dans le répertoire /etc :
cron.allow et at.allow qui définissent les autorisations et cron.deny et at.deny les refus.

Selon la présence ou l'absence de ces fichiers plusieurs règles rentrent en jeu :

 Aucun des fichiers n'existe : dans ce cas seul root a le droit d'utiliser les commandes

Note: dans le cas d'un système RedHat l'abscence des fichiers donne le droit à l'ensemble des
utilisateurs d'utiliser les commandes

 Les fichiers cron.allow et at.allow existent : les utilisateurs dont les noms sont présents sont abilités à exécuter les
commandes
 Les fichiers cron.deny et at.deny existent : les utilisateurs dont les noms sont présents ne peuvent exécuter les
commandes les autres oui.

5.1 La commande crontab

Il est important de ne pas faire l'amalgame entre la commande crontab et le fichier crontab. La commande crontab permet de
créer un fichier crontab possédant les différentes requêtes que l'utilisateur veut effectuer. Ce fichier porte le nom de l'utilisateur
et est stocké dans le répertoire /var/spool/cron avant d'être exécuté par crond. Cette commande permet notamment d'éditer le
fichier et d'en supprimer le contenu.
37
Voici dans un tableau récapitulant les différentes options possibles:

Option Définition
-u
Installation du fichier crontab pour utilisateur (nécessaire d'être root pour l'utiliser)
utilisateur
Modification du fichier crontab à l'aide de l'éditeur spécifié par les variables VISUAL ou
-e
EDITOR
-l Liste le contenu du fichier crontab courant
-r Elimination du fichier crontab courant

Le fichier crontab créé par l'utilisateur est composé de cinq champs marquant la périodicitété et la commande à effectuer. Ces
champs sont ainsi définis:

Minute heure date mois "jour du mois" commande

La périodicité de chacun de ces 5 champs est représentée par des valeurs numériques comme ci dessous:

 minutes (0-59)
 heures (0-23)
 date (0-31)
 mois (1-12)
 jour de la semaine (0-7)ou (0 ou 7 indique le Dimanche)

Vous pouvez affiner la notion de périodicité par l'utilisation de:

 , : sépare plusieurs valeurs


 - : marque une période (exemple: 1-7,du lundi au dimanche)
 * : représente l'ensemble des valeurs possibles
 / : permet de spécifier tous les x temps (exemple: */2 dans la colone des jours veut dire chaque 2 jours).

Note:
vous pouvez séparer les champs d'une entrée par des espaces simples, ou de tabulations.

5.2 Le fichier crontab système

Le fichier /etc/crontab est également lu par le daemon crond et est différent du format d'un fichier crontab ordinaire, en effet
celui-ci possède des informations d'environnement qui précèdent généralement ses entrées (cela est aussi permis pour les
fichiers crontab ordinaires mais ce n'est pas souvent utilisé). Après les cinq champs initiaux se trouve le nom d'un utilisateur
pour lequel la commande doit être appelée.

Ce fichier est généralement utilisé pour appeler les scripts contenus dans les répertoires "cron.periode" se situant dans le
répertoire /etc,énumérés ci-dessous :

 /etc/cron.hourly
 /etc/cron.daily
 /etc/cron.weekly
 /etc/cron.* répertoire contenant les exécutables

38
L'autre différence du fichier système crontab est qu'il fait appel à une commande particulière : run-parts. Cette commande
prend en argument un nom de répertoire et appelle tous les programmes compris dans ce répertoire (le programme run-parts
se trouve dans /usr/bin et n'est accompagné d'aucune documentation en ligne).

Voici un exemple de fichier /etc/crontab:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/bin:/usr/sbin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * * root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Ainsi, chaque matin, à 4:02, tous les scripts (ou programmes du répertoire /etc/cron.daily sont exécutés. Le répertoire cron.daily
est créé lors de l'installation de votre distribution et contient des scripts servant à mettre à jour les bases de données slocate et
whatis, à nettoyer les répertoires temporaires et à exécuter d'autres tâches de maintenance.

5.3 La commande at

at est un outil pratique pour planifier un seul évènement futur, et son utilisation est très simple:

Exemple :

luser@localhost $ at 6:00 ;
mail joe < joe.msg

Beaucoup d'autres commandes utilisent le daemon atd :

 la commande atq (pour at queue, la file d'attente de at), fournit une liste des travaux at actuellement en cours. Tout
utilisateur privilégié (root) peut entrer un nom d'utilisateur comme argument pour obtenir les travaux en cours d'autres
utilisateurs.
 la commande atrm est utilisée pour éliminer les travaux at en cours. L'atJobID s'affiche lorsque le travail est soumis
ainsi qu'à la demande de la commande atq. Tout utilisateur privilégié peut éliminer les travaux at d'autres utilisateurs en
fournissant le nom d'utilisateur (user ID) de ceux-ci.

Les commandes peuvent être indiquées (une par ligne), en terminant l'entrée par Ctrl-d seul, sur sa propre ligne.

Chapitre 09 - Réseau

1. Introduction
Afin d'utiliser le réseau, il vous faudra activer le support de votre carte en "dur" dans votre noyau ou encore la charger par le
biais d'un module au lancement du système.

De plus certaines distributions incluent des outils de détection automatique.

39
2. Configuration Automatique
Lorsque le réseau possède un serveur DHCP, il devient trés simple de configurer sa carte réseau sous Linux en tapant
simplement :

dhclient

Note: la commande dhclient est la plus récente et la plus utilisée, mais il existe d'autres
commandes tel que dhcpcd et pump.

3. Configuration manuelle
3.1 Les interfaces

Le noyau Linux attribue des noms d'interfaces composées d'un préfixe précis selon le type. Toutes les interfaces Ethernet, par
exemple, commençant par eth. Le préfixe est suivi d'un chiffre, le premier étant 0 (eth0, eth1, eth2...)

Ethernet eth[01234...]
Anneau à
tr[01234...]
jeton
FDDI fddi[01234...]

3.1.1 ifconfig

La commande ifconfig permet de connaitre l'état des interfaces réseaux présentes et détectées par le système.

L'option -a permet d'afficher toutes les interfaces actives ou non.

luser@localhost $/sbin/ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:04:AC:45:63:7E
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:164442 errors:0 dropped:0 overruns:0 frame:1
TX packets:133671 errors:0 dropped:0 overruns:72 carrier:0
collisions:0 txqueuelen:100
RX bytes:91115012 (86.8 Mb) TX bytes:33953990 (32.3 Mb)
Interrupt:10 Base address:0xc000

lo Link encap:Local Loopback


inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3431 errors:0 dropped:0 overruns:0 frame:0
TX packets:3431 errors:0 dropped:0 overruns:0 carrier:0

40
collisions:0 txqueuelen:0
RX bytes:197669 (193.0 Kb) TX bytes:197669 (193.0 Kb)

La commande ifconfig permet aussi de configurer la carte réseau avec la syntaxe suivante :

ifconfig adr_ip netsmask masque_ss_réseau broadcast adr_broadcast

3.1.2 ifup/ifdown

La commande ifup permet d'activer une carte réseau :

ifup <interface>

Exemple :

root@localhost # ifup eth0

La commande ifdown permet de désactiver une carte réseau :

ifdown <interface>

Exemple :

root@localhost # ifdown eth0

Note:
attention les commandes ifup et ifdown ne sont pas présentes dans certaines distributions.

Dans ce cas il faut avoir recourt à la commande ifconfig :

root@localhost # ifconfig eth0 up

OU

root@localhost # ifconfig eth0 down

3.2 Les routes

41
La commande route permet d'afficher la table de routage du système :

root@localhost # route
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
default gate.esi-supinf 0.0.0.0 UG 0 0 0 eth0

voici un exemple de modification de la table de routage :

Pour attacher un sous réseau local à une interface :

root@localhost # /sbin/route add -net 172.16.1.0/25 dev eth0

Pour atteindre un sous réseau distant, il est nécessaire de spécifier une passerelle (gateway, en anglais) :

root@localhost # /sbin/route add -net 172.16.1.128/25 gw 172.16.1.125

Les communications ne correspondant à aucune des routes présentes utilisent la route par défaut (pour l'Internet notamment) :

root@localhost # /sbin/route add default gw 172.16.1.1

3.3 La résolution de nom

Pour résoudre les noms sur le réseau, il faut stocker dans le fichier "/etc/resolv.conf" l'adresse IP de vos serveurs DNS :

domain nux.net
nameserver 216.223.224.7
nameserver 216.223.224.6

Nous avons ici configuré le domaine du réseau (nux.net) et l'IP de deux serveurs DNS.

4. Les outils de tests réseau


4.1 Ping

La commande ping est LA commande de base pour tester le réseau. elle vérifie la connectivité entre votre interface réseau et
une autre :

luser@localhost $ ping 127.0.0.1

42
127.0.0.1 est l'adresse loopback de votre interface réseau (lo). faire un ping sur votre adresse loopback revient à vous "pinger"
vous meme. Si votre interfaces lo vous répond, c'est que votre carte réseau est supportée : votre kernel supporte le TCP/IP, le
driver de votre carte fonctionne.

ping <votre_ip>

Ici vous pouvez vérifier que vous avez bien configurer votre adresse IP.

ping <une_ip>

Si une_ip fait partie de votre réseau, il s'agit de vérifier la connexion au réseau local.

Dans le cas contraire, vous serez en mesure de tester le bon fonctionnement de votre passerelle.

ping <un_nom>

Ici, c'est votre configuration DNS que vous vérifiez.

4.2 Traceroute

La commande traceroute vous permet de connaître le chemin des paquets émis par votre interface.

Cela peut, en outre vous permettre, de détecter des problèmes éventuels de congestion sur un routeur du réseau.

la commande traceroute fonctionne au niveau réseau du modèle OSI. Elle ne détectera donc
Note:
pas les passages par des équipements réseau fonctionnant sur des couches inférieures
( hub,switchs).

Par exemple, voyons le chemin que prend nos paquets pour atteindre la machine www.google.com :

luser@localhost $ /usr/bin/traceroute mail.supinfo.com


traceroute to mail.supinfo.com (212.80.91.71), 30 hops max, 40 byte packets
1 gougniafier (192.168.1.1) 0.282 ms 0.147 ms 0.105 ms
2 193.253.160.3 (193.253.160.3) 55.493 ms 55.736 ms 58.933 ms
12 easy-interlan.router.easynet.fr (212.180.0.135) 55.892 ms 53.760 ms
13 easy-interlan-10.easynet.fr (212.180.93.42) 59.920 ms 56.677 ms 59.887
14 supinfo-2.supinfo.com (212.180.91.71) 57.182 ms 51.742 ms 53.876 ms

4.3 Netstat

Netstat permet d'afficher des détails sur les connexions actives de votre machine (statistiques, ports...)

43
root@localhost # netstat -tlp
Active Internet connexions (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:36167 *:* LISTEN 20091/artsd
tcp 0 0 *:6000 *:* LISTEN 20032/X
tcp 0 0 *:www *:* LISTEN 17170/apache
tcp 0 0 *:ssh *:* LISTEN 8283/sshd

Pour afficher la liste des connexions actives :

root@localhost # netstat -top


Active Internet connexions (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 192.168.1.10:35514 205.188.9.63:5190 ESTABLISHED
7981/centericq
tcp 0 0 192.168.1.10:36240 nephtys.lip6.fr:45196 ESTABLISHED
28124/ncftp
tcp 0 0 192.168.1.10:33605 207.46.106.47:1863 ESTABLISHED
7981/centericq
tcp 0 0 192.168.1.10:35936 gougniafier:ssh ESTABLISHED 18543/ssh

Chapitre 10 - Installation de programmes

1. Introduction
Beaucoup de linuxiens utilisent des distributions différentes de linux alors que celles-ci ne sont différentes que parce qu'elles
possèdent une version personnalisée d'un même kernel ou noyau de base.

On pourrait ainsi se demander quels critères font que l'on choisisse telle distribution plutôt qu'une autre.

En réalité, tout informaticien, qu'il soit sous linux, Windows ou Mac va être à la perpétuelle recherche d'un large panel
d'applications ou paquetages (packages) de tous genres (commerciaux ou libres (publiés sous license GPL:Gnu Public License))
et répondant aussi bien à ses besoins professionels (bureautique,gestion) que ludiques (multimédia, jeux).

Son choix ainsi va se tourner vers des systèmes où il pourra facilement obtenir ce qu'il veut.

Sur linux suivant les distributions, la gestion des paquetages peut être très souple et peut offrir beaucoup de possibilités, allant
du téléchargement à l'installation automatique d'un paquetage par une simple commande. Nous allons donc voir trois modes de
packaging propres aux distributions Debian, Gentoo et RedHat et une forme de gestion standard à toutes les distributions qui
est celle dite par les sources.

2. Redhat
Les paquetages de la distribution Redhat sont présent sous deux formats. La première portant l'extension ".rpm" représente
l'application binaire et la seconde portant l'extension "src.rpm" représente les sources (fichiers sources, documentation, fichiers
d'installation et de configuration) utilisées généralement pour créer des ".rpm". Ces deux types de paquetages sont installés via
la commande rpm.

2.1 Comment obtenir ces Paquetages ?

44
Redhat est une distribution commerciale destinée aux entreprises, elle est donc livrée avec un certain nombre de paquetages de
base, testés et approuvés par la société Redhat.Toutes les applications autres que celles qui sont proposées doivent donc être
téléchargées par l'utilisateur. Généralement le téléchargement se fait en allant directement sur le site du paquetage après une
recherche sur un moteur de recherche (exemple : Google). La difficulté de ce genre de méthode est la gestion des
dépendances. En effet lorsque vous installez un paquetage il très rare que ce dernier ne dépende d'aucun autre paquetage ou
d'aucune librairie. Ce faisant, vous devrez récupérer l'ensemble de ces dépendances avant de lancer son installation. Bien
souvent dans ces conditions, le découragement prend vite le dessus car la mise à jour continuelle des paquetages fait qu'un
paquet A peut dépendre d'une certaine version d'un packet B et que cette version n'existe plus.

Cependant, l'arrivée de Fedora a changé l'esprit de la distribution Redhat qui est une distribution destinée au "Grand Public".
Ainsi elle s'est munie d'une commande appelée "yum", basée sur le rpm et permettant de télécharger des applications avec
l'ensemble de leurs dépendances sur des mirroirs dont le but principal est l'hébergement d'applications (exemple:
ftp://freshrpms.net).

2.2 L'installation, désinstallation , récupération, mise à jour

Comme on l'a vu la commande rpm permet d'installer les fichiers ".rpm" et permet aussi de créer des fichiers rpm par les rpm
sources (src.rpm) mais elle permet de faire beaucoup d'autres choses. Voici une liste des options les plus fréquemment utilisées
de rpm :

2.2.1 Installation

-i foobar.rpm : permet d'installer un rpm

-R foobard.rpm : permet de lister les dépendances d'un fichier

2.2.2 Suppression

-e foobar.rpm : permet de supprimer un rpm

2.2.3 Informations sur les paquetages

L'option -q permet de récuperer des informations sur un ou plusieurs paquetages. Cependant cette option doit être combinée
avec un autre caractère indiquant la nature de l'information.

Voici donc le listing des options les plus souvent rencontrées :

Option Description
-qi
Récupère les informations d'un paquetage déjà installé
paquet
-qa Récupère les noms de l'ensemble des paquetages installés.
-ql
Récupère la liste des fichiers d'un paquetage
paquet
-qf
Permet de savoir à quel paquetage appartient ce fichier
fichier
-qpi rpm affiche des informations sur les paquetages non installés
-V Vérifie un paquetage. Si le paquetage est bon il n'y aura aucune sortie sinon nous verrons
fichier apparaître des lettres indiquant les différents problèmes rencontrés. Voici donc ci-dessous

45
un listing de ces différents caractères :

 5 : somme de contrôle md5


 S : taille du fichier
 L : lien symbolique
 T : date de modification
 D : fichier périphérique
 U : l'utilisateur propriétaire du fichier
 G : le groupe propriétaire du fichier
 M : le mode du fichier

Note: l'ensemble de ces options peuvent être combinées afin de former une requête précise,
exemple : rpm -qpi paquetage.rpm et l'utilisation des globbings est autorisée.

2.3 Création d'un rpm à partir des sources rpm

Tout fichier rpm est un fichier destiné à une architecture précise, par exemple : samba-2.2.5.i586.rpm est destiné aux
ordinateurs dotés d'un processeur de type i586. Cependant il est intéressant de compiler une application de manière à ce qu'elle
soit optimisée pour notre processeur. Dans ce cas il est intéressant d'utiliser les RPM sources. Bien sûr, il existe des paquetages
génériques c'est à dire qui correspondent à toute une famille de processeurs.

exemple : samba-2.2.5-i386.rpm correspond à la famille x86.

Pour compiler un paquetage RPM source, il faut passer l'option --rebuild à la commande RPM comme ci-dessous:

root@localhost # rpm --rebuild samba-2.2.5.src.rpm

Après avoir compilé, le paquetage crée se retrouvera dans le répertoire /usr/src/redhat/RPMS/ dans lequel existe d'autres
répertoires portant le nom d'architecture comme i386,i586,etc... Tous les paquetages généralement crées de cette manière
placent le fichier compilé dans le répertoire i386.

3. Debian
Les paquetages débian existent comme ceux de Redhat sous deux formats, un format binaire identifié par l'extension (.deb) et
un format source indentifié lui par l'extension (.dsc). Les commandes généralement utilisées pour les installer sont celles
présentées ci-dessous :

dpkg : commande dite de bas niveau, en ligne de commande, elle permet l’installation, la désinstallation et la gestion des
informations des paquetages installés.

apt-get : cette commande est la commande la plus populaire du système débian.C'est une commande de haut niveau, servant
d'interface à la commande dpkg. Elle permet le téléchargement et l'installation automatique des paquetages en gérant toutes
les dépendances de celui-ci.

dselect : c'est une interface de la commande apt-get. Elle est exécutée lors de l'installation d'un système Débian.

3.1 Débian, un système "Grand Public"

46
La distribution débian est populaire grâce à la grande diversité des paquets qu'elle distribue. Elle fournit des paquets à la fois
commerciaux et provenant du "monde libre", mais la majorité de ces paquets sont ceux empruntés au "monde libre". Ses
logiciels proviennent de milliers voir de millions de personnes développant des applications pour Linux. Cependant on pourrait se
demander si la provenance de ces paquets est sûre et surtout fiables pour être intégrés dans un système Débian. C'est d'ailleurs
à cause de cette notion de fiabilité, que les Entreprises furent timides à donner un accord favorable à l'intégration de tels
systèmes dit "Grand Public" au sein de leurs réseaux. Préférant bien souvent des solutions comme Microsoft ou Redhat, qui sont
jugées plus fiables du fait qu'ils soient beaucoup plus commerciales. Mais aujourd'hui la barrière de l'a-priori s'est effondrée.
Essayons de comprendre, Comment Debian est devenue une distribution digne de confiance malgré son image "Grand Public"
bien affichée.

En fait ce qu'il est important de savoir c'est que chaque paquet provenant du monde libre est testé au maximum de ses
possibilités, ceci permettant de lever tous les bugs possibles afin de les corriger et ainsi de les faire migrer vers le niveau de
stabilité le plus sûr possible. Ces paquetages ainsi testés évoluent d'une version à une autre de Débian. En effet on distingue
trois distributions de base chez Debian définie par le niveau de stabilité des logiciels, c'est à dire du niveau le moins stable à
celui le plus stable.

Unstable ou "Sid" : cette distribution est la moins stable et la plus récente de Débian. Une fois certains bugs corrigés, les
paquets migrent en testing. Elle est utile pour les utilisateurs expérimentés voulant bénéficier des dernières versions des
applications.

Testing ou "Sarge" : cette distribution offre des paquetages stables mais dont l'ensemble des tests de sécurité n'ont pas été
effectués. Elle est non-adapté pour une utilisation courante.

Stable ou "Woody" : cette distribution est la plus stable de Débian.Elle est utilisé pour les Serveurs et les utilisateurs normaux.

Les paquetages Debian, quelque soit la version utilisée, sont généralement téléchargés via la commande apt-get que nous
avons vue plus haut. Ce qui fait la force d'apt-get est le fait qu'elle récupère les applications dans une arborescence bien
définie appelée "pool" et présente sur différents mirroirs Debian.

Cette arborescence est répartie en 3 grandes familles de répertoire.

Main : contient uniquement des logiciels libres qui représentent la distribution officielle Débian.

Contrib : c'est la que sont stockés des logiciels libres mais dépendant de paquetages propriétaires.

Non free : c'est le répertoire des logiciels payant ou possédant des licences très restrictives.

vous verrez bien souvent dans les noms des répertoires ci-dessus, la dénomination Non-US.
Note:
Celle-ci a pour but d'indiquer que les applications contenu dans ces répertoires ne pourront
être téléchargés à partir des Etats-Unis.

Si vous voulez de plus amples renseignements concernant Debian allez sur le site http://www.debian.org

3.2 Installation, désinstallation, informations, mise à jour

3.2.1 Installation

L'installation, d'une manière générale, est faite à l'aide de la commande apt-get, mais la connaissance de la commande dpkg
est quand même nécessaire. Ainsi vous sera présentée l'utilisation des deux commandes :

dpkg -i samba-2.2.5.deb
apt-get install samba

47
si vous ne connaissez pas le logiciel que vous voulez installer, il est possible d'avoir une
description des différents logiciels pouvant faire ce que vous voulez. En faisant apt-cache
Note:
search "mot_clé" et vous aurez un listing de tous les paquetages ayant soit dans leurs
descriptions le mot clé recherché soit dans leurs noms. Bien sûr ce mot clé accepte les
globbings.

3.2.2 Suppression

dpkg -r samba
ou
dpkg --purge samba

apt-get remove samba


ou
apt-get --purge remove samba

l'option --purge indique ici de supprimer à la fois le paquetage mais aussi l'ensemble des fichiers de configurations installés.

3.2.3 Information concernant les paquetages

L'ensemble des informations d'un paquetage installé sont mises en évidence grâce à la commande dpkg. Voici quelques options
les plus souvent utilisées dans ce cas :

 dpkg -l : permet d'afficher l'ensemble des paquetages installés


 dpkg -L foobar : affiche l'ensemble des fichiers constituant un paquetage
 dpkg -s foobar : affiche l'état d'un processus
 dpkg -S fichier : permet de retrouver l'appartenance d'un fichier à un paquetage

De même que Redhat, il est possible d'afficher notament des informations sur les paquetages non installés, mais ce via la
commande apt. L'option de la commande apt à utiliser fait appel à un cache ou est listé l'ensemble des fichiers à jour pouvant
être téléchargés sur Debian.

la commande est :

apt-cache show feh

Permet de visualiser les informations d'un paquetage installé ou pas sur la machine.

afin de mettre à jour le cache une commande doit être utilisée qui est :

apt-get update.

3.2.4 Mise à jour des paquetages

apt-get distuprgrade

48
Note: l'utilisation de la commande apt-get update est primordiale avant de faire la mise à jour des
paquetages.

3.3 Création d'un deb à partir des sources dsc

Si vous êtes un féru de programmation et que vous vous intéressez d'étudier le code source ou éventuellement de faire des
corrections sur du code bogué avoir les sources d'une application serait intéressant.

Pour cela apt mets à votre disposition des commandes permettant de télécharger les sources et des fichiers permettant la
création d'un fichier .deb .

Pour télécharger un paquet source, vous devez utiliser la commande suivante :

apt-get source nomdupaquet

Cela va télécharger trois fichiers : un .orig.tar.gz, un .dsc et un .diff.gz. Dans le cas où les paquet sont faits spécialement pour
Debian, le dernier de ceux-ci n'est pas téléchargé et le premier n'a généralement pas « orig » dans le nom.

Le fichier .dsc est utilisé par dpkg-source pour dépaqueter le paquet source dans le répertoire nomdupaquet-version. Avec
chaque paquet source téléchargé, il y a un répertoire du nom de l'application qui contient les fichiers nécessaires pour la
création d'un paquet .deb.

Pour créer le .deb allez à l'intérieur du répertoire créé pour le paquet après le téléchargement et tapez la commande suivante:

dpkg-buildpaquetage -rfakeroot -uc -b

4. Gentoo
Gentoo est une méta-distribution jeune née au début de l'année 2002. Elle en est à sa version 1.4 et est disponible sur
beaucoup d'architectures dont : x86,PowerPc, Sparc et Sparc64, amd64, arm etc.

Gentoo a été dévéloppée par l'intégration d'idées provenant du monde BSD et Linux, mais en essayant d'automatiser un
maximum de tâches. L'une des particularités de gentoo est qu'elle fait partie de la génération des distributions appelées
"source-based".

Que veut dire "source-based" ?

Les paquetages fournis par gentoo ne sont pas des binaires que l'on peut installer comme ceux que l'on a vu avec Redhat et
Debian mais sont sous forme de sources, contenant les instructions nécessaires à la compilation des paquetages devant être
installés. Les fichiers sources sont des fichiers aux formats ".ebuild". Ces scripts ont notament été définis pour permettre la
gestion des dépendances.

L'ensemble de ces paquetages fait partie d'une d'une arborescence appelée : Portage,qu'il est important de toujours mettre à
jour.

La commande de base utilisée pour installer des paquetages Gentoo est la commande emerge, cette commande permet non
seulement d'installer des paquetages mais aussi de supprimer , d'obtenir des informations sur un paquetage et aussi de mettre
à jour l'ensemble du Portage.

49
4.1 Installation, désinstallation, informations, mise à jour

4.1.1 Installation

emerge samba

Note: bien sûr de la même manière que Debian, si vous ne connaissez pas le nom exact d'un logiciel
à télécharger vous pouvez faire une recherche en faisant : emerge search "mot_clé".

4.1.2 Suppression

emerge -C samba

4.1.3 Information

emerge -searchdesc samba

4.1.4 Mise à jour

emerge sync

5. Installation par Les sources


Les paquetages installés par les sources sont présent sous la forme de fichier tar compréssé soit en bzip2 soit en gzip2. Ces
paquetages sont construits toujours de la même manière. On les appelle des "tarballs". Installer un tarball permet de bénéficier
de la dernière version d'un logiciel.

La procédure d'installation d'un tarball suit toujours la même logique ainsi définie :

Prenons l'exemple d'un paquetage appelé foobar.tar.gz.

5.1 Téléchargement du tarball

luser@localhost $ wget http://www.foobar.com/Dowload/foobar.tar.gz

5.2 Décompression du tarball à l'aide de l'utilitaire tar

luser@localhost $ tar xzf foobar.tar.gz

Note:
50
il ne sera pas rare de trouver les tarballs sous le format tar.bz2, il faudra pour cela utiliser la
commande tar avec les options "xjf"

5.3 Allez dans le répertoire crée par la décompréssion

luser@localhost $ cd foobar

5.4 Lancement du script shell configure

luser@localhost $ ./configure

Cette étape aura pour but de créer un fichier Makefile à l'aide de l'utilitaire "autoconf", qui permettra la compilation du logiciel.
On peut passer des options à ce script, permettant par exemple de modifier le chemin d'installation, grâce à
--prefix=<répertoire> (défaut : /usr/local).

5.5 compilation de l'application

luser@localhost $ make

Note:
vous devez avoir gcc d'installé

5.6 Installation du logiciel

root@localhost # make install

Chapitre 13 : RAID et LVM

1. Raid Logiciel
1.1 Introduction au Raid

Merci à Mathieu Martineau du Laboratoire Microsoft pour la note technique sur les différents types de RAID.

En 1987, les chercheurs de l’université de Berkeley ont proposés cinq niveaux de RAID (les niveaux 1, 2, 3, 4 et 5). Depuis
d’autres niveaux ont été implémentés comme le RAID 6 et le RAID 7. Les niveaux JBOD et 0 sont aussi considérés comme des
modes de RAID bien qu’ils n’implémentent pas de redondance des données (le ‘R’ de RAID signifie « Redundant » c'est-à-dire
redondance).

Le RAID 0 et le JBOD sont d’ailleurs présents en standard sur toutes les cartes RAID du marché. Ces modes (niveaux) de RAID
sont considérés comme des modes simples. Il est également possible de créer des niveaux de RAID combinés.

Le but de cette technologie est de remplacer les coûteux disques de 6.5 pouces et de 9.5 pouces (ces disques sont aussi
appelés « disques grands systèmes ») qui équipent les gros serveurs (comme les serveurs de fichiers) par des ensembles formé

51
de disques de 3.5 pouces plus répandus et beaucoup moins chers. Cela explique pourquoi l'acronyme RAID signifie aussi
Redundant Array of Inexpensive Disks.

Cette technologie est principalement utilisée dans le domaine de l'entreprise pour sécuriser ou bien pour augmenter les
performances des serveurs. Elle est parfois mise en place avec d’autres technologies telles que le clustering afin d’obtenir des
performances encore plus grande ou bien d’avoir une sécurité maximale.

Cependant, le RAID se popularise rapidement par le biais des cartes d'extension (par exemple les cartes au format PCI 32 bits)
et des chipsets intégrés au sein des cartes mères grand public (ex. : le chipset sud Intel ICH5R). Généralement les contrôleurs
RAID que l’on trouve sur le marché du matériel « grand public » sont très limités par rapport aux contrôleurs RAID haut de
gamme (niveaux RAID supportés réduit au RAID 0 et 1, pas de mémoire cache intégrée au contrôleur …).

Le but du RAID est de rassembler plusieurs disques durs physiques en seule unité logique. C'est-à-dire que pour plusieurs
disques utilisant la technologie RAID, le système d’exploitation ne verra qu’un seul disque que l’on pourra qualifier de « disque
virtuel ». Le RAID fonctionne donc grâce à un ensemble (ou agrégat) de disques. Il existe plusieurs niveaux (ou configuration)
de RAID qui rassemblent différemment les données sur l’ensemble des disques. En fonction du niveau de RAID sélectionné on
peut :

 additionner la capacité des disques durs pour former un disque virtuel plus grand
 obtenir un disque virtuel plus performant
 mettre en place la tolérance de panne (c'est-à-dire sécuriser les données, mais ne remplace pas la sauvegarde)
 augmenter la capacité, les performances et la sécurité

La technologie RAID peut être mise en place au niveau matériel ou niveau logiciel. Elle fonctionne avec des disques durs
utilisant l’interface PATA (Parallel Advanced Technology Attachment), SATA (Serial Advanced Technology Attachment) ou bien
SCSI (Small Computer System Interface).

1.1.1 Le JBOD

Le mode JBOD (Just a Bunch Of Disks) ou RAID linear, est implémenté dans quasiment toutes les cartes RAID du marché. Il
permet tout simplement de rassembler plusieurs disques durs en une seule unité logique de plus grosse capacité.

Par exemple si l’on possède un disque de 8Go, un disque de 10Go et un disque de 30Go, on peut les rassembler en un seul
disque dur logique de 48Go.

Les données sont ensuite écrites disque par disque, c'est-à-dire que dès qu'un disque est plein, la suite des données est copiée
sur un autre disque. Tout cela reste bien sur complètement transparent pour l'utilisateur. Il n’implémente aucune tolérance de
panne et n’augmente pas les performances. Il sert uniquement à étendre la capacité d’un disque.

Ce mode est intéressant si l’on souhaite stocker de gros fichiers ou bien si l’on dispose d’un grand nombre de petits disques
durs.

1.1.2 Le RAID 0 ou « stripping »

Le RAID 0 est un agrégat (ensemble) de disques formé d’au moins deux disques durs. Avec le RAID 0, les données sont
réparties sur l’ensemble des disques de l’agrégat. Cela améliore les performances en lecture et en écriture. Par exemple si on
copie un fichier de 99 Mo sur un agrégat composé de 3 disques, alors le contrôleur RAID va diviser de façon équitable le travail
entre les trois disques qui écriront chacun 33 Mo. Cela va donc multiplier le débit par 3 (en théorie). De plus la capacité des
disques s’additionne pour former un disque virtuel de plus grosse capacité.

Précision sur le RAID 0


Si on crée un agrégat avec des disques possédant des caractéristiques différentes alors les
Note: caractéristiques du disque le moins performant sont utilisées. Un niveau RAID 0 doit utiliser
des disques durs ayant des caractéristiques très proches (notamment en capacité et en
performances).
52
Lorsque l’on utilise un niveau RAID 0, nous avons vu que les données sont réparties entre les différents disques, ce qui permet
d’augmenter les performances. Pour répartir les données sur l’ensemble des disques de la façon la plus optimisée, la carte RAID
(ou bien le système d’exploitation dans le cas d’un RAID logiciel) doit les découper en petites unités appelées segments.
Lorsque l’on met en place un niveau RAID 0, on doit spécifier la taille de ces segments (ou block size, et parfois nommé chunk
size). Cette taille est un multiple de la capacité d’un secteur de disque dur (soit 512octets). Ainsi, la plus petite taille possible
pour un segment est de 512octets et peut attendre plusieurs Méga-octets (parfois plus de 4Mo).

La taille sélectionnée va influencer sur les performances en lecture et en écriture. Pour le stockage de gros fichiers, il est
recommandé de choisir une taille élevée (256Ko, ou plus) alors que pour les petits fichiers une petite taille est à privilégier (ex. :
512octets, 1024 octets, …). Mais il ne faut surtout pas mettre une taille de 2048 Ko pour stocker des petits fichiers de 4Ko
chacun car cela occuperait énormément d’espace disque inutilement et les performances seraient désastreuses.

Pour conclure, l’avantage du RAID 0 est une augmentation des performances proportionnelle au nombre de disque et ce sans
perte de capacité. Cependant ce mode ne tolère pas les pannes (si un des disques tombe en panne alors toutes les données
stockées sur l’agrégat sont perdues) et induit une augmentation de la probabilité d’une panne (plus il y a de disques plus il y a
de chances pour que l’un d’eux tombe en panne).

1.1.3 Le RAID 1

Un système RAID 1 duplique les données sur tous les disques. Tout comme le RAID 0, le RAID 1 nécessite un minimum de deux
disques durs pour fonctionner. Les disques ont un contenu identique ce qui implique une perte d'espace proportionnelle au
nombre de disques rajoutés. En effet, si on met 3 disques de 40 Go en RAID 1 alors les 40 Go écris sur le disque 1 seront copiés
sur les deux autres disques. On perdra donc 2 * 40 = 80 Go d'espace disque sur la capacité totale des 3 disques (120 Go).

En cas de dysfonctionnement de l'un des disques durs (cela arrive fréquemment sur des serveurs recevant beaucoup de
requêtes par secondes), le contrôleur RAID utilisera alors uniquement les disques en état de marche. Le RAID 1 apporte donc la
tolérance de pannes. L'utilisation du RAID 1 est particulièrement recommandée sur des serveurs stockant des données sensibles
qui doivent rester fonctionnels 24 heures sur 24.

Lorsque l'on met en place un RAID 1 avec des disques durs de capacités différentes, alors la capacité de stockage de l'ensemble
en RAID 1 sera celle du disque de plus faible capacité.

Lorsqu'un accès en lecture est réalisé sur un ensemble de disques en mode RAID 1, alors tous les disques lisent chacun une
partie de la données ce qui améliore grandement les performances en lecture. En revanche lors de l'écriture sur un ensemble de
disques RAID 1, les performances ne sont pas améliorées. En effet, les disques vont écrire les données de façon synchronisée et
ce au fur et à mesure que les données vont arriver au contrôleur. Le travail lors d'un accès en écriture n'est donc pas divisé
entre les disques mais est commun à tous les disques. Le débit en écriture d'un ensemble RAID 1 est donc le même que celui
d'un disque seul. C'est pourquoi dans un ensemble RAID 1, contenant 5 disques les accès en lecture seront grandement
améliorés alors que les accès en écriture stagneront.

Le but du RAID 1 est d'offrir une sécurité maximale aux données stockées sur une machine. C'est pourquoi certaines cartes
RAID incluent plusieurs contrôleurs RAID (un par disque) afin que malgré la perte d'un contrôleur les données soient toujours
accessibles. Dans ce cas on parle de " duplexing ".

Il existe donc bien deux types de RAID 1 différents. Le « duplexing » étant méconnu et très peu utilisé, une certaine confusion
s’est crée à propos du RAID 1. En effet, « mirroring » n’est pas synonyme de RAID 1.

1.1.4 Le RAID 2

Le RAID 3 apporte les avantages du RAID 0 (amélioration des performances) et du RAID 1 (tolérance de panne). Le mode RAID
3 fonctionne avec un minimum de trois disques. A l’instar du RAID 0, tous les disques sauf un qui a une tâche spéciale se
divisent les opérations de lecture et d’écriture ce qui augmente les performances. L’un des disques est un disque de parité.

La tolérance de panne grâce à la parité : Avec un ensemble RAID3, lors de chaque opération d’écriture les données vont êtres
réparties entres tous les disques (sauf le disque de parité) de façon équitable. Au moment où les données sont écrites, des
informations indiquant sur quel disque a été stocké tel ou tel fragment des données sont enregistrées dans le disque de parité.
Ce sont les informations de parité. Ainsi, si un fragment d’une donnée est défectueux ou manquant, la comparaison entre les
53
informations de parité et les autres fragments de la donnée (qui sont stockés sur les autres disques durs) vont permettre de
reconstituer le fragment. Si l’un des disques contenant des données tombe en panne, alors le disque de parité et les disques
restant permettent de reconstruire les données qui étaient stockées sur le disque endommagé.

Lorsque le disque de parité tombe en panne le système continue de fonctionner en mode RAID 0 avec les disques restants qui
contiennent les données. Lorsque l’on rajoute un nouveau disque de parité, les informations de parité sont reconstruites et le
RAID 3 redevient actif.

Le RAID 3 apporte donc la tolérance de panne car le système supporte la perte d’un disque quel qu’il soit (données ou parité).
En revanche si deux disques durs tombent en panne simultanément, les données sont perdues.

Le RAID 3 permet donc d’augmenter les performances tout en gérant la tolérance de panne. Les performances en lecture sont
améliorées proportionnellement au nombre de disques (plus il y a de disques, plus les performances en lecture augmentent).
Malgré une légère amélioration des performances en écriture (elles sont bridées par le disque de parité) ce système n’est pas
plus intéressant que le RAID 1. En effet, sa fiabilité est moindre car seul la perte d’un seul disque est possible et car le disque
de parité s’use plus vite.

1.1.5 Le RAID 4

Ce mode nécessite au moins trois disques et est très proche du RAID 3. La seule différence notable avec le RAID 3 est
l’organisation des données. En effet, avec le RAID 4, la taille des segments est variable et se modifie en temps réel. Cela
implique que les informations de parité doivent être mise à jour à chaque écriture afin de vérifier si la taille des segments a été
modifiée. Dans un système RAID 4, le disque de parité devient donc un facteur encore plus limitant lors des opérations
d’écriture. Cependant, les performances en lecture sont les même qu’avec le RAID 3 (c'est-à-dire excellentes). Le mode RAID 4
gère donc la tolérance de panne et apporte un gain en lecture mais pas en écriture. Généralement on lui préfère le RAID 5.

1.1.6 Le RAID 5

Ce mode est très proche du RAID 4 car il utilise au moins trois disques durs et car il procure une augmentation des
performances et gère la perte d’un disque dur.

Par rapport au RAID 4, la configuration RAID 5 répartie la parité sur l’ensemble des disques ce qui élimine le goulot
d’étranglement qu’est le disque de parité en RAID 3 et en RAID 4. Un autre avantage de répartir la parité sur chacun des
disques est que les disques travaillent tous autant. Cela empêche l’usure prématurée de l’un des disques (comme c’est le cas
avec le disque de parité en RAID 3 et surtout en RAID 4).

Le RAID 5 écrit donc simultanément les données sur plusieurs disques ce qui améliore les performances en lecture et en
écriture. Ainsi par rapport à un disque seul, les performances d’une grappe RAID 5 utilisant n disques seront (n-1) fois plus
élevées (en effet, l’un des disques doit écrire la parité, la donnée écrite est donc répartie sur les n-1 disques restants).

Tout comme pour le mode RAID 0, on doit sélectionner une taille de segment adaptée lorsque l’on met en place un niveau RAID
5.

De par ses nombreux avantages le RAID 5 est très populaire dans le monde professionnel car il apporte la tolérance de panne
tout en conservant d’excellentes performances en lecture et en écriture. De plus si on utilise une interface qui supporte le
branchement à chaud ou "hot plug" (SCSI ou Sata), il n’est même plus nécessaire d’éteindre le serveur. Bien entendu la mise en
place d’un ensemble RAID 5 fait perdre de l’espace disque (en fait l’espace réservé à la parité qui représente la taille d’un
disque). De plus la répartition de la parité sur l’ensemble des disques entraîne une remise en ordre un peu lente lorsqu’un
disque dur est échangé suite à une panne.

1.1.7 Le RAID 6

Le RAID 6 met en place une double redondance des données de parité. Cela signifie que les informations de parité sont
stockées en doubles exemplaires. Tout comme pour le RAID 5, les informations de parité sont réparties équitablement sur
l’ensemble des disques. La double redondance des données permet la perte de deux disques sans qu’aucune donnée ne soit
perdue. Le RAID 6 nécessite au moins quatre disques durs pour fonctionner. En ce qui concerne la capacité utilisable de
54
stockage, on perd l’espace de deux disques. Donc dans un système utilisant n disques, la capacité utilisable est définie par la
relation suivante : Capacité utilisable = (taille du disque le plus petit) * (nombre de disques – 2)

Les performances en lecture comme en écriture sont augmentées. Avec un nombre de disques équivalents, un ensemble RAID 6
sera moins performant qu’un ensemble RAID 5 (car un disque de plus est utilisé pour la parité).

1.1.8 Le RAID 7

Ce mode est utilisé pour avoir un niveau de sécurité ou des performances très supérieures aux autres modes RAID. Il utilise un
grand nombre de disques (avec un maximum de 48 disques). On peut définir manuellement le nombre de disques dédiés au
stockage de la parité et au stockage des données. Le nombre de disques que le système peut perdre est proportionnel au
nombre de disques dédiés au stockage des informations de parité. Le RAID 7 fait appel à une carte microprocesseur qui calcule
la parité, la gestion du disque et qui gère la surveillance des disques en temps réel. Tous les transferts de données se font en
mode asynchrone ce qui augmente de 1,5 à 6 fois les performances en écriture.

Il est peu utilisé car il très coûteux en équipement et difficile à mettre en place.

1.1.9 Conclusion

Pour conclure, les modes les plus intéressants sont les modes 0, 1 et 5. Les autres modes sont peu ou pas utilisés car :

 le RAID 2 est obsolète


 le RAID 3 et 4 utilisent un disque de parité ce qui crée un goulot d’étranglement.
 le RAID 6 est onéreux
 le RAID 7 est très onéreux et difficile à mettre en place

1.2 Le RAID combiné

Les niveaux de RAID offrent un large choix d’alternatives qui permettent de choisir un rapport performance/sécurité différent. Il
est aussi possible de combiner deux niveaux de RAID entre eux. On parle alors de niveaux combinés.

Certaines cartes permettent de combiner différents modes (ou niveaux) RAID en hardware mais elles sont chères mis à part les
cartes RAID IDE d’entrées de gamme qui gèrent toutes le RAID 01 ou 10 selon les cas. Cependant ces dernières ne sont pas
intéressantes pour réaliser des combinaisons étant donné que ces « cartes bas de gamme » n’intègrent qu’un seul contrôleur
(donc pas de tolérance de panne pour le contrôleur) et que le nombre de disques utilisables est souvent limité à quatre.

Généralement la manière la moins onéreuse pour réaliser une combinaison entre deux modes RAID est :

1. 1.d’utiliser plusieurs contrôleurs au niveau matériel pour mettre en place plusieurs ensembles en mode RAID X.
2. 1.de créer un RAID Y au niveau logiciel à partir de tous les ensembles RAID X.

L’ensemble obtenu sera un ensemble fonctionnant en un mode RAID nommé XY. Cela signifie que l’on met d’abord en place
plusieurs RAID X, puis qu’on les rassemble avec un mode RAID Y. Un RAID XY est donc différent d’un RAID YX. Voici un
exemple :

Admettons que l’on dispose de 9 disques durs de 20 Go chacun, de trois cartes RAID gérant le RAID 0 et le RAID 1 ainsi que
d’un 7ème disque dur (branché sur le contrôleur intégré à la carte mère). On peut réaliser deux combinaisons intéressantes :

 un RAID 01
 un RAID 10

1.2.1 Le RAID 01

On divise les disques en trois groupes de trois. On met trois disques sur chacune des cartes RAID et on crée trois ensembles
RAID 0. Chaque ensemble RAID 0 comporte 3 disques de 20 Go chacun, ce qui donne une capacité de 60Go par ensemble.
55
Ensuite, on crée un ensemble RAID 1 de manière logicielle avec les trois ensembles matériel en RAID 0. On obtient donc après
formatage, un seul disque d’une capacité de 60Go.

Chaque ensemble matériel en RAID 0 a des performances en lecture/écriture trois fois plus élevées environ qu’un disque seul.
L’ensemble logiciel en RAID 1 propose donc des performances triples à celles d’un disque seul.

Si l’un des six disques vient à tomber en panne alors, toutes les données stockées sur l’ensemble matériel RAID 0 auquel il
appartient sont perdues. On se retrouve avec seulement deux ensembles matériels en RAID 0 et donc 6 disques utilisés. Si on
perd ensuite un second disque il ne reste plus qu’un ensemble RAID 0. Enfin si un dernier disque tombe en panne alors,
l’ensemble subsistant et donc toutes les données seront perdus.

Dans notre exemple, grâce au RAID 01, on obtient des performances triplées par rapport à un disque seul et le système
supporte la perte de deux disques durs.

1.2.2 Le RAID 10

On divise les disques en trois groupes de trois. On met trois disques sur chacune des cartes RAID et on crée trois ensembles
RAID 1. Chaque ensemble RAID 1 comporte 3 disques de 20 Go chacun, ce qui donne une capacité de 20Go par ensemble.
Ensuite, on crée un ensemble RAID 0 de manière logicielle avec les trois ensembles matériel en RAID 0. On obtient donc après
formatage, un seul disque d’une capacité de 60Go.

Chaque ensemble matériel en RAID 1 a des performances en lecture/écriture égales à un disque seul. L’ensemble logiciel en
RAID 0 propose donc des performances triples à celles d’un disque seul.

Si l’un des six disques vient à tomber en panne alors, l’ensemble RAID 1 auquel il appartient continue à fonctionner
normalement. Si on perd un second disque dans le même ensemble RAID 1, l’ensemble RAID 0 logiciel n’est pas affecté non
plus. Si on perd le troisième disque l’ensemble matériel RAID 1 ne fonctionne plus ce qui implique que les données stockées sur
l’ensemble logiciel RAID 0 sont perdues. Ainsi en RAID 10, on perdre jusqu’à 2 disques par ensemble RAID 1 (dans notre
exemple) soit un maximum de 6 disques sur les 9 disques.

Pour conclure, les performances en RAID 01 sont les mêmes qu’en RAID 10. Cependant l’ensemble RAID 10 se distingue au
niveau de la tolérance de pannes car il peut perdre (dans notre exemple) jusqu’à 6 disques contre 2 uniquement pour le RAID
01. C’est pour cette raison essentielle que le RAID 10 est préféré au RAID 01.

1.2.3 Le RAID 50 et les autres combinaisons

Une autre combinaison très utilisée est le RAID 50. En effet, elle permet d’obtenir d’excellentes performances tout en gérant la
tolérance de panne.

D’une manière générale toutes les combinaisons en RAID X0 sont misent en place. En effet, on implémente d’abord un mode X
qui gère la tolérance de panne (1, 3, 4, 5 ou 6) puis un mode RAID 0 afin de maximiser les performances. Bien entendu, il est
tout à fait possible au niveau théorique de combiner des modes qui implémentent la tolérance de panne. On peut par exemple,
penser au RAID 55 ou au RAID 53. Cependant, en pratique, les constructeurs n'implémente quasiment jamais de tels modes car
si l'on combine deux modes qui demande un contrôle de parité alors il faut disposer d'une carte RAID extrêmement puissante
afin de pouvoir réaliser les calculs de parité sur deux niveaux.

Les combinaisons les plus utilisées sont donc le RAID 10, 30 et 50. Les combinaisons RAID 40 et 60 sont rarement rencontrées
en raison du succès commercial mitigé (voire nul de nos jours) du RAID 4 et du RAID 6.

2. Implémentation du RAID logiciel


2.1 Configuration du noyau

56
L'implémentation du RAID sous Linux nécessite une prise en charge du noyau. Il est nécessaire de cocher le support du RAID
dans le noyau. Pour cela il faut se rendre dans le menu Device Drivers => Multi-Device support, cocher le support du RAID ainsi
que les niveaux de RAID souhaités. Puis recompiler le noyau (ou les modules si le support du RAID a été coché en module).

2.2 Installation de mdadm

Vous devez également installer mdadm (partie userland (qui ne dépend pas du noyau) du RAID) qui est disponible à l'adresse
suivante : http://cgi.cse.unsw.edu.au/~neilb/mdadm

Ceux-ci peuvent être installés via les systèmes de packages :

root@localhost # emerge sys-fs/mdadm

root@localhost # apt-get install mdadm

2.3 Partitions pour le RAID

Pour mettre en place du RAID logiciel, nous devons tout d’abord créer des partitions sur nos disques qui vont servir à stocker
les données de nos partitions RAID.

Pour cela nous utiliserons fdisk comme pour créer des partitions sur les disques, mais au lieu de choisir le type 83 (Linux), nous
devons choisir le type FD qui représente des partitions « Linux RAID Autodetect ».

2.4 Partitions de RAID

Les partitions de RAID, c'est-à-dire représentant la partition de RAID sont désignés par les fichiers spéciaux :

/dev/mdX

Où X est un numéro représentant la partition de RAID voulue. Ce numéro est compris entre 0 et 15 inclus. Nous pouvons donc
avoir 16 partitions de RAID logiciels au maximum.

Attention : il n’y a pas besoin de partitionner son disque en RAID logiciel. Ils doivent être utilisés directement comme des
partitions.

2.5 Configuration du RAID

Le RAID à l’aide de mdadm ne se configure pas dans un fichier, mais à l’aide de la commande qui vous permettra de créer vos
disques logiques et de les administrer.

Attention : un fichier est quand même utilisé mais est créé aussi grâce à la commande mdadm.

Nous allons voir comment créer des partitions RAID de niveau 0, 1 et 5.

2.6 Mise en place d'un RAID 0

Nous allons créer une partition de RAID 0 (stripping) sur les partitions /dev/sdb1 et /dev/sdc1

57
root@localhost # mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/sdb1
/dev/sdc1

Les options que nous utilisons sont donc :

 --create : nous voulons créer une partition de RAID


 /dev/md0 : nous voulons créer notre partition de RAID sur /dev/md0
 --level : nous permet de préciser le niveau de RAID que nous voulons
 --raid-devices=X : permet de préciser le nombre de disques durs que nous voulons utiliser pour ce disque de RAID
 /dev/sdb1 /dev/sdc1 : représentent les fichiers spéciaux vers les partitions que nous voulons utiliser. Il doit y avoir
autant de fichiers spéciaux que le nombre précisé dans l’option --raid-devices

Les différentes valeurs que nous pouvons préciser pour créer notre RAID 0 à l’option --level sont les suivantes :

 0
 linear
 raid0
 stripe

Nous pouvons donc maintenant formater notre RAID :

root@localhost # mke2fs -j /dev/md0

2.7 Mise en place d'un RAID 1

Cette partie décrit la mise en place d’un RAID 1 (mirroring) sur les partitions /dev/sdb1 et /dev/sdc1 et utiliser la partition
/dev/sdd1 en disque de spare.

La commande pour créer notre RAID est donc la suivante :

root@localhost # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1


--spare-devices=1 /dev/sdd1

Les nouvelles options sont donc :

 --spare-devices=X : précise le nombre de disques de spare


 /dev/sdd1 : tel que précédemment pour l’option --raid-devices, cela représente la partition à utiliser pour le disque de
spare. Il en faut autant que précisé dans l’option --spare-devices

Les différentes options utilisables pour --level sont :

 1
 raid1
 mirror

2.8 Mise en place d'un RAID 0+1

Nous allons mettre en place un RAID 10 (stripping + mirroring), donc mettre en place un RAID 0 sur des disques en RAID 1.

58
Il nous faut au moins 4 partitions disponibles pour effectuer cela. Commençons par créer nos deux disques en RAID 1 :

root@localhost # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1


root@localhost # mdadm --create /dev/md1 --level=mirror --raid-devices=2 /dev/sdd1
/dev/sde1

Créons ensuite le disque de RAID 0 en utilisant nos deux périphériques en RAID 1 :

root@localhost # mdadm --create /dev/md2 --level=raid0 --raid-devices=2 /dev/md0 /dev/md1

On peut alors formater notre disque de RAID final :

root@localhost # mke2fs -j /dev/md2

Pour accéder au RAID il nous faudra taper :

root@localhost # mount /dev/md2 /mnt/temp

2.9 Mise en place d'un RAID 5

Nous allons mettre en place un RAID 5. Pour cela il nous faut au minimum 3 disques, nous utiliserons sdb1, sdc1 et sdd1 en
tant que disques de RAID et sde1 en tant que disque de spare.

Nous allons donc utiliser la commande suivante pour créer notre disque de raid :

root@localhost # mdadm --create /dev/md0 --leve=raid5 --raid-devices=3 /dev/sdb1 /dev/sdc1


/dev/sdd1 --spare-devices=1 /dev/sde1

Nous pouvons alors formater notre disque de RAID :

root@localhost # mke2fs -j /dev/md0

Il est possible d’accéder au disque en tapant :

root@localhost # mount /dev/md0 /mnt/temp

2.10 Fichier de configuration

Une fois que nous avons créé nos disques de RAID, il nous faut les sauver dans le fichier de configuration afin d’en sauver
l’existence. Pour cela nous allons utiliser la commande suivante :

59
root@localhost # mdadm --examine --scan >> /etc/mdadm.conf

Attention : l’emplacement de ce fichier de configuration peut être différent. Par exemple, sous Debian, il se situe à cet
emplacement : /etc/mdadm/mdadm.conf

2.11 Afficher les informations d'un disque de RAID

Pour afficher l’état d’un disque RAID actif, nous devons utiliser directement la commande mdadm sans options :

root@localhost # mdadm /dev/md0


/dev/md0: 1023.88MiB raid1 2 devices, 1 spare. Use mdadm --detail for more detail.
/dev/md0: device 0 in 2 device undetected raid0 md2. Use mdadm --examine for more detail.

Nous pouvons aussi utiliser l’option --detail pour avoir un listing détaillé de l’état de notre RAID :

root@localhost # mdadm --detail /dev/md0


/dev/md0:
Version : 00.90.01
Creation Time : Mon Oct 3 17:04:43 2005
Raid Level : raid1
Array Size : 1048448 (1023.88 MiB 1073.61 MB)
Device Size : 1048448 (1023.88 MiB 1073.61 MB)
Raid Devices : 2
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Oct 3 17:05:11 2005


State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1

UUID : 255a67d6:845546d7:91258d6a:41088f14
Events : 0.2

Number Major Minor RaidDevice State


0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1

2 8 49 - spare /dev/sdd1

Note : Ces exemples sont donnés dans le cas d’un disque en RAID 1 avec 2 disques de RAID et un disque de spare.

2.12 Ajout et retrait d'un périphérique à chaud

Lors du crash d'un disque, le système remplace le disque en panne par le disque de spare. Cependant, plus aucun disque de
spare n'est disponible en cas de panne d'un autre disque. Le retrait de disque à chaud va nous permettre de retirer le disque
défectueux et l'ajout à chaud va nous permettre de rajouter un disque de spare au RAID.

60
Pour cet exemple, nous utiliserons le même disque de RAID que dans la partie précédente : RAID 1 avec deux disques de RAID
et un disque de spare.

Simulons à présent la panne du disque /dev/sdc1 :

root@localhost # mdadm /dev/md0 -f /dev/sdc1


mdadm: set /dev/sdc1 faulty in /dev/md0

Nous pouvons maintenant voir le changement dans l’état de notre disque de RAID.

Attention, nous avons coupé la sortie de la commande pour faciliter la lecture des informations modifiées :

root@localhost # mdadm --detail /dev/md0


[...]
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 49 1 active sync /dev/sdd1

2 8 33 - faulty /dev/sdc1

Nous voyons donc que le périphérique /dev/sdc1 est marqué comme faulty, c'est-à-dire défaillant, et que notre disque de spare
sdd1 est alors passé en mode actif, il a bien remplacé le disque défaillant.

Nous pouvons alors le supprimer du disque de RAID et rajouter le disque sde1 comme disque de spare pour cet agrégat :

root@localhost # mdadm /dev/md0 -r /dev/sdc1


mdadm: hot removed /dev/sdc1

root@localhost # mdadm /dev/md0 -a /dev/sde1


mdadm: hot added /dev/sde1

Nous aurions aussi pu compresser ces deux commandes en une seule :

root@localhost # mdadm /dev/md0 -r /dev/sdc1 -a /dev/sde1

Attention : ce regroupement ne fonctionne que pour des commandes sur le même disque de RAID.

3. Gérer les périphériques RAID


3.1 Gestion des disques de RAID

Nous allons maintenant voir comment démarrer, arrêter, marquer comme lecture seule ou lecture-écriture un disque de RAID.
Tout cela se passe dans le mode misc de mdadm.

61
Option Option
Description
longue courte
Permet d’arrêter un périphérique de RAID, toutes les ressources utilisées sont
--stop -S
libérées
Permet de démarrer un périphérique de RAID non complet (manque de
--run -R
disques physiques, pas entièrement construit, ...)
--readonly -o Marque le périphérique de RAID comme étant en lecture seule
--readwrite -w Marque le périphérique de RAID comme étant en lecture écriture

Exemples :

Arrêt du périphérique /dev/md0 :

root@localhost # mdadm --misc --stop /dev/md0

Démarrage du périphérique /dev/md0

root@localhost # mdadm --misc --R /dev/md0


mdadm: array /dev/md0 started.

Passage du périphérique /dev/md0 en lecture seule :

root@localhost # mdadm --misc --readonly /dev/md0

3.2 Monitorer ses périphériques RAID

mdadm dispose d’un mode lui permettant de surveiller les périphériques de RAID créés et d’envoyer des alertes lorsqu’un
évènement se produit. Il peut aussi exécuter un programme à chaque alerte.

Pour cela, il faut lancer mdadm avec l’option -F ou --monitor pour lui dire d’utiliser ce mode et l’option --scan pour qu’il cherche
tous les périphériques de RAID actifs. Les autres options utiles disponibles sont :

Option longue Option courte Description


--pid-file fichier.pid -i fichier.pid Fichier contenant le PID du daemon
--mail
-m mail@domain.fr Adresse mail à qui envoyer les alertes
mail@domain.fr
--program binaire --alert
-p binaire Programme à lancer lorsqu’il y a des alertes
binaire
--daemonize -f Passer en mode daemon
--delay 30 -d 30 Temps entre deux vérifications (en secondes)

Exemple :

62
Nous voulons vérifier l’état de nos disques de RAID toutes les 30 secondes et si un évènement survient, il faut envoyer les
alertes à l’adresse mail : labo-linux@supinfo.com. Le fichier qui contiendra le PID du daemon sera : /var/run/mdadm.pid

root@localhost # mdadm -F --scan -f --delay 30 --pid-file /var/run/mdadm.pid -m labo-


linux@supinfo.com

Nous aurions pu faire la même chose, mais juste pour le périphérique /dev/md0 avec la commande suivante :

root@localhost # mdadm -F -f --delay 30 --pid-file /var/run/mdadm.pid -m labo-


linux@supinfo.com /dev/md0

4. Mise en place de LVM

4.1 Présentation

Dans un environnement de partitionnement classique, vous ne pouvez avoir que 4 partitions primaires par disque dur ou 3
partitions primaires et une partition étendue contenant des partitions logiques, ce qui est assez restrictif.

C'est pourquoi IBM a mis au point le LVM, ou Logical Volume Manager. Grâce à cet outil, vous allez pouvoir, entre autres, créer
autant de partitions que vous le désirez, les redimensionner sans formatage et les étaler sur plusieurs disques. Mais LVM
dispose également de nombreuses autres possibilités.

Ses objectifs : éviter l’arrêt et le redémarrage de la machine et permettre à l'utilisateur de s'affranchir totalement des
contraintes physiques imposées par les disques durs.

4.2 Composition de LVM

Chaque disque dur ou partition va être transformé en volume physique. Pour cela LVM va le diviser en tranches de 4Mo (par
convention), appelées « physical extents ». Il écrase par la même occasion toutes les données existantes sur la partition ou le
disque.

Chaque volume physique va être ensuite inséré dans un groupe de volumes, lui même découpé en « logical extents » (LE) de
même taille que les « physical extents » (PE), soit 4Mo. Alors qu'avec LVM 1, les « logical extents » créés par répartition ne
peuvent pas être étendus au-delà des « physical extents » initiaux, LVM 2 permet l’extension des « logical extents » répartis en
concaténant d'autres extents.

LVM va ensuite créer des pointeurs entre un « physical extent » et un « logical extent ». Cette correspondance peut être linéaire
( une plage de « physical extents » attribuée à un volume physique dans l'ordre) ou répartie. Cette dernière permet de
distribuer des morceaux d'extents logiques sur plusieurs volumes physiques améliorant ainsi, dans certains cas, les
performances du volume logique.

Puis, chaque groupe de volumes va être divisé en volumes logiques (assimilable à des partitions classiques) dans lesquels nous
créerons un système de fichiers ou une partition de swap. Grâce à l'utilisation des « logical extents » et des « physical extents
», ces partitions pourront être redimensionnées, déplacées, supprimées, ajoutées sans redémarrage et sans perte de données.

De plus, LVM permet d'utiliser un nommage plus compréhensible que les noms des disques physiques.

L'utilisation du LVM entraîne une diminution de l'espace disque causée par l'écriture des données nécessaires au système pour
utiliser le LVM : les métadatas.

 la Physical Volume Reserved Area contient les informations sur le volume physique
63
 la Volume Group Reserve Area contient les informations liées au groupe de volumes et aux volumes logiques contenus
dans le groupe de volumes
 la Bad Block Relocation Area contient des informations nécessaires à la réparation des blocs défectueux

LVM dispose également d'un autre outil : les snapshots ou instantanés. Un instantané permet de copier à l'identique et à un
instant donné un volume logique dans un nouveau périphérique.

4.3 Installation

Vous devez avoir compilé le driver LVM dans votre noyau (en dur ou en module). Celui-ci se situe dans le menu de compilation
"Multi-device support". Ou dans le fichier de configuration:

# Multi-device support (RAID and LVM)


CONFIG_BLK_DEV_LVM=m

L'installation de LVM nécessite le mappeur de périphériques.

luser@localhost # cvs -d :pserver:cvs@sources.redhat.com:/cvs/dm login cvs

Le mot de passe est « cvs ». Tapez ensuite la commande suivante pour récupérer le code source :

# cvs -d :pserver:cvs@sources.redhat.com:/cvs/dm checkout device-mapper

Cela crée un nouveau répertoire device-mapper dans le répertoire courant et contenant la dernière version du code du mappeur
de périphériques.

Pour ensuite récupérer le code source de LVM 2 dans le répertoire lvm2 tapez la commande ci-dessous:

# cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 checkout LVM2

Ou bien celle-ci si vous désirez LVM 1:

root@localhost # cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm checkout LVM

4.4 Démarrage et arrêt de LVM

Le démarrage de LVM se fait via deux commandes :

root@localhost # vgscan
root@localhost # vgchange -a y

Et l'arrêt une seule :

64
root@localhost # vgchange -a n

Voici un exemple de fichier de démarrage LVM pour Debian. Notez que l'installation du paquet lvm2 ou lvm-common (lvm1) crée
automatiquement un script de démarrage pour lvm situé dans /etc/init.d/lvm:

#!/bin/sh
case "$1" in
start)
/sbin/vgscan
/sbin/vgchange -ay
;;
stop)
/sbin/vgchange -an
;;
restart|force-reload)
;;
esac
exit 0

Même exemple mais pour une Red Hat:

if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then


action $"Logical Volume Management" /sbin/vgscan &&
/sbin/vgchange -a y
fi

5. LVM en détail
5.1 Initialiser un volume physique

Avant de pouvoir utiliser un disque ou une partition comme volume physique, il faut l'initialiser avec la commande pvcreate :

root@localhost # pvcreate /dev/hda

Cela crée un descripteur de groupe de volumes au début du disque (cas donné) ou de la partition.

Si LVM ne peut pas initialiser un disque qui possède déjà une table de partition, vous pouvez taper les commandes suivantes qui
détruiront alors la table des partitions du disque:

root@localhost # dd if=/dev/zero of=/dev/hda bs=1k count=1

root@localhost # blockdev --rereadpt /dev/hda

5.2 Ajouter un volume physique à un groupe de volumes

65
Le volume physique à ajouter doit d'abord être initialisé puis ajouté au groupe de volumes:

root@localhost # vgextend nom_du_groupe_de_volumes /dev/hda1

5.3 Supprimer un volume physique à un groupe de volumes

En premier lieu, vérifiez que le volume physique n'est utilisé par aucun volume logique grâce à la commande:

root@localhost # pvdisplay /dev/hda1


--- Physical volume ---
PV Name /dev/hda1
VG Name kevin
PV Size 3.9 GB / NOT usable 4 MB [LVM: 244 KB]
PV# 1
PV Status available
Allocatable yes (but full)
Cur LV 1
PE Size (KByte) 4096
Total PE 998
Free PE 0
Allocated PE 998

Si le volume physique est encore en cours d’utilisation, il faut migrer les données vers un autre volume physique:

root@localhost # pvmove /dev/hda1


pvmove -- moving physical extents in active volume group "vg"
pvmove -- WARNING: moving of active logical volumes may cause data loss!
pvmove -- do you want to continue? [y/n] y
pvmove -- 998 extents of physical volume "/dev/hda1" successfully moved

Puis, le supprimer du groupe de volumes:

root@localhost # vgreduce nom_du_groupe_de_volumes /dev/hda1

5.4 Créer un groupe de volumes

Pour cela, utilisez la commande vgcreate :

root@localhost # vgcreate nom_du_groupe_de_volumes /dev/hda1 /dev/hda2

Vous pouvez aussi choisir la taille des extents avec l'option « -s » et préciser des limites sur le nombre de volumes physiques et
logiques que le volume peut contenir.

Tapez ensuite les commandes suivantes pour activer le groupe de volumes:

66
root@localhost # vgchange –a n && vgchange –a y nom_du_groupe_de_volumes

5.5 Détruire un groupe de volumes

Pour enlever un groupe de volumes, assurez vous qu'aucun volume logique n'est présent :

Dans un premier temps désactivez le :

root@localhost # vgchange -a n nom_du_groupe_de_volumes

Puis supprimez le grâce à cette commande :

root@localhost # vgremove nom_du_groupe_de_volumes

5.6 Créer un volume logique

Pour créer un volume physique «lv» linéaire de T Go et son périphérique associé « /dev/vg/lv » :

root@localhost # lvcreate -L T -n lv vg

Si vous désirez allouer le volume logique à un volume physique précis il faut spécifier son nom à la fin de la commande lvcreate.

root@localhost # lvcreate -L T -n lv vg /dev/hda

Nous allons ensuite créer un volume logique de X Logical Extents avec Y blocs répartis de Z Ko :

root@localhost # lvcreate -i Y -I Z -l X -n lv vg

Nous voulons un volume logique qui utilise toute la place disponible dans le groupe de volumes. Pour cela, nous allons lancer la
commande lvcreate avec un nombre de Physical Extents égal au total des Physical Extents retourné par la commande pvdisplay.

root@localhost # lvcreate -l total_des_pe vg -n perso

Cela créera un volume logique appelé « perso » qui remplira la totalité du groupe de volumes vg.

5.7 Détruire un volume logique

Nous démontons tout d'abord le volume logique :

67
root@localhost # umount /dev/vg/lv
root@localhost # lvremove /dev/vg/lv
lvremove -- do you really want to remove "/dev/vg/lv"? [y/n]: y
lvremove -- doing automatic backup of volume group "vg"
lvremove -- logical volume "/dev/vg/lv" successfully removed

5.8 Etendre un volume logique

Nous utiliserons pour cette opération la commande lvextend à laquelle nous allons renseigner la quantité d'espace à ajouter ou
la taille finale du volume logique:

root@localhost # lvextend -L 15G /dev/vg/lv


lvextend -- extending logical volume "/dev/vg/lv" to 15 GB
lvextend -- doing automatic backup of volume group "vg"
lvextend -- logical volume "/dev/vg/lv" successfully extended
root@localhost # lvextend -L +5G /dev/vg/lv
lvextend -- extending logical volume "/dev/vg/lv" to 15 GB
lvextend -- doing automatic backup of volume group "vg"
lvextend -- logical volume "/dev/vg/lv" successfully extended

Une fois le volume logique étendu, il est nécessaire d'augmenter la taille du système de fichier à la taille correspondante.

Pour ext2 et LVM 1, la commande e2fsdam effectue pour vous le lvextend et le resize2fs, aussi bien pour un agrandissement
que pour une réduction.

6. Mise en place du LVM


On dispose de trois disques IDE /dev/hda, /dev/hdb et /dev/hdc.

Nous allons dans un premier temps préparer les disques avec pvcreate et créer une zone avec les descripteurs de groupes de
volumes au début des disques. Ces commandes effacent totalement les données présentes sur les disques durs :

root@localhost # pvcreate /dev/hda


root@localhost # pvcreate /dev/hdb
root@localhost # pvcreate /dev/hdc

Puis l'on créé un groupe de volumes :

root@localhost # vgcreate nom_du_groupe_de_volumes /dev/hda /dev/hdb /dev/hdc

Il faut ensuite créer un volume logique, qui sera ici de 10Go :

root@localhost # lvcreate -L 10G -n nom_du_volume_logique nom_du_groupe_de_volumes


lvcreate -- doing automatic backup of "nom_du_groupe_de_volumes"

68
lvcreate -- logical volume "/dev/nom_du_groupe_de_volumes/nom_du_volume_logique"
successfully created

Puis un système de fichiers, ici ext2, dans le volume logique avec :

root@localhost # mke2fs /dev/nom_groupe_de_volumes/nom_du_volume_logique

6.1 Ajouter un disque

Nous avons une machine avec 3 disques durs :

root@localhost # pvscan
pvscan -- ACTIVE PV "/dev/hda" of VG "vg1" [2 GB / 0 free]
pvscan -- ACTIVE PV "/dev/hdb1" of VG "vg1" [1 GB / 0 free]
pvscan -- ACTIVE PV "/dev/hdb2" of VG "vg2" [1 GB / 0 free]
pvscan -- ACTIVE PV "/dev/hdc" of VG "vg2" [2 GB / 0 free]
pvscan -- total: 4 [6 GB] / in use: 4 [6 GB] / in no VG: 0 [0]

root@localhost # df -h
Filesystem Total Used Available Use% Mounted on
/dev/vg1/lv1 1G 1G 0GB 100% /mnt/vg1lv1
/dev/vg1/lv2 2G 2GB 0GB 100% /mnt/vgl1v2
/dev/vg2/lv1 1G 1GB 0GB 100% /mnt/vg2lv1
/dev/vg2/lv2 2G 2GB 0GB 100% /mnt/vg2lv2

Un nouveau disque est ajouté au système : /dev/hdf. Il doit être partagé entre les deux groupes et est donc partitionné en deux
volumes physiques /dev/hdd1 et /dev/hdd2 de 2 Go chacun qu'il faut ensuite initialiser :

root@localhost # pvcreate /dev/hdd1 pvcreate -- physical volume "/dev/hdd1" successfully created root@localhost #
pvcreate /dev/hdd2 pvcreate -- physical volume "/dev/hdd2" successfully created

Les volumes physiques sont ensuite ajoutés aux groupes de volumes :

root@localhost # vgextend vg1 /dev/hdd1


vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "vg1"
vgextend -- volume group "vg1" successfully extended

root@localhost # vgextend vg2 /dev/hdd2


vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "vg2"
vgextend -- volume group "vg2" successfully extended

root@localhost # pvscan
pvscan -- ACTIVE PV "/dev/hda" of VG "vg1" [2 GB / 0 free]
pvscan -- ACTIVE PV "/dev/hdb1" of VG "vg1" [1 GB / 0 free]
pvscan -- ACTIVE PV "/dev/hdb2" of VG "vg2" [1 GB / 0 free]
pvscan -- ACTIVE PV "/dev/hdc" of VG "vg2" [2 GB / 0 free]
pvscan -- ACTIVE PV "/dev/hdd1" of VG "vg1" [2 GB / 2 GB free]

69
pvscan -- ACTIVE PV "/dev/hdd2" of VG "vg2" [2 GB / 2 GB free]
pvscan -- total: 4 [6 GB] / in use: 4 [6 GB] / in no VG: 0 [0]

Nous allons ensuite étendre les systèmes de fichiers pour utiliser l'espace disque supplémentaire.

Nous démontons les deux systèmes de fichiers avant le dimensionnement :

root@localhost # umount /mnt/vg1lv1


root@localhost # umount /mnt/vg2lv2

Puis nous utilisons la commande e2fsadm pour redimensionner le volume logique et le système de fichiers :

root@localhost # e2fsadm /dev/vg1/lv1 -L +1G


Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
lvextend -- extending logical volume "/dev/vg1/lv1" to 2 GB
lvextend -- doing automatic backup of volume group "vg1"
lvextend -- logical volume "/dev/vg1/lv1" successfully extended
e2fsadm -- ext2fs in logical volume "/dev/vg1/lv1" successfully extended to 2 GB

root@localhost # e2fsadm /dev/vg2/lv2 -L +1G


Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
lvextend -- extending logical volume "/dev/vg2/lv2" to 3 GB
lvextend -- doing automatic backup of volume group "vg2"
lvextend -- logical volume "/dev/vg2/lv2" successfully extended
e2fsadm -- ext2fs in logical volume "/dev/vg2/lv2" successfully extended to 3 GB

Enfin nous pouvons remonter les systèmes de fichiers :

root@localhost # mount /dev/vg1/lv1


root@localhost # mount /dev/vg2/lv2
root@localhost # df -h
Filesystem Total Used Available Use% Mounted on
/dev/vg1/lv1 2G 1G 1GB 50% /mnt/vg1lv1
/dev/vg1/lv2 2G 2GB 0GB 100% /mnt/vgl1v2
/dev/vg2/lv1 1G 1GB 0GB 100% /mnt/vg2lv1
/dev/vg2/lv2 3G 2GB 1GB 66% /mnt/vg2lv2

6.2 Retirer un disque

Vous avez un vieux disque /dev/hdc que vous voulez le retirer mais des données y sont encore stockées.

70
Vérifiez que vous avez assez d'extents libres sur les autres disques du groupe de volumes puis migrer les anciens extents vers
les disques restants :

root@localhost # pvmove -V /dev/hdc


pvmove -- moving physical extents in active volume group "vg2"
pvmove -- WARNING: moving of active logical volumes may cause data loss!
pvmove -- do you want to continue? [y/n] y
pvmove -- 500 extents of physical volume "/dev/hdc" successfully moved

pvmove est une commande très lente. L'option -v vous renseigne sur son état d'avancement.

Nous pouvons désormais supprimer l'ancien disque du groupe de volumes puis le retirer de la machine.

root@localhost # vgreduce dev /dev/hdc


vgreduce -- doing automatic backup of volume group "vg2"
vgreduce -- volume group "dvg2" successfully reduced by physical volume:
vgreduce -- /dev/hdc

N'oubliez pas de toujours démonter votre volume :

root@localhost # e2fsadm -L +5G /dev/vg/lv

5.8.1 ext2/ext3

root@localhost # umount /dev/vg/lv


root@localhost # resize2fs /dev/vg/lv
root@localhost # mount /dev/vg/lv

5.8.2 reiserfs

root@localhost # umount /dev/vg/lv


root@localhost # resize_reiserfs /dev/vg/lv
root@localhost # mount -treiserfs /dev/vg/lv

5.8.3 xfs

Les systèmes de fichiers XFS doivent être montés pour être redimensionnés et le point de montage doit être donné à la place du
nom de périphérique.

root@localhost # xfs_growfs /point_de_montage

5.8.4 jfs

71
Comme XFS, le système de fichiers JFS doit être monté pour être redimensionné et le point de montage doit être spécifié plutôt
que le nom du périphérique.

root@localhost # mount -o remount,resize /point_de_montage

5.9 Réduire un volume logique

Lors de la réduction de volumes logiques, il faut réduire la taille du système de fichiers et donc des données y étant avant de le
réduire lui-même ou une perte de données risque de se produire.

Il n'y a actuellement aucun moyen de réduire un système de fichiers XFS ou JFS.

5.9.1 ext2/ext3

En utilisant e2fsadm avec LVM 1 :

root@localhost# umount /dev/vg/lv


root@localhost # e2fsadm -L -5G /dev/vg/lv
root@localhost # mount /dev/vg/lv

Avec LVM 2 vous devez connaître la nouvelle taille T du volume en blocs :

root@localhost # umount /dev/vg/lv


root@localhost # resize2fs /dev/vg/lv T
root@localhost # lvreduce -L -5G /dev/vg/lv
root@localhost # mount /dev/vg/lv

5.9.2 reiserfs

root@localhost # umount /dev/vg/lv


root@localhost # resize_reiserfs -s -5G /dev/vg/lv
root@localhost # lvreduce -L -5G /dev/vg/lv
root@localhost # mount -t reiserfs /dev/vg/lv

72

Vous aimerez peut-être aussi