Montare la partizione di una VM ospite così da poter interagire con il file system recuperando eventualmente alcuni file. Il metodo sfrutta il fatto che Dom0 ( host machine ) si comporta come una VM quindi è possibile per la disk image virtuale (VDI) di una VM creare una nuovo VDB e quindi connettere la VDI all’host. LO stesso metodo è usato quando una VDI viene connessa a qualsiasi altro guest.
Glossario
dom0 = dominio privilegiato. E’ la Virtual Machine (VM) creata dall’Hypervisor di XenServe al boot. Il dominio privilegiato è l’unico che ha accesso diretto all hardware e che si occupa di lanciare le altre VM .
domU = dominio non privilegiato . Tutte le altre istanze di macchina virtuale (VM) in esecuzione diverse da dom0 sono dominioU: viene creato un distinto dominio per ogni istanza.
Host: la machine che esegure XenServer
Guest: una Virtual Machine eeeguita dentro XenServer.
VM : Virtual Machine, in XenServer è identificata da uno specifico uuid è ospitata in una Virtual Disk Image con un proprio vdi-uuid ed è connessa al dom0 grazie a un VBD con un suo vdb-uuid.
VDI: Virtual Disk Image, un immagine o file che rappresenta un hard disk virtual.
VDB: Virtual Block Device, un modo per connettere una VDI a una virtual machine
UUID: Universally unique identifier. Una stringa di caratteri che XenServer, in this case, per idenficare in modo univoco un particolare oggetto. You can read more at http://en.wikipedia.org/wiki/UUID
Montaggio della partizione LVM di una VM
Dalla console di XenServer host (dom0) ricerchiamo l’UUID della stessa Dom0 VM:
xe vm-list | grep -B 1 -e Control
[root@localhost ~]# xe vm-list | grep -B 1 -e Control
uuid ( RO) : bddad094-84a3-49ef-89c9-8f26fe88200d
name-label ( RW): Control domain on host: xenserver-jlvuukyx
Dalla console di XenServer host (dom0) ricerchiamo l’UUID del VDI della VM alla quale dobbiamo accedere. Esistono più metodi questo consente di ottenere il VBD e il VDI della specifica VM
xe vm-list name-label=<vm-name>
o
xe vm-disk-list uuid=<vm-uuid>
[root@localhost ~]# xe vbd-list vm-name-label="Ubuntu Precise Pangolin 12.04 (64-bit)] (1)"
uuid ( RO) : fc7be39f-661a-4efb-52ba-dba755c944c0 (VBD)
vm-uuid ( RO): f09353ee-f7bd-3825-5fb2-6e97cfb7356a
vm-name-label ( RO): Ubuntu Precise Pangolin 12.04 (64-bit)] (1)
vdi-uuid ( RO): ecc801e0-f24c-4b31-a391-2e10bc9baeeb
empty ( RO): false
device ( RO): xvda
uuid ( RO) : 6dbe9231-c24a-f736-7b8e-0446509184e4
vm-uuid ( RO): f09353ee-f7bd-3825-5fb2-6e97cfb7356a
vm-name-label ( RO): Ubuntu Precise Pangolin 12.04 (64-bit)] (1)
vdi-uuid ( RO):
empty ( RO): true
device ( RO): xvdd
o
[root@localhost ~]# xe vm-disk-list uuid=f09353ee-f7bd-3825-5fb2-6e97cfb7356a
Disk 0 VBD:
uuid ( RO) : fc7be39f-661a-4efb-52ba-dba755c944c0
vm-name-label ( RO): Ubuntu Precise Pangolin 12.04 (64-bit)] (1)
userdevice ( RW): 0
Disk 0 VDI:
uuid ( RO) : ecc801e0-f24c-4b31-a391-2e10bc9baeeb
name-label ( RW): Ubuntu Precise Pangolin 12.04 (64-bit)] (1) 0
sr-name-label ( RO): Local storage
virtual-size ( RO): 8589934592
Creiamo un nuovo VBD per il virtual disk (VDI) della VM guest in oggetto. Il comando ritornera l’uuid del VBD creato.
xe vbd-create device=0 vm-uuid=<uuid-dom0> vdi-uuid=<uuid-vm-disk>
[root@localhost]# xe vbd-create vm-uuid=bddad094-84a3-49ef-89c9-8f26fe88200d vdi-uuid=ecc801e0-f24c-4b31-a391-2e10bc9baeeb device=autodetect
4e55fd78-d367-ccc0-dfc8-f06557080217
attacchiamo a dom0 il VDI grazie al nuovo VBD
xe vbd-plug uuid=uuid-del-nuovo-vbd
xe vbd-plug uuid=4e55fd78-d367-ccc0-dfc8-f06557080217
A questo punto dovrebbe già essere possibile il mount delle partizioni del VDI.
( In alternativa continuare con il device mapping vedi sotto )
Con fdisk -l sarà possibile visualizzare le partizioni del device /dev/xvdc
che potranno essere montate in modo classico con mount
[root@localhost ~]# fdisk -l
....
....
Partition table entries are not in disk order
Disk /dev/xvdc: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/xvdc1 * 1 32 248832 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/xvdc2 32 1045 8136705 5 Extended
/dev/xvdc5 980 1045 522240 82 Linux swap / Solaris
/dev/xvdc6 32 980 7614464 83 Linux
Partition table entries are not in disk order
con blkid
....
/dev/xvdc1: UUID="35541399-3d95-4062-a01f-4a4e422a923a" TYPE="ext4"
/dev/xvdc5: TYPE="swap" UUID="a0e6a65f-7bb4-4fc8-9552-ced71d1605f3"
/dev/xvdc6: UUID="dd26435b-c609-45ae-b474-bffc88350a14" TYPE="ext4"
Montaggio ad esempio
mkdir /tmp/c-boot
mkdir /mnt/c-root
mount /dev/xvdc1 /mnt/c-boot
mount /dev/xvdc6 /mnt/c-root
Per analizzare la situazione delle partizioni in gioco utilizzare i comandi
fdisk -l
df -a
blkid
Ripristino condizione iniziale
Terminata l’azione sul file system bisogna ripristino delle condizioni iniziali diversamente la VM non può essere avviata.
Smontare i volumi logici con
umount /tmp/c-boot
umount /tmp/c-root
controllare l’esistenza di ulteriori punti di mount con
df -a
disconnettere il VBD
xe vbd-unplug uuid=VBD-uuid
[root@localhost /]# xe vbd-unplug uuid=4e55fd78-d367-ccc0-dfc8-f06557080217
Eliminare il VBD
xe vbd-destroy uuid=VBD-uuid
[root@localhost /]# xe vbd-destroy uuid=4e55fd78-d367-ccc0-dfc8-f06557080217
Aternativa: continuare con il device mapping
Per confermare che il device creato (xvdc)
[root@localhost tmp]# xe vbd-list uuid=4e55fd78-d367-ccc0-dfc8-f06557080217 params=device --minimal
xvdc
Quindi utilizziamo kpartx per effettuare il mounting delle partizioni del disco virtuale (VDI)
kpartx -a /dev/xvda
root@localhost /]# kpartx /dev/xvdc
xvdc1 : 0 497664 /dev/xvdc 2048
xvdc5 : 0 1044480 /dev/xvdc 15730688
xvdc6 : 0 15228928 /dev/xvdc 501760
Effettuare lo scan dei volumi fisici :
# pvscan
[root@localhost /]# pvscan
PV /dev/sda3 VG VG_XenStorage-2963fe01-920a-b067-6880-3dcff67dea31 lvm2 [923.86 GB / 34.55 GB free]
Total: 1 [923.86 GB] / in use: 1 [923.86 GB] / in no VG: 0 [0 ]
Attivare il volume group con:
vgchange -ay VG-name
vgchange -ay VG_XenStorage-2963fe01-920a-b067-6880-3dcff67dea31
Montare il volume logico con i files ai quali si desidera accedere:
mount /dev/VG-name/LV-name /tmp/mnt/
A questo punto è possibile accedere ai files in libertà.
Terminata l’azione sui files ricordarsi di ripristare la situaizone iniziale diversamente la Vm non può essere avviata. Allla procedura evidenziata sopra va aggiunta sola la rimozione del device mapping. Quindi evindeziando tutti i passaggi:
Smontare i volumi logici con
umount /tmp/c-boot
umount /tmp/c-root
controllare l’esistenza di ulteriori punti di mount con
df -a
se è stato fatto il device mapping rimuoverlo con
kpartx -d /dev/xvdc
sconnetere il VBD
xe vbd-unplug uuid=VBD-uuid
Eliminare il VBD
xe vbd-destroy uuid=VBD-uuid
ATTENZIONE
Prima di riprendere la normale attività e bene sempre controllare ancora una volta
l’esistenza di VBD facenti capo al dom0 con
xe vbd-list uuid = uuid_dom0
se esistono ancora VBD non previsti procedere con l’unplug e il destroy del vbd come precisato sopra
Altre risorse nle blog: