Si vous virtualisez des machines virtuelles grâce à KVM sous Linux, vous serez probablement tentés un jour d’effectuer une conversion P2V (physical to virtual) ou encore de connecter  un disque dur existant à une machine virtuelle. Dans ces deux cas,il est utile de connecter un disque dur entier à une machine virtuelle en mode bloc, et pas seulement une partition choisie.

Quel est le problème ?

L’idée de cet article est de montrer comment connecter un disque dur entier à une machine virtuelle KVM, et pas seulement une partition de ce disque dur. D’une part, si vous connectez un disque dur existant à votre machine virtuelle, vous pourriez avoir envie de re partitionner le disque. Ensuite, rien ne dit que le disque dur ait une partition, il peut avoir été formaté sans.

Ces différents cas de figure font que l’administrateur pourra voir un intérêt à effectuer cette manœuvre. Sous virt-manager, cela n’est pas tout à fait aussi simple que prévu.

La démarche sous virt-manager

Gestionnaire de stockage

Tout d’abord, ouvrez le gestionnaire de stockage dans le menu Edition>Détails de la connexion, onglet Stockage. Créer un pool de stockage (partie de gauche) de type disk: Périphérique de disque physique. Laissez Chemin de la cible : /dev et indiquez le device voulu dans Chemin de la source (exemple /dev/sdd). Puis cliquez sur terminer.

Cette étape est nécessaire pour avoir le droit de connecter le device à la machine virtuelle (cf. message d’erreur ci-dessous).

Le stockage "/dev/sde" ne peut pas être utilisé : "/dev" n'est pas géré par l'hôte distant.

Message rencontré sans avoir utilisé le gestionnaire de périphériques

Curieusement, le pool ainsi créé porte le nom spécifié, et les volumes de stockage (partie de droite) sont en réalité les partitions du disque dur, mais pas le disque lui-même. Là est le problème.

Ajout d’un disque dur

Ouvrez votre machine virtuelle, cliquez sur Ajouter un matériel, puis Storage, sélectionnez un stockage géré ou un autre stockage existant. Si vous avez une bonne version de virt-manager, vous pourrez spécifier un disque complet (exemple /dev/sdd). Si votre version ne vous le permet pas en raison d’un message d’erreur comme ci-dessous, spécifier une partition du disque comme /dev/sdd1.

There is not enough free space on the storage pool to create the volume. (8192 M requested allocation > 0M available)

Erreur rencontrée lors de l’ajout du disque entier plutôt que la partition

Dans le type de périphérique, sélectionnez Virtio pour bénéficier des meilleures accélérations possibles si votre OS invité le supporte (natif pour Linux, drivers pour Windows). Cf. copie d’écran ci-dessous.

Ajout d'un disque dur avec virtio

Ajout d’un disque dur avec virtio

Si vous avez été obligé malgré vous d’indiquer une partition plutôt sur le disque entier, cela peut se modifier en ligne de commande. Vous pouvez taper en tant que root, dans la ligne de commande virsh edit ma-machine-virtuelle . Cela va ouvrir votre éditeur par défaut et vous pourrez faire la modification (comme ci-dessous).

Edition device disk sur la machine virtuelle

Édition du disque dur sur la machine virtuelle

Une fois démarrée, on peut enfin voir et modifier la table des partitions du disque dur entier depuis la machine virtuelle.

Conclusion

Sur notre infrastructure de virtualisation, l’affectation de disques entiers à des machines virtuelles permet d’une part de disposer d’un espace confortable, et d’autre part de compartimenter les performances des pools de stockage. Ainsi une utilisation intensive sur une VM ne viendra pas grever les performances du reste. Cela est appréciable quand on sait que les accès disques constituent le principal goulet d’étranglement des VM à l’heure des processeurs puissants. Autre avantage pratique : un disque à extraire de son tiroir et la VM est déplacée simplement.