Emulateur QEMU KVM

 

QEMU/KVM

1 – Description

2 - Installation

2.1 - Qemu

2.2 - Kvm

3 - Disques virtuels

3.1 - Création

3.2 - Réduction de taille fichier qcwo2

3.3 - Conversion entre formats

4 - Lancement d'une émulation

4.1 - Commande de base qemu-system

4.2 - Options d'émulation

4.3 - Périphériques de stockage

4.4 - Options d'amorçage

4.5 - SSH

5 - Exemples de commande

5.1 - Test de l'installateur debian

5.2 - Installation de debian dans un disque virtuel

5.3 - Utilisation de l'image debian

5.4 - Démarrer à partir d'une image ISO en utilisant qemu

6 - Utilisation

6.1 - Fenêtre QEMU

6.2 - Fenêtre d'émulation

6.3 - Console qemu

7 – Amorçage

7.1 - Amorçage Bios/MBR

7.2 - Amorçage UEFI

1 - Introduction

2 - Installation

3 - Amorçage

4 - Test

4.1 - Test d'amorçage UEFI et de mémorisation des variables EFI

4.2 - Test de l'entrée par défaut /boot/bootx64.efi

5 - Menu uefi de la plateforme

5.1 - Accès au menu

5.2 - Modification de l'ordre d'amorçage

5.3 - Lancement d'un OS par sélection du fichier

6 - Exemples d'utilisation

6.1 - Test d'une distribution debian live

6.2 - Installation d'un système debian

8 - Partage de dossier entre l'hôte et l'invité

 

1Description

2 - Installation

2.1 - Qemu

$ sudo aptitude install qemu

$ qemu-system-

qemu-system-aarch64       qemu-system-mips64        qemu-system-s390x

qemu-system-alpha         qemu-system-mips64el      qemu-system-sh4

qemu-system-arm           qemu-system-mipsel        qemu-system-sh4eb

......                

$ qemu-system-x86_64 --version

QEMU emulator version 3.1.0 (Debian 1:3.1+dfsg-5)

Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers

2.2 - Kvm

$ grep --color vmx /proc/cpuinfo

$ grep --color svm /proc/cpuinfo

$ lsmod |grep kvm

kvm_intel             200704  3

kvm                   598016  1 kvm_intel

irqbypass              16384  1 kvm

3 - Disques virtuels

3.1 - Création

$ qemu-img create debian.img 20G

équivalent à

$ dd if=/dev/zero of=debian.img bs=1M count=20000 # Equivalent à

$ fallocate -l 20G debian.img

$ qemu-img create -f qcow2 debian.qcow2 20G

La taille du fichier "vide" est très faible vis à vis de sa taille maximale

$ du -h debian.qcow2

196K   debian.qcow2

3.2 - Réduction de taille fichier qcwo2

$ du -h --apparent-size demo.qcow2

5,6G    demo.qcow2

$ qemu-img convert -f qcow2 -O qcow2 -c demo.qcow2 demo3.qcow2 -p

$ du -h --apparent-size demo3.qcow2

2,0G    demo3.qcow2

Signification des options :

-f format de départ

-O format de sortie

-c compression

-p indication de la compression

3.3 - Conversion entre formats

$ qemu-img convert -f qcow2 -O raw demo.qcow2 demo.raw -p

$ du -h --apparent-size demo.raw

20G     demo.raw

$ qemu-img convert -f raw -O qcow2 demo.raw demo2.qcow2 -p

$ du -h --apparent-size demo2.qcow2

5,3G    demo2.qcow2

$ qemu-img convert -f raw -O qcow2 -c demo.raw demo3.qcow2 -p

$ du -h --apparent-size demo3.qcow2

2,0G    demo3.qcow2

4 - Lancement d'une émulation

Le lancement d'une émulation s'effectue au moyen

4.1 - Commande de base qemu-system

$ qemu-system-x86_64

$ sudo qemu-system-x86_64

$ sudo qemu-system-x86_64 -runas <nom_utilisateur>      

4.2 - Options d'émulation

Attention : Les options par défaut correspondent à une configuration minimale et peuvent ne pas convenir, il est donc préférable de les redéfinir

-accel kvm

-m 2048

-smp 4

-vga virtio

-nographic

-net none

4.3 - Périphériques de stockage

-drive file=<nom_du_périphérique>,media=xxxx,format=xxxx,index=xxxx,if=xxxx

Exemples : les noms et extensions des fichiers sont arbitraires

-drive file=/dev/sdb

-drive file=/dev/sr0

-drive media=disk,format=raw,file=file.img

-drive media=disk,format=qcwo2,file=file.qcwo2

-drive media=cdrom,file=file.iso

-drive if=pflash,format=raw,file=var.fd

-drive if=pflash,format=raw,readonly,file=code.fd

4.4 - Options d'amorçage

-boot option1,option2,option3,....

-boot order=c

-boot order=d

-boot order=c,once=d

-boot menu=on

4.5 - SSH

$ sudo aptitude install ssh

$ sudo systemctl start ssh

$ ssh 10.0.2.2

-net nic -net user,hostfwd=tcp::5022-:22

Ces options redirigent le port SSH 22 sur le port 5022 de l'invité. Pour joindre l'invité

$ ssh <nom_utilisateur_invité>@localhost -p 5022

5 - Exemples de commande

$ qemu="qemu-system-x86_64 -accel kvm -m 2048 -smp 4 -vga virtio"

pour raccourcir l'écriture des commandes

5.1 - Test de l'installateur debian

$ $qemu \

-drive media=cdrom,format=raw,file=debian.iso

qemuqemu
 
L'installateur        Debian dans qemuL'installateur Debian dans qemu
 

5.2 - Installation de debian dans un disque virtuel

$ qemu-img create -f qcow2 debian.img 20G

$ $qemu \

-drive media=cdrom,format=raw,file=debian.iso \

-drive media=disk,format=qcwo2,file=debian.img \

-boot order=c,once=d

5.3 - Utilisation de l'image debian

$ $qemu \

-drive media=disk,format=qcwo2,file=debian.img

5.4 - Démarrer à partir d'une image ISO en utilisant qemu

Qemu a deux modes de fonctionnement nommés émulation du système complet et émulation du mode utilisateur. Si vous voulez simuler le système entier et pas seulement le processeur (comme un PC), vous devez utiliser le mode d'émulation du système complet.

Les distributions les plus récentes ont des binaires séparés pour ces deux modes de fonctionnement différents. Par exemple, si vous voulez juste l'émulation du cpu en mode utilisateur pour l'architecture X86-64, vous devez utiliser le binaire qemu-x86_64 et si vous voulez l'émulation du système complet X86-64 bit (comme votre PC), le binaire qemu-system-x86_64 doit être utilisé dans les commandes ci-dessous.

Vous avez une image iso et vous voulez démarrer à partir de celle-ci sans redémarrer le système, utilisez simplement la machine virtuelle qemu comme ci-dessous (-m 512 indique que qemu utilisera 512 Mb de RAM du système) :

 

qemu-system-x86_64 -boot d -cdrom image.iso -m 512

 

Il est également possible d'utiliser votre périphérique cdrom habituel. Si le périphérique est /dev/cdrom vous pouvez démarrer un cd dans le périphérique comme ceci :

 

qemu-system-x86_64 -boot d -cdrom /dev/cdrom -m 512

 

Les exemples ci-dessus n'utilisent pas de disque dur, ils sont donc adaptés aux images de cd en direct.

Si vous voulez installer une distribution sur un fichier image de disque dur, vous devez d'abord créer un fichier image de disque dur :

 

qemu-img create mydisk.img 10G

 

Dans cet exemple, nous avons créé une image de 10 Go. Maintenant nous pouvons utiliser ce fichier comme disque dur dans notre boot qemu :

 

qemu-system-x86_64 -boot d -cdrom image.iso -m 512 -hda mydisk.img

6 - Utilisation

6.1 - Fenêtre QEMU

La fenêtre Qemu comprend une barre de menu, affichée par défaut. La faire apparaître, disparaître avec Ctrl Alt M

6.2 - Fenêtre d'émulation

6.3 - Console qemu

Qemu 2.8.2 monitor - type 'help' for more information

(qemu)

(qemu) info kvm

kvm support: enabled

(qemu) sendkey ctrl-alt-f1

suivi de Enter. Retourner à la fenêtre d'émulation pour vérifier la prise en compte. Effectuer de même pour envoyer le code Alt-f7

7 – Amorçage

7.1 - Amorçage Bios/MBR

On s'intéresse ici à l'amorçage présent par défaut (SeaBios) BIOS / MBR.

-boot menu=on


puis, lorsque l'invite s'affiche, taper Esc

Menu SeabiosMenu Seabios
 

7.2 - Amorçage UEFI

1 - Introduction

2 - Installation

$ sudo aptitude install ovmf

/usr/share/ovmf/OVMF.fd

3 - Amorçage

-bios /usr/share/ovmf/OVMF/OVMF.fd

$ mkdir debian-uefi && cd debian-uefi

$ cp /usr/share/ovmf/OVMF.fd ./

et utiliser l'option

-drive if=pflash,format=raw,file=./OVMF.fd

-vga virtio

-net none

4 - Test

4.1 - Test d'amorçage UEFI et de mémorisation des variables EFI

$ qemu-system-x86_64 -bios -drive if=pflash,format=raw,file=./OVMF.fd -net none

Shell uefi version un        fichierShell uefi version un fichier
 

Shell> bcfg boot dump

Shell> bcfg boot mv 3 2

$ qemu-system-x86_64 -bios ./OVMF.fd -net none

4.2 - Test de l'entrée par défaut /boot/bootx64.efi

Lorsqu'un système à émuler est équipé d'une entrée par défaut dans la partition ESP (cas des installateurs et distributions "live" debian par exemple), son amorçage est automatique.  Pour le vérifier,

$ qemu-system-x86_64 -drive if=pflash,format=raw,file=./OVMF.fd debian.iso

5 - Menu uefi de la plateforme

5.1 - Accès au menu

$ qemu-system-x86_64 -bios -drive if=pflash,format=raw,file=./OVMF.fd -net none

et taper rapidement à plusieurs reprises sur la touche ESC jusqu'à ce que le menu apparaisse

$ qemu-system-x86_64 -drive if=pflash,format=raw,file=./OVMF.fd -boot menu=on

et taper sur la touche ESC pendant l'affichage du logo Tianocore et du message Boot options

Menu          uefi un fichierMenu uefi un fichier
 

5.2 - Modification de l'ordre d'amorçage

$ qemu-system-x86_64 -bios -drive if=pflash,format=raw,file=./OVMF.fd debian.iso -boot menu=on

Boot Maintenance Manager >>

Boot Options >>

Change Boot Order

Si les périphériques réseau ne sont pas utilisés, il est intéressant de les placer en dernier dans la liste, afin que le temps de leur exploration ne soit pas pénalisant pour la  découverte des périphériques de stockage

5.3 - Lancement d'un OS par sélection du fichier

Boot Maintenance Manager >>

Boot From File >>

Sélectionner le volume  dans la liste >> CDROM  >>

Sélectionner la partition >> efi

Sélectionner le répertoire >> <boot>

Sélectionner le fichier >> Grubx64.efi

6 - Exemples d'utilisation

6.1 - Test d'une distribution debian live

$ qemu-system-x86_64 -m 2048 -smp 4 -enable-kvm -cpu host \

-drive file=debian.iso,format=raw,media=cdrom  -boot d \

-bios /usr/share/ovmf/OVMF.fd -vga virtio

Note : L'option -vga virtio a été ajoutée pour prendre en compte des problèmes d'affichage

6.2 - Installation d'un système debian

$ qemu-img create -f qcow2 debian.qcow2 20G

$ qemu-system-x86_64 -m 2048 -smp 4 -enable-kvm -cpu host -vga virtio \

-drive file=debian.iso,format=raw,media=cdrom -boot d \

-drive media=disk,format=qcow2,file=debian.qcow2 \

-drive if=pflash,format=raw,file=./OVMF.fd

Note : L'option -vga virtio a été ajoutée pour prendre en compte des problèmes d'affichage

$ qemu-system-x86_64 -m 2048 -smp 4 -enable-kvm -cpu host -vga virtio \

-drive media=disk,format=qcow2,file=debian.qcow2 -boot c\

-drive if=pflash,format=raw,file=./OVMF.fd

8 - Partage de dossier entre l'hôte et l'invité

Le partage de dossier décrit ici est basé sur le serveur Samba inclus dans qemu  et le système de fichier CIFS

$ sudo aptitude install samba

$ mkdir dossier_commun

-net nic -net user,smb=/chemin_absolu_dossier_commun_dans l'hôte/

$ sudo aptitude install cifs-utils

$ mkdir dossier_commun

$ sudo mount -t cifs //10.0.2.4/qemu/ dossier_commun -o uid=1000,gid=1000

$ sudo umount -a -t cifs -l

//10.0.2.4/qemu /chemin_dossier_commun_dans l'invité/ cifs password=,uid=1000,gid=1000 0 0