<!-- title: Mon mémo pour la virtualisation -->
<!-- category: Virtualisation -->
<!-- tag: planet -->

Cet article est un mémo de toutes les commandes qui me sont régulièrement
utiles quand je manipule des machines virtuelles VirtualBox, VMware et KVM.<!-- more -->
L'utilitaire **qemu-img** du paquet qemu-utils (sous Debian) a bien évolué et
c'est l'outil de prédilection pour les conversions ; on peut se passer de
l'utilitaire *VBoxManage* (qui fait partie de VirtualBox).

### Convertir une machine virtuelle VirtualBox en KVM

La première approche c'est de créer une VM VirtualBox avec le type de disque
natif VDI et de convertir le disque au format QCOW2 avec *qemu-img* :

    qemu-img convert -f vdi -O qcow2 vm-disk.vdi vm-disk.qcow2

Mais si la finalité c'est de mettre au point la VM sous VirtualBox avant de
l'installer sous KVM (dans un Proxmox par exemple), on peut plutôt créer une VM
VirtualBox directement avec le type de disque QEMU (QCOW) dans VirtualBox.

![VirtualBox](/images/2016/virtualbox-creation.png "VirtualBox")

Ensuite, il reste à convertir le disque du format QCOW vers QCOW2 :

    qemu-img convert -O qcow2 vm-disk.qcow vm-disk.qcow2

### Convertir un disque VMware en VirtualBox

Le format natif des disques VMware est VMDK. L'utilitaire *VBoxManage* permet
de convertir un fichier VMDK en VDI.

    VBoxManage clonehd --format VDI vm-disk.vmdk vm-disk.vdi

Mais *qemu-img* reste la voie royale pour faire le même boulôt :

    qemu-img convert -f vmdk -O vdi vm-disk.vmdk vm-disk.vdi

### Convertir une machine virtuelle VMware en KVM

D'abord exporter la machine au format OVF puis convertir le disque avec l'ami *qemu-img* :

    qemu-img convert -f vmdk -O qcow2 vm-disk.vmdk vm-disk.qcow2

Ensuite, on peut créer une VM avec des caractéristiques semblables dans KVM et
attacher le disque.

### Retaper les interfaces réseau

Lorsque la machine virtuelle a été créée depuis une machine physique par le
tryptique : clonezilla / restauration virtualbox / conversion KVM, il se peut
que la configuration logique des interfaces réseaux (*/etc/network/interfaces*
sous Debian ou */etc/sysconfig/network-scripts/ifcfg-???* sous RedHat / CentOS)
ne correspondent plus aux interfaces physiques. Dans ce cas il faut adapter la
configuration UDEV qui s'occupe de réaliser cette correspondance sur la plupart
des distributions en éditant le fichier
*/etc/udev/rules.d/70-persistent-net.rules* :

    # This file was automatically generated by the /lib/udev/write_net_rules
    # program, run by the persistent-net-generator.rules rules file.
    #
    # You can modify it, as long as you keep each rule on a single
    # line, and change only the value of the NAME= key.

    # PCI device 0x8086:0x100e (e1000)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="32:94:32:76:50:6d", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

    # PCI device 0x8086:0x100e (e1000)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="6a:79:37:a3:24:32", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

    # PCI device 0x8086:0x100e (e1000)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="fa:a8:8e:cc:fd:69", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

    # PCI device 0x8086:0x100e (e1000)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="ce:1c:8c:c2:fd:f7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"

# Compacter un disque

Il ne s'agit pas de modifier la taille du disque virtualisé mais de réduire son encombrement sur le disque hôte par du compactage.

Depuis le système GNU/Linux virtualisé, on nullifie (horrible ce mot) l'espace libre :

    dd if=/dev/zero of=/bigemptyfile bs=4096k
    rm -rf /bigemptyfile

On stoppe la VM et on utilise *vboxmanage* pour compacter le disque :

    vboxmanage modifyhd disk.vdi --compact

Et pour Ms Windows ? je ne sais pas et ça ne m'intéresse pas (*troll inside*)
