Rappel des opérations à réaliser pour ajouter un nouveau disque au sein d’une baie RAID existante et gérée par mdadm.

  1. tests des erreurs sur le nouveau disque
  2. partionnement du nouveau disque
  3. ajout du disque dans l’array RAID5
  4. retaillage du volume

Tests des erreurs sur le nouveau disque

badblocks -s -v -p 1 -c 65536 -w /dev/sdb

Sur un disque 3 TB Western Digital SATA : ~7 heures d’écriture + ~7 heures de vérification par pattern

Ecriture d’un premier pattern + vérification :

Vérification des blocs défectueux en mode lecture-écriture
Du bloc 0 au bloc 2930266583
Test en cours avec le motif 0xaa: complété
Lecture et comparaison :  89.61% 95.92% effectué, 14:07:24 é©coulé. (0/0/0 erreurs)

Ecriture d’un deuxième pattern :

Vérification des blocs défectueux en mode lecture-écriture
Du bloc 0 au bloc 2930266583
Test en cours avec le motif 0xaa: complété
Lecture et comparaison :  89.61%complété
Test en cours avec le motif 0x55:   0.23% effectué, 14:34:47 écoulé. (0/0/0 erreurs)

Partitionnement du disque

parted /dev/sdb

ou

gparted

Ajout du disque dans l’array RAID5

On commence par ajouter le nouveau disque, puis on aggrandit la grappe.

mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --grow /dev/md0 --raid-devices=5

Augmentation (ou réduction au besoin) de la vitesse de reconstruction :

echo 400000 > /proc/sys/dev/raid/speed_limit_max

Affichage des détails de la grappe RAID :

mdadm --misc --detail /dev/md0
        Version : 1.2
  Creation Time : Sat Jul 21 10:18:36 2012
     Raid Level : raid5
     Array Size : 8790790656 (8383.55 GiB 9001.77 GB)
  Used Dev Size : 2930263552 (2794.52 GiB 3000.59 GB)
   Raid Devices : 5
  Total Devices : 5
    Persistence : Superblock is persistent

    Update Time : Fri May  1 09:53:06 2015
          State : clean, reshaping 
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

 Reshape Status : 0% complete
  Delta Devices : 1, (4->5)

           Name : jupiter:0  (local to host jupiter)
           UUID : 8161d5e9:c606789b:1ab69820:9b9f43c6
         Events : 12776

    Number   Major   Minor   RaidDevice State
       0       8       81        0      active sync   /dev/sdf1
       1       8       65        1      active sync   /dev/sde1
       3       8       49        2      active sync   /dev/sdd1
       4       8      113        3      active sync   /dev/sdh1
       5       8       17        4      active sync   /dev/sdb1

Consultation de l’avancée de la progression de la reconstruction (avec affichage d’un estimé du temps restant).

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 sdb1[5] sdd1[3] sdf1[0] sdh1[4] sde1[1]
      8790790656 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]
      [>....................]  reshape =  0.0% (2448896/2930263552) finish=2212.9min speed=22050K/sec
     
unused devices: <none>

Une vérification est lancée automatiquement à la fin du retaillage (mode “check”) :

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 sdb1[5] sdd1[3] sdf1[0] sdh1[4] sde1[1]
      11721054208 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]
      [==================>..]  check = 90.7% (2660303136/2930263552) finish=68.4min speed=65739K/sec
     
unused devices: <none>

Retaillage de la grappe, sans quoi la nouvelle taille n’est pas prise en compte.

resize2fs /dev/md0
10:26 root@jupiter ~# resize2fs /dev/md0
resize2fs 1.42 (29-Nov-2011)
Le système de fichiers de /dev/md0 est monté sur /mnt/internal/raid ; le changement de taille doit être effectué en ligne
old_desc_blocks = 524, new_desc_blocks = 699
En train d'effectuer un changement de taille en ligne de /dev/md0 vers 2930263552 (4k) blocs.
Le système de fichiers /dev/md0 a maintenant une taille de 2930263552 blocs.

Exemple de redémarrage

[66097.692330] RAID conf printout:
[66097.692335]  --- level:5 rd:5 wd:5
[66097.692338]  disk 0, o:1, dev:sdf1
[66097.692340]  disk 1, o:1, dev:sde1
[66097.692342]  disk 2, o:1, dev:sdd1
[66097.692344]  disk 3, o:1, dev:sdh1
[66097.692346]  disk 4, o:1, dev:sdb1
[66097.692398] md: reshape of RAID array md0
[66097.692404] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
[66097.692408] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for reshape.
[66097.692415] md: using 128k window, over a total of 2930263552k.
[66098.712339] md: md_do_sync() got signal ... exiting
[66098.757893] md: reshape of RAID array md0
[66098.757899] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
[66098.757903] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for reshape.
[66098.757910] md: using 128k window, over a total of 2930263552k.
[88476.488193] hrtimer: interrupt took 569139 ns
[206122.623450] md: md0: reshape done.
[206122.738454] RAID conf printout:
[206122.738459]  --- level:5 rd:5 wd:5
[206122.738463]  disk 0, o:1, dev:sdf1
[206122.738465]  disk 1, o:1, dev:sde1
[206122.738467]  disk 2, o:1, dev:sdd1
[206122.738469]  disk 3, o:1, dev:sdh1
[206122.738472]  disk 4, o:1, dev:sdb1
[206122.738477] md0: detected capacity change from 9001769631744 to 12002359508992
[206123.062136] VFS: busy inodes on changed media or resized disk md0
[206531.169139] md: data-check of RAID array md0
[206531.169144] md: minimum _guaranteed_  speed: 30000000 KB/sec/disk.
[206531.169146] md: using maximum available idle IO bandwidth (but not more than 800000 KB/sec) for data-check.
[206531.169153] md: using 128k window, over a total of 2930263552k.