Installer OPENBSD 3.7 en miroir - RAID1
NOTES
Pour
lire et comprendre ce document, vous devez maîtriser les bases
du RAID et du système d'exploitation OPENBSD.
Ayant
travaillé sur différentes technologies de sauvegarde et
de configuration RAID et former des professionnels, je me suis permis
d'écrire ce document pendant mon temps libre.
Pour
toutes questions, contacter François « pello »
Ropert :
IRC : #openbsd.fr sur IRC.FREENODE.NET
MAIL :
francois[DOT]ropert[AROBASE]wanadoo[DOT]fr
INTRODUCTION
Je me suis acheté deux disques
SATA de 400go ainsi que le contrôleur SATA RAID de Connectland
pour agrandir la capacité de stockage de mes données et
en assurer la sécurité.
Les deux disques sont
configurés en miroir - RAID1 sur une machine OPENBSD 3.7.
Ils
sont branché sur le même contrôleur de
disques.
L'intérêt principal du mirroir est que
si l'un des disque est défaillant ... les données
seront saines sur l'autre disque. Le RAID1 sert à enlever un
SPOF du système installé.
Attention, le RAID n'est
pas une alternative à la sauvegarde.
Note: Quand vous
achetez des disques à RAIDiser, vérifiez que les
numéros de série des disques ne se suivent pas. Cela
réduit la possibilité que les disques tombent en panne
dans une même période de temps.
Spécificité
propre à l'OS : OPENBSD
Le contrôleur SATA « pas
cher à 50 euros » contient un pseudo-contrôleur
RAID matériel.
OPENBSD ne reconnaît pas la
configuration RAID appliquée dans la configuration du
contrôleur.
Le contrôleur est reconnu en tant que
contrôleur SATA sans ses fonctionnalités RAID.
Ce
petit problème implique que les disques sont reconnus comme
deux périphériques distincts (wd0 et wd1).
Consultez
la liste du matériel compatible [0] pour savoir si votre
contrôleur sera reconnu ou pas.
La solution matérielle
« pas cher à 50 euros » n'est donc pas
exploitable directement sous OPENBSD.
Il faut utiliser une
solution logicielle propre à OPENBSD.
Le RAID est
implémentable de deux manières sous OPENBSD.
Les
deux technologies ont été importées depuis
NETBSD.
Tout d'abord avec le driver CCD, inclus dans le noyau
GENERIC mais avec lequel nous sommes vite limités. Il n'y a
pas de restauration from crash possible. Cela signifie simplement que
votre mirroir fonctionnera tant qu'un des disques ne crashera pas.
Néanmoins, si vous vous voulez faire du CCD, par exemple dans
une machine virtuelle, renseignez-vous sur le flag CCDF_MIRROR du
fichier /etc/ccd.conf. Le mirroir s'appellera /dev/ccd0.
Seconde
possibilité et la plus conseillée, le framework
RAIDFRAME [1] écrit par le CMU (Carnegie Mellon
University).
Il est capable de travailler en RAID 0,1,4, 5 et
6 pour les cas les plus standards.
Mais supporte aussi des
fonctionnalités de even-odd parity, rotated sparing, chained
declustering, hot spare.
RAIDFRAME se configure en user-land
avec la commande raidctl.
Au niveau kernel-land, RAIDFRAME
requiert au minimum le pseudo-device RAID. Ce dernier n'étant
pas présent dans le noyau GENERIC, il vous faudra donc
l'inclure en recompilant le noyau.
L'option noyau RAID_AUTOCONFIG
est utile pour accéder au / du système depuis une
partition RAID.
Si vous souhaitez mirrorer des données
applicatives, cette option n'est pas nécessaire.
Indépendamment
de la couche RAID, le contrôleur SATA est géré
par le driver pciide.
Les disques se nomment wd0, wd1, ... et sont
gérés par le driver wd.
Les disques sont
accessibles par ce nommage avant d'être encapsulés dans
RAIDFRAME.
Les étapes pour rendre un système
mirroré sont les suivantes :
- 1 –
Pré-requis à l'installation pour être
RAID1-COMPLIANT
- 2 –
Installation du pseudo-device RAID dans le noyau GENERIC
-
3 – Copie du contenu et de la table de partitions du premier
disque vers le second
- 4 –
Configuration de RAIDFRAME
- 5 –
Initialisation du device RAID0
- 6 –
Copier le système sur le device RAID
-
7 – Root ( / ) sur le device RAID
- 8 –
Ce qui se passe au reboot
- 9 –
Maintenance: Remplacer un disque défectueux
-
10 – Maintenance: Que faire en cas du crash du noyau
-
11 - Références
En gras, les
commandes à taper.
<RC> correspond à la touche
entrée.
1
– Pré-requis à l'installation pour être
RAID1-COMPLIANT
La procédure
d'installation du système OPENBSD est disponible dans la FAQ
OPENBSD[2] traduite en français.
Néanmoins, la
partie « disk setup » diffère d'une
installation sans RAID.
L'installation d'un système
RAID a les particularités suivantes :
L'espace disque
créé pour l'installation sur wd0a (/) et wd0b (swap)
est perdu pour le RAID mais est indispensable pour le chargement du
noyau OPENBSD.
En conséquence, on minimise l'espace disque
utilisé par ces partitions.
Une installation sans X utilise
94% de 256Mo dans /.
64Mo suffisent pour la partition SWAP.
Voici
les étapes à respecter pour installer OPENBSD et le
rendre RAID1-COMPLIANT :
Bootez sur le média
d'installation OpenBSD 3.7 (CD,DISQUETTE, PXE, PXEGRUB, ...)
|
(I)nstall, (U)pgrade or (S)hell? I |
fdisk :
|
Available disks are: wd0 wd1. |
disklabel :
|
Initial label editor (enter '?' for help at any prompt) |
Available disks are:
wd1.
Which one do you wish to initialize? (or 'done') [done]
(entrée)
OpenBSD filesystems:
wd0a /
The
next step *DESTROYS* all existing data on these partitions!
Are
you really sure that you're ready to proceed? [no] yes
La
suite de l'installation n'a aucun rapport avec le RAID.
Continuez
l'installation à l'aide de la FAQ OPENBSD [3]
Quand le
système a redémarré, connectez-vous en root.
2
– Installation du pseudo-device RAID dans le noyau
GENERIC
Pour que le noyau gère le RAID
avec le framework RAIDFRAME, il faut recompiler le noyau
GENERIC.
Nous choisissons de mettre les outils nécessaires
à la recompilation sur le second disque qui n'est pas encore
utilisé.
Nous l'initialisons avec la commande disklabel
pour ensuite monter un système de fichiers FFS sur /mnt.
Les
opérations de recompilation s'effectueront donc dans /mnt.
Il
faut initialiser le second disque pour y déposer les fichiers
sources du noyau.
|
foo# disklabel -E wd1 |
|
foo# newfs -q /dev/wd1a |
Télécharger
les sources du noyau :
foo# ftp
ftp://anonymous:mail%40isp.com@ftp.ac-creteil.fr:21/OpenBSD/3.7/sys.tar.gz
%40
est un arobase. Il sert à éviter l'ambiguïté
entre l'adresse mail et l'adresse DNS ou IP du FTP.
Une fois
le fichier récupéré, extraire avec « tar »
l'archive :
foo# tar xzpvf sys.tar.gz
./sys
....
foo#
Il faut à présent compiler le
noyau. Veuillez-vous référer à la documentation
de Philippe Thierry [4].
Dans le fichier de configuration du
noyau GENERIC, décommentez la ligne :
pseudo-device
raid 4 # RAIDFRAME disk driver
Insérez cette ligne
juste en-dessous :
option RAID_AUTOCONFIG
L'option
RAID_AUTOCONFIG sert à démarrer sur une partition /
4.2BSD encapsulée dans une partition RAID.
On démonte
/mnt puis on reboote :
|
|
Effacer les fichiers de
configuration n'est pas utile car après le disque sera
refait.
D'autant plus que si votre compilation s'est mal passée,
il ne sera pas la peine de re-télécharger
sys.tar.gz.
la partie kernel-land est prête.
Attendez
que le système remonte.
Connectez-vous en root sur la
console.
3
– Copie du contenu et de la table de partitions du premier
disque vers le second
A présent, OPENBSD
est RAID1-COMPLIANT, le disque wd0 est partitionné.
Avant
de mettre en place un RAID, les tables de partitions et le contenu
des deux disques doivent être identiques.
Cette opération
est obligatoire pour pouvoir booter le noyau depuis n'importe lequel
des deux disques dans le cas où la machine tourne
temporairement avec un seul disque.
Copie de la table de
partitions du disque wd0 vers wd1 :
|
|
Ensuite, il faut formater /dev/wd1a
pour y déposer le mini-système contenant le noyau et le
bootblock.
Le newfs crée un système de fichier FFS
sur /dev/wd1a.
|
|
Le dump copie le système de
fichiers / en mode caractère (/dev/rwd0a => wd0a) sur
/dev/rwd1a (wd1a).
Le dump se réfère au système
de fichier / (root) trouvé dans /etc/fstab alors il ne dumpera
aucun autre système de fichiers monté sous /.
Il n'y
aura donc pas de recouvrement de /mnt.
Le fichier restoresymtable
contient une structure informative des modifications réalisées
au niveau du système de fichier entre les différentes
sauvegardes incrémentales.
Ce fichier ne nous est pas
utile. On peut le supprimer.
foo# rm restoresymtable
Les
tables de partitions ainsi que les données sont
identiques.
Nous pouvous démonter le second disque.
foo#
cd /
foo# umount /mnt
4
– Configuration de RAIDFRAME
les deux
disques sont identiques mais le miroir n'est pas encore configuré.
La
configuration d'un array RAIDFRAME de type RAID1 s'effectue dans le
ficher /etc/raid0.conf
Le nom du fichier « raid0 »
n'a rien à voir avec une configuration de type RAID0.
Le 0
indique la première configuration RAID à mettre en
place.
Pour mieux comprendre le processus d'initialisation de la
configuration RAID au boot, consultez le fichier /etc/rc.
On
mirrore les deux partitions /dev/wd0d et /dev/wd1d.
Je vous
rappelle que l'on a perdu l'espace disque créé dans
wd0a et wd0b pour l'installation du minis-ystème.
Voici
un fichier type de configuration RAID1. Ecrivez chaque ligne dans
/etc/raid0.conf jusqu'à fifo 100 :
Nous n'avons que deux
disques, on ne peut donc pas sparer notre RAID1.
|
|
Le fichier de configuration est
prêt.
Il faut maintenant activer le RAID.
L'option -C
crée est à utiliser lors de la création d'un set
RAID.
L'option -I initialise les labels afin d'identifier les
disques d'un même set.
L'option -i crée une parité
des disques du set RAID. La parité sert à identifier
une panne de disque.
Activation de la configuration RAID :
|
|
Ne vous préoccupez
pas des messages d'erreurs.
Ces étapes successives ont
permis de créer /dev/rraid0c.
Ce fichier correspond au
whole disque du set RAID.
5
– Initialisation du device RAID0
Notre
whole disque est initialisé.
Il faut créer les
partitions composant le système et les formater en 4.2BSD.
La
partition SWAP ne doit pas subir de formatage.
Création
de la table de partitions :
|
|
Les partitions sont
créées.
Il faut créer un système de
fichiers FFS sur chaque partition de type 4.2BSD :
|
|
Avant de continuer à
l'étape suivant, faisons un point.
Les données du
système, le noyau et le bootblock se trouvent sur /dev/wd0a et
/dev/wd1a.
Notre set RAID1 a été créé
avec /dev/wd0d et /dev/wd1d pour s'appeler /dev/rraid0c.
La suite
de la documentation explique comment copier le système depuis
/dev/wd0a vers /dev/raid0a.
Et comment rendre bootable
/dev/rraid0a.
6
– Copier le système sur le device RAID
Le
but de cet étape est de copier les données de /dev/wd0a
vers /dev/raid0a.
Nous devons monter au préalable
chaque point de montage (/tmp, /var, /usr, /home) sur leur partition
respective configurée précédemment par la
commande disklabel -E raid0.
Ensuite on dump et restore pour
copier le système.
|
|
7
- Root ( / ) sur le device RAID
Les données
du système sont à présents copiées sur le
device RAID.
Pour accéder au / de la partition RAID, il
faut activer l'autoconfiguration par l'option -A de la commande
raidctl (nécessite l'option RAID_AUTOCONFIG dans le
noyau).
foo# raidctl -A root raid0
Ensuite, il
faut modifier le fichier /mnt/etc/fstab pour indiquer les nouvelles
correspondances de devices et points de montage. Si vous modifiez le
fichier avec une autre méthode, n'ajoutez pas la ligne
contenant le mot EOF.
|
|
La configuration du RAID est
terminée.
On démonte les partitions :
foo#
umount /mnt/home
foo# umount /mnt/usr
foo# umount
/mnt/var
foo# umount /mnt/tmp
foo# umount
/mnt
Puis on redémarre la machine :
foo#
reboot
8
– Ce qui se passe au reboot
Analyse de la
sortie de la commande DMESG :
- Le système trouve le
noyau sur hd0a (le mini-système installé sur wd0)
-
Détection des disques présents sur le contrôleur
SATA et sur chaque channel par le driver pciide
- RAIDFRAME est
activé. En témoigne le message « Kernelized
RAIDframe activated ».
- Configuration des
périphériques RAID avec la commande raidctl -c
-
Vérification de l'intégrité du RAID avec la
commande raidctl -P all
- Les systèmes de fichiers sont
marqués « clean » par fsck
- Montage
du / encapsulé dans la partition RAID
A la bannière
de connexion, connectez-vous en root.
Vous pouvez afficher
l'état du mirroir :
foo# raidctl -s raid0
raid0
Components:
/dev/wd0d: optimal
/dev/wd1d: optimal
No
spares.
Parity status: clean
Reconstruction is 100%
complete.
Parity Re-write is 100% complete.
Copyback is 100%
complete.
Si un des disques est enlevé de la machine ou
déféctueux, il sera marqué
«ComponentX: failed ».
9
– Maintenance: Remplacer un disque défectueux
Si
votre matériel est hot-plug, tirez le disque HS de son tiroir
et insérez-y le nouveau.
Sinon, éteignez la machine.
Débranchez le disque. Démarrez la machine.
Si le
disque wd1 est remplacé, voici les commandes à taper :
|
|
Nous recréeons à
l'identique le premier disque sur le second d'abord en fesant
abstraction de la couche RAID. Ensuite la dernière commande
raidctl permet de resynchroniser les disques.
10
-Maintenance: Que faire en cas de crash du noyau OPENBSD
Il
n'y a aucune commande manuelles à faire.
Le script de
démarrage /etc/rc vérifie et répare l'intégrité
du set RAID si le crash a eu des conséquences sur les données
du disques.
Précaution à prendre: Ne jamais utiliser
le fastboot (désactivé par défaut) sur une
configuration RAID.
OUTRO
Ce document
s'achève ici. Si vous souhaitez aller plus loin, consultez les
documents de références ou les pages de manuels
suivantes :
raidctl(8) et raid(4).
11
- Références
[0] -
http://www.openbsd.org/fr/i386.html#hardware
[1]
- http://www.pdl.cmu.edu/RAIDframe/
[2]
- http://www.openbsd.org/faq/fr/faq4.html
[3]
- http://www.openbsd.org/faq/fr/faq4.html#Hostname
[4]
- http://www.openbsd-france.org/documentations/OpenBSD-kernel.html