You are on page 1of 10

Tutorial Qemu

Conceptes teòrics previs


Què és un emulador?: És un programa que emula (per software) el hardware complet d'un model d'ordinador
concret (processador, memòria, busos, perifèrics...). Això permet que la Cpu emulada pugui ser diferent de la
Cpu física i que, per tant, es pugui executar a l'emulador programes dissenyats per funcionar en una
arquitectura diferent de la de la màquina real (per exemple, executar "apps" de mòbil en un sistema Android
emulat sobre un PC). El preu a pagar, però, és la velocitat de funcionament del sistema emulat, ja que
l'emulació és una capa complexa de software força costosa en temps de processament. Qemu és un emulador.
Què és un virtualitzador?: És un programa que també emula el hardware complet d'un model d'ordinador
excepte en un aspecte: la Cpu, la qual és la mateixa que la que té la màquina real. Això vol dir que
l'arquitectura de la màquina virtualitzada ha de ser obligatòriament sempre la mateixa que la de la màquina
real sobre la que s'executa (x86, x86_64, etc). D'aquesta manera, s'aconsegueix més velocitat en el
funcionament de la màquina virtual ja que el codi dels programes corrent sobre el sistema virtual s'executa
directament a la Cpu real, com si fos nadiu. Qemu és capaç d'utilitzar un mòdul del kernel Linux (vàlid
només per arquitectures x86 o x86_64) anomenat KVM que permet precisament això: executar codi de la
màquina virtual directament sobre la Cpu física (és a dir, actuar com un virtualitzador, igual que VirtualBox).

Introducció a Qemu

El paquet "qemu" instal.la diferents executables que cal saber distingir. La majoria d'aquests
executables serveixen per emular una arquitectura sencera de màquina concreta (són les comandes que
s'anomenen "qemu-system-xxx" , com ara qemu-system-arm -que emula hardware ARM-, qemu-system-x86
-que emula hardware Intel 32 bits-, qemu-system-x86_64 -que emula hardware Intel 64 bits-, etc); altres
executables serveixen per executar només un determinat programa específic com si estigués funcionant sobre
una determinada tipus de màquina (són les comandes que s'anomenen "qemu-xxx", com ara qemu-arm,
qemu-x86, etc). Nosaltres de moment farem servir només la comanda qemu-system-x86_64, la qual ens
permetrà emular màquines PC "estàndar" senceres (com fèiem fins ara amb el VirtualBox).

En el cas d'usar les comandes "qemu-system-xxx" és interessant fer servir el seu paràmetre "-M ?"
per saber exactament quins tipus de màquines de l'arquitectura en qüestió poden emular (i llavors escollir-ne
una en concret amb "-M nomTipus"). No obstant, si aquest paràmetre no s'indica, qemu escull un tipus per
defecte; per exemple, en el cas de fer qemu-system-x86_64 -M ? podem veure que el tipus per defecte de
màquina a emular és un Pentium II.

Per defecte, la comanda qemu-system-x86_64 (i de fet, totes) funciona com emulador. Això fa que el
sistema emulat sigui molt lent. De fet, es pot fer qemu-system-x86_64 -cpu ? per veure quins tipus de Cpu
(compatible amb el tipus de màquina sel.leccionat) poden ser emulats per Qemu. Si volem que actui com
virtualitzador, hem d'indicar sempre el paràmetre -enable-kvm, així qemy-system-x86_64 -enable-kvm ...
Això farà, entre altres coses, que el valor del paràmetre -cpu abans indicat sigui "host". No obstant, el
paràmetre -enable-kvm només funcionarà si el sistema Linux real sobre el qual s'està executant Qemu és
capaç de carregar el mòdul KVM, cosa que només és possible si la Cpu física real incorpora una
característica específica anomenada "Intel VT/AMD-V" (la qual només està present en algunes Cpus de tipus
x86 o x86_64). La manera de saber si la nostra Cpu física la incorpora (o no) és executant la comanda grep
-E -o "svm|vmx" /proc/cpuinfo | uniq : si apareix la paraula "svm" o bé "vmx", la nostra Cpu podrà
executar KVM; si no apareix res, no (i per tant, Qemu només podrà funcionar com emulador). En
determinades distribucions, a més de la comanda anterior es pot fer servir una altra molt més senzilla per
esbrinar si podem usar KVM o no: kvm-ok
NOTA: Per saber si el mòdul KVM està actualment carregat es pot executar la comanda lsmod | grep "kvm"
NOTA: En alguns sistemes la virtualització via KVM ha de ser prèviament habilitada a la BIOS de la màquina real

Primers passos amb Qemu

1.-Creem el disc dur virtual que tindrà la nostra màquina virtual:

qemu-img create -f {raw|qcow2|vmdk|vdi} /ruta/fitxer.disc nº{K|M|G|T}


on el format de disc "raw" és el més compatible amb altres programes d'emulació perquè simplement consta
dels bits del disc "tal qual" sense cap alteració, el "qcow2", en canvi, permet xifratge i compresió (i és el que
farem servir quasi sempre per aquestes i altres funcionalitats afegides que anirem veient), el "vmdk" és el
nadiu del programa VMWare i el "vdi" és, com ja sabem, el de VirtualBox. El tamany del disc (que és
sempre dinàmic en el cas de ser "qcow2" i estàtic en el cas de ser "raw") es pot indicar, tal com es veu, en
KB, MB, GB o TB.

Una funcionalitat molt útil que ens ofereix qemu-img és la de crear discos "base" vinculats a altres discos.
La idea és tenir un disc amb tot el sistema ja instal.lat i configurat i fer-lo servir com a "base" (de només
lectura) d'un altre disc "superposat", que serà l'únic disc que tindrà la màquina virtual (el disc "base" es
quedarà sense connectar a res) i serà on s'emmagatzemaran els canvis que es vagin produint al sistema. El
gran avantatge d'aquest sistema és el fet de que, a més de què el disc "superposat" ocupa tan sols l'espai dels
canvis, el disc "base" es pot reutilitzar per diferents màquines virtuals executant-se a la vegada. D'aquesta
manera, en un aula es podria tenir per exemple un únic disc "base" per tothom (desvinculat de qualsevol
màquina) però cada alumne guardaria els canvis fets a la seva màquina virtual en el disc propi d'ella, que
seria un disc "superposat". D'aquesta manera es guanya espai i centralització de la configuració base inicial.
La manera de crear un disc "superposat" associat a un determinat disc "base" prèvimanet creat (amb format
"qcow2") és mitjançant la comanda:

qemu-img create -f qcow2 /ruta/fitxer.superposat nºG -o backing_file=/ruta/fitxer.base

Si en algun moment interessés "fusionar" el disc "superposat" amb el disc "base" per obtenir un nou disc
"base" amb tots els canvis integrats, es pot executar la comanda:

qemu-img rebase -b /ruta/fitxer.base /ruta/fitxer.superposat

Altres opcions interessants de la comanda qemu-img són:

qemu-img info /ruta/fitxer.disc Mostra informació sobre el disc


qemu-img check /ruta/fitxer.disc Busca errors en el disc (si no n'hi ha, no es mostra
res). Amb el paràmetre -r all els intenta reparar
qemu-img resize /ruta/fitxer.disc {+|-} nº{K|M|G|T} Canvia de tamany un disc. Si s'augmenta, el nou
espai apareixerà com espai lliure al final del disc.
Si es disminueix, ha d'haver prèviament un espai
lliure al final del disc d'un tamany tan gran (com a
mínim) com la reducció a fer.
qemu-img convert -f formatactual -O formatnou Canvia de format un disc (els valors possibles
/ruta/fitxer.discOriginal /ruta/fitxer.discNou poden ser: "vdi", "qcow2", "vmdk", "raw", etc.
Aquesta comanda ens serà molt útil per
transformar, per exemple, un arxiu VDI d'una
màquina VirtualBox en un arxiu qcow2 de Qemu.
qemu-img compare /ruta/fitxer1.disc /ruta/fitxer2.disc Comprova si el contingut dels dos discos indicats
és el mateix

I, més en concret, a l'hora de treballar amb snapshots, podem fer servir les següents opcions:

qemu-img snapshot -l /ruta/fitxer.disc Mostra els snapshots continguts dins del disc indicat
qemu-img snapshot -c nom /ruta/fitxer.disc Crea un nou snapshot (la màquina ha d'estar apagada)
qemu-img snapshot -a nº /ruta/fitxer.disc La pròxima vegada que arrenqui la màquina, ho farà amb
l'snapshot indicat
qemu-img snapshot -d nº /ruta/fitxer.disc Esborra l'snapshot indicat
2.-Arrenquem la màquina virtual (assignant-li el disc dur creat al pas anterior):

qemu-system-x86_64 -m nºMB [-cdrom {un.iso|/dev/cd}] -hda /ruta/fitxer.disc -boot order=cdn

on la "c" en boot order vol dir que arrenca des del primer disc dur, la "d" des del primer DVD i la "n", "o" i
"p" des de xarxa (usant la primera, segona i tercera tarja respectivament); també existeix el paràmetre -boot
menu=on per a què aparegui un menú des d'on es pugui escollir el dispositiu d'arranc desitjat en cada arranc.
Recordeu que a aquesta comanda caldrà afegir-li el paràmetre -enable-kvm per a què Qemu s'executi com a
virtualitzador i no com a emulador.

Altres paràmetres de qemu-system-xxx

A continuació es llisten alguns paràmetres que podem especificar per canviar els valors per defecte
de determinades característiques de la nostra màquina virtual:

-name "NomMaqVirt" Assigna un nom a la màquina que serà mostrat a la barra de la finestra
-smp nº Indica el nº de Cpus que tindrà la màquina emulada/virtualitzada
-daemonize Deslliga Qemu del terminal
-full-screen Arrenca la màquina virtual a pantalla completa. Es pot alternar entre pantalla
completa i pantalla "normal" pulsant les tecles CTRL+ALT+F. També existeixen
les combinacions CTRL+ALT++ i CTRL+ALT+- per engrandir o empetitir la
pantalla, respectivament.
NOTA: Totes aquestes combinacions (així com la CTRL+ALT+G, que permet gestionar
el cursor del ratolí dins i fora de la màquina virtual) es poden veure al menú "View" del
Qemu.
-snapshot Fa que la màquina virtual sigui de només lectura (fent que el canvis soferts
durant el seu funcionament es guardin a /tmp). No obstant, si en algun moment es
volguessin escriure els canvis realitzats fins el moment (des de l'arranc actual), es
pot fer executant la comanda commit del Qemu Monitor (en parlarem més
endavant).
-vnc [IPclient]:nºdisplay Arrenca un servidor VNC per mostrar la pantalla de la màquina virtual en altres
màquines clients. Si s'indica la IP d'un client, només aquell client es podrà
connectar al servidor (si no s'indica res, tothom es podrà connectar). El nº de port
(TCP) al que s'hauran de connectar els clients és nºdisplay+5900. Opcionalment,
després del nº de display (i separats per comes) es poden indicar diferents
opcions. Les més interessants són:

password : Serveix per indicar que el client haurà d'introduïr una contrasenya, la
qual s'haurà d'haver establert prèviament al servidor fent servir la comanda
set_passwd vnc contrasenya del "Qemu Monitor". En aquest sentit cal tenir en
compte que per poder utilitzar el"Qemu Monitor" amb el VNC activat haurem
d'executar Qemu amb el paràmetre addicional -monitor stdio per poder accedir al
"Qemu Monitor" des del terminal, ja que en no obrir-se cap finestra a la màquina
servidora està innaccesible des del seu lloc habitual.

share=[allow-exclusive|force-shared] : El primer valor indica que només es


podrà connectar un client a la vegada (l'últim que arriba) a no ser que el client
hagi especificat el paràmetre -shared. El segon valor indica que múltiples clients
podran connectar-se simultàniament al servidor hagin indicat o no el seu
paràmetre -shared
-vga xxx Indica el tipus de tarjeta gràfica que "tindrà" la màquina virtual. Els valors més
habituals són:
std (emula una tarjeta VGA -VESA 2.0 VBE-)
qxl (driver paravirtual 2D, compatible amb VGA -VESA 2.0 VBE-).
virtio (driver paravirtual 3D)
-soundhw yyy Indica el tipus de tarjeta de so que "tindrà" la màquina virtual (i, de pas, activa el
so en ella). Els valors més habituals són:
sb16: Emula una Creative SoundBlaster 16
hda: Emula una Intel HD Audio
ac97: Emula una Intel 82801AA AC97 Audio
pcspk : Emula el PC Speaker
all: Emula tots els models a la vegada
-readconfig fitxer.conf Permet llegir tots els paràmetres de configuració d'una màquina virtual d'un fitxer
(prèviament creat amb -writeconfig) en comptes d'haver d'introduïr-los
explícitament a la línia de comandes.

-writeconfig fitxer.conf Guarda en un fitxer de text (que podrà utilitzar-se posteriorment amb
-readconfig) la configuració indicada com a paràmetres a la línia de comandes.
-rtc opcio1,opcio2,... Per defecte, el rellotje de la màquina virtual és el de la màquina real. Si és
necessari desvincular-lo, es pot indicar l'opció clock=vm en comptes de
clock=host (per perfecte). Seguidament, caldrà indicar el temps inicial del
rellotge de la màquina virtual amb l'opció base=YYYY-MM-DDThh:mm:ss o
també base=utc o base=localtime.

Configuració de discos durs i CD/DVDs virtuals. Accés a discos durs i CD/DVDs reals

Quan es va introduïr la comanda qemu-system-x86_64 als paràgrafs anterior per mostrar com es
creen màquines virtuals, es va fer servir el paràmetre -cdrom per indicar l'existència i contingut d'una lectura
de DVD i el paràmetre -hda per indicar la conexió d'un disc dur. En realitat, Qemu ofereix força més
versatilitat a l'hora de definir quins dispositius d'emmagatzematge CD/DVDs i discos durs podem associar a
una màquina virtual. Aquesta versatilitat la podem aconseguir utilitzant el paràmetre -drive opcio1,opcio2,...
on les opcions que podem indicar són les següents:

media=disk Indica si el dispositiu (el "medi") és un disc dur o un CD/DVD


media=cdrom
if=scsi Indica el tipus de connexió que té el medi amb la "placa base virtual": "scsi"
if=ide representa SATA, "ide" representa IDE, "sd" representa la conexió SD típica de les
if=sd tarjetes de memòria i "virtio" és un driver paravirtual d'alt rendiment (en aquest
if=virtio darrer cas els dispositius apareixeran a la màquina virtual com "/dev/vdX").
index=nº Indica el nº de connector (del tipus indicat amb if) al qual està connectat el medi
file=/ruta/fitxer.disc Indica el fitxer de disc o fitxer ISO associat al medi en qüestió (és a dir, el disc dur
file=/ruta/fitxer.iso que tindrà la màquina virtual o el contingut que tindrà la seva lectora). També es pot
file=/dev/sdX indicar un disc real (sempre que no estigui accedint-se a ell des d'un altre lloc) o una
file=/dev/sr0 lectora real; en aquest cas, llavors cal afegir l'opció format=raw (ja que per defecte
el format utilitzat és "qcow2")
readonly Indica que el dispositiu ("medi") adjuntat serà de només lectura

En realitat, el paràmetre -cdrom és un sinònim de:


-drive media=cdrom,if=ide,index=2,file=/ruta/fitxer.iso
Similarment, els paràmetres -hda, -hdb, -hdc i -hdd són equivalents, respectivament, a:
-drive media=disk,if=ide,index=0,file=/ruta/fitxer.disc
-drive media=disk,if=ide,index=1,file=/ruta/fitxer.disc
-drive media=disk,if=ide,index=2,file=/ruta/fitxer.disc
-drive media=disk,if=ide,index=3,file=/ruta/fitxer.disc
Configuració de llàpisos USB virtuals. Accés a llàpisos USB reals

Per a què una màquina virtual Qemu pugui fer servir un llàpis USB virtual cal afegir, a més del
paràmetre -usb, el paràmetre -usbdevice disk:/ruta/fitxer , on "fitxer" pot ser un fitxer.disc creat per qemu-
img de la forma habitual o bé un fitxer ISO.

Per a què una màquina virtual Qemu pugui fer servir un llàpis USB real cal afegir, a més del
paràmetre -usb, el paràmetre -usbdevice host:vendorid:productid o, alternativament, -usbdevice
host:bus.addr . Tant els valors de vendorid i productid com bus i addr (que identifiquen al dispositiu USB en
concret) es poden trobar executant a la màquina real la comanda lsusb (els primers dos són els números que
apareixen després de la cadena "ID" separats per dos punts i els altres dos són els identificats per les cadenes
"Bus"i "Device", respectivament).

Configuració de la xarxa

Si no s'especifiquen opcions de xarxa, Qemu automàticament emula una única tarja de xarxa PCI
Intel e1000 configurada en mode "user". El mode "user" en Qemu és equivalent al mode "NAT" en el
VirtualBox: es posa en marxa un servidor DNS intern (a la IP 10.0.2.3) i un servidorDhcp intern (a la IP
10.0.2.2) que assignarà a les màquines virtuals direccions IPs a partir de la 10.0.2.15, les quals permetran
poder accedir a l'exterior. Aquest mode només suporta tràfic TCP i UDP, però (ICMP no, per exemple).

El paràmetre -net nic,caract1,caract2 serveix per indicar les característiques de la tarja de xarxa
virtual (model, direcció MAC, etc) però, a més a més, cal indicar amb un altre paràmetre -net el mode de
treball d'aquesta tarjeta. En aquest sentit, no indicar res i indicar -net nic -net user seria equivalent.

Les característiques més interessants que es poden indicar per una tarjeta són:

model=virtio Defineix el model de la tarjeta (per defecte és e1000). Hi ha més


model=rtl8139 models: consulteu man qemu-doc per saber-ne els detalls
model=i82551
model=pcnet
macaddr=xx:xx:xx:xx:xx:xx Defineix la direcció MAC de la tarjeta (per defecte és
52:54:00:12:34.56)
hostfwd=[udp]::hostport-:guestport Permet que des de fora es pugui accedir a la màquina virtual
(concretament, estableix un vincle -un "túnel", un "mapeig"- entre
un port determinat de la màquina real i un port determinat de la
màquina virtual -on estarà escoltant algun tipus de servidor- per
tal de què tot el que arribi al port real passi automàticament al
port virtual). Si el port és UDP cal indicar-ho. Aquesta opció es
pot indicar múltiples vegades per redireccionar diferents ports.

Altres modes de treball possibles a Qemu per les tarjetes de xarxa són:

"socket" : Serveix per connectar entre sí diferents màquines virtuals executant-se a la mateixa
màquina real. En principi semblaria equivalent al mode "xarxa interna" del VirtualBox, però no exactament:
la idea és que una de les màquines virtuals tingui un port obert (indicat amb l'opció "listen") al qual s'hi
connectaran la resta de màquines virtuals (amb l'opció "connect"). Així, per un costat tindrem:
qemu -m 512 -hda /ruta/fitxer.disc -net nic -net socket,listen=:1234
I per un altre:
qemu -m 512 -hda /ruta/unaltre.disc -net nic -net socket,connect=127.0.0.1:1234

"tap" i "bridge" : Un dispositiu TAP és una tarja de xarxa virtual al host conectada a la tarja física
real, a la qual el guest també està conectat. El mode "brigde" és una variant del mode "tap" simplificada, i els
dos es poden considerar equivalents al mode "adaptador pont" del VirtualBox No obstant, només el root pot
utilitzar aquest mètode.
El "Qemu Monitor"

El "Qemu Monitor" és una pantalla associada tota màquina virtual Qemu que ens permet interactuar
en temps real amb la màquina en qüestió. Per accedir-hi cal pulsar les tecles CTRL+ALT+2 (per tornar a la
pantalla "normal" de la màquina caldrà llavors pulsar CTRL+ALT+1) o bé accedint a l'opció corresponent
del menú "View".
NOTA: Aquestes tecles (i, en general, totes les combinacions possibles) es poden canviar si en executar el
Qemu s'afegeixen els paràmetre -alt-grab o -ctrl-grab. El primer fa que les tecles, en comptes de ser
CTRL+ALT, siguin CTRL+ALT+SHIFT i el segon fa que sigui només CTRL.

A continuació es llisten algunes de les moltes comandes que es poden executar al "Qemu Monitor":

help [comanda] Mostra l'ajuda de la comanda indicada (o si no, el llistat de totes les comandes)
info kvm Mostra si Qemu està fent servir kvm (es pot veure amb lsmod també)
info block Mostra les característiques dels dispositius de bloc (discs durs i DVDs) virtuals
info usb Mostra les característiques dels dispositius USB virtuals
info usbhost Mostra els dispositius USB reals que Qemu detecta
info network Mostra les característiques de les tarjes de xarxa virtuals
info vnc Mostra l'estat del servidor VNC integrat al Qemu
info history Mostra l'historial de comandes executades a la sessió actual del Qemu Monitor
info usernet Similar a la comanda ss -tu per la màquina virtual
info version Mostra la versió de qemu
commit all Si Qemu s'ha executat amb el paràmetre -snapshot aplica definitivament al disc
els canvis ocorreguts durant l'execució de la màquina virtual. Si la màquina
virtual està fent servir un disc "superposat", llavors és equivalent a la comanda
qemu-img rebase
change nominfoblock Coloca un nou contingut al DVD de la màquina emulada. Si el que es vol és
/ruta/arxiu.iso expulsar el contingut que hi hagi en aquest moment, la comanda serà llavors
eject nominfoblock

usb_add Adjunta un nou dispositiu USB a la màquina. Per treure'l la comanda a executar
disk:/ruta/fitxer.disc és usb_del nominfousb
screendump Realitza una captura de pantalla de la màquina virtual
/ruta/fitxer.foto

wavcapture Inicia una captura d'àudio de la màquina virtual. Per aturar-la la comanda a
/ruta/fitxer.audio executar és stopcapture nºcaptura (i per saber el nº de captura, info capture)
savevm nom Guarda una instantània de la màquina virtual en qüestió
loadvm nom Carrega la instantània indicada a la màquina virtual en qüestió.
Per saber les instantànies existents, executeu info snapshots
delvm nom Elimina l'instantània indicada
sendkey tecla-tecla Envia a la màquina virtual la combinació de tecles indicades. Fent servir
aquesta comanda -concretament, sendkey ctrl-alt-f1 - és com podrem canviar de
terminal virtual (CTRL+ALT+F1, etc), ja que d'una altra forma la màquina
virtual no rebrà les tecles correctament.
stop Pausa l'emulació
cont Reanuda l'emulació
system_reset Equivalent al botó de "reset" de la torre
system_powerdown Equivalent al botó d'apagat de la torre
quit Tanca qemu
UEFI
Les màquines virtuals Qemu emulen arrencar per BIOS, concretament fan servir una anomenada
SeaBIOS (http://www.seabios.org/SeaBIOS). Si volem que emulin arrencar per UEFI, hem de seguir els
següents passos:

1.-Instal.lar el paquet "ovmf" a l'Ubuntu real (a Fedora s'anomena "edk2-ovmf") . Aquest paquet és
una implementació per Qemu d'una UEFI lliure anomenada EDK2 desenvolupada dins del projecte
TianoCore (http://www.tianocore.org/edk2)

El paquet "ovmf" proporciona dos fitxers importants: un anomenat "OVMF_CODE.fd" i un altre


anomenat "OVMF_VARS.fd". El primer és la UEFI pròpiament dita: és un fitxer de només lectura que pot
estar compartit per totes les màquines virtuals Qemu que volguem. El segon, en canvi, ha de ser particular
per cada màquina virtual (és a dir, caldrà realitzar doncs una còpia del fitxer per cada màquina) perquè
representa l'espai on s'emmagatzema la configuració concreta -i editable- de la UEFI de la màquina en
qüestió (és a dir, l'ordre d'arranc establert pels seus dispositius, el gestor d'arranc seleccionat, etc). Cal tenir
en compte també que un cop associat un fitxer "OVMF_VARS.fd" a una màquina concreta és molt important
no canviar-lo mai perquè si no la màquna no podrà arrencar.

2.-Executar una comanda similar a aquesta (el fitxer ISO és opcional):

qemu-system-x86_64 -m 1G -enable-kvm
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd
-drive if=pflash,format=raw,file=/home/pepito/copia_OVMF_VARS.fd
-drive if=virtio,file=/ruta/fitxer.disc
-cdrom /ruta/fitxer.iso

Cal tenir en compte dos detalls importants: el paràmetre -drive corresponent a l'arxiu
OVMF_CODE.fd ha d'anar escrit sempre abans que el corresponent a l'arxiu OVMF_VARS.fd i, tal com
podeu veure, s'ha inclós l'opció readonly per OVMF_CODE.fd perquè si no es posa Qemu intentarà obrir
aquest fitxer en mode lectura-escriptura i es tancarà amb error.

Un altre detall a tenir en compte és que en l'arranc UEFI el paràmetre -boot s'ignora.
Exercicis:

1.-a) Arrenca una màquina Qemu que tingui les següents característiques:
*Ha de tenir 1500MB de RAM
*Ha de tenir una lectora de DVD amb la iso de l'Ubuntu Server col.locada
*Ha de tenir un disc dur de 8GB (prèviament creat amb format "qcow2")
*Ha de tenir endollat un llapis USB (prèviament creat també) -mira els paràmetre -usb i -usbdevice-
*Ha d'estar deslligada del terminal -mira el paràmetre -daemonize -
*Ha de ser UEFI
*Ha de guardar totes aquestes configuracions en un fitxer -mira el paràmetre -writeconfig -

b) Realitza la instal.lació de l'Ubuntu al disc dur fins el final. Les dades a introduïr durant l'assistent poden
ser les que vulguis però quan et demani com particionar, respón "Particionatge guiat (tot el disc)". Quan
l'assistent ja no et pregunti res més, deixa'l que vagi fent fins el final i continua amb els exercicis següents.

2.-a) Mentre l'instal.lador a la màquina virtual va fent, entra al "Qemu Monitor" i executa la comanda
necessària per tal d'enviar la combinació de tecles ALT+F4. ¿Què veus? ¿Quina seria la combinació de tecles
per tornar a veure la pantalla "estàndar" de l'instal.lador?

b) Deixa fent la màquina virtual i vés ara a la màquina real. Escull un disc dur que tinguis a mà d'alguna
màquina VirtualBox i converteix-lo en un disc "qcow2" compatible amb Qemu amb la comanda qemu-img
convert . Un cop fet això, redimensiona'l per a què tingui 2GB d'espai que tenia el disc original amb la
comanda qemu-img resize. Finalment, comprova que aquest nou disc efectivament sigui compatible amb
Qemu executant les comandes qemu-img info i qemu-img check

3.-a) Quan acabi la instal.lació de l'Ubuntu Server realitzada a l'exercici 1, arrenca la màquina virtual sense
cap iso a la lectora de DVD però amb el servidor VNC integrat de Qemu en marxa. Inicia-hi sessió en ella
amb el client Remmina.

b) Un cop estiguis a dins, executa les comandes necessàries per tal d'esbrinar:
*Quines particions s'han generat amb el "particionament guiat" i quin és el seu tamany i format
*Quin és el punt de muntatge de la partició ESP
NOTA: Al fitxer "NvVars" que hi ha a la partició ESP es guarden les configuracions que fem al UEFI (ordre
d'arranc, ús de diferents gestors d'arranc, etc) però només el podrem manipular amb la comanda efibootmgr
(que estudiarem més endavant) o bé entrant directament a la UEFI quan arrenqui la màquina virtual (cal pulsar
F2 per fer-ho!). En realitat, aquest fitxer és una representació a la màquina virtual del contingut que té, a la
màquina host, l'arxiu OVMF_VARS.fd.
*Què creus que fan els fitxers "grubx64.efi" i "grub.cfg" que estan dins de la carpeta EFI/ubuntu
NOTA: Aquesta carpeta està ubicada sota el punt de muntatge de la partició ESP

4.-Sense sortir de la màquina virtual, es demana transformar el llapis USB (que has de tenir-hi ja enxufat) en
un disc USB arrencable per UEFI amb la iso del Fedora Workstation posada. Els passos per aconseguir-ho
són els següents:

a) Entra al Qemu Monitor i executa les comandes info block i change ... de la forma adient per tal d'afegir la
iso del Fedora Workstation a la lectora de DVD de la màquina virtual (sol ser el dispositiu que apareix com
"ide1-cd0" al Qemu Monitor) mentre aquesta està funcionant.

b) Torna a la pantalla "estàndar" de la màquina virtual i executa les comandes necessàries (concretament,
fdisk i mkfs.vfat) per crear una partició de tipus FAT32 en el dispositiu USB i donar-li una etiqueta.
¡ATENCIÓ: abans que res l'USB ha de tenir la seva taula de particions de tipus GPT!...això es pot aconseguir
pulsant la tecla "g" dins de l'fdisk
c) Fes que aquesta partició FAT32 sigui de tipus ESP. Això es pot fer amb entrant al dispositiu un altre cop
amb l'fdisk i pulsant la tecla "t" per establir el tipus de partició com a "EFI System" (el codi corresponent es
podria consultar pulsant "L"...però ja et dic jo que és el número 1).
NOTA: Si tinguéssim un entorn gràfic, això també es podria haver fet amb el Gparted anant al seu menú "Partició"
->"Gestionar senyaladors"->"esp"

d) Assigna-li una etiqueta a la partició de l'USB. La comanda necessària per fer això (ja que la partició és
FAT32) és: dosfslabel /dev/sdXY etiqueta (on "X" indica la lletra del dispositiu i "Y" el número de partició)

e) Munta el DVD (recordeu que a Linux s'anomena /dev/sr0) en una carpeta qualsevol (l'anomenarem "dvd")
i la partició creada als passos anteriors del llapis USB (que en principi serà /dev/sdb1) en una altra carpeta
(l'anomenarem "usb"). Copia seguidament tot el contingut del DVD a aquesta partició de l'USB. És a dir,
executa: cp -r dvd/* usb

f) Obre amb l'editor vim (si no està, instal.la'l) l'arxiu "usb/EFI/BOOT/grub.cfg" i canvia l'etiqueta que hi ha
indicada com a valor del paràmetre "root=live:CDLABEL=" de la primera línia que comença per linuxefi ...
(és un valor com "Fedora-WS-Live-etc") per l'etiqueta que has especificat a l'apartat d). Aquesta línia es
correspon al kernel arrencat a la primera opció del menú.

g) I ja està! No cal fer res més! Com que el gestor d'arranc es troba a una carpeta anomenada EFI/BOOT dins
de la partició ESP que la UEFI localitzarà inmediatament cada cop que la màquina arrenqui . Reinicia la
màquina, pulsa F2 i escull el llapis USB com a dispositiu d'arranc dins de la llista que apareix dins l'opció
"Boot Manager". Hauria d'aparèixer Fedora

5.-L'Ubuntu Server que tenim instal.lat a la màquina virtual (a l'igual que el llapis USB arrencable que
acabem de generar a l'exercici anterior) per defecte fan servir el Grub com a gestor d'arranc. En aquest
exercici el que es pretén és canviar aquest gestor per un altre, concretament el Syslinux (versió UEFI), que ja
coneixem. Els passos a realitzar dins de la màquina virtual són els següents (caldrà que siguis root...pots
convertir-te de cop amb la comanda sudo -s):

a) Instal.la el paquet Syslinux (versió UEFI). És a dir, executar apt install syslinux-efi

b) Crea una subcarpeta dins de la carpeta /puntMuntatgeESP/EFI que s'anomeni "syslinux"

c) Copia dins d'aquesta carpeta "syslinux" el fitxer /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi


NOTA: Per saber aquesta ruta exacta, el que he fet ha sigut la comanda dpkg -L syslinux-efi , la qual mostra les rutes on
s'han copiat tots els fitxers que vénen dins del paquet indicat

d) Copia dins d'aquesta carpeta "syslinux" tots els fitxer que estan dins de la carpeta
/usr/lib/syslinux/modules/efi64

e) Copia dins d'aquesta carpeta "syslinux" el kernel i l'initrd de l'Ubuntu Server que estem fent servir.
Aquests dos fitxers es troben a la carpeta /boot (si hi ha varis, escolliu els que tenen la versió més elevada).
Podeu canviar-los el nom si voleu (jo suposaré que al kernel li anomenareu "vmlinuz"i a l'initrd
l'anomenareu "initrd.img")

f) Crea dins d'aquesta carpeta "syslinux" el fitxer de configuració "syslinux.cfg" amb el següent contingut:

UI vesamenu.c32
TIMEOUT 50
MENU TITLE Benvingut
LABEL xxx
MENU LABEL Arrencar Sistema
KERNEL vmlinuz
INITRD initrd.img
APPEND root=/dev/sda2 ro
El paràmetre "root" indica la partició on es troba la resta del sistema que el kernel haurà
d'anar a buscar per continuar l'arranc (és a dir, la partició on està instal.lat l'Ubuntu Server;
canvieu el valor si el vostre no s'ajusta a l'indicat aquí. El paràmetre "ro" indica al kernel que
l'arranc el faci en mode "només lectura" per evitar possibles problemes

g) Ara tenim dos gestors instal.lats, el Grub i el Syslinux. Per escollir aquest últim hem d'executar la
comanda: efibootmgr -c -d /dev/sdX -p 1 -l /EFI/syslinux/syslinux.efi -L "Syslinux" on:

* -c indica que es vol afegir un nou gestor d'arranc a la llista de gestors reconeguts per la UEFI
*-d indica el disc on es troba la partició ESP
*-p indica el número de partició (dins del disc indicat amb -d) que és la partició ESP
*-l indica la ruta (dins de la partició indicada per -p) on es troba el gestor d'arranc pròpiament dit
*-L indica una etiqueta per aquest nou gestor que s'afegeix. Opcional.

Executar aquesta comanda seria equivalent a entrar a la UEFI (pulsant F2) i anant al menú "Boot
Maintenance Manager"->"Boot Options"->"Add Boot Options". Allà podeu veure també que hi ha
les opcions de "Delete Boot Options" i "Change Boot Order", opcions que la comanda efibootmgr
també és capaç de gestionar.

h) Reinicia la màquina virtual i haurà de veure el menú de Syslinux amb una opció que ens permetrà arrencar
el sistema Ubuntu Server

6.-Arrenca la màquina virtual i entra a la UEFI. Vés a l'opció "Boot Manager"->"EFI Internal Shell".
Entraràs en un entorn de comandes especial que es pot fer servir per executar gestors d'arranc "a mà" i moltes
altres coses més. Fes el següent:

a) Escriu la comanda fs0: Aquesta comanda serveix per entrar a la partició ESP. Si seguidament executes la
comanda ls, ¿què veus?

b) Entra a la carpeta on es troba el gestor Grub i executa'l per tal d'arrencar la màquina com sempre

c) Digues per a què servirien un mínim de tres comandes de les que apareixen a la llista mostrada per la
comanda help -b i posa un exemple d'ús dels que apareixen executant help comandaEscollida
NOTA: Són especialment interessants les comandes type, edit, exit o cls, per exemple
NOTA: Pot ser interessant la consulta de http://h20564.www2.hpe.com/hpsc/doc/public/display?docId=c03886471

Trucs:
*Per saber si un disc dur és "dos" o GPT, es pot executar la comanda: blkid -s PTTYPE -o value /dev/disc
*Per saber si un sistema ha arrencat en UEFI,en executar ls /sys/firmware/efi/efivars s'hauran de veure coses

You might also like