2333
Commentaire: Mise à jour
|
5705
ajustements suite aux tests
|
Texte supprimé. | Texte ajouté. |
Ligne 1: | Ligne 1: |
<<TableOfContents()>> |
|
Ligne 2: | Ligne 4: |
== Préparation de l'image de disque == * création de la nouvelle image de VM (NB : `kvm-img` est obsolète) : {{{ # qemu-img create -f qcow2 /var/lib/libvirt/images/exemple.img 3G Formatting 'exemple.img', fmt=qcow2 size=3221225472 encryption=off cluster_size=65536 }}} * monter l'image (il faut le module `ndb`) : {{{ # modprobe nbd max_part=8 # qemu-nbd -c /dev/nbd1 /var/lib/libvirt/images/exemple.img }}} * partitionner le disque (swap et racine) et formater : {{{ # echo -e '2048,,8E,*' | sfdisk -q -f -uS /dev/nbd1 # partition unique de type LVM # pvcreate /dev/nbd1p1 # vgcreate exemple /dev/nbd1p1 # lvcreate -L 1G -n swap exemple # lvcreate -l 100%FREE -n root exemple # mkswap -f /dev/exemple/swap # mkfs -t ext4 /dev/exemple/root }}} == Copie des données du CT vers le disque image == * monter la racine et y copier les données de notre CT : {{{ # mount /dev/exemple/root /mnt/ # rsync -avPHS --numeric-ids --exclude lost+found vz-www:/vz/root/109/ /mnt/ }}} . (!) pour un test on peut utiliser `debootstrap jessie /mnt/` == Adaptation de la config de la VM == * `chroot` dans le dossier copié : {{{ # chroot /mnt # su - }}} * adapter/vérifier la config qui change d'une VM à l'autre : `/etc/hosts`, `/etc/resolv.conf`, `/etc/network/interfaces`, … * supprimer les éventuelles associations de noms d'interfaces réseau : {{{ # rm -f /etc/udev/rules.d/70-persistent-net.rules }}} * ajouter une ligne `allow vmbr0` pour chaque bridge qui sera utilisé par les VM dans `/etc/qemu/bridge.conf` * configurer `/etc/fstab` : {{{ /dev/mapper/root / ext4 errors=remount-ro 0 1 /dev/mapper/swap none swap sw 0 0 }}} * installer LVM, la gestion ACPI et la gestion des claviers exotiques (= non-US) : {{{ mount -t proc proc /proc apt-get install lvm2 acpi-support-base console-data service acpid stop umount /proc }}} * activer les tty (2 pour VNC, 1 pour virsh console) : * depuis `systemd`, en lançant cette commande : {{{ systemctl enable console-getty.service getty@tty2.service getty@ttyS0.service }}} * avant `systemd`, en ajoutant dans `/etc/inittab` : {{{ 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 # pour utiliser virsh console T0:23:respawn:/sbin/getty -L ttyS0 115200 vt102 }}} * s'assurer un accès root d'une façon ou d'une autre (assigner un mdp à root ou créer un compte sudo et le tester) afin de pouvoir utiliser `virsh console` ensuite * terminer : {{{ exit # sortir du su - exit # sortir du chroot umount /mnt # démonter la racine vgchange -a n exemple # désactiver le VG exemple qemu-nbd -d /dev/nbd1 # déconnecter le disque virtuel }}} == Finalisation de la conversion (sans virt-manager) == * lancement de la VM (sur l'hôte) : {{{ # kvm -m 512 -nographic \ -kernel /boot/vmlinuz-$(uname -r) -initrd /boot/initrd.img-$(uname -r) \ -append "root=/dev/exemple/root" \ -drive file=/var/lib/libvirt/images/exemple.img,if=virtio \ -net nic,model=virtio -net bridge,br=vmbr0 }}} * vmbr0 est le bridge sur lequel se connecter dans l'hôte * -nographic renvoie l'entrée et l'affichage vers le port série . {i} appuyer une ou deux fois sur Entrée pour afficher le login ## * connexion à la VM (depuis l'hôte) : {{{ ## # virsh console exemple ## }}} * installer le noyau et ce qu'il faut pour démarrer : {{{ # apt-get install --no-install-recommends linux-image-amd64 grub-pc }}} * laisser vide pour la ligne de commande (auto-détection des options noyaux) * répondre `quiet console=tty0` pour la ligne de commande par défaut * cocher `/dev/vda` pour l'endroit où installer `grub-pc` * forcer une réinstallation de `udev` (pour les cas où il était déjà là) : {{{ # apt-get install --reinstall udev }}} * éteindre la VM : {{{ # poweroff }}} * création définitive de la VM : {{{ # virt-install --name=exemple --import --disk path=/var/lib/libvirt/images/exemple.img,format=qcow2,bus=virtio --vcpus=1 --ram=512 --hvm --network bridge:vmbr0,model=virtio --vnc }}} == Finalisation de la conversion (via virt-manager) == * sur le serveur hôte : copier le noyau et le initrd système : {{{ # cp -a /boot/{vmlinuz,initrd.img}-$(uname -r) /var/lib/libvirt/images/ }}} * via virt-manager (sous Ubuntu) : * créer une nouvelle VM en utilisant l'image créée plus haut * réseau : associer la VM au bon bridge * une fois la VM créée, dans les "options de boot", dérouler l'option "démarrage direct sur le noyau" et renseigner les champs noyau, initrd (parcourir et sélectionner les fichiers précédemment copiés) et arguments du noyau (préciser le disque root) : {{attachment:Sélection_015.png}} * démarrer la VM, s'y connecter (via ssh ou sur la console virt-manager) et installer le noyau, grub2, etc. : {{{ # apt-get install linux-image-amd64 grub-pc # apt-get install --reinstall udev }}} lire [[http://blog.smile.fr/Cloud/Migrate-your-openvz-containers-to-kvm-openstack|"Fourth step: start the Virtual Machine"]] pour les explications. * arrêter la VM, supprimer les options de "démarrage direct sur le noyau" (noyau, initrd et disque root) * démarrer la VM sur son propre noyau (démarrage normal) |
|
Ligne 6: | Ligne 130: |
* http://www.pither.com/simon/blog/2011/09/20/convert-an-openvz-vm-to-kvm (celle mise en œuvre ici) == Premier essai == * création de la nouvelle image de VM {{{ root@super-auforg:/var/lib/libvirt/images# qemu-img create -f qcow2 frontal.img 3G Formatting 'frontal.img', fmt=qcow2 size=3221225472 encryption=off cluster_size=65536 root@super-auforg:/var/lib/libvirt/images# }}} '''NB''' : kvm-img est obsolète {{{ root@super-auforg:/var/lib/libvirt/images# kvm-img create -f qcow2 frontal.img 3G W: /usr/bin/kvm-img: this binary is deprecated, use qemu-img instead }}} * monter l'image {{{ root@super-auforg:/var/lib/libvirt/images# qemu-nbd -c /dev/nbd1 frontal.img Failed to open /dev/nbd1: No such file or directoryroot@super-auforg:/var/lib/libvirt/images# }}} Il faut le module ndb {{{ root@super-auforg:/var/lib/libvirt/images# modprobe nbd max_part=8 root@super-auforg:/var/lib/libvirt/images# qemu-nbd -c /dev/nbd1 frontal.img root@super-auforg:/var/lib/libvirt/images# }}} * partitionner le disque {{{ root@super-auforg:/var/lib/libvirt/images# cfdisk /dev/nbd1 root@super-auforg:/var/lib/libvirt/images# mkfs.ext4 /dev/nbd1p2 }}} un swap et une racine. * monter la racine et y copier les données de notre CT {{{ root@super-auforg:/var/lib/libvirt/images# mount /dev/nbd1p2 /mnt/ root@super-auforg:/var/lib/libvirt/images# rsync -avPHS --numeric-ids vz-www:/var/lib/vz/root/109/ /mnt/ }}} * chroot dans le dossier copie `chroot /mnt /bin/bash` * adapter/vérifier la config : hosts, interfaces, resolv.conf * activer les tty : ajouter dans `/etc/inittab` {{{ 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6 }}} * configurer `/etc/fstab` {{{ # / /dev/vda2 / ext4 errors=remount-ro 0 1 # swap /dev/vda1 none swap sw 0 0 }}} * quitter le chroot, démonter le /mnt et détruire le ndb `qemu-nbd -d /dev/nbd1` * Start the VM using KVM command ..... |
* http://www.pither.com/simon/blog/2011/09/20/convert-an-openvz-vm-to-kvm * http://blog.smile.fr/Cloud/Migrate-your-openvz-containers-to-kvm-openstack |
Sommaire
KVMLibvirt/OpenvzToKVM
Préparation de l'image de disque
création de la nouvelle image de VM (NB : kvm-img est obsolète) :
# qemu-img create -f qcow2 /var/lib/libvirt/images/exemple.img 3G Formatting 'exemple.img', fmt=qcow2 size=3221225472 encryption=off cluster_size=65536
monter l'image (il faut le module ndb) :
# modprobe nbd max_part=8 # qemu-nbd -c /dev/nbd1 /var/lib/libvirt/images/exemple.img
partitionner le disque (swap et racine) et formater :
# echo -e '2048,,8E,*' | sfdisk -q -f -uS /dev/nbd1 # partition unique de type LVM # pvcreate /dev/nbd1p1 # vgcreate exemple /dev/nbd1p1 # lvcreate -L 1G -n swap exemple # lvcreate -l 100%FREE -n root exemple # mkswap -f /dev/exemple/swap # mkfs -t ext4 /dev/exemple/root
Copie des données du CT vers le disque image
monter la racine et y copier les données de notre CT :
# mount /dev/exemple/root /mnt/ # rsync -avPHS --numeric-ids --exclude lost+found vz-www:/vz/root/109/ /mnt/
pour un test on peut utiliser debootstrap jessie /mnt/
Adaptation de la config de la VM
chroot dans le dossier copié :
# chroot /mnt # su -
adapter/vérifier la config qui change d'une VM à l'autre : /etc/hosts, /etc/resolv.conf, /etc/network/interfaces, …
supprimer les éventuelles associations de noms d'interfaces réseau :
# rm -f /etc/udev/rules.d/70-persistent-net.rules
ajouter une ligne allow vmbr0 pour chaque bridge qui sera utilisé par les VM dans /etc/qemu/bridge.conf
configurer /etc/fstab :
/dev/mapper/root / ext4 errors=remount-ro 0 1 /dev/mapper/swap none swap sw 0 0
installer LVM, la gestion ACPI et la gestion des claviers exotiques (= non-US) :
mount -t proc proc /proc apt-get install lvm2 acpi-support-base console-data service acpid stop umount /proc
- activer les tty (2 pour VNC, 1 pour virsh console) :
depuis systemd, en lançant cette commande :
systemctl enable console-getty.service getty@tty2.service getty@ttyS0.service
avant systemd, en ajoutant dans /etc/inittab :
1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 # pour utiliser virsh console T0:23:respawn:/sbin/getty -L ttyS0 115200 vt102
s'assurer un accès root d'une façon ou d'une autre (assigner un mdp à root ou créer un compte sudo et le tester) afin de pouvoir utiliser virsh console ensuite
terminer :
exit # sortir du su - exit # sortir du chroot umount /mnt # démonter la racine vgchange -a n exemple # désactiver le VG exemple qemu-nbd -d /dev/nbd1 # déconnecter le disque virtuel
Finalisation de la conversion (sans virt-manager)
lancement de la VM (sur l'hôte) :
# kvm -m 512 -nographic \ -kernel /boot/vmlinuz-$(uname -r) -initrd /boot/initrd.img-$(uname -r) \ -append "root=/dev/exemple/root" \ -drive file=/var/lib/libvirt/images/exemple.img,if=virtio \ -net nic,model=virtio -net bridge,br=vmbr0
- vmbr0 est le bridge sur lequel se connecter dans l'hôte
- -nographic renvoie l'entrée et l'affichage vers le port série
appuyer une ou deux fois sur Entrée pour afficher le login
installer le noyau et ce qu'il faut pour démarrer :
# apt-get install --no-install-recommends linux-image-amd64 grub-pc
- laisser vide pour la ligne de commande (auto-détection des options noyaux)
répondre quiet console=tty0 pour la ligne de commande par défaut
cocher /dev/vda pour l'endroit où installer grub-pc
forcer une réinstallation de udev (pour les cas où il était déjà là) :
# apt-get install --reinstall udev
éteindre la VM :
# poweroff
création définitive de la VM :
# virt-install --name=exemple --import --disk path=/var/lib/libvirt/images/exemple.img,format=qcow2,bus=virtio --vcpus=1 --ram=512 --hvm --network bridge:vmbr0,model=virtio --vnc
Finalisation de la conversion (via virt-manager)
sur le serveur hôte : copier le noyau et le initrd système :
# cp -a /boot/{vmlinuz,initrd.img}-$(uname -r) /var/lib/libvirt/images/
- via virt-manager (sous Ubuntu) :
- créer une nouvelle VM en utilisant l'image créée plus haut
- réseau : associer la VM au bon bridge
- une fois la VM créée, dans les "options de boot", dérouler l'option "démarrage direct sur le noyau" et renseigner les champs noyau, initrd (parcourir et sélectionner les fichiers précédemment copiés) et arguments du noyau (préciser le disque root) :
démarrer la VM, s'y connecter (via ssh ou sur la console virt-manager) et installer le noyau, grub2, etc. :
# apt-get install linux-image-amd64 grub-pc # apt-get install --reinstall udev
lire "Fourth step: start the Virtual Machine" pour les explications.
- arrêter la VM, supprimer les options de "démarrage direct sur le noyau" (noyau, initrd et disque root)
- démarrer la VM sur son propre noyau (démarrage normal)
Documentation
http://sysadmin.smile.fr/post/2013/02/20/Migrate-your-OpenVZ-containers-to-KVM
https://www.webhostpython.com/billing/knowledgebase.php?action=displayarticle&id=32
http://www.pither.com/simon/blog/2011/09/20/convert-an-openvz-vm-to-kvm
http://blog.smile.fr/Cloud/Migrate-your-openvz-containers-to-kvm-openstack