Table des matières

<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


Basé sur « https://xaviermichel.github.io/tutoriel/2013/06/17/mise-en-place-d%27un-NAS-avec-raid-sur-mon-raspberry-pi » par Xavier MICHEL