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.