Accueil » Virtualisation » KVM
Création d’un partage entre un hyperviseur KVM et une de ses machines virtuelles
1. Activation de samba
systemctl enable smb nmb
systemctl start smb nmb
2. Identifier le bridge libvirt
3. Modifier l’adresse du réseau default (virbr0)
4. Création du répertoire partagé et du compte utilisateur Samba
mkdir /partage_vm
useradd -m -d /partage_vm partage
chown -R partage /partage_vm
chmod g+w /partage_vm
smbpasswd -a partage
5. Configuration dans /etc/samba/smb.conf
[global]
workgroup = WorkGroup
netbios name = Host
server string = serveur %h (Samba %partagevm)
# On souhaite n’autoriser l’accès que via certaines interfaces réseau
bind interfaces only = Yes
interfaces = 127.0.0.1, 192.168.122.1
log file = /var/log/samba/log.%m
max log size = 100
[partage_vm]
path = /partage_vm/
public = no
browsable = yes
valid users = partage
guest ok = no
writable = yes
printable = no
hide files = /lost+found/
hide unreadable = yes
# on force les permissions
create mask = 777
force create mode = 777
security mask = 777
force security mode = 777
6. Redémarrage Samba et ouverture firewall
systemctl restart nmb.service smb.service
firewall-cmd --add-service=samba --permanent --add-source=192.168.122.1/24
firewall-cmd --reload
7. Test du partage depuis l’hyperviseur
smbclient //192.168.122.1/partage_vm -U partage
8. Correction SELinux pour un dossier spécifique
semanage fcontext -a -t samba_share_t '/partage_vm(/.*)?'
restorecon -R /partage_vm
9. Autoriser Samba dans /home avec SELinux
setsebool -P samba_enable_home_dirs on
10. Vérification du contexte SELinux
ls -Z /partage_vm
-rw-rw-r--. partage partage unconfined_u:object_r:samba_share_t:s0 truc.txt
Sur la VM, le dossier est accessible à l’adresse \\ip_de_virbr0\partage_vm
1. Pour afficher le nombre total de vCPU de l’hyperviseur
2. Pour afficher le nombre total de vCPU attribués à toutes les VMs actives
virsh list | awk 'NR>2 && $1+0>0 {print $1}' | xargs -I{} virsh dominfo {} | grep "CPU(s):" | awk '{sum += $2} END {print sum+0}'
1) Pour commencer nous allons arrêter le domaine que nous souhaitons migrer
ou si elle ne repond pas
virsh destroy nom_VM
2) Sur l’hyperviseur source, nous allons exporter la configuration du domaine dans un fichier xml:
virsh dumpxml nom_VM > nom_VM.xml
3 ) Toujours sur l’hyperviseur source, on copie le ou les fichiers disques du domaine que l’on souhaite migrer, depuis son emplacement dans /var/lib/libvirt/images vers le même répertoire sur l’hyperviseur de destination.
scp -p /var/lib/libvirt/images/nom_VM.qcow2 hyperviseur_destination:/var/lib/libvirt/images/
Si plusieurs disques ou stockage partagé différent : Adapte le chemin source et destination.
Utilise -r si tu as un répertoire entier, ou rsync pour plus de fiabilité :
rsync -avz --progress /var/lib/libvirt/images/nom_VM.qcow2 hyperviseur_destination:/var/lib/libvirt/images/
Si le chemin du disque est différent sur l’hyperviseur de destination, il faudra le modifier le fichier xml générer dans l’étape précédente pour que cela pointe au bon endroit.
4 ) On copie également notre fichier XML sur l’hyperviseur de destination
scp -p nom_VM.xml hyperviseur_destination:/tmp/
5) On intègre le domaine dans KVM à l’aide de notre fichier xml:
virsh define /tmp/nom_VM.xml
6) Il ne reste plus qu’a démarrer notre domaine
Vérification finale :
virsh list # VM running sur la destination
virsh list --all # VM absente ou "shut off" sur la source (tu peux l’undefine après)
Une fois la migration validée sur l’hyperviseur source:
virsh undefine nom_VM
rm nom_VM.xml /var/lib/libvirt/images/nom_VM.qcow2
On commence par lister tous nos domaines:
virsh list --all
ID Nom État
----------------------------------------------------
- Centreon fermé
- generic fermé
- Ubuntu fermé
- win10 fermé
Ici nous voulons faire un snapshot du domaine « Ubuntu », nous allons donc regarder si il y a des snapshot existant pour ce domaine:
virsh snapshot-list --domain Ubuntu
Nom Creation Time État
------------------------------------------------------------
On vérifie si le fichier disque est bien au format qemu/qcow2:
virsh dumpxml Ubuntu | grep -i qemu
<driver name='qemu' type='qcow2' cache='none'/>
<driver name='qemu' type='qcow2'/>
Pour un domaine éteint:
virsh snapshot-create-as --domain Ubuntu --name "Snapshot_test" --description "Snapshot de test"
Domain snapshot Snapshot_test created
Pour un domaine en fonctionnement:
virsh snapshot-create-as --domain Ubuntu --name "Snapshot_test" --description "Snapshot de test" --live
Domain snapshot Snapshot_test created
On peut maintenant voir notre snapshot:
virsh snapshot-list --domain Ubuntu
Nom Creation Time État
------------------------------------------------------------
Snapshot_test 2018-03-14 20:39:53 +0100 shutoff
Pour restaurer le snapshot:
virsh shutdown --domain Ubuntu
virsh snapshot-revert --domain Ubuntu --snapshotname Snapshot_test --running
Pour supprimer le snapshot:
virsh snapshot-delete --domain Ubuntu --snapshotname Snapshot_test
Domain snapshot Snapshot_test deleted
Commandes de base
Lister les vms allumées:
virsh list
Lister toutes les vms:
virsh list --all
Editer le xml d’une vm:
virsh edit nom_vm
Affiche le fichier xml sur la sortie standard:
virsh dumpxml
Manipuler les images disques:
qemu-img
Informations sur une image:
qemu-img info fichier_image
Étendre la taille de l’image:
qemu-img resize fichier_image +tailleG
Éteindre une vm par l’acpi:
virsh shutdown nom_vm
Éteindre une vm en coupant l’alim:
virsh destroy nom_vm
Démarrer une vm:
virsh start vm :
Se connecter à la console d’une vm (pour en sortir « Ctrl+Shift+5"):
virsh console vm :
Commandes distante:
Virsh --connect qemu+ssh://nom_hyperviseur/system nom_commande
virt-viewer --connect qemu+ssh://nom_hyperviseur/system nom_vm
Bien sur il faut un accès ssh à l’hyperviseur (et le mieux est de mettre sa clé).
Comment étendre un disque (si il n’y a pas LVM …)?
1) Éteindre la vm :
virsh shutdown vm
2) Sauvegarde de l’image disque :
cp -p fichier_image fichier_image.bak
3) Étendre l’image disque :
qemu-img resize fichier_image +tailleG
3) Démarrer la vm :
virsh start vm
4) Arrêter les services et démonter la partition
5) Avec fdisk (!!!) : détruire la partition, la recréer
6) e2fsck -f /dev/partition
7) resize2fs /dev/partition
8) e2fsck -f /dev/partition
9) remonter et démarrer les services