Skip to content

351.5 Virtual Machine Disk Image Management (weight: 3)

Description: Candidates should be able to manage virtual machines disk images. This includes converting disk images between various formats and hypervisors and accessing data stored within an image.

Key Knowledge Areas:

Understand features of various virtual disk image formats, such as raw images, qcow2 and VMDK
Manage virtual machine disk images using qemu-img
Mount partitions and access files contained in virtual machine disk images using libguestfish
Copy physical disk content to a virtual machine disk image
Migrate disk content between various virtual machine disk image formats
Awareness of Open Virtualization Format (OVF)

The following is a partial list of the used files, terms and utilities:

qemu-img
guestfish (including relevant subcommands)
guestmount
guestumount
virt-cat
virt-copy-in
virt-copy-out
virt-diff
virt-inspector
virt-filesystems
virt-rescue
virt-df
virt-resize
virt-sparsify
virt-p2v
virt-p2v-make-disk
virt-v2v
virt-sysprep

Qemu-img

Formato de ficheros de disco mas utilizados

  • raw: sin formato
  • qcow2: la información solo se almacena cuando se escribe. Es decir si el disco es de 10G y solo se a escrito 100M el archivo de disco pesa 100M
  • vmdk: permitew dividir el disco en diferentes archivos, crear snapshots, ... (buscar mas caracteristicas)

El paquete que proporciona las herramientas es qemu-utils

qemu-img create -f raw disco_raw.img 1G
qemu-img create -f qcow2 disco_qcow2.qcow2 1G 
qemu-img create -f vmdk disco_vmdk.vmdk 1G

ll -h *
-rw-r--r-- 1 debian debian 193K ene  4 08:14 disco_qcow2.qcow2
-rw-r--r-- 1 debian debian 1,0G ene  4 08:14 disco_raw.img
-rw-r--r-- 1 debian debian 192K ene  4 08:15 disco_vmdk.vmdk

información del disco

➜ qemu-img info disco_qcow2.qcow2 
image: disco_qcow2.qcow2
file format: qcow2
virtual size: 1 GiB (1073741824 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

Disco overlide

Es un disco que solo almacena los cambios basado en otro disco, es decir tenemos un disco con un SO intalado, con overlade se utiliza el disco base como plantilla y apartir de ese se guardan los cambios en el nuevo disco.

➜ qemu-img create -f qcow2 -b debian.qcow2 debian2
➜ qemu-img info debian2 
image: debian2
file format: qcow2
virtual size: 1 GiB (1073741824 bytes)
disk size: 196 KiB
cluster_size: 65536
backing file: debian.qcow2
backing file format: qcow2
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

➜ qemu-system-x86_64 -accel kvm -m 2048 debian2

Cambio de formato

➜ qemu-img convert -f qcow2 origen.qcow2 -O vmdk destino.vmdk
➜ qemu-img convert -f qcow2 debian.qcow2 -O vmdk debian.vmdk

guestfish/guestmount/guestumount

El paquete libguestfs-toolsp proporciona una serie de herramientas para interactuar con ficheros de disco

guestfish ( es una shell interactiva )
><fs> add disco_qcow2.qcow2
><fs> run
><fs> help

><fs> list-filesystems
><fs> mount-ro /dev/debian-vg/root /
><fs> cat /etc/fstab
><fs> exit  guestmount --add disco_qcow2.qcow2 -i temporal/  guestumount temporal/

montar una maquina gestionada por libvirt

➜ virsh list
Id   Nombre     Estado
-----------------------
1     vmdebian  running

guestmount -d vmdebian -c qemu:///system --ro -i temporal/

virt

Resumen de ordenes:

virt-cat -a debian-11.qcow2 /etc/hosts          # ver contenido de fichero de un disco
virt-copy-in -a debian-11.qcow2 ./randomLocalFile.txt /home/jorge/Documentos/
virt-copy-out -a debian-11.qcow2  /home/jorge/Documentos/FileInMV.txt ./
virt-diff [--options] -d domain1 -D domain2     # diferencia entre discos
virt-inspector -a debian-11.qcow2               # info en xml sobre disco
virt-filesystems -a debian-11.qcow2 --long --human-readable # muestra particiones
virt-rescue  -a debian-11.qcow2 --suggest   
virt-df -a debian-11.qcow2 -h                   # muestra filesistem igual que df
virt-resize --expand /dev/sda2 olddisk newdisk.qcow2
virt-sparsify  debian11-10G.qcow2 sparsify.qcow2    # libera espacio de disco
virt-sysprep  -a debian11-10G.qcow2             # elimina claves unicas, ssh, ip, ...

virt-cat nos ayuda a visualiza archivos dentro de un disco

 virt-cat -a debian-11.qcow2 /etc/hosts
127.0.0.1   localhost
127.0.1.1   unassigned-hostname.unassigned-domain   debian-11

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

virt-copy-in/ou copian ficheros/directorios entre discos de MV y local

virt-copy-in -a disk.img file|dir [file|dir ...] /destination
virt-copy-in -d domain file|dir [file|dir ...] /destination

➜  virt-copy-in -a debian-11.qcow2 ./randomLocalFile.txt /home/jorge/Documentos/

virt-copy-out -a disk.img /file|dir [/file|dir ...] localdir
virt-copy-out -d domain /file|dir [/file|dir ...] localdir

➜  virt-copy-out -a debian-11.qcow2  /home/jorge/Documentos/FileInMV.txt ./

virt-diff muestra diferencias entre discos

virt-diff [--options] -d domain1 -D domain2
virt-diff [--options] -a disk1.img -A disk2.img [-a|-A ...]

virt-inspector muestra informacion en xml sobre el disco de la maquina virtual

virt-inspector -a debian-11.qcow2

virt-filesystems muestra particiones del disco

➜  virt-filesystems -a debian-11.qcow2 --long --human-readable
Name       Type        VFS   Label  Size  Parent
/dev/sda1  filesystem  ext4  -      5,8G  -

virt-rescue corre una shell dentro del disco de la MV

# suggest sugiere comandos de ayuda para crear el chroot en el disco
virt-rescue  -a debian-11.qcow2 --suggest   
virt-rescue  -a debian-11.qcow2

virt-df muestra espacio en virtual filesystems

➜ virt-df -a debian-11.qcow2 -h
Sistema de archivos                    Tamaño  Utilizado Disponible Utilización%
debian-11.qcow2:/dev/sda1                 5,8G       987M       4,5G   17%

virt-resize redimensiona discos de maquinas virtuales

qemu-img create -f qcow2  -o preallocation=metadata  newdisk.qcow2 10G
virt-resize --expand /dev/sda2 olddisk newdisk.qcow2

➜  virt-df -a newdisk.qcow2 -h
Sistema de archivos                    Tamaño  Utilizado Disponible Utilización%
newdisk.qcow2:/dev/sda1              9,8G       987M       8,3G   10%

virt-sparsify libera el espacio que no se esta utilizando en un disco de maquina virtual

virt-sparsify [--options] indisk outdisk
virt-sparsify  debian11-10G.qcow2 sparsify.qcow2

-rw-r--r-- 1 debian debian  11G ene  4 19:08 debian11-10G.qcow2
-rw-r--r-- 1 debian debian 1,2G ene  4 19:10 sparsify.qcow2

virt-p2v covierte maquinas fisicas a virtuales sobtre KVM

hacer un usb booteable
virt-p2v-make-disk -o /dev/sdX

virt-p2v-make-disk -o imageusb.img
qemu-system-x86_64 -accel kvm -m 2048 imageusb.img

se arranca desde el usb y se siguen las indicaciones para la conversion

virt-v2v migra discos e un formato a otro

virt-v2v -i disk debian.vmdk -o local -of qcow2 -os temporal/
ls temporal
debian-sda
debian.xml

➜ file temporal/debian-sda 
debian-sda: QEMU QCOW2 Image (v3), 10737418240 bytes

virsh create temporal/debian.xml
qemu-system-x86_64 -accel kvm -m 2048 temporal/debian-sda

virt-sysprep puede restablecer o desconfigurar una máquina virtual para que se puedan hacer clones de ella. Los pasos en este proceso incluyen eliminar las claves de host SSH, eliminar la configuración de red MAC y eliminación de cuentas de usuario.

virt-sysprep  -a debian11-10G.qcow2 
virt-sysprep  --mkdir /directorio_prueba --delete /root/.ash-history -a debian11-10G.qcow2

Open Virtualization Format (OVF)

Es un estándar abierto para empaquetar y distribuir servicios virtualizados o de forma más general software a ejecutar en máquinas virtuales.

Tanto Open Virtualization Format (OVF) como Open Virtual Appliance (OVA) son las dos presentaciones del estándar. El formato OVF está formado por varios archivos, mientras que el formato OVA es una versión del OVF en formato tar (archivo único) para facilitar la descarga desde la red.