Agrandir la taille d’un disque VirtualBox

Il m’arrive assez régulièrement d’être confronté au problème suivant.

J’ai un ensemble de machines virtuelles type que j’ai créé. Elles sont au format OVA et dès que j’ai besoin de créer une machine je vais chercher une de mes machines type si possible.

Or, la plupart d’entre-elles sont configurées avec de petits disques dur. Il arrive que cette configuration ne satisfasse pas mes besoin, le disque est trop petit. J’ai alors deux solutions :

  • Ajouter un disque virtuel.
  • Augmenter la taille du disque existant.

J’avoue que lorsque cela est possible je préfère la seconde solution.

Je vais présenter ici comment augmenter la taille du disque virtuel, avec les conditions suivantes :

  • Le système hôte est un Windows
  • Le système virtuel est un Linux Oracle 6
  • Le disque de départ est au format vmdk
  • La taille du disque virtuel est de 12 Go
  • Le nom physique du disque virtuel est le même que celui de ma machine type (normal)

Je veux obtenir au résultat suivant :

  • Le disque d’arrivée est au format vdi
  • Il porte le même nom que ma machine virtuelle cible
  • La taille du disque virtuel est de 40 Go
  • Les Go ajoutés sont disponibles au sein de l’OS

Voici les différentes étapes à suivre pour atteindre ce résultat.

Renommage du disque virtuel

Peut être l’opération la plus simple. Machine virtuelle éteinte, dans VirtualBox, je demande la configuration de ma machine virtuelle, rubrique ‘Stockage’ afin de localiser l’emplacement du disque :

vbox-resizedisk1Le fichier se nomme oracle linux 6.7 – UEK 3.8-disk1.vmdk et se trouve sur le disque E sous répertoire VM\VirtualBox\test-resizedisk.

Je veux le renommer test-resizedisk.vmdk (La machine virtuelle se nomme test-resizedisk)

J’ouvre un terminal sous Windows et je me positionne dans le répertoire contenant ma machine virtuelle :

cd E:\VM\VirtualBox\test-resizedisk

A vous d’adapter selon votre configuration.

Je renomme mon disque :

E:>ren "oracle linux 6.7 - UEK 3.8-disk1.vmdk" "test-resizedisk.vmdk"

Il ne faut pas fermer le terminal Windows à cette étape. Je retire l’ancien nom de la configuration de ma machine virtuelle et j’attache le disque renommé. Pour cela, dans l’interface de VirtualBox j’accède au gestionnaire de médias :

vbox-resizedisk2Le disque que je vient de renommer est signaler comme problématique, ce qui est normal car il n’existe plus sous ce nom :

vbox-resizedisk3Je clique dessus et je clique sur le bouton ‘Libérer’

vbox-resizedisk4Une fenêtre me demande confirmation, je clique sur ‘Libérer’.

vbox-resizedisk5J’ai accès maintenant au bouton ‘Supprimer’, sur lequel je clique :

vbox-resizedisk6De nouveau demande de confirmation :

vbox-resizedisk7On confirme en cliquant sur « Supprimer ». Je ferme la fenêtre, et je redemande la configuration de ma machine virtuelle, rubrique « Stockage » :

vbox-resizedisk8Il n’y a plus de disque associé, puisque je viens de supprimer la référence au disque qui était toujours enregistré sous l’ancien nom. Il faut ajouter le disque sous le nouveau nom.

Si vous convertissez aussi le disque au format vdi, exécutez le chapitre suivant avant de revenir ici, et choisir comme nouveau disque le disque vdi.

Pour cela il faut cliquer sur ‘Controleur Sata’ pour faire apparaître deux icônes à droite du libellé, et cliquer sur celui le plus à droite qui correspond à l’ajout d’un disque :

vbox-resizedisk9La fenêtre de choix qui apparaît propose soit de créer un nouveau disque, soit d’utiliser un existant, c’est le second choix, « choisir un disque existant » :vbox-resizedisk10 On précise l’emplacement du fichier, et on clique sur ‘Ouvrir’ :vbox-resizedisk11Le disque est attaché à la machine virtuelle sous son nouveau nom.

vbox-resizedisk12On vérifie le bon fonctionnement en démarrant la machine virtuelle.

Conversion du disque en .vdi

Machine virtuelle éteinte, je dispose d’un terminal Windows dans le répertoire où se trouve la machine virtuelle. A cette étape, mon disque se nomme test-resizedisk.vmdk. Je souhaite le convertir en vdi.

J’utilise l’utilitaire en ligne de commande Vboxmanage.exe, qui se trouve dans le répertoire de VirtualBox, normalement « c:\Program Files\Oracle\VirtualBox ». (A adapter selon votre configuration).
On demande à l’utilitaire de dupliquer le disque avec changement de format, c’est l’opération clonehd avec l’option –format.

La commande à exécuter est la suivante :

"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonehd --format VDI test-resizedisk.vmdk test-resizedisk.vdi

En réalité on ne convertit pas le disque, mais on en fait un clone avec changement de format.

vbox-resizedisk13A la fin de l’opération on dispose de deux disques. Un au format vmdk et une copie au format vdi. On ne ferme pas la fenêtre de commande.
Pour utiliser ce nouveau disque dans la machine virtuelle suivre les opérations du chapitre précédents. (Suppression du disque dans le gestionnaire de media, ajout du nouveau disque à la machine virtuelle).

Ensuite, s’assurer que la machine virtuelle démarre bien.

vbox-resizedisk14machine virtuelle avec le disque vdi

Changement de la taille du disque vdi

A cette étape, nous devons toujours avoir un terminal ouvert, et on doit être positionné dans le dossier qui contient la machine virtuelle pour laquelle on souhaite effectuer le changement de taille du disque. Dans mon exemple E:\VM\VirtualBox\test-resizedisk.

La machine virtuelle doit être éteinte.

J’utilise de nouveau l’utilitaire en ligne de commande Vboxmanage.exe, qui se trouve dans le répertoire de VirtualBox, normalement « c:\Program Files\Oracle\VirtualBox ». (A adapter selon votre configuration).
On demande à l’utilitaire de modifier le disque avec changement de taille, c’est l’opération modifyhd avec l’option –resize.

En ce qui me concerne, mon disque virtuel a une taille de départ de 12 Go. Je veux le passer 40 Go. La taille sera a spécifier en Méga-octets. Un Giga = 1024 Mégas donc ma nouvelle taille est de 40 x 1024 = 40960 Mo.

La ligne de commande à exécuter est :

"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd test-resizedisk.vdi --resize 40960

L’opération est très rapide. Voici le résultat.

vbox-resizedisk15Pour vérifier que la modification est bien prise en compte, on retourne dans la configuration de la machine virtuelle, option ‘Stockage’. La taille virtuelle du disque est bien de 40 Go :

vbox-resizedisk16
On redémarre la machine virtuelle. A l’étape suivante on va voir comment faire en sorte que l’OS tienne compte de cette modification.

Prise en compte de la modification dans l’OS

Dans mon exemple, j’utilise un Oracle Linux 6. L’opération est directement reproductible sous Red Hat 6. Pour les autres OS il faut adapter les commandes. Je ferai peut-être des petits articles sur ce sujet au fur et à mesure que je doive le refaire pour d’autres environnements.

Machine virtuelle démarré, disque dur maintenant de 40 Go, l’OS ne voit absolument pas la modification :

[oracle@localhost ~]$ df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      9,3G  6,2G  2,7G  70% /
tmpfs                 498M   84K  498M   1% /dev/shm
/dev/sda1             477M  134M  314M  30% /boot

9,3 Go + 498 Mo + 477 Mo, on est très loin de nos 40 Go. Heureusement le système étant monté en LVM, on peut faire une modification dynamique. Mon but est d’augmenter la taille de la partition / qui est à 9,3 Go.
Voici comment procéder.

  • Je commence par m’assurer que l’outil system-config-lvm est bien installé. Exécuter :
 sudo yum list system-config-lvm

Résultat :

Modules complémentaires chargés : refresh-packagekit, security, ulninfo
Paquets disponibles
system-config-lvm.noarch          1.1.12-17.el6_7.1              public_ol6_latest

Dans mon cas il n’est pas installé, je le fait :

sudo yum list system-config-lvm

J’initialise la partition qui vient d’être créée. Exécuter :

 sudo fdisk /dev/sda

Puis demander la liste des partitions, en entrant la commande p :

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
 switch off the mode (command 'c') and change display units to
 sectors (command 'u').
Commande (m pour l'aide): p

Résultat :

Disque /dev/sda: 42.9 Go, 42949672960 octets
255 têtes, 63 secteurs/piste, 5221 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00033dae

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1   *           1          64      512000   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sda2              64        1567    12069888   8e  Linux LVM

Commande (m pour l'aide):

fdisk m’annonce que mon disque fait 42,9 Go. Je note qu’il fait 5221 cylindre, or la partition 1 se termine au cylindre 1567. Il y a donc un espace disponible du cylindre 1567 au cylindre 5221, soit 3654 cylindres. En multipliant ce nombre de cylindres par le nombre de têtes par le nombre de secteurs par 512 octets/secteur ca me donne :
3654 * 512 * 63 * 255 = 30055173120 octets soit 28 Go de disponibles. C’est bien ça ! C’est l’espace ajouté par VirtualBox.
Je commence par créer une partition pour accéder à ce nouvel espace, commande n :

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1   *        2048     1026047      512000   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sda2         1026048    25165823    12069888   8e  Linux LVM

Commande (m pour l'aide): n

Partition primaire , commande p :

Commande d'action
   e   étendue
   p   partition primaire (1-4)
p

Numéro de partition, la 1 et la 2 existent, je crée donc la 3 :

Numéro de partition (1-4): 3

Premier cylindre, je laisse la valeur par défaut qui est le premier libre, je valide, idem pour le dernier cylindre :

Premier cylindre (1567-5221, par défaut 1567):
Utilisation de la valeur par défaut 1567
Dernier cylindre, +cylindres or +taille{K,M,G} (1567-5221, par défaut 5221):
Utilisation de la valeur par défaut 5221

Je vérifie ma liste de partitions, commande p :

Commande (m pour l'aide): p

Disque /dev/sda: 42.9 Go, 42949672960 octets
255 têtes, 63 secteurs/piste, 5221 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00033dae

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1   *           1          64      512000   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sda2              64        1567    12069888   8e  Linux LVM
/dev/sda3            1567        5221    29354770+  83  Linux

J’ai désormais une troisième partition de disponible. J’enregistre mes modifications et je quitte,  commande w :

Commande (m pour l'aide): w
La table de partitions a été altérée!

Appel de ioctl() pour relire la table de partitions.

ATTENTION : la table de partitions n'a pas pu être relue : erreur 16 : Périphérique ou ressource occupé.
Le noyau continue à utiliser l'ancienne table. La nouvelle sera utilisée
lors du prochain démarrage ou après avoir exécuté partprobe(8) ou kpartx(8).

Pour être certain de ne pas avoir de soucis pour la suite, je reboot la machine pour partir sur un environnement sain, car la table des partitions vient d’être modifiée. Ensuite j’ouvre de nouveau une console texte.

On exécute l’outil de gestion des disque logiques LVM :

sudo system-config-lvm

Aller dans le menu ‘Entités non initialisées » :

vbox-resizedisk17La partition 3, que nous venons de créer y est listée. Cliquer dessus, puis sur le bouton « Initialiser » :

vbox-resizedisk18Confirmer l’opération en cliquant sur ‘Oui’ :

vbox-resizedisk19Le disque se retrouve automatiquement dans la zone « Volumes non alloués » :

vbox-resizedisk20Je clique sur le bouton ‘Ajouter au groupe de volumes existant » :

vbox-resizedisk21Je sélectionne le groupe dynamique, dans mon cas je n’en ai qu’un, puis cliquer sur ‘Ajouter’ :

vbox-resizedisk22Automatiquement, mon  groupe de volume s’affiche, avec la parie racine du système (lv_root), la partie swap; lv_swap, et une partie disponible qui est l’espace qu’on vient d’ajouter au volume group.

Je clique maintenant sur la partie de droite sur le nom du volume groupe logique à augmenter, lv_root pour moi, puis sur le bouton ‘Editer les  propriétés’ :

vbox-resizedisk24Au centre de l’écran de propriété je dispose d’un curseur pour ajuster la taille de mon volume logique, ou si on souhaite attribuer tout l’espace disponible, le bouton ‘Utiliser l’espace restant’. Je clique sur ce bouton, puis sur ‘Valider’ :vbox-resizedisk25On quitte le gestionnaire de groupe logique. L’opération est terminée. Pour vérifier je fait dans une console la commande df -h :

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       37G  8,9G   27G  26% /
tmpfs                 498M  232K  498M   1% /dev/shm
/dev/sda1             477M  134M  314M  30% /boot

Ma partition root est désormais de 27 Go, contre 9,3 Go avant l’opération.

Posts relatifs
  1. Bonjour,

    Personnellement je ne démonte que rarement l’ancien disque pour monter le nouveau.
    Je supprime en général carrément la VM et j’en recréé une nouvelle basée sur le nouveau disque.

  2. Bonjour, ton tuto m’interesse beaucoup. En fait depuis mon tuto sur http://www.alphorm.com/tutoriel/formation-en-ligne-virtualbox. Et la c’est c’est quelque choses de nouveau pour moi. Je vais en faire l’experience.

  3. Bonjour,
    l’exemple est pour l’OS virtuel Linux configuré en LVM,
    en non-LVM cela m’a l’air moins « facile » surtout quand la partition racine à agrandir est suivi d’une autre, la swap en l’occurrence (configuration par défaut faite par VB).
    Périphérique Amorçage Début Fin Blocs Id. Système
    /dev/sda1 * 2048 20971519 10484736 83 Linux
    /dev/sda2 20973566 25163775 2095105 5 Étendue
    /dev/sda5 20973568 25163775 2095104 82 partition d’échange Linux / Solaris

    Autrement, pour augmenter la taille j’utilise l’option « modifymedium » à la place de « modifyhd »:
    VBoxManage modifymedium –resize 15360 « kubuntu 14.04 LTS.vdi »
    0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%

Laisser un commentaire


NOTE - Vous pouvez utiliser les éléments et attributs HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">