EXADATA / OVM : extension disque

Comment étendre un disque existant d’un domaine utilisateur OVM sans créer de nouveau disque ?

Nous prendrons dans cet exemple une machine (DomU) avec un disque « pv1_vgexadb.img » de 60GB que l’on désire étendre à 110GB.
Il faut dans un premier temps se logguer sur le Dom0 (dans cet exemple un Exadata), et y créer un fichier qui deviendra notre futur disque à coup de dd :

cd /EXAVMIMAGES/GuestImages/mamachine.mondomaine/
dd if=/dev/zero of=pv1_vgexadb_110g.img bs=1M count=112640

Nous avons donc créé la coque pleine de vide (venant du /dev/zero) de notre futur disque.
Pour le moment, nous n’avons généré que de l’activité disque sur le stockage à l’aide du dd, mais aucune coupure.
C’est à ce moment là que la rupture de service du DomU arrive.
On se logue sur le DomU « mamachine.mondomaine » et on l’arrête :

init 0

Une fois la machine virtuelle, notre DomU, arrêtée, nous pouvons démarrer la phase qui prend du temps : la copie depuis l’ancien disque vers le nouveau.

dd if=pv1_vgexadb.img of=pv1_vgexadb_110g.img conv=notrunc,noerror

Une fois la copie des blocs réalisée, on fait une petite sauvegarde de l’ancien disque – on ne sait jamais ! – et on place le nouveau en remplacement :

mv pv1_vgexadb.img pv1_vgexadb.img.08122017-beforeExtendDisk
mv pv1_vgexadb_110g.img pv1_vgexadb.img

On redémarre la machine depuis le Dom0 :

xm create vm.cfg

Une fois la machine en route, on se connecte dessus et on retaille la partition (ici avec parted, mais la même chose se fait avec fdisk) :

[root@mamachine ~]# df -h /u01
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VGExaDb-LVDbOra1
20G 4.5G 15G 24% /u01
[root@mamachine ~]# parted
(parted) select /dev/xvdd
Using /dev/xvdd
(parted) print
Warning: Not all of the space available to /dev/xvdd appears to be used, you can fix the GPT to use all of the space (an extra 100663296 blocks) or continue with the current setting?
Fix/Ignore? Fix
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdd: 110GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 32.8kB 66.6GB 66.6GB primary lvm

On constate ici que le disque est plus volumineux qu’avant : 110GB.
On supprime maintenant la partition et on la recrée à la bonne dimension :

(parted) rm 1
Warning: WARNING: the kernel failed to re-read the partition table on /dev/xvdd (Device or resource busy). As a result, it may not reflect all of your changes until after reboot.
(parted) mkpart
Partition name? []? primary
File system type? [ext2]?
Start? 32.8kB
End? 100%
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
Warning: WARNING: the kernel failed to re-read the partition table on /dev/xvdd (Device or resource busy). As a result, it may not reflect all of your changes until after reboot.

On indique que la partition 1 que l’on vient de recréer est de type LVM :

(parted) set 1 lvm
New state? [on]/off?
Warning: WARNING: the kernel failed to re-read the partition table on /dev/xvdd (Device or resource busy). As a result, it may not reflect all of your changes until after reboot.
(parted) quit

On redémarre la machine virtuelle (DomU) afin que la nouvelle partition soit prise en compte :

init 6

 
Il ne reste maintenant qu’à faire les manipulation d’extension côté LVM (si LVM il y a sur votre DomU).
On vérifie que le Physical Volume a son ancienne taille, ici 62GB :

[root@mamachine ~]# pvdisplay /dev/xvdd1
--- Physical volume ---
PV Name /dev/xvdd1
VG Name VGExaDb
PV Size 62.00 GiB / not usable 3.76 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 15871
Free PE 255
Allocated PE 15616
PV UUID QUwRiD-ZUKt-I0NC-LROZ-9COq-FtFD-Gfuu0o

On le retaille :

[root@mamachine ~]# pvresize /dev/xvdd1
Physical volume "/dev/xvdd1" changed
1 physical volume(s) resized / 0 physical volume(s) not resized

Vérification sur le Physical Volume … puis sur le Volume Group :

[root@mamachine ~]# pvdisplay /dev/xvdd1
--- Physical volume ---
PV Name /dev/xvdd1
VG Name VGExaDb
PV Size 110.00 GiB / not usable 3.77 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 28159
Free PE 12543
Allocated PE 15616
PV UUID QUwRiD-ZUKt-I0NC-LROZ-9COq-FtFD-Gfuu0o
[root@mamachine ~]# vgdisplay VGExaDb
--- Volume group ---
VG Name VGExaDb
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 11
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 5
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size 134.49 GiB
PE Size 4.00 MiB
Total PE 34430
Alloc PE / Size 21760 / 85.00 GiB
Free PE / Size 12670 / 49.49 GiB
VG UUID 2HvLtm-COvb-SGJh-rEvf-xJAx-ncm5-yqHANi

49GB de libre dans le VG ! Bonne nouvelle !
On étend le Logical Volume de 20GB parce que j’ai décidé de garder environ 30GB sous le coude pour des augmentations futures, à chaud :

[root@mamachine ~]# lvextend -L+20G /dev/mapper/VGExaDb-LVDbOra1
Size of logical volume VGExaDb/LVDbOra1 changed from 20.00 GiB (5120 extents) to 40.00 GiB (10240 extents).
Logical volume LVDbOra1 successfully resized

Il ne reste qu’à faire grossir le filesystem en conséquence – si XFS, alors remplacer resize2fs par xfs_growfs) – :

[root@mamachine ~]# resize2fs /dev/mapper/VGExaDb-LVDbOra1
resize2fs 1.43-WIP (20-Jun-2013)
Filesystem at /dev/mapper/VGExaDb-LVDbOra1 is mounted on /u01; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/mapper/VGExaDb-LVDbOra1 to 10485760 (4k) blocks.
The filesystem on /dev/mapper/VGExaDb-LVDbOra1 is now 10485760 blocks long.

Le moment de vérité, on vérifie :

[root@mamachine ~]# df -h /u01
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VGExaDb-LVDbOra1
40G 4.5G 33G 13% /u01

 
Objectif atteint !
Nous avons étendu un filesystem d’un domaine utilisateur d’une infra OVM en augmentant la taille d’un disque virtuel.
Cette manipulation vous permet de ne pas ajouter sans arrêt des disques à vos machines, mais bien d’étendre l’existant.
Pour en savoir plus sur l’administration Exadata, découvrez notre formation « Exadata Database Machine 12c : Administration Workshop« , ainsi que l’ensemble de nos formations Oracle.