Oracle VM à la "VMWare Storage VMotion"

Xen, comme KVM Xen, ne permet pas de déplacer des disques d’un sous-système de stockage à un autre sans indisponibilité. Cette limite deviendra vite une épine dans votre pied si vos environnements évoluent, que vous devez changer votre sous-système de stockage ou que vous n’avez pas planifié correctement vos espaces.

Je suis ravi de tout ce que nous avons mis en place avec Oracle VM 3.1. Des performances ; de tout ! Et je ne vous parle même pas du loadbalancing/failover réseau en 802.3ad… Enfin voilà, vous comprendrez donc mon extrême frustration, lorsque j’ai du déplacer les sauvegardes disque des bases de données créées dans 12 VM Oracle en production sur un référentiel SATA. Qui n’aurait pas grogné contre Oracle VM ?

Et puis l’idée ! « Ce que l’hyperviseur ne fait pas, d’autres peuvent le faire ». Si vous utilisez Linux et des groupes de volumes LVM2, pensez à « pvmove« . Cette commande magique vous permettra de déplacer en ligne vos disques d’une baie à l’autre avec une facilité déconcertante et sans aucune indisponibilité. En voici l’illustration en quelques lignes…

Notes à moi-même :
J’ai repéré quelques limites. La première est que pvmove déplace tous les blocs du volume logique d’un volume physique à l’autre, y compris ceux qui n’ont jamais été utilisés. De sorte que, si votre disque d’origine est un « sparse file », la partie utilisée par les volumes logiques que vous déplacerez sera allouée. Une autre limite concerne le fichier de configuration de votre VM qui lui ne peut pas, semble-t-il, être déplacé à chaud dans Oracle VM. C’est tout à fait dommage puisque, du point de vue de Xen, ce fichier n’est utilisé qu’à la création du DomU et que rien n’empêcherait de le déplacer ou de le copier sur un autre disque ; Enfin, je n’ai pas encore réussi à déplacer le premier disque qui contient notamment le Master Boot Record. Cela étant, ce n’est pas sans espoir comme le montre cet article.

Déplacer un disque consiste donc dans les opérations suivantes :

  • Ajouter un disque de la même taille que l’ancien dans sur le référentiel de votre choix
  • Créer un volume physique sur ce nouveau disque
  • Déplacer les volumes logiques avec pvmove dans le nouveau volume physique
  • Libérer puis supprimer le volume physique d’origine ainsi que les partitions associées
  • Supprimer le disque d’origine de la VM et du référentiel.

Voici ces 5 étapes, une par une.

Etape 1. Ajouter un  nouveau disque

Passons vite cette première étape. Avec OVM Manager ou ovmcli, ajoutez un disque à votre guest. Si celui-ci est paravirtualisé ou PVHVM, le disque est découvert automatiquement par le guest. Sinon, changez d’idée, vous écrirez - - - dans /sys/class/scsi_host/host?/scan.

Etape 2. Créer un Volume Physique

Une fois le disque dans la VM, vous pourrez le découvrir avec parted ou fdisk. Vous vérifierez qu’il s’agit bien du bon disque et notamment qu’il n’est pas utilisé par un autre volume physique. A ce propos, et pour éviter les erreurs, vous voudrez créer une partition et la marquer utilisée par LVM comme dans la séquence ci-dessous :

pvdisplay |grep "/dev/xvdk"

fdisk /dev/xvdk
n
p
1
<enter>
<enter>
t
8e
w

Une fois la partition créée, créez un volume physique sur ce disque.

pvcreate /dev/xvdk1

Etape 3. Déplacer les Volumes Online avec pvmove

Pour déplacer l’ensemble des volumes logiques d’un volume physique à l’autre, assurez-vous que vous partez du bon disque… Soit vous connaissez déjà le nom du device et vous utiliserez pvdisplay simplement pour repérer le nom du groupe de volume associé ; soit vous connaissez le nom du groupe de volume et vous vérifierez le nom des disques associés comme ci-dessous :

pvdisplay | grep -B1 -i export
PV Name /dev/xvdd1
VG Name VolGroupEXPORT

Préalablement à l’utilisation de pvmove, vous devrez ajouter votre nouveau disque dans le même groupe de volume que l’ancien à l’aide de la commande vgextend :

vgextend  VolGroupEXPORT /dev/xvdk1
Volume group "VolGroupEXPORT" successfully extended

Une fois le disque dans le groupe de volume vous pourrez déplacer toutes les pages des volumes logiques s’appuyant sur le volume physique /dev/xvdd1 sur votre nouveau volume physique à l’aide de pvmove :

pvmove -i 10 /dev/xvdd1 /dev/xvdk1
/dev/xvdd1: Moved: 0.0%
/dev/xvdd1: Moved: 0.6%
/dev/xvdd1: Moved: 1.5%
[...]
/dev/xvdd1: Moved: 100.0%

Une fois le déplacement réalisé, vous pouvez utiliser les commandes pvdisplay, lvdisplay et vgdisplay pour vérifier que le volume physique de votre ancien disque n’est plus utilisé :

lvdisplay /dev/VolGroupEXPORT/LogVolEXPORT
--- Logical volume ---
LV Name /dev/VolGroupEXPORT/LogVolEXPORT
VG Name VolGroupEXPORT
LV UUID AlNzwB-77vh-J2M8-6Ocf-05ri-1fd8-lEEuTT
LV Write Access read/write
LV Status available
# open 1
LV Size 34.00 GB
Current LE 8703
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:8


pvdisplay /dev/xvdk1
--- Physical volume ---
PV Name /dev/xvdk1
VG Name VolGroupEXPORT
PV Size 34.00 GB / not usable 715.50 KB
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 8703
Free PE 0
Allocated PE 8703
PV UUID hNywMM-gyfw-xsnP-xoOz-TqkS-SvzZ-2cU5C6


pvdisplay /dev/xvdd1
--- Physical volume ---
PV Name /dev/xvdd1
VG Name VolGroupEXPORT
PV Size 34.00 GB / not usable 4.00 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 8703
Free PE 8703
Allocated PE 0
PV UUID AGdfPe-4nQa-F71Z-DmVL-GoyV-1uxg-tho7Ct


vgdisplay VolGroupEXPORT
--- Volume group ---
VG Name VolGroupEXPORT
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 256
Cur LV 1
Open LV 1
Max PV 256
Cur PV 2
Act PV 2
VG Size 67.99 GB
PE Size 4.00 MB
Total PE 17406
Alloc PE / Size 8703 / 34.00 GB
Free PE / Size 8703 / 34.00 GB
VG UUID Wzd2J2-VcoM-Mv4Q-lhE2-9AcX-vw1v-1COtlx

Etape 4. Libérer l’ancien disque du guest

Vous pourrez alors supprimer le précédent volume physique du groupe de volume de votre VM à l’aide de la commande vgreduce :

vgreduce VolGroupEXPORT /dev/xvdd1
Removed "/dev/xvdd1" from volume group "VolGroupEXPORT"

pvdisplay /dev/xvdd1
"/dev/xvdd1" is a new physical volume of "34.00 GB"
--- NEW Physical volume ---
PV Name /dev/xvdd1
VG Name
PV Size 34.00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID AGdfPe-4nQa-F71Z-DmVL-GoyV-1uxg-tho7Ct

Supprimez ensuite tout simplement le volume physique et même la partition associée à l’aide de pvremove et fdisk ou parted:

pvremove /dev/xvdd1
Labels on physical volume "/dev/xvdd1" successfully wiped

fdisk /dev/xvdd
p
d
1
p
w

Etape 5. Supprimer le disque de la VM

Il ne vous reste plus qu’à décrocher le disque de votre machine virtuelle et à supprimer le disque correspondant du référentiel à l’aide d’Oracle VM Manager, ovmcli ou Enterprise Manager.

Moralité, si vous ne savez plus pourquoi vous vous ennuyez à créer des groupes de volume sous Linux, c’est sans doute pour pouvoir utiliser pvmove un jour. Quant à moi, j’adore Oracle VM un peu plus…

3 réflexions sur “Oracle VM à la "VMWare Storage VMotion"”

Les commentaires sont fermés.