LVM : Créer une partition mirror à partir d'une partition linéaire

Situation de départ : J'ai créé une partition linéaire sur LVM (c'est à dire sans configuration mirroir/RAID particulière), et je souhaite maintenant la transformer en mirror (ou RAID1), mais sans utiliser mdadm, juste en restant avec LVM.

Dans mon cas, il s'agissait de la partition /home.

J'ai mon disque de base /dev/sda qui contient mon root, et /dev/sdb qui contient /home. J'avais habilement pensé à créer une partition de type LVM dessus car je me doutais de devoir un jour la manipuler.

J'ai ajouté un disque dur (en l'occurrence une partition iscsi, mais ça n'a pas d'importance ici), /dev/sdc.

Initialisation du disque

Création d'une partition LVM

Comme il s'agit d'un disque de 5 To, j'ai du créer une table de partition GPT et pas MBR, car MBR se limite a des partition de 2 To maximum. On va donc utiliser l'utilitaire gdisk et non fdisk (ils s'utilisent pareil).

root@linux:~# gdisk /dev/sdc  
GPT fdisk (gdisk) version 0.8.10

Partition table scan:  
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help):  
  • Tapez n pour créer une nouvelle partition
  • Choisissez le numéro de la partition (par défaut 1, c'est très bien)
  • Choisissez le secteur de départ (laissez le minimum par défaut)
  • Choisissez le dernier secteur (laissez par défaut pour utiliser le disque entier)
  • Sélectionner le type Linux LVM en tappant 8e00 quand on vous demande le Hex code
  • Tapez w pour écrire les changements

Initialisation LVM

pvcreate /dev/sda  

Extension du volume group existant

vgextend home_vg /dev/sdc1  

Création du LVM mirror 1 (raid 1)

lvconvert -m1 home_vg/home /dev/sdc1  

Done ! Vous pouvez vérifier l'avancement de la synchronisation des disques avec la commande :

root@linux:~# lvs -a -o name,copy_percent,devices home_vg  
  LV              Cpy%Sync Devices                          
  home            7.01     home_rimage_0(0),home_rimage_1(0)
  [home_rimage_0]          /dev/sdb1(0)                     
  [home_rimage_1]          /dev/sdc1(1)                     
  [home_rmeta_0]           /dev/sdb1(256000)                
  [home_rmeta_1]           /dev/sdc1(0)  

Ici, j'en suis a 7%.

Ca, c'est dans le cas où ca marche bien. Car moi, j'avais cette erreur lors du lvconvert:

1 extents needed, but only 0 available  

0 available ? Mais je viens de rajouter un disque !

Oups !

En fouillant sur le net, il apparait que je manque d'espace pour créer des LE, donc impossible de créer un RAID 1. Il va falloir que je réduise un peu l'espace que prend le filesystem.

Comme dans mon cas, il s'agissait de /home, je n'arrivais pas à démonter la partition correctement pour pouvoir la resize. J'ai du donc utiliser un système de secours pour monter mon LVM et faire les modifs.

C'est parti.

Réduire la taille de la partition

Pour rendre aware votre systeme de secours (ou liveCD) des partition LVM, il faut déjà y installer lvm grâce à apt-get install lvm2, puis taper vgchange -ay.

La, on peut réduire la taille de la partition :

lvreduce --resizefs -L 1000G /dev/mapper/home_vg-home  

Vous devez réduire un peu, mais je ne sais pas de combien. Perso j'ai pris 1G, j'ai pas mal de place. Cette commande va non seulement resize le système ext4, mais aussi le Logical Volume de LVM. Préférez cette méthode que de faire les deux séparément, car si la taille du filesystem est plus grande que celle du LV, votre partition ne se montera pas !

Une fois reduce, vous pourrez retenter le lvconvert.

Damien Gustave

Read more posts by this author.