Dernière mise-à-jour :

LCF302 - Gestion Avancée des Disques - Raid Logiciel

Contenu du Module

LCF302 - Gestion Avancée des Disques - Raid Logiciel

Contenu du Module

Concepts RAID

Disques en miroir

Bandes de données

Types de RAID

RAID 0 - Concaténation

RAID 0 - Striping

RAID 1 - Miroir

RAID 1+0 - Striping en Miroir

RAID 2 - Miroir avec Contrôle d'Erreurs

RAID 3 et 4 - Striping avec Parité

RAID 5 - Striping avec Parité Distribuée

Au délà de RAID 5

RAID Logiciel sous RHEL/CentOS

Préparation du disque

Partitionnement

Mise en Place du RAID 5 Logiciel

Concepts RAID

Les solutions RAID ou Redundant Array of Independent Disks ou encore Redundant Array of Inexpensive Disks permettent la combinaison de plusieurs disques de façon à ce que ceux-ci soient vu comme un seul disque logique.

Les solutions RAID sont issues du travail fourni par l'université de Berkeley en Californie sur un projet de tolérances de pannes. Les systèmes RAID offre maintenant plusieurs avantages :

Addition des capacités,

Amélioration des performances,

Apporter la tolérance de panne.

Deux concepts sont fondamentaux à la compréhension des solutions RAID.

Disques en miroir

La technique des disques en miroir consiste à dupliquer l'écriture des données sur plusieurs disques. Le miroir peut être géré par un logiciel ou par du matériel.

Bandes de données

La technique des bandes de données, autrement appelée data striping consiste à couper les données à enregistrer en segments séquentiels et contigus pour les enregistrer sur plusieurs disques physiques. L'ensemble des segments constitue alors un disque logique ou striped disk. Cette technique peut être améliorée en déposant une bande de parité, calculée à partir des données des autres bandes, afin de pouvoir reconstituer une bande de données défaillante.

Types de RAID

RAID 0 - Concaténation

Création de volume par récupération de l'espace libre sur un ou plusieurs disques. Le principe de la concaténation est la création d'un volume à bandes où chaque bande est une tranche.

Avantages

Récupération de l'espace disque.

Inconvénients

Pas de protection des données,

Pas d'augmentation des performances d'E/S.

RAID 0 - Striping

Création de volume sur plusieurs disques afin d'augmenter les performances d'E/S. Le principe du striping est la création d'un volume à bandes réparties sur plusieurs tranches. La taille de la bande doit être fonction des données à écrire sur le volume (16k, 32k, 64k, etc.) Cette taille est choisie à la création du volume.

Avantages

Augmentation des performances d'E/S par écriture en parallèle sur les disques.

Inconvénients

Pas de protection des données.

RAID 1 - Miroir

Création d'un volume où les disques sont en miroir. Quand les deux disques sont connectés à des contrôleurs de disques différents, on parle de duplexing :

Avantages

Protection des données contre une défaillance d'un disque.

Inconvénients

Coûteux à cause de l'augmentation du nombre de disques.

RAID 1+0 - Striping en Miroir

Le RAID 1+0 ou encore 0+1 est une technique qui réunit le RAID 0 et le RAID 1. On l'appelle aussi un RAID exotique:

Avantages

Protection des données contre une défaillance d'un disque.

Augmentation des performances d'E/S par écriture en parallèle sur les disques.

Inconvénients

Coûteux à cause de l'augmentation du nombre de disques.

RAID 2 - Miroir avec Contrôle d'Erreurs

Le RAID 2 est une technique de miroir avec contrôle de correction d'erreurs (EEC). De nos jours cette technique est peu utilisée, ayant été remplacée par les RAID 3, 4 et 5.

RAID 3 et 4 - Striping avec Parité

Les RAID 3 et 4 sont des technologies avec bandes de parité distribuées sur un seul disque :

En RAID 3, la taille des segments n’est pas modifiable et est fixée à 512 octets (en RAID 3 : un segment = un secteur de disque dur = 512 octets).

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

Avantages

Protection des données contre une défaillance d'un disque.

Inconvénients

Création d'un goulot d'étranglement des données à cause de l'écriture des données de parité sur un seul disque.

RAID 5 - Striping avec Parité Distribuée

Le RAID 5 est une technologie avec bandes de parité distribuées sur plusieurs disques :

Avantages

Protection des données contre une défaillance d'un disque,

Evite le goulot d'étranglement d'un seul disque de parité.

Inconvénients

Lecture moins performante qu'avec RAID 3 et 4.

Au délà de RAID 5

Il existe aussi deux autres technologies RAID, toute deux issues de la technologie RAID 5 :

RAID 6

Disk Striping with Double Distributed Parity

RAID TP

Disk Striping with Triple Distributed Parity

RAID Logiciel sous RHEL/CentOS

Préparation du disque

Partitionnement

Suite à votre LAB de la leçon Gestion des Disques et le Swap, votre disque comporte 12 partitions :

[root@centos7 ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000c5a90
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 20891647 10240000 83 Linux
/dev/sda3 20891648 25083903 2096128 82 Linux swap / Solaris
/dev/sda4 25083904 41943039 8429568 5 Extended
/dev/sda5 25085952 26109951 512000 fd Linux raid autodetect
/dev/sda6 26112000 26521599 204800 8e Linux LVM
/dev/sda7 26523648 27138047 307200 8e Linux LVM
/dev/sda8 27140096 28164095 512000 fd Linux raid autodetect
/dev/sda9 28166144 28985343 409600 8e Linux LVM
/dev/sda10 28987392 30011391 512000 fd Linux raid autodetect
/dev/sda11 30013440 31037439 512000 fd Linux raid autodetect
/dev/sda12 31039488 31449087 204800 83 Linux

Mise en Place du RAID 5 Logiciel

Dans le cas de cet exemple les quatre partitions concernées par la mise en place d'un RAID 5 sont :

/dev/sda5 25085952 26109951 512000 fd Linux raid autodetect
/dev/sda8 27140096 28164095 512000 fd Linux raid autodetect
/dev/sda10 28987392 30011391 512000 fd Linux raid autodetect
/dev/sda11 30013440 31037439 512000 fd Linux raid autodetect

La création d'une unité RAID avec la commande mdadm se fait grâce aux options passées en arguments à la commande :

mdadm --create <unité RAID> [options] <unités physiques>

Par exemple, saisissez la commande suivante :

[root@centos7 ~]# mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sda5 /dev/sda8 /dev/sda11
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

Les options dans la ligne de commande sont :

Option Courte	Option Longue	Description
-l	- -level	Le niveau RAID - linear, 0,1,2,4 ou 5
-n	- -raid-devices=<nombre>	Le nombre de périphériques actifs dans le RAID

Les autres options de la commande mdadm peuvent être visualisées grâce à la commande suivante :

[root@centos7 ~]# mdadm --help-options
Any parameter that does not start with '-' is treated as a device name
or, for --examine-bitmap, a file name.
The first such name is often the name of an md device. Subsequent
names are often names of component devices.
Some common options are:
--help -h : General help message or, after above option,
mode specific help message
--help-options : This help message
--version -V : Print version information for mdadm
--verbose -v : Be more verbose about what is happening
--quiet -q : Don't print un-necessary messages
--brief -b : Be less verbose, more brief
--export -Y : With --detail, --detail-platform or --examine use
key=value format for easy import into environment
--force -f : Override normal checks and be more forceful
--assemble -A : Assemble an array
--build -B : Build an array without metadata
--create -C : Create a new array
--detail -D : Display details of an array
--examine -E : Examine superblock on an array component
--examine-bitmap -X: Display the detail of a bitmap file
--examine-badblocks: Display list of known bad blocks on device
--monitor -F : monitor (follow) some arrays
--grow -G : resize/ reshape and array
--incremental -I : add/remove a single device to/from an array as appropriate
--query -Q : Display general information about how a
device relates to the md driver
--auto-detect : Start arrays auto-detected by the kernel

Les modes majeurs de la commande mdadm peuvent être visualisés grâce à la commande suivante :

[root@centos7 ~]# mdadm --help
mdadm is used for building, managing, and monitoring
Linux md devices (aka RAID arrays)
Usage: mdadm --create device options...
Create a new array from unused devices.
mdadm --assemble device options...
Assemble a previously created array.
mdadm --build device options...
Create or assemble an array without metadata.
mdadm --manage device options...
make changes to an existing array.
mdadm --misc options... devices
report on or modify various md related devices.
mdadm --grow options device
resize/reshape an active array
mdadm --incremental device
add/remove a device to/from an array as appropriate
mdadm --monitor options...
Monitor one or more array for significant changes.
mdadm device options...
Shorthand for --manage.
Any parameter that does not start with '-' is treated as a device name
or, for --examine-bitmap, a file name.
The first such name is often the name of an md device. Subsequent
names are often names of component devices.
For detailed help on the above major modes use --help after the mode
e.g.
mdadm --assemble --help
For general help on options use
mdadm --help-options

Dernièrement, chaque mode majeur dispose de son propre aide :

[root@centos7 ~]# mdadm --assemble --help
Usage: mdadm --assemble device options...
mdadm --assemble --scan options...
This usage assembles one or more raid arrays from pre-existing
components.
For each array, mdadm needs to know the md device, the identity of
the array, and a number of sub devices. These can be found in a number
of ways.
The md device is given on the command line, is found listed in the
config file, or can be deduced from the array identity.
The array identity is determined either from the --uuid, --name, or
--super-minor commandline arguments, from the config file,
or from the first component device on the command line.
The different combinations of these are as follows:
If the --scan option is not given, then only devices and identities
listed on the command line are considered.
The first device will be the array device, and the remainder will be
examined when looking for components.
If an explicit identity is given with --uuid or --super-minor, then
only devices with a superblock which matches that identity is considered,
otherwise every device listed is considered.
If the --scan option is given, and no devices are listed, then
every array listed in the config file is considered for assembly.
The identity of candidate devices are determined from the config file.
After these arrays are assembled, mdadm will look for other devices
that could form further arrays and tries to assemble them. This can
be disabled using the 'AUTO' option in the config file.
If the --scan option is given as well as one or more devices, then
Those devices are md devices that are to be assembled. Their identity
and components are determined from the config file.
If mdadm can not find all of the components for an array, it will assemble
it but not activate it unless --run or --scan is given. To preserve this
behaviour even with --scan, add --no-degraded. Note that "all of the
components" means as many as were present the last time the array was running
as recorded in the superblock. If the array was already degraded, and
the missing device is not a new problem, it will still be assembled. It
is only newly missing devices that cause the array not to be started.
Options that are valid with --assemble (-A) are:
--bitmap= : bitmap file to use with the array
--uuid= -u : uuid of array to assemble. Devices which don't
have this uuid are excluded
--super-minor= -m : minor number to look for in super-block when
choosing devices to use.
--name= -N : Array name to look for in super-block.
--config= -c : config file
--scan -s : scan config file for missing information
--run -R : Try to start the array even if not enough devices
for a full array are present
--force -f : Assemble the array even if some superblocks appear
: out-of-date. This involves modifying the superblocks.
--update= -U : Update superblock: try '-A --update=?' for option list.
--no-degraded : Assemble but do not start degraded arrays.
--readonly -o : Mark the array as read-only. No resync will start.

Constatez maintenant les informations concernant le RAID 5 créé :

[root@centos7 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sda11[3] sda8[1] sda5[0]
1021952 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>

Grâce à la commande mdadm, il est possible d'obtenir d'avantage d'informations :

[root@centos7 ~]# mdadm --query /dev/md1
/dev/md1: 998.17MiB raid5 3 devices, 0 spares. Use mdadm --detail for more detail.

L'option - -detail produit le résultat suivant :

[root@centos7 ~]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Tue Aug 2 15:10:12 2016
Raid Level : raid5
Array Size : 1021952 (998.17 MiB 1046.48 MB)
Used Dev Size : 510976 (499.08 MiB 523.24 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Tue Aug 2 15:10:17 2016
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : centos7.fenestros.loc:1 (local to host centos7.fenestros.loc)
UUID : fd8bac53:1457a4f4:30feab84:e0f9d8e0
Events : 18
Number Major Minor RaidDevice State
0 8 5 0 active sync /dev/sda5
1 8 8 1 active sync /dev/sda8
3 8 11 2 active sync /dev/sda11

Notez la ligne Persistence : Superblock is persistent. En effet, cette implémentation de RAID inscrit les caractéristiques du volume dans un super bloc persistant en début de chaque unité de type bloc dans le volume.

Recherchez la signification des termes Layout, Chunk size, Major et Minor.

Cependant, il necéssaire de renseigner le fichier /etc/mdadm.conf afin que le RAID soit contruit à chaque démarrage :

[root@centos7 ~]# echo 'DEVICES /dev/sda5 /dev/sda8 /dev/sda11' > /etc/mdadm.conf
[root@centos7 ~]# mdadm --detail --scan >> /etc/mdadm.conf
[root@centos7 ~]# cat /etc/mdadm.conf
DEVICES /dev/sda5 /dev/sda8 /dev/sda11
ARRAY /dev/md1 metadata=1.2 name=centos7.fenestros.loc:1 UUID=fd8bac53:1457a4f4:30feab84:e0f9d8e0

Chaque unité peut être examinée individuellement :

[root@centos7 ~]# mdadm --examine /dev/sda5
/dev/sda5:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : fd8bac53:1457a4f4:30feab84:e0f9d8e0
Name : centos7.fenestros.loc:1 (local to host centos7.fenestros.loc)
Creation Time : Tue Aug 2 15:10:12 2016
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 1021952 (499.08 MiB 523.24 MB)
Array Size : 1021952 (998.17 MiB 1046.48 MB)
Data Offset : 2048 sectors
Super Offset : 8 sectors
Unused Space : before=1960 sectors, after=0 sectors
State : clean
Device UUID : 4569e15e:20201bce:365776f2:75aed23f
Update Time : Tue Aug 2 15:10:17 2016
Bad Block Log : 512 entries available at offset 72 sectors
Checksum : 4c9948d0 - correct
Events : 18
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 0
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)

A ce stade il est intéressant de noter comment réagir lors d'une défaillance d'un disque. Dans notre cas nous allons indiquer au système que la partition /dev/sda5 est devenue défaillante :

[root@centos7 ~]# mdadm --manage --set-faulty /dev/md1 /dev/sda5
mdadm: set /dev/sda5 faulty in /dev/md1

L'utilisation de la ligne de commande suivante nous confirme le statut de /dev/sda5 :

[root@centos7 ~]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Tue Aug 2 15:10:12 2016
Raid Level : raid5
Array Size : 1021952 (998.17 MiB 1046.48 MB)
Used Dev Size : 510976 (499.08 MiB 523.24 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Tue Aug 2 15:14:59 2016
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : centos7.fenestros.loc:1 (local to host centos7.fenestros.loc)
UUID : fd8bac53:1457a4f4:30feab84:e0f9d8e0
Events : 20
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 8 1 active sync /dev/sda8
3 8 11 2 active sync /dev/sda11
0 8 5 - faulty /dev/sda5

Il est maintenant nécessaire de supprimer /dev/sda5 de notre RAID 5 :

[root@centos7 ~]# mdadm --manage --remove /dev/md1 /dev/sda5
mdadm: hot removed /dev/sda5 from /dev/md1

A l'examen de notre RAID, on constate que /dev/sda5 a été supprimé :

[root@centos7 ~]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Tue Aug 2 15:10:12 2016
Raid Level : raid5
Array Size : 1021952 (998.17 MiB 1046.48 MB)
Used Dev Size : 510976 (499.08 MiB 523.24 MB)
Raid Devices : 3
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Aug 2 15:16:41 2016
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : centos7.fenestros.loc:1 (local to host centos7.fenestros.loc)
UUID : fd8bac53:1457a4f4:30feab84:e0f9d8e0
Events : 21
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 8 1 active sync /dev/sda8
3 8 11 2 active sync /dev/sda11

Constatez maintenant l'existance de votre RAID :

[root@centos7 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sda11[3] sda8[1]
1021952 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
unused devices: <none>

Notez que le RAID a été démarré avec 2 unités au lieu de trois.

Pour ajouter un autre disque à notre RAID afin de remplacer /dev/sda5 il convient d'utiliser l'option –add :

[root@centos7 ~]# mdadm --manage --add /dev/md1 /dev/sda10
mdadm: added /dev/sda10

L'exemen du RAID indique que /dev/sda10 a été ajouté en tant que spare et à l'issu de quelques minutes le RAID 5 a été reconstruite :

[root@centos7 ~]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Tue Aug 2 15:10:12 2016
Raid Level : raid5
Array Size : 1021952 (998.17 MiB 1046.48 MB)
Used Dev Size : 510976 (499.08 MiB 523.24 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Tue Aug 2 15:19:06 2016
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : centos7.fenestros.loc:1 (local to host centos7.fenestros.loc)
UUID : fd8bac53:1457a4f4:30feab84:e0f9d8e0
Events : 40
Number Major Minor RaidDevice State
4 8 10 0 active sync /dev/sda10
1 8 8 1 active sync /dev/sda8
3 8 11 2 active sync /dev/sda11

Naturellement, il necéssaire de renseigner le fichier /etc/mdadm.conf du changement afin que le RAID soit contruit à chaque démarrage :

[root@centos7 ~]# echo 'DEVICES /dev/sda10 /dev/sda8 /dev/sda11' > /etc/mdadm.conf
[root@centos7 ~]# mdadm --detail --scan >> /etc/mdadm.conf
[root@centos7 ~]# cat /etc/mdadm.conf
DEVICES /dev/sda10 /dev/sda8 /dev/sda11
ARRAY /dev/md1 metadata=1.2 name=centos7.fenestros.loc:1 UUID=fd8bac53:1457a4f4:30feab84:e0f9d8e0

<html> <div align=“center”> Copyright © 2020 Hugh Norris. </html>