A volte è comodo poter accedere alle immagini in formato raw create per immagazzinare i file e il filesystem di una macchina virtuale. Dunque c’è un modo per montare il file del disco virtuale sul filesystem dell’host. La prima cosa da fare è ovviamente spegnere la virtual machine. Nelle vecchie versioni di Xen era disponibile un tool lomount che permetteva di montare le partizioni contenute in un file raw, ma ora è stato tolto, perciò bisogna fare in un altro modo.

Mediante l’uso dei questa sequenza di comandi è possibile innestare una partizione del disco virtuale nella directory /mnt:

lenny.img è il file immagine in formato raw che contiene i dati della macchina virtuale (sia Xen o QEMU (eventualmente KVM).

# losetup /dev/loop0 lenny.img

Il comando non fa altro che creare un dispositivo loop, qui si è scelto il numero 0 ma se dovesse essere già occupato (usato da qualche altro programma) è possibile sostituire loop0 con loop1, loop2… (avendo cura di ricordare il cambiamento e riportarlo in tutti i passaggi della procedura).

# kpartx -av /dev/loop0

Lo strumento kpartx non fa altro che leggere la tabella delle partizioni del device specificato e crea un device map per ogni segmento di partizione riconosciuto. Con l’opzione v,  viene visualizzato il seguente output che indica quali partizioni sono presenti nell’immagine. [ad#midarticlequadr]

add map loop0p1 (253:0): 0 6731172 linear /dev/loop0 63
add map loop0p2 (253:1): 0 433755 linear /dev/loop0 6731235
add map loop0p5 : 0 433692 linear 253:1 63

Sono state riconosciute 3 partizioni, la prima contiene il filesystem radice / mentre l’altra è una partizione estesa ce serve per memorizzare la swap. Perciò è la prima che interessa: loop0p1.

Ora col comando mount si deve innestare il device map della prima partizione su una directory del host. In questo caso è stato scelto /mnt

# mount /dev/mapper/loop0p1 /mnt/

Ora in /mnt si trovano tutti i dati della macchina virtuale, per cui è possibile inserire file o prelevarli comodamente.

xen-dom0:/# cd /mnt/
xen-dom0:/mnt # ls
bin    dev   initrd.img  media  proc  selinux  tmp  vmlinuz
boot   etc   lib         mnt    root  srv      usr
cdrom  home  lost+found  opt    sbin  sys      var

Per smontare il tutto e ripoter adoperare l’immagine è necessario uscire dalla cartella in cui è stato montata la partizione:

xen-dom0:/mnt/boot # cd
xen-dom0:/root #

Ora smontare la partizione dal device map:

# umount /dev/mapper/loop0p1

Dissociare le partizioni dal device map:

# kpartx -vd /dev/loop0

Verrà mostrato un output simile:

del devmap : loop0p5
del devmap : loop0p2
del devmap : loop0p1

L’ultimo passo è liberare la periferica di loop:

Toshiba 4TB Canvio Basics Portable External Hard Drive,USB 3.2. Gen 1, Black (HDTB440EK3AA)

# losetup -d /dev/loop0

Spero che questo how to sia stato utile.

Di valent

2 commenti a “Montare file immagine di Xen e QEMU”
  1. Ciao,
    complimenti un how to utilissimo, ha risolto rapidamente ed elegantemente, il mio problema di trasferire file su una macchina virtuale con problemi di riconoscimento della Sk di rete (quindi nessuna cartella condivisa), senza dover ogni volta creare iso contenenti i file da trasferire, con il conseguente problema di recuperare poi i file modificati. Mi permetto solo di suggerire l’aggiunta al comando di mount di un umask=0000 che permette di usare l’immagine montata senza i permessi di root, cosa molto comoda. Quindi diventa:
    mount -o umask=0000 /dev/mapper/loop0p1 /mnt/
    Cari saluti
    Nando

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *