DD, LVM et KVM… en vrac

Quelques trucs en vrac…

simple sauvegarde de VM (volume logique) avec dd

liste des volumes logiques :

# lvs
  LV         VG      Attr   LSize Origin Snap%  Move Log Copy%  Convert
  maja       virtvol -wi-a- 8,00g                                      
  maja-swap  virtvol -wi-a- 2,00g                                      
  raton      virtvol -wi-ao 8,00g                                      
  raton-swap virtvol -wi-ao 1,00g   

copie :

# dd if=/dev/virtvol/maja of=maja.bak bs=512K

restauration :

# dd if=maja.bak of=/dev/virtvol/maja bs=512K

copie avec compression :

# dd if=/dev/virtvol/maja bs=512K | gzip -c9 > maja.gzip

restauration :

# gzip -dc maja.gzip | dd of=/dev/virtvol/maja bs=512K

pour avoir une jauge, on peut utiliser pv :

# aptitude install pv

copie avec compression (+jauge) :

# dd if=/dev/virtvol/maja bs=512K | pv -s 8G | gzip -c9 > maja2.gzip
16384+0 enregistrements lus==================================> ] 99% ETA 0:00:01
16384+0 enregistrements écrits
   8GO 0:05:20 [25,5MB/s] [==================================>] 100%            8589934592 octets (8,6 GB) copiés
, 320,776 s, 26,8 MB/s

quelques commandes

Cette commande valide la dispostion de la machine hôte a bénéficier de la virtualisation avec kvm :

# kvm-ok 
INFO: /dev/kvm exists
KVM acceleration can be used

La commande kvm_stat nous fournit un ensemble de stats :

kvm statistics

 kvm_exit                                      7409     398
 kvm_entry                                     7409     398
 kvm_mmio                                      4890     256
 kvm_emulate_insn                              3305     174
 kvm_userspace_exit                            2809     147
 kvm_apic                                      2499     138
 vcpu_match_mmio                               2217     114
 kvm_inj_virq                                  2015     111
 kvm_apic_accept_irq                           2015     111
 kvm_pio                                        606      33
 kvm_fpu                                         44       0
 kvm_cr                                          14       0
 kvm_age_page                                    47       0
 kvm_page_fault                                  10       0
 kvm_set_irq                                      4       0
 kvm_pic_set_irq                                  4       0
 kvm_ioapic_set_irq                               4       0
 kvm_ack_irq                                      2       0
 kvm_exit(HLT)                                    1       0
 kvm_exit(APIC_ACCESS)                            1       0
 kvm_exit(EPT_MISCONFIG)                          1       0

utilisation de virt-clone

# lvs
  LV         VG      Attr   LSize Origin Snap%  Move Log Copy%  Convert
  maja       virtvol -wi-a- 8,00g                                      
  maja-swap  virtvol -wi-a- 2,00g                                      
# lvcreate -L 8G -n maja2 virtvol
# lvcreate -L 2G -n maja2-swap virtvol

# virt-clone --original maja --name maja2 --file /dev/virtvol/maja2 --file /dev/virtvol/maja2-swap --prompt
Copie de maja                                                                  | 8.0 GB     02:42     
Copie de maja-swap                                                             | 2.0 GB     00:40     

Le clone « maja2 » est créé avec succès.

migration de VM avec libvirt

L’idée est de réaliser une migration à chaud de la VM maja vers un hôte distant :
*** faire une sauvegarde de la VM (avec le stockage!) avant ***

Lien vers la documentation officielle : http://libvirt.org/migration.html

Utilisation de la commande « migrate » :

$ virsh
Welcome to virsh, the virtualization interactive terminal.
 
Type:  'help' for help with commands
       'quit' to quit

virsh # help migrate
  NOM
    migrate - migrer un domaine vers un autre hôte

  SYNOPSIS
    migrate [--live] [--p2p] [--direct] [--tunnelled] [--persistent] [--undefinesource] [--suspend] [--copy-storage-all] [--copy-storage-inc] [--change-protection] [--verbose]   [] [] [--timeout ] [--xml ]

  DESCRIPTION
    Migrer un domaine vers un autre hôte. Ajouter « --live » pour une migration pendant l'exécution.
virsh # exit

Phase « avant » la migration :

machine locale # virsh list
 ID Nom                  État
----------------------------------
  9 maja                 en cours d'exécution

On sauvegarde le domaine (par précaution) :

machine locale # virsh dumpxml 9 > maja.xml

Le stockage de la VM doit être aussi accessible depuis l’hôte distante (c’est à dire l’hôte cible)! D’ailleurs ne pas oublier de faire une sauvegarde du stockage..

Migration :

machine locale # virsh migrate --live --persistent maja qemu+ssh://machine-distante/system

Attention, dans cette configuration simpliste, il est nécessaire que l’on puisse accéder à la machine distante en SSH ave l’utilisateur root… voir plus bas pour savoir comment éviter ça…

Une fois migrée, on peut lister les VM sur l’hôte distante depuis la machine locale :

machine locale # virsh -c qemu+ssh://machine-distante/system list 
 ID Nom                  État
----------------------------------
  10 maja                 en cours d'exécution
machine locale #

Si on avait voulu migrer le stockage, je n’ai pas d’autre solution que d’utiliser dd (voir les commandes au dessus). Avant de faire une restauration sur l’hôte cible, on prépare l’emplacement des disques (identique à la machine locale) :

# lvcreate -L 8G -n maja virtvol
# lvcreate -L 2G -n maja-swap virtvol

Puis, toujours sur la machine distante, on commence la création de la VM de la même façon que la VM que l’on va cloner (sans aller jusqu’au bout) :

# virt-install --name=maja --ram=2048 --vcpus=2 --disk path=/dev/virtvol/maja --disk path=/dev/virtvol/maja-swap --vnc --cdrom=/isos/debian-6.0.4-amd64-netinst.iso --os-type=linux --os-variant=debianSqueeze --network=bridge:br0 --hvm --keymap=fr

Ou bien on peut la créer à partir du dump de la configuration faite précédemment :

machine locale # virsh dumpxml 9 > maja.xml
machine distante # virsh create maja.xml

surveillance des performances

# apt-get install virt-top

gestion graphique

alenorcy@machine-desktop:$ sudo apt-get install virt-manager

Sur l’hôte distant, ajout de l’utilisateur alenorcy au groupe libvirtd :

# adduser alenorcy libvirtd

à noter (pour un retour en arrière) : pour retirer un utilisateur d’un groupe, on peut utiliser vigr (avec l’option -s pour /etc/shadow) :

# groups alenorcy
alenorcy : alenorcy adm cdrom sudo dip plugdev lpadmin sambashare libvirtd
# vigr 
Vous avez modifié /etc/group.
Pour des raisons de cohérence, vous devriez modifier /etc/gshadow.
Veuillez utiliser la commande « vigr -s » pour le faire.
# vigr -s
Vous avez modifié /etc/gshadow.
Pour des raisons de cohérence, vous devriez modifier /etc/group.
Veuillez utiliser la commande « vigr » pour le faire.
# groups alenorcy
alenorcy : alenorcy adm cdrom sudo dip plugdev lpadmin sambashare

mécanisme permettant la connexion ssh automatique (sans passphrase)

alenorcy@machine-locale:$ ssh-keygen -t rsa
alenorcy@machine-locale : cat ~/.ssh/id_dsa.pub | ssh machine-distante "cat - >> ~/.ssh/authorized_keys"

On lance l’interface :

alenorcy@machine-locale:$ virt-manager &

Attention, virt-manager (en tous les cas ma version cf ci-dessous) ne permet le clonage a priori que pour des VM de type « fichier » (et non des volumes logiques).. certainement par ce qu’il doit utiliser l’option –auto-clone..

La version de virt-manager sur Ubuntu 12.04 LTS :

dpkg -l | grep virt-manager
ii  virt-manager                                                0.9.1-1ubuntu5.1                            desktop application for managing virtual machines

Copie par le réseau avec netcat et dd

Sur le slave :

nc -l -p 10000 | dd of=/dev/sda

Sur le master :

dd if=/dev/sda | nc 192.168.0.2 10000

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *