Manipuler les VDI

Attention

Avant toutes modifications penser à faire trois choses : * Vérifier la taille du disque à resizer (avec un df -h) * Vérifier la présence de partition sur le disk à resizer. Si il n’y a pas de partition ne pas faire les opération de fdisk * Si vous avez un doute faite un snapshot de la machine avant opération

Opération sur le disque virtuel

Sur le XCP-NG Server/Xenserver, récupération de l” UUID du VDI disque :

xe vm-disk-list vm=srvtest

Renvoi l’uuid des vdi de la vm srvtest. Exemple : b46a60c5-1692-4964-a3c4-03bc59136864

Agrandissement du disque dur

xe vdi-resize uuid=b46a60c5-1692-4964-a3c4-03bc59136864  disk-size=30GiB

Opération sur l’OS Linux

Cas Général

On relance la machine virtuelle, dans le linux, si il n’y a qu’une seule partition

fdisk -u /dev/xvda

Afficher la table de partition, bien noter le début de la partition (ici 63 peut aussi être 2048 sur des squeeze)

Device Boot            Start         End          Blocks     Id  System
/dev/xvda1              63             31455269    15727603+  83  Linux
                        /\
                        ||

Supprimer la partition et la recréer, vérifier que le début de la partition correspond bien à l’ancienne partition

d

Recréer la partition, de type primary

n
p
1

Choisir comme début la valeur qui a été récupérée à l’étape un peu plus au dessus

63 ou 2048 ou autre chose

Indication

Taper enter directement pour choisir la fin de la partition

Afficher le résultat

p

Rebooter puis lancer un resize2fs

resize2fs /dev/xvda1

Cas spécifique, forcer le secteur 63

Sur des disques qui ont été créées sur des vieilles vm (type debian 5 ou mandriva 2008) le premier secteur se trouve en 63, et fdisk indique un « out of range »

Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-2930277167, default 2048): 63
'''Value out of range.'''
First sector (2048-2930277167, default 2048): q
First sector (2048-2930277167, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2930277167, default 2930277167):
Using default value 2930277167

Command (m for help): q

On lance alors fdisk avec des options spécifiques (mode « old DOS-style disk block addressing »)

fdisk -c=dos -u=cylinders /dev/xvdc

WARNING: DOS-compatible mode is deprecated. It s strongly recommended to switch off the mode (with command c).
WARNING: cylinders as display units are deprecated. Use command u to change units to sectors.

Command (m for help): p

Disk /dev/xvdc: 644.2 GB, 644245094400 bytes
255 heads, 63 sectors/track, 78325 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8896f40d

       Device Boot      Start         End      Blocks   Id  System
/dev/xvdc1               1       78325   629145531   83  Linux

On delete la partition existante

Command (m for help): d
Selected partition 1

Et on recré la nouvelle en spécifiant le laissant les options par défaut.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First cylinder (1-78325, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-78325, default 78325):
Using default value 78325

On change les options d’affichage

Command (m for help): u
Changing display/entry units to sectors

On vérifie que le premier secteur est bien le 63eme

Command (m for help): p

Disk /dev/xvdc: 644.2 GB, 644245094400 bytes
255 heads, 63 sectors/track, 78325 cylinders, total 1258291200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8896f40d

Device Boot            Start  End                 Blocks          Id    System
/dev/xvdc1              63      1258291124   629145531   83   Linux

On valide les changements :

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Puis on reboot la machine

reboot

Enfin, on fait un resize du filesystem

resize2fs /dev/xvdc1

Création d’un VDI supérieur à 2 To

2 solutions possibles.

Méthode classique

Cette ligne de commande ne semble pas fonctionner sur les xen 7.1.2 non patchés

xe vdi-create sr-uuid=9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af name-label=BIG_DATA type=user virtual-size=5TiB sm-config:type=raw

Méthode un peu plus brut

Pour bien comprendre la démarche, il faut savoir que :

  • quand un vdi est créé sur xen, le lv porte le nom de l’uuid en VHD-XXXX

  • quand un sr est créé sur xen, le vg porte le nom de l’uuid en VG_XenStorage-XXXX

Récupérer l’uuid du sr sur lequel le vdi sera.

[root@xenserverBkUp ~]# xe sr-list name-label=Local\ storage  --minimal
9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af

Récupérer le nom du vgs associé

vgs | awk '{print $1}' | grep 9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af
VG_XenStorage-9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af

Créer un lv dans ce VG, attention, bien préfixer en LV et non pas VHD, le xen ne trouvera pas de disque associé. uuidgen est une fonction qui génère aléatoirement un id unique. Dans notre exemple, le vdi fera 5To

lvcreate -L5T -n"LV-"$(uuidgen) VG_XenStorage-9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af --config global{metadata_read_only=0}

Avec un lvs, on peut voir notre nouveau storage rattaché au vg xen.

[root@xenserverBkUp ~]# lvs
  LV                                       VG                                                 Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LV-2ab1e081-c69d-45cc-95fa-4ede2bbb4ab6  VG_XenStorage-9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af -wi-ao----  5.00t

scanner le sr pour qu’il prenne en compte le nouveau vdi

xe sr-scan uuid=9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af

Il vous restera à nommer le vdi depuis le xencenter ou en cli et attacher ce disque à un vm.

Etendre un VDI supérieur à 2To

Trouver l’uuid du sr (commençant par VG_Xenstorage) puis l’uuid du vdi (on peut utiliser la commande xe vi-list si l’on connait le nom du vdi).

Puis retrouver le nom du LV avec l’uuid du VDI et agrandir. Ici, de 400G :

lvextend -L+400G /dev/VG_XenStorage-9ec3995a-eb2d-2645-dfc6-2b90b2a0c58b/LV-10692883-8142-423c-98bd-e2995e38c3a4 --config global{metadata_read_only=0}

Exporter des VDI

https://discussions.citrix.com/topic/389386-xe-vdi-import-not-doing-anything/

Il est possible en plus d’importer exporter des templates d’exporter et importer des VDI. Pour ce faire, exporter depuis le xen source le VDI qui vous intéresse, ici EnghienBK01-OS :

xe vdi-export uuid=17a8e771-2694-4f46-a05a-ba3260dcc927  filename=/big_data/EnghienBK01-OS

Puis, sur déplacer ce fichier sur le xenserver voulu.

Sur le xenserver cible, pour pourvoir importer le VDI depuis un filename, il faut d’abord lui créer un vdi vide avec la même volumétrie que le vdi de base. Ici, 80G.

xe vdi-create name-label=EnghienBK01-OS-new sr-uuid=9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af virtual-size=80GiB

Dans l’exemple, l’uuid du nouveau vdi est fe8cbad8-a0ac-4421-a852-f01cdd417a45

Enfin, importer le fichier dans le nouveau VDI :

xe vdi-import filename=/big_data/EnghienBK01-OS sr-uuid=9cfe3b34-4b9f-3ff7-706a-86ff2b50f8af uuid=fe8cbad8-a0ac-4421-a852-f01cdd417a45