Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

<term RPI>un mini-PC de la taille d'une carte de crédit</term>

Mise en place d'un NAS avec Raid 1 sur un Raspberry Pi

Utilisation

Maintenance

C'est bien beau de mettre en œuvre une politique de tolérance de panne mais que fait on… en cas de panne ?

Comment détecter une panne ?

Le fichier système /proc/mdstat permet d'avoir un aperçu rapide de l'état de nos ensembles RAID.

$ sudo cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[0] sdc1[1]
      976759936 blocks [2/2] [UU]
.
unused devices: <none>

Un coup d'oeil rapide sur le flag [UU] et nous savons que tout est OK. Si il y avait un problème sur un des disques nous aurions [_U] ou [U_]

Identifier le disque fautif

Automatiser la détection de panne

Cas 1 : panne d'un disque de l'array (ex : /dev/sdb)

Cas 2 : panne du disque système, la grappe RAID est OK

Réassembler un disque

C'est la commande assemble ( -A ) qui permet de reconstituer le raid. Suivant la façon dont il a été arrêté, il est possible qu'il faille des options complémentaires pour resynchroniser.

$ sudo mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
mdadm: /dev/md0 has been started with 2 drives.

Pour voir si tout s'est bien passé :

$ cat /proc/mdstat
Personalities : [raid1] 
md0 : active (auto-read-only) raid1 sdb1[0] sdc1[1]
      131005440 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

unused devices: <none>

et :

$ sudo mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Aug 26 15:01:00 2017
     Raid Level : raid1
     Array Size : 131005440 (124.94 GiB 134.15 GB)
  Used Dev Size : 131005440 (124.94 GiB 134.15 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Wed Aug 30 07:48:03 2017
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : framboise:0  (local to host framboise)
           UUID : 63f3b6ad:4f7d815c:adfec463:e03739cd
         Events : 23072

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

La grappe est en place avec les deux disques.

Aller plus loin...

En guise de conclusion, je voudrais donner quelques pistes pour aller plus loin :

Beaucoup d'entre vous voudront certainement mettre en place un miroir sur leur système plutôt que sur les données. On retrouve d'ailleurs souvent sur des serveurs une configuration du type : - 2 disques en RAID1 pour le système - 3(ou+) disques en RAID5 pour les données

RAID1 système : il est possible d'utiliser l'installeur debian pour mettre en place une architecture de type RAID1+LVM sur le système. Cependant, la partition /boot doit être en dehors du LVM à cause d'une limitation de GRUB premier du nom. GRUB2 supporte maintenant le boot sur LVM (avis aux experts pour compléments d'infos, merci).

Avec notre cher collaborateur lol ;) nous avons testé ceci grâce à ces explications : http://blog.le7.net/linux/debian/installation-debian-ubuntu-avec-raid-1/ Merci en passant à son auteur. Ce tutoriel fonctionne au poil avec une install lenny, j'ai effectué également des tests de panne et de récupération avec succès.

RAID5 de données : sur la question du stockage des données, il est plus intéressant sur un rapport prix/capacité d'opter pour un RAID5 plutôt qu'un RAID1. En effet, un RAID1 offre une capacité de stockage correspondant à la moitié de la taille totale des deux disques, alors qu'avec un RAID5 à 3 disques, nous avons les 2/3 de la taille totale des 3 disques.

Exemple : prenons des disques de 1To à 100 euros RAID1 = 200 euros pour 1To de données = 0.2 euro / Go RAID5 = 300 euros pour 2To de données = 0.15 euro / Go La mise en place d'un RAID5 se fait sensiblement de la même manière qu'un RAID1. Evidemment, la commande mdadm de création de l'array sera différente :

Exemple :

$ sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

Cependant, je tiens à signaler qu'on trouve des personnes se plaignant des performances RAID5 avec mdadm. Je vous conseille donc vivement de jeter un oeil à la fin de cet article qui est en anglais mais se comprend assez facilement : https://raid.wiki.kernel.org/index.php/RAID_setup

En bref, voici les paramètres qui permettraient d'offrir des performances dites “normales” dans la plupart des cas pour un RAID5 à 3 disques :

- Construire son RAID5 en positionnant la taille du chunk à 128KB :

$ sudo mdadm --create --verbose /dev/md0 --level=5 --chunk=128 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

- Choisir la taille des blocs du système de fichiers résidant sur /dev/md0 : prenons par exemple 4KB qui est une valeur adaptée pour l'utilisation de gros fichiers.

- La taille du chunk et des blocs sur le système de fichiers vont déterminer deux autres paramètres : stride et stripe-width stride = chunk / blocs = 128 / 4 = 32KB stripe-width = stride x (nbr disques - 1) = 32 x (3 - 1) = 64KB

- Créons le système de fichiers avec ces valeurs :

$ sudo mkfs.ext3 -v -b 4096 -E stride=32,stripe-width=64 /dev/md0

Enfin, d'après cet article, nous pouvons jouer sur la valeur de stripe_cache_size. La valeur optimale semble être 8192 :

/!\ Attention, cette commande concerne l'ensemble md0 ! Adapter en conséquence…

$ sudo echo 8192 > /sys/block/md0/md/stripe_cache_size

Voir aussi