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.