Accès direct disques depuis une machine VirtualBox

Avec la généralisation de la virtualisation, on se rend compte que cette technologie a des limites en ce qui concerne les bases de données surtout en raison de la très grande quantité d’entrée/sortie (I/O) disque de ce genre de produit.
Un de nos clients a même arrêté de créer des machines virtuelles pour les bases de développement car les I/O de ces VM pénalisaient fortement le SAN de leurs baies ESX. Donc, peut-on encore exploiter des bases de données dans des machines virtuelles ? Oui en accédant directement au disque physique, le « raw hard disk access » en Virtual Box.Le principe consiste à créer une petite VM et lui présenter un ou plusieurs disques réel, qui peuvent également être des partitions de disque ou des LUN de SAN. Ici nous utiliserons des PC en Windows 7 comme hôte physiques.

Créer la partition supplémentaire

AVERTISSEMENT: Toute manipulation de partition comporte un risque d’effacement irréparable de données, notez toutefois que les manipulations qui suivent, grâce à l’utilitaire Windows 7 retaille les partitions à chaud avec un risque raisonnable.

  • Se connecter à l’hôte physique avec un compte administrateur
  • Lancer l’utilitaire de « Gestion des disques » accessible depuis « Panneau de Configuration »> »Système et Sécurité »> »Créer et formater des partitions de disque dur »
  • Sélectionner une partition « annexe » type D ou E, ou alors OS (C:) si c’est la seule de disponible
  • Click droit « Réduire le volume » et saisir une valeur entre 20 et 40Gb si possible
  • Notez que l’opération se fait à chaud et prend plusieurs minutes pour 40Gb
  • Votre Gestionnaire de disque va alors afficher un espace de 40Gb non alloué: notre futur /u01 Oracle pour les binaires et les fichiers de base de données
  • Pour créer le volume, faire un click droit sur l’espace non alloué « Nouveau volume simple… »
    • Assistant de création de volume => Suivant
    • Fournir la taille du volume (ou disque)
    • Ne pas attribuer de lettre de lecteur
    • Ne pas formater le volume, Terminer
    • Fermer la Gestion des disques

Créer le disque VirtualBox

Lancer ProgrammesOracleVirtualBoxVBoxManage dans une fenêtre DOS d’abord pour afficher les partitions disponibles:

"C:Program FilesOracleVirtualBoxVBoxManage.exe" internalcommands listpartitions -rawdisk \.PhysicalDrive0
Number  Type   StartCHS       EndCHS      Size (MiB)  Start (Sect)
1       0xde  0   /1  /1   13  /254/63           109           63
2       0x07  14  /5  /56  109 /161/52           750       225280
3       0x07  109 /161/53  1023/254/63        196597      1761280
5       0x06  1023/254/63  1023/254/63         40959    404393984

La partition 5 est celle de 40Gb que nous avons créé ci-dessus, maintenant nous allons créer la référence VirtualBox dans un dossier à part, si possible en évitant les espaces dans les noms de chemins, donc nous créons un dossier c:vmdisks qui contiendra le fichier, ici, rawdisk001.vmdk et son compagnon rawdisk001.vmdk-pt. Ce sont de petits fichiers qui contiennent des information de référence uniquement sur les disques qu’ils représentent. La commande ci-dessous précise qu’il faut utiliser la partition 5 du disque physique 0:

"C:Program FilesOracleVirtualBoxVBoxManage.exe" internalcommands createrawvmdk -filename C:vmdisksrawdisk001.vmdk -rawdisk \.PhysicalDrive0 -partitions 5
 RAW host disk access VMDK file C:vmdisksrawdisk001.vmdk created successfully.

Ouvrir le fichier C:vmdisksrawdisk001.vmdk avec un éditeur de texte et supprimer les lignes ‘RW’ contenant la valeur ‘ZERO’
Le ‘disque’ est maintenant prêt à être exploité.

Créer la machine virtuelle

[sociallocker id= »32297″]
Lançons VirtualBox avec le rôle administrateur, et dans les paramètres positionnons le dossier par défaut des machines dans un nouveau dossier C:vm. Notez que cet espace contiendra l’équivalent des disques ‘systèmes’ de no VM.
Créons une machine virtuelle, ici ça sera:

  • ETVBDA01 en Linux – Oracle 64bits
  • 3Gb RAM
  • Disque d’amorçage et création d’un nouveau disque dur (notre disque ‘système’)
  • Laissons le type de disque par défaut en .vdi et dynamiquement alloué
  • Taille de 14Gb pour contenir une swap de 6Gb, un / de 5Gb et un /home de 3Gb
  • Créer (2 fois..)

Ajouter notre disque direct

  • Sélectionner la VM dans VirtualBox
  • Click droit « Configuration »
  • Allez dans « Stockage »> »Contrôleur SATA » et cliquez sur l’icône des 3 disques avec un ‘+’
  • Choisissez un disque existant: le rawdisk001.vmdk
  • Et le disque est visible dans la configuration de la VM
  • Dans le « Contrôleur IDE » ajouter l’image ISO qui contient le système d’exploitation à installer, ici ça sera une OEL5.6 64bits
  • Profitez en pour passer le cpu à 2 coeurs, supprimer la carte son et la disquette

Installer le système d’exploitation

  • Démarrer la machine, la partie intéressante sera lors du partitionnement
  • Lors de l’avertissement « Reinitialize all », le partitionnement se fait plusieurs écran plus tard en OEL6
  • Créer un partitionnement personnalisé
  • Dans sda, créer les partitions /, /home et swap comme décrit plus haut en ext3
  • Dans sdb, créer une partition montée sur /u01 aussi en ext3

Pour la comparaison, nous utiliserons une machine virtuelle VMware exécutée avec VMwarePlayer normalement utilisée pour les formation DBA aux caractéristiques comparable, mais où le stockage sera géré par ASM virtualisé dans des bloc devices de la VM.

Installer les produits Oracle

  • Poser les sources du moteur 11gR2 dans /u01/sources/
  • Installer le logiciel de la base de données
    • Temps nécessaire ~10′, comparable avec la machine VMware
  • Création d’une base avec dbca, l’on voit la différence se creuser avec une opération lourde en E/S:
    • 13’45 » pour VirtualBox en accès direct et
    • 14’15 » pour VMware en classique
    • 4’30 » sur un serveur OEL6, mais là avec des disques SSD, c’est de la triche !

     

    Conclusions

    • L’on voit clairement que les performances en accès direct disque sont meilleures, mais il serait plus honnête de tester avec une VM en stockage système de fichier plutôt qu’ASM
    • En utilisant cette technique on déporte les entrées/sorties des bases vers des disques indépendant du SAN de la ferme de serveurs physique
    • Dans sa version actuelle, VirtualBox ne gère qu’un seul disque en accès direct à la fois, j’ai tenté en présentant 4 partitions (volumes) différents, que ce soit en SAS ou SATA, la VM ne démarre plus si le nombre de disques présenté est supérieur à 1
    • Reste plus qu’à tester avec des LUN de SAN à condition que les drivers de vos baies soient compatibles avec les machines virtuelles

[/sociallocker]