2 semaines de congés, et une cochonnerie de virus m'ont permis de remettre en service mon serveur domestique. Après pas mal de tergisversations, j'ai fini par opter pour Gentoo. Pourquoi ? Parceque encore une fois, mon cas un peu "hors normes" ne me permettait pas d'utiliser un installeur "tout fait". En effet, si la machine dispose bien de 2 disques durs, ils ne sont pas de tailles identiques, et qui plus est le plus gros est plein. Je n'avais guère de solutions dès lors pour monter mon RAID soft. Je devais arriver à créer une grappe RAID en mirroring... avec un seul disque ! Complètement farfelu comme idée, non ?

Plantons le décor : un premier disque (sda) de 160 Go, plein à raz bord. Un second disque (sdb) avec quelques données, mais que je peux aisément sauvegarder le temps de l'opération. Evidemment, mdadm et le support du RAID soft dans le noyal.

Première étape : créer un périphérique RAID-1 sur un seul disque.

mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=1 /dev/sdb1

Evidemment, mdadm me prévient que ce que je veux faire, c'est n'importe quoi. Mais comme dans le monde du libre, tout ou presque est possible, il veut bien me laisser faire si je l'y force. Dont acte :

mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=1 /dev/sdb1 --force

Cette fois c'est bon : j'ai bien un périphérique RAID-1 software sur un seul disque ! La preuve dans le fichier /proc/mdstat :

Personalities : [linear] [raid0] [raid1]
md0 : active raid1 sdb1[0]
     58613056 blocks [1/1] [U]

Je formate donc ce nouvel espace raid en ext3, puis j'y copie mes données importantes depuis mon premier disque (sda). Quelques minutes heures plus tard, je reviens, c'est terminé. Tout s'est bien passé ; je termine alors le ménage sur le gros disque (sda), et je re-partitionne tout ça afin de créer un second espace RAID à ajouter à ma grappe existante. Et maintenant... Il s'agit d'expliquer à la couche RAID qu'on va lui rajouter un périphérique.

mdadm --add /dev/md0 /dev/sda6

Vérification dans /proc/mdstat, la modif est prise en compte.

Personalities : [linear] [raid0] [raid1]
md0 : active raid1 sdb1[0] sda6[0]
     58613056 blocks [1/1] [U]

Mais la grappe RAID ne s'appuie toujours que sur un seul disque (regardez la dernière ligne : [1/1] [U]) : il faut maintenant lui demander de synchroniser les 2 espaces de stockage.

mdadm --grow /dev/md0 --raid-devices=2

Dernière vérification dans /proc/mdstat : la resynchronisation est déjà en cours !

watch -n 1 cat /proc/mdstat
Personalities : [linear] [raid0] [raid1]
md0 : active raid1 sda6[2] sdb1[0]
      58613056 blocks [2/1] [U_]
      [==============>......]  recovery = 74.6% (43732352/58613056) finish=7.2min speed=34109K/sec

J'ai trouvé la méthode amusante (plus que le fait de créer un périphérique RAID sur 2 disques dont un marqué défectueux en tous cas : trop classique ^^). En fait, surtout... J'avais oublié qu'on pouvait créer un RAID dégradé... Pour la forme, la méthode académique c'est :

mdadm --create /dev/md1 --level raid1 --raid-disks 2 missing /dev/sda6

Mais c'est moins drôle, vous ne trouvez pas ? Et dans tous les cas, une fois la synchro terminée...

Personalities : [linear] [raid0] [raid1] 
md0 : active raid1 sda6[1] sdb1[0]
      58613056 blocks [2/2] [UU]
unused devices: <none>