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
Jan
21
2012
daniele
Supponendo di voler creare un volume LVM nel disco sdd per prima cosa inizializziamo lo spazio
pvcreate initializes PhysicalVolume for later use by the Logi‐
cal Volume Manager (LVM). Each PhysicalVolume can be a disk
partition, whole disk, meta device, or loopback file.
Successivamente creiamo il gruppo di volumi. Come estenzione fisica del volume (non quella virtuale che poi sarà quella realemente disponibile) è suggerito un valore di 32MB
vgcreate -s 32M backup /dev/sdd
vgcreate creates a new volume group called VolumeGroupName
using the block special device PhysicalDevicePath.
Infine creiamo il volume logico vero e proprio assegnadogli una dimensione e un nome. Tale dimensione potrà venire estesa successivamente con lvextend.
lvcreate -L200G -nhomebk backup
lvcreate creates a new logical volume in a volume group ( see
vgcreate(8), vgchange(8) ) by allocating logical extents from
the free physical extent pool of that volume group.
A questo punto il nuovo volume sarà disponibile come device attraverso il path /dev/gruppo/nomevolume pronto per poter essere formattato.
Ricordo che LVM può essere creato anche all’interno di una partizione o di un’immagine disco.
Riferimenti
- man pvcreate
- man vgcreate
- man lvcreate
no comments | tags: disk, libvirt, lvm, raid, software, virtualization, vm | 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