3821
Commentaire:
|
6196
|
Texte supprimé. | Texte ajouté. |
Ligne 8: | Ligne 8: |
# qemu-img create -f qcow2 /var/lib/libvirt/images/frontal.img 3G Formatting '/var/lib/libvirt/images/frontal.img', fmt=qcow2 size=3221225472 encryption=off cluster_size=65536 |
# qemu-img create -f qcow2 /var/lib/libvirt/images/exemple.img 3G Formatting 'exemple.img', fmt=qcow2 size=3221225472 encryption=off cluster_size=65536 |
Ligne 13: | Ligne 13: |
# qemu-nbd -c /dev/nbd1 frontal.img | # qemu-nbd -c /dev/nbd1 /var/lib/libvirt/images/exemple.img |
Ligne 15: | Ligne 15: |
* partitionner le disque (partition racine) et formater : {{{ # cfdisk /dev/nbd1 # mkfs.ext4 /dev/nbd1p1 |
* 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 |
Ligne 19: | Ligne 24: |
== Préparation réseau spécifique à KVM == * ajouter une ligne `allow vmbr0` pour chaque bridge qui sera utilisé par les VM dans `/etc/qemu/bridge.conf` (créer ce fichier au besoin) . {i} cela sert à autoriser les connexions aux bridges par `qemu-brige-helper`, qui ne vient qu'avec qemu 2.1 (donc soit Jessie, soit Wheezy + backports) |
|
Ligne 23: | Ligne 33: |
# mount /dev/nbd1p1 /mnt/ # rsync -avPHS --numeric-ids vz-www:/vz/root/109/ /mnt/ |
# mount /dev/exemple/root /mnt/ # rsync -avPHS --numeric-ids --exclude lost+found vz-www:/vz/root/109/ /mnt/ |
Ligne 26: | Ligne 36: |
. (!) pour un test on peut utiliser `debootstrap jessie /mnt/` | |
Ligne 29: | Ligne 40: |
* `chroot` dans le dossier copié : `chroot /mnt /bin/bash` * adapter/vérifier la config : `/etc/hosts`, `/etc/resolv.conf`, `/etc/network/interfaces` * activer les tty (2 suffiront) en ajoutant dans `/etc/inittab` : {{{ |
* `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 }}} * configurer `/etc/fstab` : {{{ /dev/exemple/root / ext4 errors=remount-ro 0 1 /dev/exemple/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` (Debian ≥ Jessie), en lançant cette commande : {{{ systemctl enable console-getty.service getty@tty2.service getty@ttyS0.service }}} * avant `systemd` (Debian < Jessie), en ajoutant dans `/etc/inittab` : {{{ |
Ligne 34: | Ligne 65: |
# pour utiliser virsh console T0:23:respawn:/sbin/getty -L ttyS0 115200 vt102 |
|
Ligne 35: | Ligne 68: |
* configurer `/etc/fstab` : {{{ /dev/vda1 / ext4 errors=remount-ro 0 1 /dev/vda2 none swap sw 0 0 |
* 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 |
Ligne 40: | Ligne 78: |
* quitter le `chroot`, démonter le `/mnt`, puis détruire le `nbd` avec `qemu-nbd -d /dev/nbd1` | == Finalisation de la conversion (sans virt-manager) == |
Ligne 42: | Ligne 80: |
== Finalisation de la conversion (via VIRT-MANAGER) == | * lancement de la VM (sur l'hôte) : {{{ # kvm -m 512 -curses \ -kernel /boot/vmlinuz-$(uname -r) -initrd /boot/initrd.img-$(uname -r) \ -append "root=/dev/exemple/root nomodeset" \ -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 * `-curses` démarre Qemu en mode « console semi-graphique » * `nomodeset` interdit la console en mode graphique . {i} la console est affichée directement à l'écran . {i} la séquence ESC+2 permet de basculer vers le contrôle de Qemu (entrer par ex. `system_porwerdown` pour un arrêt propre par ACPI) . {i} la séquence ESC+3 permet de basculer vers la console via le port série . {i} la séquence ESC+1 permet de revenir vers la console Linux ## * 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 }}} . {i} 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 }}} * TruongTungLam: je dois créer le fichier grub.cnf: {{{ # grub-mkconfig > /boot/grub/grub.cfg }}} * é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) == |
Ligne 45: | Ligne 123: |
# cp /boot/vmlinuz-$(uname -r) /boot/initrd.img-$(uname -r) /var/lib/libvirt/images/ | # cp -a /boot/{vmlinuz,initrd.img}-$(uname -r) /var/lib/libvirt/images/ |
Ligne 55: | Ligne 133: |
# apt-get install console-tools console-data acpid acpi-support-base # aptitude reinstall udev |
# apt-get install --reinstall udev |
Ligne 58: | Ligne 135: |
lire [[http://sysadmin.smile.fr/post/2013/02/20/Migrate-your-OpenVZ-containers-to-KVM|"Fourth step: start the Virtual Machine"]] pour les explications. | lire [[http://blog.smile.fr/Cloud/Migrate-your-openvz-containers-to-kvm-openstack|"Fourth step: start the Virtual Machine"]] pour les explications. |
Ligne 62: | Ligne 139: |
== Finalisation de la conversion (sans VIRT-MANAGER) == '''Sur le Hote : Lancement de la VM''' * kvm -m 512 -kernel /boot/vmlinuz-$(uname -r) -initrd /boot/initrd.img-$(uname -r) -append "root=/dev/vda1" -drive file=/var/lib/libvirt/images/proxy.img,if=virtio -net nic,model=virtio -net vmbr1 -vnc :20 -k fr * -net vmbr1 (bridge) hote * -k fr ne semble pas fonctionne...à revoir ! * -vnc :20 port 20 ouvert pour vnc distant '''Sur le client : connexion à la VM''' * gvncviewer serveur-kvm:20 * Attention le clavier est en qwerty ! {{{ # apt-get install linux-image-amd64 grub-pc # apt-get install console-tools console-data acpid acpi-support-base # aptitude reinstall udev }}} '''Sur le Hôte : création de la VM''' * virt-install --import --disk path=/var/lib/libvirt/images/proxy.img --vcpus=2 --ram=1024 --name=proxy --hvm --vnc --network bridge:vmbr1 |
|
Ligne 89: | Ligne 141: |
* http://sysadmin.smile.fr/post/2013/02/20/Migrate-your-OpenVZ-containers-to-KVM | |
Ligne 92: | Ligne 143: |
* 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
Préparation réseau spécifique à KVM
ajouter une ligne allow vmbr0 pour chaque bridge qui sera utilisé par les VM dans /etc/qemu/bridge.conf (créer ce fichier au besoin)
cela sert à autoriser les connexions aux bridges par qemu-brige-helper, qui ne vient qu'avec qemu 2.1 (donc soit Jessie, soit Wheezy + backports)
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
configurer /etc/fstab :
/dev/exemple/root / ext4 errors=remount-ro 0 1 /dev/exemple/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 (Debian ≥ Jessie), en lançant cette commande :
systemctl enable console-getty.service getty@tty2.service getty@ttyS0.service
avant systemd (Debian < Jessie), 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 -curses \ -kernel /boot/vmlinuz-$(uname -r) -initrd /boot/initrd.img-$(uname -r) \ -append "root=/dev/exemple/root nomodeset" \ -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
-curses démarre Qemu en mode « console semi-graphique »
nomodeset interdit la console en mode graphique
la console est affichée directement à l'écran
la séquence ESC+2 permet de basculer vers le contrôle de Qemu (entrer par ex. system_porwerdown pour un arrêt propre par ACPI)
la séquence ESC+3 permet de basculer vers la console via le port série
la séquence ESC+1 permet de revenir vers la console Linux
installer le noyau et ce qu'il faut pour démarrer :
# apt-get install --no-install-recommends linux-image-amd64 grub-pc
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
TruongTungLam: je dois créer le fichier grub.cnf:
# grub-mkconfig > /boot/grub/grub.cfg
é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
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