Montage de partitions agrégées sur des systèmes BSD

Nicolas Vallée

Avoir un système de partitions complexes pour simplifier l'administration système… ♪

- Titre : Montage de partitions agrégées sur des systèmes BSD

- Auteur : Nicolas Vallée

- Parution : 6 juillet 2006

- Licence : Copyright (c) 2006 Nicolas Vallée. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. Read the full license here : http://www.gnu.org/licenses/fdl.txt

Sommaire

- I. Introduction

- I-A. Avant-propos

- I-B. RaidFrame

- I-C. Raid

- I-C-1. Concaténation (JBOD)

- I-C-2. Raid-0 (Striping)

- I-C-3. Raid-1 (Mirroring)

- I-C-4. Raid-5

- I-C-5. Divers

- II. Mise en place

- II-A. Préparation d'un disque

- II-B. Configuration de RaidFrame

- II-C. Lancement automatique de RaidFrame

- II-D. Montage automatisé

- III. Divers

- III-A. Compléments

- III-A-1. Tester sa configuration

- III-A-2. Changer un disque défectueux

- III-B. Liens utiles

I - Introduction

I-A - Avant-propos

Pourquoi vouloir agréger des partitions ?

- Pour bénéficier de disques virtuels très grands
Les disques deviennent de plus en plus gros, mais tout comme les besoins en stockage.
Vous vous apercevrez souvent que vous avez besoin d'un système de fichiers plus grand que les disques que vous avez à votre disposition.

- Pour créer de la redondance, ce qui permettra de restaurer les données en cas de défaillance matérielle.

- Pour améliorer les performances
En multipliant le nombre d'accès concurrents, on réduit considérablement les performances globales du système… Il devient alors très pratique de répartir la charge sur différents disques.

I-B - RaidFrame

RaidFrame est un gestionnaire de volume, un pilote de disques virtuels. Il est normalement disponible dans tous les noyaux BSD. À l'heure actuelle, il est inclus dans le noyau GENERIC de NetBSD. Pour les autres systèmes BSD, il faut recompiler le noyau avec les options suivantes :

pseudo-device   raid 8
options         RAID_AUTOCONFIG

Pour vérifier si RaidFrame est déjà inclus dans votre noyau, faites dmesg | grep -i raid, et vérifiez si cette ligne apparait.

Kernelized RAIDframe activated

I-C - Raid

I-C-1 - Concaténation (JBOD)

La méthode la plus évidente est de diviser le disque virtuel en groupes de secteurs consécutifs de taille égale aux disques physiques individuels et de les stocker de cette manière. Cette méthode est appelée concaténation et a pour avantage que les disques n'ont pas besoin d'avoir de rapport spécifique au niveau de leur taille respective.
Cela fonctionne bien quand l'accès au disque virtuel est réparti de façon identique sur son espace d'adressage.

- On peut ajouter des disques ultérieurement.

- Les slices peuvent être quelconques.

- La perte d'un disque n'entraine pas d'autre perte de données… pas mal pour les données non critiques ;)

I-C-2 - Raid-0 (Striping)

Une organisation alternative est de diviser l'espace adressable en composants plus petits, de même taille et de les stocker séquentiellement sur différents périphériques. Par exemple, les 256 premiers secteurs peuvent être stockés sur le premier disque, les 256 secteurs suivants sur le disque suivant et ainsi de suite. Après avoir atteint le dernier disque, le processus se répète jusqu'à ce que les disques soient pleins. Cette organisation est appelée striping (découpage en bande ou segmentation) ou RAID-0.
La segmentation exige légèrement plus d'effort pour localiser les données.

- On ne peut pas ajouter de disques ultérieurement.

- La perte d'un disque entraine la perte de toutes les données… déconseillé dans les serveurs de fichiers ;)

I-C-3 - Raid-1 (Mirroring)

Le RAID 1 consiste en l'utilisation de disques redondants, c'est-à-dire n disques (en général deux), sur lesquels sont copiées exactement les mêmes données.

- On ne peut pas ajouter de disques ultérieurement.

- Les slices doivent être identiques.

- Demande au moins deux fois plus d'espace disque réel.

- Les écritures doivent être effectuées sur les deux disques.

- La perte d'un disque n'entraine aucune perte de données… conseillé pour de petites capacités.

I-C-4 - Raid-5

Le RAID 5 consiste en l'utilisation d'un calcul de parité des données, afin d'introduire la redondance nécessaire à la reconstruction des données en cas de panne matérielle. Il existe plusieurs méthodes (raid 3 et 4), mais celle-ci semble être la plus efficace…

- On ne peut pas ajouter de disques ultérieurement.

- Les slices doivent être identiques.

- Demande exactement un tiers d'espace disque réel en plus.

- La perte d'un disque n'entraine aucune perte de données… conseillé pour de grosses capacités.

I-C-5 - Divers

Il faut savoir que ces méthodes peuvent être mixées pour obtenir plus de performances, plus de tolérance aux pannes.

Ici on supporte au plus la perte d'un disque, etc.

N'hésitez pas à vous renseigner…

II - Mise en place

II-A - Préparation d'un disque

On part d'un disque sans aucune partition. Considérons que son point de montage est /dev/wd0.

Préparation d'un disque

#! /bin/sh
dd if=/dev/zero of=/dev/wd0 count=2
fdisk -0a /dev/wd0
# répondre à quelques questions...
fdisk -u /dev/wd0
disklabel -r -e -I /dev/wd0
# remplacer le type de système de fichiers de 4.2BSD à RAID

II-B - Configuration de RaidFrame

On dispose de trois slices BSD montées respectivement en /dev/wd0a, /dev/wd1a, /dev/wd2a
On va écrire un raid.conf (on se moque du nom, il ne va servir qu'une seule fois).
Le dernier nombre en dessous de START layout est le type de raid utilisé… ici on montre un exemple avec du raid-5.

Configuration RaidFrame

START array
1 3 2

START disks
/dev/wd0a
/dev/wd1a
/dev/wd2a

START layout
32 1 1 5

START queue
fifo 100

On va ensuite créer le volume virtuel, en lui accordant le point de montage /dev/raid
Attention, ça peut être vraiment très long… une journée, voire plus :'(

Initialisation du système

#! /bin/sh
raidctl -v -C raid.conf raid
raidctl -I raid-data raid
raidctl -v -i raid
raidctl -v -A yes raid

Ensuite, on doit créer une partition sur cet espace… ici, on va montrer comment faire une seule partition contenant tout l'espace.

#! /bin/sh
disklabel -I -i raid
# répondre à quelques questions
newfs /dev/raida

Ensuite, on peut monter la partition…

mount -t ufs /dev/raida /mnt/raid

II-C - Lancement automatique de RaidFrame

C'est fait automatiquement… pas besoin de faire quoi que ce soit ;)

II-D - Montage automatisé

À ce stade, on ne peut pas encore monter la partition de notre « super-partition ».
Il faut modifier le fichier /etc/fstab

/dev/raida /mnt/raid ufs rw 1 2

III - Divers

III-A - Compléments

III-A-1 - Tester sa configuration

Vous pouvez visualiser l'état courant d'un volume.

root@data:~# raidctl -s raid
Components:
/dev/wd0a: optimal
/dev/wd1a: optimal
/dev/wd2a: optimal
No spares.
Component label for /dev/wd0a:
Row: 0, Column: 0, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 0, Mod Counter: 76
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 586114624
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
Component label for /dev/wd1a:
Row: 0, Column: 1, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 0, Mod Counter: 76
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 586114624
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
Component label for /dev/wd2a:
Row: 0, Column: 2, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 0, Mod Counter: 76
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 586114624
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

III-A-2 - Changer un disque défectueux

Si jamais il faut changer matériellement le disque, il va falloir éteindre la machine avant… RaidFrame se chargeant au démarrage, je ne sais pas ce qu'il ferait même avec des disques hot-plug. (Surtout, je n'avais de quoi tester.) Ensuite, si vous avez changé le disque vous devez l'initialiser. Enfin, il faut reconstruire les bits de parité.

#! /bin/sh
raidctl -v -R /dev/wd2a raid

III-B - Liens utiles

- Guide NetBSD

- RaidFrame