Le RAID1 permet de mettre en parallèle au minimum 2 disques durs afin d'avoir une reproduction parfaite des données sur tous les disques de la grappe.
En cas de panne matériel d'un disque, les données restent accessibles grâce aux autres disques.
C'est une excellente solution pour la sécurité des données.
L'inconvénient, l'espace de stockage total est égal à la capacité du plus petit des disques.
Prenons l'exemple d'une grappe de 2 disques d'une capacité de 40 Gb chacun. L'espace de stockage du volume RAID1 sera donc de 40 Gb.
Il n'est pas nécessaire d'avoir des disques de même capacité pour créer un volume RAID1. Il est tout à fait possible de créer un volume RAID1 avec un disque de 30 Gb et un disque de 40 Gb. Il faudra par contre avoir des partitions de même taille. Il faudra donc partitionner le disque le plus grand afin d'avoir une partition de taille identique à celui du plus petit.
Pour l'exemple, je vais créer un RAID1 avec deux disques de 10 Gb chacun. J'utilise Ubuntu 12.04 LTS pour les tests.
Premièrement, lister les disques présents sur le système.
$ fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders, total 20971520 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 identifier: 0x00000000
Disk /dev/vda doesn't contain a valid partition table
Disk /dev/vdb: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders, total 20971520 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 identifier: 0x00000000
Disk /dev/vdb doesn't contain a valid partition table
Mon système contient bien deux disques de 10 Gb correspondant à /dev/vda et /dev/vdb.
Il faut ensuite créer sur chaque disque une partition de type "Linux RAID autodetect".
$ fdisk /dev/vda
La commande "m" du programme fdisk permet d'afficher l'aide.
Nous allons donc ajouter une partition primaire égale à la taille du disque avec la commande "n (add a new partition)" puis la commande "p (primary)".
Je valide ensuite les choix par défaut afin de créer une seule partition sur le disque.
Une fois la partition créée, il faut ensuite modifier le type de la partition avec la commande "t (change a partition's system id)".
Le code correspondant a une partition Linux RAID autodetect est "fd"
Il faut donc saisir "fd" pour le choix de la partition Linux RAID autodetect.
Pour terminer, il faut valider les changements avec la commande "w (write table to disk and exit)".
Répéter l'opération pour le second disque /dev/vdb.
$ fdisk /dev/vdb
Lister à nouveau les disques pour vérifier que nos modifications ont bien été prises en compte.
$ fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes
2 heads, 17 sectors/track, 616809 cylinders, total 20971520 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 identifier: 0x050bac38
Device Boot Start End Blocks Id System
/dev/vda1 2048 20971519 10484736 fd Linux RAID autodetect
Disk /dev/vdb: 10.7 GB, 10737418240 bytes
2 heads, 17 sectors/track, 616809 cylinders, total 20971520 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 identifier: 0x8df86189
Device Boot Start End Blocks Id System
/dev/vdb1 2048 20971519 10484736 fd Linux RAID autodetect
Les deux disques /dev/vda et /dev/vdb contiennent bien une partition Linux RAID autodetect /dev/vda1 et /dev/vdb1.
Nous pouvons donc, à présent, créer notre volume RAID1 que nous nommerons /dev/md0.
Pour créer un volume RAID, nous utiliserons le programme mdadm.
Pour l'installer, rien de plus simple.
$ apt-get install mdadm
Nous allons donc créer un volume RAID1 /dev/md0 composé de 2 disques et contenant les 2 partitions /dev/vda1 et /dev/vdb1.
$ mdadm --create /dev/md0 --level=1 --assume-clean --raid-devices=2 /dev/vda1 /dev/vdb1
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
L'option "--create" indique à mdadm de créer le volume /dev/md0.
L'option "--level=1" indique que nous créons un RAID de type 1.
L'option "--raid-devices=2" indique que le volume est constitué de 2 disques.
Pour terminer, nous indiquons les partitions à insérer dans le volume RAID1 /dev/md0.
La commande "fdisk -l" nous montre notre volume RAID1 que nous venons de créer.
$ fdisk -l
Disk /dev/md0: 10.7 GB, 10727849984 bytes
2 heads, 4 sectors/track, 2619104 cylinders, total 20952832 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 identifier: 0x00000000
Disk /dev/md0 doesn't contain a valid partition table
La commande "mdadm --detail /dev/md0" nous montre l'état de notre volume RAID1 /dev/md0.
$ mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat May 18 17:08:08 2013
Raid Level : raid1
Array Size : 10476416 (9.99 GiB 10.73 GB)
Used Dev Size : 10476416 (9.99 GiB 10.73 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sat May 18 17:08:08 2013
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : vm-vpn:0 (local to host vm-vpn)
UUID : b131679e:e5b15236:8003d92b:be9f610b
Events : 0
Number Major Minor RaidDevice State
0 253 1 0 active sync /dev/vda1
1 253 17 1 active sync /dev/vdb1
Maintenant que notre volume RAID1 est créé, il nous reste à créer le système de fichier. Nous allons créer un système de fichier EXT4.
$ mkfs.ext4 /dev/md0
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2619104 blocks
130955 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information: done
Nous pouvons maintenant utiliser notre nouvel espace de stockage. Pour cela nous devons créer un point de montage.
$ mkdir /media/raid
$ mount /dev/md0 /media/raid
$ ll /media/raid
total 24
drwxr-xr-x 3 root root 4096 May 18 22:48 .
drwxr-xr-x 4 root root 4096 May 18 22:59 ..
drwx------ 2 root root 16384 May 18 22:48 lost+found
Pour un montage automatique au démarrage du système, nous devons récupérer l'UUID du volume /dev/md0 ...
$ blkid /dev/md0
/dev/md0: UUID="59fd912b-e1a9-4693-ab91-f7d9eb883bae" TYPE="ext4"
... et enregistrer dans le fichier "/etc/fstab" la ligne suivante
UUID=59fd912b-e1a9-4693-ab91-f7d9eb883bae /media/raid ext4 rw 0 0
Pour finir, enregistrer les informations du raid dans le fichier /etc/mdadm/mdadm.conf :
$ mdadm --detail --scan >> /etc/mdadm/mdadm.conf