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/12 23:16] – Thibault Seguin | wiki:virtualisation_et_emulation:qemu [2025/01/13 11:00] (Version actuelle) – [Composition de de QEMU] Thibault Seguin |
---|
**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 ===== |
**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**. |
Si vous sohaitez créer un **disque virtuelle** au format par défaut ''.qcow2'', voici la **commande** : | Si vous sohaitez créer un **disque virtuelle** au format par défaut ''.qcow2'', voici la **commande** : |
<code user>qemu-img create -f qcow2 image_file.qcow2 4G</code>créée une **image disque** d'une taille de ''4G'', au **format** ''.qcow2'' (vous n'êtes pas obligé de mettre ''.qcow2'' à la fin de l'**image**). Puis pour avoir des **infos** sur l'**image disque** créée, tapez : | <code user>qemu-img create -f qcow2 image_file.qcow2 4G</code>créée une **image disque** d'une taille de ''4G'', au **format** ''.qcow2'' (vous n'êtes pas obligé de mettre ''.qcow2'' à la fin de l'**image**). Puis pour avoir des **infos** sur l'**image disque** créée, tapez : |
<code user>qemu-img create -f qcow2 image_file.qcow2 4G</code>vous affiche les détails de l'**image disque** : | <code user>qemu-img info image_file.qcow2</code>vous affiche les détails de l'**image disque** : |
<file>image: image_file.qcow2 | <file>image: image_file.qcow2 |
file format: qcow2 | file format: qcow2 |
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 ==== |
| |
**QEMU** permet d'**émuler** les **architectures processeur** suivantes : **x86** , **x86-64** (nommé aussi **AMD64**), **MIPS** (**MIPS** ''32 bits'' ou ''64 bits''), **ARMv7** (**ARM** ''32 bits'') , **ARMv8** (**ARM64** aussi appelé **AArch64**), **PowerPC** (**PowerPC** ''32 bits'' ou ''64 bits'') **RISC-V** (**RISC-V** ''32 bits'' ou ''64 bits''), **SPARC** (**SPARC** ''32 bits'' ou ''64 bits''), **ETRAX CRIS**, **MicroBlaze**, **AVR** (**Atmel AVR**), **Xtensa**, **s390x**, **SH-4**(**SuperH**), **OpenRISC**, **M68k** (famille **Motorala 68000**), **Alpha**, **HPPA** (**PA-RISC**), **Z80**, et d'autres. | **QEMU** permet d'**émuler** les **architectures processeur** suivantes : **x86** , **x86-64** (nommé aussi **AMD64**), **MIPS** (**MIPS** ''32 bits'' ou ''64 bits''), **ARMv7** (**ARM** ''32 bits'') , **ARMv8** (**ARM64** aussi appelé **AArch64**), **PowerPC** (**PowerPC** ''32 bits'' ou ''64 bits'') **RISC-V** (**RISC-V** ''32 bits'' ou ''64 bits''), **SPARC** (**SPARC** ''32 bits'' ou ''64 bits''), **ETRAX CRIS**, **MicroBlaze**, **AVR** (**Atmel AVR**), **Xtensa**, **s390x**, **SH-4**(**SuperH**), **OpenRISC**, **M68k** (famille **Motorala 68000**), **Alpha**, **HPPA** (**PA-RISC**), **Z80**, et d'autres. |
| |
| 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 **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]] |