Como montar uma imagem de disco virtual QEMU

Conteúdo

Suponha que você descubra dados críticos de negócios em um arquivo de planilha DOS legado e o Excel não consiga ler o arquivo. Se o programa legado originalmente rodava em DOS, você pode iniciar uma cópia do FreeDOS e instalar o programa legado para extrair ou Exportar os dados em um formato de arquivo comum, como um arquivo CSV separado por vírgulas.

Você pode seguir nossas instruções para instalar e iniciar o FreeDOS usando a máquina virtual QEMU. Mas tendo instalado o FreeDOS, Como você instala e executa o programa legado no QEMU?

Você pode montar uma imagem de disco QEMU usando dois métodos básicos: usando um deslocamento para montar a imagem diretamente, ou usando o libguestfs-tools pacote.

Linux pode montar o formato de imagem de disco bruto do QEMU, presumindo que você saiba onde encontrar o início da partição da unidade C: no disco virtual. o disco virtual pode conter várias partições, mas para a maioria das instalações de sistema operacional legado, como o DOS, você provavelmente só tem uma partição. Esta é a unidade C :.

Vamos olhar para a saída do Linux fdisk Programa. Usando o -l a opção exibirá uma lista de partições no disco virtual:

$ fdisk -l image.img 
Imagem de disco.img: 100 MiB, 104857600 bytes, 204800 Sectores
Unidades: setores de 1 * 512 = 512 bytes
Sector size (lógico/físico): 512 bytes / 512 bytes
I/O size (mínimo/ótimo): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Início do dispositivo Setores finais Tamanho ID Tipo de ID
image.img1 *       63 204623  204561 99.9M  6 FAT16

Aqui, dirigir C: é a primeira e única partição na unidade virtual, listado como image.img1 Para definir o deslocamento da unidade C :, você precisa saber o setor de boot dessa partição. A saída de fdisk mostre isso como 63.

Para calcular o deslocamento, você também precisa saber o tamanho do setor. Esta imagem de disco virtual tem setores de 512 bytes. Calcula a remuneração como o produto da remuneração e o tamanho do setor: 63 × 512 = 32256.

Use este valor de deslocamento para montar a unidade C: virtual desde 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

Você pode automatizar o cálculo através de um script Bash. O script deve primeiro coletar os valores em um formato facilmente analisado. No meu sistema Linux, usar o -o opção com fdisk para especificar quais colunas imprimir. Como eu só preciso combinar com a partição (Dispositivo) e o valor Iniciar, Eu uso isso. fdisk comando para listar as colunas que eu preciso:

$ fdisk -l -o Dispositivo,Iniciar imagem.img 
Imagem de disco.img: 100 MiB, 104857600 bytes, 204800 Sectores
Unidades: setores de 1 * 512 = 512 bytes
Sector size (lógico/físico): 512 bytes / 512 bytes
I/O size (mínimo/ótimo): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Início do dispositivo
image.img1    63

E um script Bash pode analisar essa saída usando Gawk para calcular o deslocamento por conta própria.:

#!/bin / bash
# uso: qemu-mount {arquivo de imagens}
# 1argumento st: QEMU raw image file

if [ $# -nascido 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,Começar ${1} | grep "^ ${1}1" | gawk '{imprimir $2}' )
setores=$( fdisk -l ${1} | grep '^Unidades: setores de ' | gawk '{imprimir $(NF-1)}' )
offset=$(( $começar * $Sectores ))

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

Depois de montar a imagem do disco virtual QEMU no /tmp/dos ponto de montagem temporário, pode ler e gravar dados na unidade C: virtual. Esta é uma maneira prática de copiar um instalador de um programa legado para a máquina virtual ou copiar dados fora da máquina virtual. Apesar disto, você só deve montar a imagem do disco virtual quando o QEMU não estiver em execução. Se você tentar montar uma imagem de disco QEMU enquanto estiver em uso, pode corromper o disco virtual.

Quando você terminar de inserir a imagem do disco virtual do Linux, não se esqueça de desmontar a imagem com o umount comando.

a libguestfs-tools O pacote fornece um conjunto de ferramentas para acessar as imagens de disco da máquina virtual. Incluído neste kit de ferramentas está guestmount , o que torna realmente fácil montar uma imagem de disco QEMU a partir do Linux. Se a sua distribuição não inclui este pacote por padrão, você pode precisar instalar o libguestfs software de forma separada. Apesar disto, muitas distribuições Linux, incluindo Fedora, Red Hat Enterprise Linux, Debian e Ubuntu fornecem um libguestfs-tools pacote que você pode instalar através do seu gerenciador de pacotes.

Duas opções dizem guestmount como entrar imagem de disco QEMU. a --add imagefile A opção especifica a imagem de disco virtual com a qual trabalhar e o --mount device opção diz guestmount qual partição usar da imagem de disco. Você deve apontar o dispositivo por meio de um caminho Linux padrão, O que /dev/sda1 para a primeira partição na imagem do disco virtual.

Com essas duas opções, montar a imagem de disco virtual do Linux é um comando de linha única:

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

Depois de um momento, isso monta o drive C: virtual no ponto de montagem temporário / tmp / dos. Pode inserir arquivos de imagem de disco virtual /tmp/dos usando ferramentas padrão do Linux, O que cp e mv, para copiar dados dentro e fora do disco virtual. Tenha o cuidado de montar a imagem do disco apenas quando o QEMU não estiver em execução, ou pode corromper o disco virtual.

Quando você terminar de dirigir C: virtual, você pode desmontar o sistema de arquivos usando o guestunmount comando.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.