Come montare un'immagine del disco virtuale QEMU

Contenuti

Supponiamo di scoprire dati aziendali critici in un file di foglio di calcolo DOS legacy e che Excel non sia in grado di leggere il file. Se il programma legacy era originariamente eseguito in DOS, puoi avviare una copia di FreeDOS e installare lì il programma legacy per estrarre o esportare i dati in un formato di file comune, come file CSV separato da virgole.

Puoi seguire le nostre istruzioni per installare e avviare FreeDOS utilizzando la macchina virtuale QEMU. Ma avendo installato FreeDOS, Come si installa ed esegue il programma legacy in QEMU?

Puoi montare un'immagine disco QEMU usando due metodi di base: utilizzando un offset per montare direttamente l'immagine, o usando il libguestfs-tools pacchetto.

Linux può montare il formato immagine del disco raw di QEMU, supponendo che tu sappia dove trovare l'inizio della partizione dell'unità C: sul disco virtuale. Il disco virtuale può contenere più partizioni, ma per la maggior parte delle installazioni di sistemi operativi legacy come DOS, Probabilmente hai solo una partizione. Questa è l'unità C :.

Diamo un'occhiata all'output di Linux fdisk Programma. Usando il -l L'opzione consente di visualizzare un elenco di partizioni sul disco virtuale:

$ fdisk -l image.img 
Disco image.img: 100 MiB, 104857600 byte, 204800 Settori
Unità: settori di 1 * 512 = 512 bytes
Sector size (logico/fisico): 512 byte / 512 bytes
I/O size (minimo/ottimale): 512 byte / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Avvio del dispositivo Inizio Fine Settori Dimensione Id Tipo
image.img1 *       63 204623  204561 99.9m  6 FAT16

Qui, guidare C: è la prima e unica partizione sull'unità virtuale, elencato come image.img1 Per impostare l'offset dell'unità C :, devi conoscere il settore di avvio di quella partizione. L'uscita di fdisk mostralo come 63.

Per calcolare lo spostamento, devi anche conoscere la dimensione del settore. Questa immagine del disco virtuale ha settori di 512 byte. Calcola la compensazione come il prodotto della compensazione e la dimensione del settore: 63 × 512 = 32256.

Usa questo valore di offset per montare l'unità C: virtuale da Linux:

$ mkdir /tmp/dos
$ sudo mount -o loop,offset=32256 image.img /tmp/dos
$ ls /tmp/dos
AUTOEXEC.BAT  COMMAND.COM  FDCONFIG.SYS  FDOS  KERNEL.SYS
$ sudo umount /tmp/dos

È possibile automatizzare il calcolo tramite uno script Bash. Lo script deve prima raccogliere i valori in un formato facilmente analizzabile. Sul mio sistema Linux, Utilizzare il comando -o opzione con fdisk Per specificare le colonne da stampare. Come ho solo bisogno di abbinare la partizione (Dispositivo) e il valore Start, Io uso questo fdisk per elencare le colonne di cui ho bisogno:

$ fdisk -l -o Dispositivo,Avviare image.img 
Disco image.img: 100 MiB, 104857600 byte, 204800 Settori
Unità: settori di 1 * 512 = 512 bytes
Sector size (logico/fisico): 512 byte / 512 bytes
I/O size (minimo/ottimale): 512 byte / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Avvio del dispositivo
image.img1    63

E uno script Bash può analizzare quell'output usando Gawk per calcolare l'offset da solo.:

#!/cestino/bash
# uso: qemu-mount {file immagine}
# 1argomento st: QEMU raw image file

if [ $# -Nato 1 ] ; then
  echo 'usage: qemu-mount imagefile'
  echo 'Mounts a QEMU raw image file to /tmp/dos'
  exit 1
fi

start=$( fdisk -l -o Dispositivo,Inizio ${1} | grep "^${1}1" | gawk'{Stampa $2}' )
settori=$( fdisk -l ${1} | grep '^Unità: settori di» | gawk'{Stampa $(NF-1 ·)}' )
offset=$(( $cominciare * $Settori ))

[ -d /tmp/due ] || mkdir /tmp/dos
sudo mount -o loop,offset=$offset ${1} /tmp/due

Dopo aver montato l'immagine del disco virtuale QEMU sul /tmp/dos punto di montaggio temporaneo, può leggere e scrivere dati sull'unità C: virtuale. Questo è un modo pratico per copiare un programma di installazione di un programma legacy nella macchina virtuale o copiare dati all'esterno della macchina virtuale. Nonostante questo, dovresti montare l'immagine del disco virtuale solo quando QEMU non è in esecuzione. Se provi a montare un'immagine del disco QEMU mentre è in uso, può corrompere il disco virtuale.

Quando hai finito di inserire l'immagine del disco virtuale da Linux, non dimenticare di smontare l'immagine con il umount comando.

il libguestfs-tools Il pacchetto fornisce una serie di strumenti per accedere alle immagini del disco della macchina virtuale. Incluso in questo toolkit è guestmount , che rende davvero facile montare un'immagine disco QEMU da Linux. Se la tua distribuzione non include questo pacchetto per impostazione predefinita, potrebbe essere necessario installare il libguestfs software separatamente. Nonostante questo, molte distribuzioni Linux, compresa Fedora, Red Hat Enterprise Linux, Debian e Ubuntu forniscono un libguestfs-tools pacchetto che puoi installare tramite il tuo gestore di pacchetti.

Due opzioni dicono guestmount come inserire l'immagine del disco QEMU. il --add imagefile L'opzione specifica l'immagine del disco virtuale con cui lavorare e il --mount device opzione dice guestmount quale partizione usare dall'immagine del disco. Devi puntare il dispositivo attraverso un percorso Linux standard, Che cosa /dev/sda1 per la prima partizione nell'immagine del disco virtuale.

Con queste due opzioni, montare l'immagine del disco virtuale da Linux è un comando a riga singola:

guestmount --add image.img --mount /dev/sda1 /tmp/dos

Dopo un momento, questo monta l'unità C: virtuale su punto di montaggio temporaneo / tmp / A partire dal. Può inserire file immagine del disco virtuale /tmp/dos utilizzando strumenti Linux standard, Che cosa cp e mv, per copiare i dati dentro e fuori il disco virtuale. Fare attenzione a montare l'immagine del disco solo quando QEMU non è in esecuzione, o potrebbe danneggiare il disco virtuale.

Quando hai finito con l'unità C: virtuale, puoi smontare il filesystem usando il guestunmount comando.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.