Mar
28
2012
daniele
Ecco un breve tutorial per comprimere al massimo le imamgini qcow2.
Le fasi principali necessarie sono:
- Montare il filesystem in read-only oppure attivare il device sull’host
- Eseguire zerofree
- Ricomprimere l’immagine
I requisiti sono:
- zerofree (http://intgat.tigress.co.uk/rmy/uml/index.html oppure yum install zerofree)
- qemu-img (disponibili dal pacchetto qemu)
Opzionalmente
- qemu-nbd (disponibili dal pacchetto qemu)
- Modulo del kernel nbd
Il principio di funzionamento di zerofree sta nel sovrascrivere con zero tutti i blocchi del filesystem non utilizzati, così che si possa sfruttare al meglio la funzionalità compress del formato qcow2. Per maggiori dettagli vi rimando al stito di zerofree (http://intgat.tigress.co.uk/rmy/uml/index.html) e qcow2 (http://people.gnome.org/~markmc/qcow-image-format.html).
Per utilizzare zerofree su un immagine qcow2 esistente si possono applicare due soluzioni:
- Eseguire zerofree all’interno del guest. Questo richiede che il filesystem su cui si vuole operare sia in read-only e che all’interno del guest sia disponibile il programma zerofree.
Per rimontare un filesystem in read-only normalmente è sufficiente, avendo un accesso locale alla VM e non via SSH, entrare nel runlevel 1 (init 1) ed eseguire il comando
- Eseguire zerofree dall’host. Le immagini qcow2 non possono essere montate direttamente nell’host tramite un offset di mount o tramite kpartx; per questo motivo ci server il supporto al Network Block Device alias nbd. Ha come vantaggio la possibilità di eseguire tutto dall’host senza avviare le VM e che è necessario avere il comando zerofree solo sull’host.
Nello specifico utilizzeremo la soluzione numero 2.
Continue reading
no comments | tags: disk, HP MicroServer, kvm, libvirt, qcow2, qemu, virtualization, vm | posted in MicroServer
Mar
27
2012
daniele
Recentemente ho avuto necessità di convertire una macchina virtuale KVM con Red Hat Enterprise 5.7 installata originariamente con emulazione IDE al più performante layer di I/O VirtIO.
Il kernel di RHEL5 (e derivate) per quanto vecchiotto supporta già VirtIO sia per i dischi, per la rete che genericamente per PCI e channels.
Per prima cosa, a macchina avviata ancora in modalità IDE è necessario aggiornare l’initrd inserendo il supporto ai moduli virtio desiderati. Ricordarsi di inserire virtio_blk per lo storage, altrimenti la VM modificata non sarà in grado di eseguire il boot su un disco VirtIO.
Da root eseguire il comando:
mkinitrd --with virtio_pci --with virtio_blk --with virtio_net --with virtio_balloon --with virtio_console --with virtio -f /boot/initrd-$(uname -r).img $(uname -r )
Una volta fermata la macchina, tramite virsh o la gui virt-install sarà sufficiente rimuovere il disco IDE e il controller e ri-aggiungere il disco selezionando come modalità virtio.

Se l’installazione di RHEL5 utilizza, come è di default, le LABEL (oppure un UUID) per identificare le partizioni dei dischi la macchina è pronta per essere utilizzata, basta semplicemente avviarla.
Se grub o l’fstab utilizzassero i nomi de devices (es. hda2) essi andranno modificati secondo lo standard vd (es. hda[n] -> vda[n], hdb -> vdb ecc…)
no comments | tags: kvm, libvirt, rhel5, server, virtio, virtualization, vm | posted in MicroServer
Feb
18
2012
daniele
Per creare una nuova macchina virtuale con KVM il consiglio è quello di utilizzare l’infrastruttura libvirtd e l’utilissimo virt-install.
Con Fedora è sufficiente il comando yum per installare entrambi:
yum install libvirt python-virtinst
Un esempio per installare Scientific Linux 6 (clone di RHEL 6) direttamente da un mirror (in questo caso il GARR):
virt-install -n sl6 -r 1024 --disk /var/lib/libvirt/images/sl6.qcow2,size=20,format=qcow2 --vcpus=1 --os-type linux --os-variant=rhel6 --network bridge=br0 --vnc --location='http://rm.mirror.garr.it/mirrors/scientific/6/x86_64/os/' --vnclisten=192.168.1.254
E’ possibile anche effettuare l’installazione testuale senza utilizzare VNC grazie al comando console di virsh
virt-install -n sl6 -r 1024 --disk /var/lib/libvirt/images/sl6.qcow2,size=20,format=qcow2 --vcpus=1 --os-type linux --os-variant=rhel6 --network bridge=br0 --location='http://rm.mirror.garr.it/mirrors/scientific/6/x86_64/os/' --extra-args 'console=ttyS0,115200'
virsh console sl6
Aggiornamento: per installare Fedora 16 e successive in modalità console seriale è necessario specificare alcuni parametri extra da passare a –extra-args. Essi sono serial text.
virt-install -n f16-server -r 1024 --disk /var/lib/libvirt/images/f16_server.qcow2,size=40,format=qcow2 --vcpus=2 --os-type linux --os-variant=fedora16 --network bridge=br0 --location='http://mirror1.mirror.garr.it/mirrors/fedora/linux/releases/16/Fedora/x86_64/os/' --extra-args 'console=ttyS0,115200 serial text'
virsh console f16-server
no comments | tags: kvm, libvirt, lighttpd, linux, server, software, virtualization | posted in MicroServer
Jan
21
2012
daniele
Per montare un immagine RAW oppure una partizione e/o LV contenente una VM o un insieme di partizioni è sufficiente avere installato kpartx
A questo punto è possibile sfruttare /dev/mapper per mappare le partizioni del volume
kpartx -av /path/to/file_or_lv
le partizioni compariranno sotto forma di devices
ls /dev/mapper/
file_or_lv1
file_or_lv2
file_or_lvN
a questo punto è possibile montare ogni singola partizione come consueto
mount /dev/mapper/file_or_lv1 /mn/ext
per rimuovere la mappatura è sufficiente eseguire
kpartx -d /path/to/file_or_lv
no comments | tags: disk, kvm, libvirt, linux, software, virtualization, vm | posted in MicroServer
May
14
2011
daniele
Se si possiede un processore AMD con supporto alla virtualizzazione è possibile attivare la nested virtualization di KVM che permette di esporre le istruzioni di virtualizzazione al guest. Questo permette ad esempio di usare KVM, Xen, Hyper-V [...] dentro una macchina virtualizzata con KVM, molto utile per i test.
Ecco come fare
- Per prima cosa verificare che il processore sia un AMD e che supporti la virtualizzazione
cat /proc/cpuinfo |grep svm
flags : [...] svm [...]
- Caricare il modulo kvm_amd con in supporto nested abilitato
modprobe kvm_amd nested=1
- Creare uno script wrapper per qemu-kvm in /usr/local/bin/qemu-kvm-nested
#!/bin/bash
/usr/bin/qemu-kvm -enable-nesting $*
- Modificare (o prima creare se è necessario) il file xml della macchina virtuale utilizzando virsh edit e sostituendo
<emulator>/usr/bin/qemu-kvm</emulator>
con
<emulator>/usr/local/bin/qemu-kvm-nested</emulator>
- Lanciare la macchina virtuale
[root@cloud ~]# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 2
model name : QEMU Virtual CPU version 0.13.0
stepping : 3
cpu MHz : 1297.873
cache size : 512 KB
fpu : yes
fpu_exception : yes
cpuid level : 4
wp : yes
flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm up unfair_spinlock pni cx16 popcnt hypervisor lahf_lm svm abm sse4a
bogomips : 2595.74
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:

Esempio di CloudStack (richiede supporto a KVM) installato su RHEL6 all’interno di una VM KVM ospitata dal MicroServer
2 comments | tags: kvm, libvirt, server, virtualization | posted in MicroServer
Apr
26
2011
daniele
Attenzione! Per Fedora 15 sono necessari almeno 1GB di RAM per poter effettuare l’installazione.
Provando ad installare un webserver “minimo” su KVM, per testare le novità dell’ultima release, mi sono scontrato con un kernel panic in fase di boot dell’installer: il problema è che, almeno per la versione x86_64 soggetto del test, 512MB di RAM non sono sufficienti per scompattare l’initrd.img dell’installer poiché ora comprende anche l’immagine dell’installer install.img.
E’ necessario quindi, almeno per la fase di installazione, riservare alla VM almeno 1GB di RAM. Al termine dell’installazione è possibile tornare alla configurazione precedente.
Un’altra soluzione è definire la VM nel seguente modo
<memory>1048576</memory>
<currentMemory>524288</currentMemory>
Definendo quindi 512MB di RAM che in caso di necessità, su richiesta del guest possono essere estesi a 1024MB.
no comments | tags: kvm, linux, virtualization | posted in Other stuff