wiki:virtualisation_et_emulation:qemu

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
wiki:virtualisation_et_emulation:qemu [2025/01/13 00:01] – [QEMU en tant qu'émulateur] Thibault Seguinwiki:virtualisation_et_emulation:qemu [2025/01/13 11:00] (Version actuelle) – [Composition de de QEMU] Thibault Seguin
Ligne 17: Ligne 17:
 **QEMU** n'est pas seulement un **émulateur** mais permet d'agir comme un **logiciel** de **virtualisation** (**back-end**), par exemple avec l'**hyperviseur** par défaut de **Linux** nommé **KVM** (**//Kernel-based Virtual Machine//**) mais il peut aussi servir de **back-end** pour les **hyperviseurs** comme **Xen**, **HVF** d'**Apple**, **WHPX** de **Windows** ou **NVMM** de **NetBSD**. Niveau **virtualisation**, **QEMU** peut **virtualiser** des **environnements invités** (**machines virtuelles**) **x86**, **ARM**, **PowerPC**, **MIPS** (''32 bits'' seulement), **Sparc**, **ColdFire** (**Motorola M68K**), **S3903**,... Par contre, pour permettre de **virtualiser** un **OS** invité, il faut qu'il soit de la même **architecture processeur** que l'**OS** de l'**ordinateur hôte**, par exemple pour virtualiser un **OS** pour **processeur** de type **AMD64**, il faut que votre **OS Hôte** soit aussi un **OS** de type **AMD64**.  **QEMU** n'est pas seulement un **émulateur** mais permet d'agir comme un **logiciel** de **virtualisation** (**back-end**), par exemple avec l'**hyperviseur** par défaut de **Linux** nommé **KVM** (**//Kernel-based Virtual Machine//**) mais il peut aussi servir de **back-end** pour les **hyperviseurs** comme **Xen**, **HVF** d'**Apple**, **WHPX** de **Windows** ou **NVMM** de **NetBSD**. Niveau **virtualisation**, **QEMU** peut **virtualiser** des **environnements invités** (**machines virtuelles**) **x86**, **ARM**, **PowerPC**, **MIPS** (''32 bits'' seulement), **Sparc**, **ColdFire** (**Motorola M68K**), **S3903**,... Par contre, pour permettre de **virtualiser** un **OS** invité, il faut qu'il soit de la même **architecture processeur** que l'**OS** de l'**ordinateur hôte**, par exemple pour virtualiser un **OS** pour **processeur** de type **AMD64**, il faut que votre **OS Hôte** soit aussi un **OS** de type **AMD64**. 
  
-À l'origine **QEMU** a été **développé** par **Fabrice Bellard** en 2003, puis en 2006, la **fondation QEMU** a été créée pour pousuivre le **développement** avec de nombreux **contributeurs** externes. C'est dans les années 2008 que **QEMU** a été adopté par l'**hyperviseur** de **Linux**, **KVM**. La dernière version **stable** de **QEMU** est **QEMU 9.2.0**, sortie le 10 décembre 2024.+À l'origine **QEMU** a été **développé** par **Fabrice Bellard** en 2003, puis en 2006, la **fondation QEMU** a été créée pour pousuivre le **développement** avec de nombreux **contributeurs** externes. C'est dans les années 2008 que **QEMU** a été adopté par l'**hyperviseur** de **Linux**, **KVM**. La dernière version **stable** de **QEMU** est **QEMU 9.2.0**, sortie le 10 décembre 2024, **QEMU** est sous **licence** **GNU GPLv2**
  
 ===== Caractéristiques de QEMU ===== ===== Caractéristiques de QEMU =====
Ligne 23: Ligne 23:
 **QEMU** est un **logiciel** de type **émulateur** et **virtualiseur** associé à un **hyperviseur** comme **KVM**, de base, en **ligne de commande**. **QEMU** intègre différents **composants** en **mode texte** qui permettent une **gestion** complète de l'**émulateur**, ses **composants** sont les suivants : **QEMU** est un **logiciel** de type **émulateur** et **virtualiseur** associé à un **hyperviseur** comme **KVM**, de base, en **ligne de commande**. **QEMU** intègre différents **composants** en **mode texte** qui permettent une **gestion** complète de l'**émulateur**, ses **composants** sont les suivants :
   * **qemu-utils** qui se compose de :   * **qemu-utils** qui se compose de :
-    * **qemu-img** qui permet de **manipuler** les **fichier** de types **images** de **média de stockage**. Cet **utilitaire** permet en autres de ''créer'', ''modifier'', ''convertir'', faire des ''snapshots'' des **images** de **disque**. Le **format** par défaut des **images** de **disque** de **QEMU** est ''.qcow2'' mais il est également possible de **manipuler** les **images** de **disque** ''.vdi'' de **VirtualBox**, ''.vmdk'' de **VMWare**, ''.vhd'' de l'**hyperviseur** nommé **Hyper-V** de **Microsoft** mais aussi de simple **image** ''.img''.+    * **qemu-img** qui permet de **manipuler** les **fichier** de types **images** de **média de stockage**. Cet **utilitaire** permet en autres de ''créer'', ''modifier'', ''convertir'', ''redimensionner'', faire des ''snapshots'' des **images** de **disque**. Le **format** par défaut des **images** de **disque** de **QEMU** est ''.qcow2'' mais il est également possible de **manipuler** les **images** de **disque** ''.vdi'' de **VirtualBox**, ''.vmdk'' de **VMWare**, ''.vhd'' de l'**hyperviseur** nommé **Hyper-V** de **Microsoft** mais aussi de simple **image** ''.img''.
     * **qemu-io** qui permet de **tester** et de **déboguer** les ''opérations'' d'**entrée**/**sortie** (**I/O**) des **systèmes** ''émulés''.     * **qemu-io** qui permet de **tester** et de **déboguer** les ''opérations'' d'**entrée**/**sortie** (**I/O**) des **systèmes** ''émulés''.
     * **qemu-nbd** permet de gérer les **images** de **disque** avec le **protocole** **réseau** nommé **NBD** (**//Network Block device//**). **qemu-nbd** permet en autres de **monter** des **images disques** via la **réseau** **NBD**.     * **qemu-nbd** permet de gérer les **images** de **disque** avec le **protocole** **réseau** nommé **NBD** (**//Network Block device//**). **qemu-nbd** permet en autres de **monter** des **images disques** via la **réseau** **NBD**.
Ligne 52: Ligne 52:
     extended l2: false</file>     extended l2: false</file>
  
-<note>Avec les **images disque** de type ''.qcow2'' vous pouvez, tout comme les ''.vdi'' de **VirtualBox**, avoir une **image disque** de ''32 Go'' qui n'est pas ''fixe'', c'est à dire, qui ne prenne que ''2 Go'' (la taille de l'**OS** après installation) sur le **média de stockage** de votre **ordinateur** et qui ne grossisse qu'au fur et à mesure que vous installez des **logiciels** ou **ajouter** des **fichiers** à votre **image disque**.</note>+<note>Avec les **images disque** de type ''.qcow2'' vous pouvez, tout comme les ''.vdi'' de **VirtualBox**, avoir une **image disque** de ''32 Go'' qui n'est pas ''fixe'', c'est à dire, qui ne prenne que ''2 Go'' (la taille de l'**OS** après installation) sur le **média de stockage** de votre **ordinateur** et qui ne grossisse qu'au fur et à mesure que vous installez des **logiciels** ou ajouter des **fichiers** à votre **image disque**.</note>
  
 ==== QEMU en tant qu'émulateur ==== ==== QEMU en tant qu'émulateur ====
Ligne 60: Ligne 60:
  
 Exemple d'**exécution** de **SunOS 4.1.4** sur **processeur** de type **Sun Sparc** via **ordinateur hôte** avec **OS** sous **processeur** de type **Intel** **x86-64** : Exemple d'**exécution** de **SunOS 4.1.4** sur **processeur** de type **Sun Sparc** via **ordinateur hôte** avec **OS** sous **processeur** de type **Intel** **x86-64** :
-<code user>qemu-system-sparc -monitor tcp::4444,server,nowait -bios ss5.bin -m 32 -nographic -hda SunOS-4.1.4.qcow2 -net nic,id=tap0 -net tap,ifname=tap0,script=no,downscript=no</code>pour décortiquer la **commande**, **qemu-system-sparc** appelle l'**émulateur** de type **SPARC** (**Sun4m**), la **sous-option** ''-monitor'' permet de se **connecter** avec **telnet** via le **port réseau** ''4444'', ''-bios'' permet de spécifier le **bios** pour le **démarrage**, ''-m 32'' alloue ''32 Mo'' de **RAM**, ''-nographic'' affiche dirextement d'**OS** dans le **terminal** (ou **console**), ''-hda SunOS-4.1.4.qcow2'' spécifie l'**image disque** sur laquelle est installé l'**OS**, ''-net nic,id=tap0 -net tap,ifname=tap0,script=no,downscript=no'' permet de choisir le mode de connexion (en l'occurence avec l'**interface réseau** ''tap0'' qui est une **interface** de type **bridge** nommé aussi **pont réseau**).+<code user>qemu-system-sparc -monitor tcp::4444,server,nowait -bios ss5.bin -m 32 -nographic -hda SunOS-4.1.4.qcow2 -net nic,id=tap0 -net tap,ifname=tap0,script=no,downscript=no</code>pour décortiquer la **commande**, **qemu-system-sparc** appelle l'**émulateur** de type **SPARC** (**Sun4m**), la **option** de **commande** ''-monitor'' permet de se **connecter** avec **telnet** via le **port réseau** ''4444'', ''-bios'' permet de spécifier le **bios** pour le **démarrage**, ''-m 32'' alloue ''32 Mo'' de **RAM**, ''-nographic'' affiche dirextement d'**OS** dans le **terminal** (ou **console**), ''-hda SunOS-4.1.4.qcow2'' spécifie l'**image disque** sur laquelle est installé l'**OS**, ''-net nic,id=tap0 -net tap,ifname=tap0,script=no,downscript=no'' permet de choisir le mode de connexion (en l'occurence avec l'**interface réseau** ''tap0'' qui est une **interface** de type **bridge** nommé aussi **pont réseau**).
  
 ==== QEMU pour la virtualisation sous KVM ==== ==== QEMU pour la virtualisation sous KVM ====
 **QEMU** a aussi le rôle de **virtualiseur** lorsque l'on l'associe avec l'**hyperviseur** nommé **KVM** (d'autres **hyperviseurs** sont compatibles avec **QEMU**) qui est directement intégré au **noyau Linux**, donc vous n'avez rien à faire sous **Linux**, pour utiliser le mode de **virtualisation** de **QEMU**, le seul prérequis est que l'**architecture processeur** ''simulée'' soit la même que celui de l'**ordinateur hôte**. Ainsi **QEMU** utilise directement le **CPU**, **RAM**, **GPU**,...,donc les **ressrouces** de l'**ordinateur hôte** ce qui n'est plus une **émulation** du **matériels** mais une **virtualisation** et de se fait les ''performances'' sont quasiment ''natives''.\\ **QEMU** a aussi le rôle de **virtualiseur** lorsque l'on l'associe avec l'**hyperviseur** nommé **KVM** (d'autres **hyperviseurs** sont compatibles avec **QEMU**) qui est directement intégré au **noyau Linux**, donc vous n'avez rien à faire sous **Linux**, pour utiliser le mode de **virtualisation** de **QEMU**, le seul prérequis est que l'**architecture processeur** ''simulée'' soit la même que celui de l'**ordinateur hôte**. Ainsi **QEMU** utilise directement le **CPU**, **RAM**, **GPU**,...,donc les **ressrouces** de l'**ordinateur hôte** ce qui n'est plus une **émulation** du **matériels** mais une **virtualisation** et de se fait les ''performances'' sont quasiment ''natives''.\\
 Nous allons prendre l'exemple d'un **hôte linux** avec **processeur** de type **Intel x86_64** qui **virtualise** un **OS** pour **Intel x86_64** ou même un **Intel x86** : Nous allons prendre l'exemple d'un **hôte linux** avec **processeur** de type **Intel x86_64** qui **virtualise** un **OS** pour **Intel x86_64** ou même un **Intel x86** :
 +<code user>qemu-system-x86_64 -m 128 -cpu 486 -hda openserver-5.0.7-x86_2003_2G.qcow2 -cdrom SCO_OpenServer_5.0.7.iso -net nic,model=pcnet,id=br0 -net user -rtc base=localtime -boot c -k fr &</code>l'**option** ''-boot c'' permet de **booter** l'**image disque** de l'**OS** (''-boot d'' permettrait de **booter** sur le **CD**), ''-cpu 486'' spécifie le **processeur** **Intel 80486**, vous pouvez également utilisez cette **commande**:  
 +<code user>kvm -m 128 -cpu 486 -hda openserver-5.0.7-x86_2003_2G.qcow2 -cdrom SCO_OpenServer_5.0.7.iso -net nic,model=pcnet,id=br0 -net user -rtc base=localtime -boot c -k fr &</code> qui est exactement la même **commande** car **kvm** n'est qu'un **lien symbolique** vers **qemu-system-x86_64** sur les **hôte** de type **Intel** ''64 bits''.
  
 +==== Les interfaces graphiques sous QEMU ====
 +**QEMU** peut également être utiliser via des **interfaces graphiques** tel que :
 +  * **Virt-Manager** qui permet d'utiliser **QEMU** comme **émulateur** mais surtout comme **hyperviseur**, il fonctionne également avec les **conteneurs** nommé **LXC** mais aussi les **hyperviseurs** comme **Xen**, **Bhyve**,...
 +  * **AQEMU** qui utilise l'**émulateur** **QEMU** et **hyperviseur** **KVM**.
 +  * et encore d'autres.
  
 +<note important>Sachez que **QEMU** a servi de base et d'inspiration à **VirtualBox**, **Xen-HVM**, **KVM**, **Win4Lin Pro Desktop**, **SerialICE**, **WinUAE**, **Unicorn**, **Limbo x86 PC Emulator** et d'autres **projet** d'**émulation** ou **virtualisation**.</note>
  
 ===== Documentation Complémentaire sur QEMU ===== ===== Documentation Complémentaire sur QEMU =====
 Vous trouverez une large **documentation** sur l'**émulateur**, dans les [[wiki:virtualisation_et_emulation:qemu:tutoriels sur QEMU]] Vous trouverez une large **documentation** sur l'**émulateur**, dans les [[wiki:virtualisation_et_emulation:qemu:tutoriels sur QEMU]]
  • wiki/virtualisation_et_emulation/qemu.1736726485.txt.gz
  • Dernière modification : 2025/01/13 00:01
  • de Thibault Seguin