Ajouter un disque dans un volume RAID5 hardware

Prenons un serveur DELL avec un controlleur RAID et un volume RAID5 configuré. Vous l’utilisez (sous Linux bien sûr) et un jour vous avez besoin d’ajouter un disque pour avoir plus de place. Est-ce possible ?

Ça dépend du controlleur RAID !

La capacité d’étendre un volume RAID5 en recalculant l’ensemble du volume (la parité étant répartie sur tous les disques) dépend d’un controlleur RAID à un autre. Difficile de donner des proportions, mais forcément plus un controlleur sera cher plus il aura de chance de le supporter. Revenons à notre exemple d’un serveur DELL, équipé d’une classique carte RAID PERC 5/i. Après avoir rajouté un disque, si l’on va dans le BIOS de la carte RAID : aucune trace de la possibilité d’étendre un volume ! On peut le supprimer, modifier ses options, mais absolument pas rajouter un nouveau disque. En fait, cette fonctionnalité n’est pas accessible depuis le BIOS… mais elle est possible via un outil en ligne de commande ! Voici une ligne de commande permettant d’ajouter un disque dans un volume RAID5 existant :

# omconfig storage vdisk action=reconfigure controller=0 vdisk=0 raid=r5 \
 pdisk=0:0:0,0:0:1,0:0:2,0:0:3,1:0:5
Command successful!

Et au niveau système, ça se passe comment ?

Une fois cette commande lancée, on peut constater dans le BIOS que le volume RAID5 est en cours de reconstruction. On le voit aussi au niveau système (avec l’outil MegaCli) :

Reconstruction           : Completed 17%, Taken 99 min.

Cela va durer plusieurs heures où les accès au volume RAID sera très lent…

Tant que ce n’est pas terminé, le système verra toujours le volume avec son « ancienne » taille :

sd 0:2:0:0: [sda] 1754529792 512-byte logical blocks: (898 GB/836 GiB)

Une fois terminé, le système verra après un reboot la nouvelle taille :

sd 4:2:0:0: [sda] 2339373056 512-byte logical blocks: (1.19 TB/1.08 TiB)

On verra donc sans rien faire de plus la nouvelle taille via les outils fdisk/cfdisk/etc. et donc un espace supplémentaire en Free Space.

Il reste ensuite à gérer cela au niveau partitions et filesystem. Voici un exemple où l’on rajoute une partition LVM et l’on étend d’un LV existant :

# cfdisk /dev/sda
# partprobe
# pvcreate /dev/sda10
  Physical volume "/dev/sda10" successfully created
# vgextend group1 /dev/sda10 
  Volume group "group1" successfully extended
# lvextend -L+250G /dev/mygroup/srv
  Extending logical volume srv to 550.00 GiB
  Logical volume srv successfully resized
# umount /srv
# resize2fs -p /dev/mygroup/srv
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/mygroup/srv' first.
# e2fsck -f /dev/mygroup/srv
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mygroup/srv: 16/19660800 files (0.0% non-contiguous), 46720716/78643200 blocks
# resize2fs -p /dev/mygroup/srv
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mygroup/srv to 144179200 (4k) blocks.
Begin pass 1 (max = 2000)
Extending the inode table     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/group1/srv is now 144179200 blocks long.
# mount /srv
# df -h /srv
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/group1-srv
                      542G  174G  341G  34% /srv

Et voilà, c’est donc possible dans certains cas.