{{tag>portail logiciels hyperviseur}}
----
====== Virtualisation de systèmes d'exploitation======
La virtualisation consiste à faire fonctionner un ou plusieurs systèmes d'exploitation (ou applications complexes) comme un simple logiciel, sur un (ou plusieurs) système d’exploitation fonctionnant sur ordinateur (ou serveur), au lieu de ne pouvoir en installer qu'un seul par machine. Ces ordinateurs virtuels sont appelés //Virtual Environment// ou VE.
La **virtualisation de systèmes d'exploitation** est une technique consistant à faire fonctionner en même temps, sur un seul ordinateur, plusieurs systèmes d'exploitation comme s'ils fonctionnaient sur des ordinateurs distincts, on parle alors de //Virtual Machines// (VM).
La virtualisation de systèmes d'exploitation a plusieurs intérêts :
* Utiliser un autre système d'exploitation sans redémarrer son ordinateur, afin d'utiliser des programmes ne fonctionnant pas nativement dans Ubuntu ;
* Exploiter des périphériques ne fonctionnant pas dans Ubuntu mais fonctionnant dans d'autres systèmes d'exploitation ;
* Tester des systèmes d'exploitation en cours de développement sans compromettre un environnement quotidien stable ;
* Tester des logiciels dans des environnements contrôlés, isolés et sécurisés ;
* Transporter ses systèmes d'exploitation d'un ordinateur à l'autre, une machine virtuelle fonctionnant sur n'importe quel ordinateur disposant d'un hyperviseur compatible.
Les particuliers et les PME/PMI seront généralement plus intéressés par la perspective de faire fonctionner deux systèmes d'exploitation différents en même temps, afin d'exécuter des logiciels qui sont compatibles avec l'un mais pas avec l'autre. Les grandes entreprises, elles, ont de plus en plus recours à la virtualisation afin de gagner de la place dans les salles de serveurs, faciliter les installations et les redémarrages après incidents, et développer et sécuriser les réseaux d'entreprises.
===== Principe général et terminologie =====
Plusieurs types de virtualisation existent, mais tous fonctionnent selon un même principe :
- Un système d'exploitation principal (appelé //système d'exploitation hôte//) est installé dans l'ordinateur et sert de système d'accueil à d'autres systèmes d'exploitation ;
- Dans le système d'exploitation hôte, un logiciel de virtualisation (appelé //hyperviseur//) est installé. Celui-ci crée des environnements clos, isolés, avec des ressources bien précises : ces environnements clos sont appelées des //machines virtuelles// ;
- D'autres systèmes d'exploitation (appelés //systèmes d'exploitation invités//) peuvent alors être installés dans des machines virtuelles. Leur instance est totalement isolée du système hôte et des autres systèmes invités.
En bref, la virtualisation est une méthode faisant fonctionner un ou des systèmes d'exploitation invités dans des machines virtuelles, au-dessus d'un système d'exploitation hôte.
===== Virtualisation complète : un choix privilégié chez le particulier =====
{{ https://upload.wikimedia.org/wikipedia/commons/5/5c/Diagramme_ArchiEmulateur.png?250|Diagramme de la virtualisation complète (Source : Wikipédia}}
La virtualisation dite //complète// permet de faire fonctionner n'importe quel système d'exploitation en tant qu'invité dans une machine virtuelle. Pour l'utilisateur final, ce type de virtualisation est le plus simple à mettre en place et est le plus pratique.
* **Principe :** L'hyperviseur((On appelle ce type d'hyperviseurs un "hyperviseur de type 2")) crée un environnement virtuel complet simulant littéralement un nouvel ordinateur complet, avec du "faux matériel". À quelques rares exceptions, le système d'exploitation invité (installé dans la machine virtuelle) ne communique qu'avec ce faux matériel simulé, rendant étanche l'environnement virtualisé.
* **Limitations :** Ce type de virtualisation ne permet de virtualiser que des systèmes d'exploitation prévus pour la même architecture matérielle que le processeur physique de l'ordinateur hôte. Par exemple, un ordinateur équipé d'un processeur Intel x86 sera incapable de virtualiser un système d'exploitation prévu pour fonctionner dans une architecture PowerPC.
**Quelques hyperviseurs de virtualisation complète :**
* [[:VirtualBox]]
* [[:gnome-boxes|GNOME Machines]]
* [[:vmware|Logiciels de virtualisation de VMWare]] : [[:VMWare Player]], [[:VMWare Workstation]]
* [[:parallels_desktop|Parallels Desktop 4 for Windows & Linux]]
* [[:KVM]]
==== Virtualisation de systèmes d'exploitation 64 bits ====
{{ https://upload.wikimedia.org/wikipedia/commons/a/af/VirtualBox2.png?350|Un invité Fedora 12 fonctionnant au-dessus d'un système hôte Ubuntu 8.10 grâce à l'hyperviseur VirtualBox}}
Pour être en mesure de virtualiser un système d'exploitation 64 bits, le microprocesseur de votre ordinateur hôte doit être doté d'une technologie appelée //virtualisation assistée matériellement// (ou //accélération matérielle//). Cette technologie est identifiée //AMD-V// chez AMD et //Intel VT-x// chez Intel. Généralement incluse dans les processeurs récents, la virtualisation matérielle doit toutefois bien souvent être activée dans le BIOS/UEFI de l'ordinateur et paramétrée convenablement dans les paramètres de la machine virtuelle. Tous les processeurs ne sont pas capables de virtualisation matérielle. //[[wp>Virtualization_Technology#AMD_virtualization_.28AMD-V.29|Liste des processeurs gérant la virtualisation matérielle]]//
Si votre microprocesseur est listé dans la liste précédente et vous souhaitez savoir si la virtualisation assistée matériellement est activée dans les propriétés de votre BIOS/UEFI, ou si votre microprocesseur n'y est pas listé et vous souhaitez savoir si cette technologie y est présente, exécutez la commande suivante dans un [[terminal]] : egrep '(vmx|svm)' /proc/cpuinfo
Cette commande vous retourne les fonctionnalités de votre microprocesseur et met en évidence les fonctionnalités de virtualisation assistée matériellement. Lorsque les termes **svm** ou **vmx** sont mis en évidence dans le retour de la commande, votre microprocesseur dispose de la fonctionnalité de virtualisation assistée matériellement; il peut donc virtualiser des systèmes d'exploitation 64 bits (disposer de la fonction indique seulement que la virtualisation 64bits est possible, cela ne veut pas nécessairement dire que le paramètre de virtualisation du BIOS soit bien positionné..). Dans le cas contraire, vous ne pouvez virtualiser que des systèmes d'exploitation 32 bits.
===== Aller plus loin... =====
La virtualisation complète n'est qu'un seul type de virtualisation. Celui-ci est généralement plutôt adapté pour une utilisation par un particulier ou par une PME/PMI, afin de faire fonctionner un environnement de travail pour y faire fonctionner certains logiciels particuliers non gérés par le système d'exploitation hôte. Mais de nombreux autres types de virtualisation existent, bien plus efficaces pour accomplir des tâches précises. Ci-dessous sont décrits très succinctement certains autres types de virtualisation, avec quelques exemples d'hyperviseurs déployant ceux-ci.
==== Émulation ====
L'hyperviseur crée un ordinateur virtuel simulé complet. La différence entre l'émulation et la virtualisation complète est la simulation d'un microprocesseur : en virtualisation complète, le processeur simulé par la machine virtuelle est nécessairement identique à celui de l'ordinateur hôte. En émulation, celui-ci peut être de type différent. Ceci permet d'émuler des architectures matérielles différentes (ordinateurs, consoles de jeux, bornes d'arcade...) au-dessus d'un système hôte. Les performances en émulation sont toutefois médiocres. (**[[wpfr>Émulation|Plus d'informations]]**)
* [[:QEmu]] (sans accélérateur KQemu)
* Bochs
* [[:PCem]]
==== Paravirtualisation ====
Dans ce type de virtualisation, l'hyperviseur((On appelle ce type d'hyperviseurs un "hyperviseur de type 1")) et le système d'exploitation invité coopèrent. En virtualisation complète, lorsque l'invité a besoin de communiquer avec du matériel, celui-ci n'a accès qu'à du faux matériel présenté par l'hyperviseur ; en paravirtualisation, l'hyperviseur capture les appels système de l'invité et les transmet au matériel. En somme, l'invité exploite directement le matériel de l'ordinateur hôte. La paravirtualisation offre des performances optimales, mais nécessite un système d'exploitation modifié, conscient qu'il fonctionne dans un environnement virtualisé. (**[[wpfr>Paravirtualisation|Plus d'informations]]**)
* [[:Xen]] //(moniteurs de contrôle : [[:virt-manager]], [[:enomalism]])//
* [[:kvm]] et dérivés tel que [[wpfr>Proxmox|ProxMox]]
* vmware esxi
* xVM
==== Environnement Virtuel (Operating system-level virtualization) ====
Chaque environnement exécuté possède son propre espace mémoire, afin d'être isolé des autres, les autres ressources systèmes sont partagées (pilotes, noyau...). Les instructions ne sont pas interceptées, et l'environnement exécuté doit impérativement être compatible avec celui du système hôte. (On ne peut pas, par exemple, exécuter Microsoft(r) Windows(r) dans un environnement virtuel au-dessus d'un hôte de type Linux). Ce type de virtualisation permet d'exécuter plusieurs fois le même environnement dans des zones mémoires séparées, mais les ressources partagées empêchent d'obtenir une isolation sûre entre les environnements invités. (**[[wp>Operating_system-level_virtualization|Plus d'informations]]**)
* [[Docker]] ([[http://www.docker.io/]]) tire parti de ces différentes API d'isolation et lui ajoute des scripts de déploiement.
* [[:LXD|LXD]], interface de gestion de containers LXC, du projet [[https://linuxcontainers.org/fr/|Linux Containers]],
* [[:vserver|Linux-VServer]]
* libcontainer
* OpenVZ
* [[:chroot]]
===== Ressources =====
* [[http://www.ubuntu.com/products/whatisubuntu/serveredition/jeos| Environnement Ubuntu dédié à la virtualisation]]
* [[https://forum.ubuntu-fr.org/viewtopic.php?id=376862| [HowTo] Configuration réseau de VirtualBox]]
* [[http://www.linuxfr.org/~flipflip/27860.html|La virtualisation en production]]
* [[http://virt-tools.org/|virt tools]] (en) Portail dédié à la virtualisation avec des outils libres
* [[http://blog.octo.com/presentation-des-hyperviseurs-xen-et-kvm/|Principes de fonctionnement de Xen et de KVM]]
===== Pages en rapport =====
{{topic>virtualisation}}
----
//Contributeurs : ?//