Supongamos que descubre datos comerciales críticos en un archivo de hoja de cálculo de DOS heredado y Excel no puede leer el archivo. Si el programa heredado se ejecutó originalmente en DOS, puede iniciar una copia de FreeDOS e instalar el programa heredado allí para extraer o exportar los datos a un formato de archivo común, como un archivo CSV separado por comas.
Puede seguir nuestras instrucciones para instalar y arrancar FreeDOS usando la máquina virtual QEMU. Pero habiendo instalado FreeDOS, ¿cómo se instala y ejecuta el programa heredado en QEMU?
Puede montar una imagen de disco QEMU usando dos métodos básicos: usando un desplazamiento para montar la imagen de forma directa, o usando el libguestfs-tools
paquete.
Linux puede montar el formato de imagen de disco sin procesar de QEMU, asumiendo que sabe dónde hallar el inicio de la partición de la unidad C: en el disco virtual. El disco virtual puede contener varias particiones, pero para la mayoría de las instalaciones de sistemas operativos heredados como DOS, probablemente solo tenga una partición. Esta es la unidad C :.
Veamos la salida de Linux fdisk
programa. Usando el -l
La opción mostrará una lista de las particiones en el disco virtual:
$ fdisk -l image.img Disk image.img: 100 MiB, 104857600 bytes, 204800 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type image.img1 * 63 204623 204561 99.9M 6 FAT16
Aquí, la unidad C: es la primera y única partición en la unidad virtual, listada como image.img1
Para establecer el desplazamiento de la unidad C :, necesita conocer el sector de inicio de esa partición. La salida de fdisk
muestra esto como 63.
Para calcular el desplazamiento, además necesita conocer el tamaño del sector. Esta imagen de disco virtual tiene sectores de 512 bytes. Calcula la compensación como el producto de la compensación y el tamaño del sector: 63 × 512 = 32256.
Utilice este valor de compensación para montar la unidad 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
Puede automatizar el cálculo a través de un script Bash. La secuencia de comandos primero debe recolectar los valores en un formato fácilmente analizable. En mi sistema Linux, uso el -o
opción con fdisk
para especificar qué columnas imprimir. Como solo necesito hacer coincidir la partición (Dispositivo) y el valor de Inicio, uso esto fdisk
comando para enumerar las columnas que necesito:
$ fdisk -l -o Device,Start image.img Disk image.img: 100 MiB, 104857600 bytes, 204800 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Start image.img1 63
Y un script de Bash puede analizar esa salida usando Gawk para calcular el desplazamiento por sí solo:
#!/bin/bash # usage: qemu-mount {imagefile} # 1st argument: QEMU raw image file if [ $# -ne 1 ] ; then echo 'usage: qemu-mount imagefile' echo 'Mounts a QEMU raw image file to /tmp/dos' exit 1 fi start=$( fdisk -l -o Device,Start ${1} | grep "^${1}1" | gawk '{print $2}' ) sectors=$( fdisk -l ${1} | grep '^Units: sectors of' | gawk '{print $(NF-1)}' ) offset=$(( $start * $sectors )) [ -d /tmp/dos ] || mkdir /tmp/dos sudo mount -o loop,offset=$offset ${1} /tmp/dos
Después de montar la imagen del disco virtual QEMU en el /tmp/dos
punto de montaje temporal, puede leer y escribir datos en la unidad C: virtual. Esta es una forma práctica de copiar un instalador de un programa heredado en la máquina virtual o copiar datos fuera de la máquina virtual. A pesar de esto, solo debe montar la imagen del disco virtual cuando QEMU no se esté ejecutando. Si intenta montar una imagen de disco QEMU mientras está en uso, puede dañar el disco virtual.
Cuando haya terminado de entrar a la imagen del disco virtual desde Linux, no olvide desmontar la imagen con el umount
mando.
los libguestfs-tools
El paquete proporciona un conjunto de herramientas para entrar a las imágenes de disco de la máquina virtual. En este kit de herramientas se incluye guestmount
, lo que hace que sea verdaderamente fácil montar una imagen de disco QEMU desde Linux. Si su distribución no incluye este paquete de forma predeterminada, es factible que deba instalar el libguestfs software de forma separada. A pesar de esto, muchas distribuciones de Linux, incluidas Fedora, Red Hat Enterprise Linux, Debian y Ubuntu proporcionan una libguestfs-tools
paquete que puede instalar a través de su administrador de paquetes.
Dos opciones dicen guestmount
cómo entrar a la imagen del disco QEMU. los --add imagefile
La opción especifica la imagen del disco virtual con la que trabajar y la --mount device
la opción dice guestmount
qué partición utilizar de la imagen del disco. Debe indicar el dispositivo a través de una ruta estándar de Linux, como /dev/sda1
para la primera partición en la imagen del disco virtual.
Con estas dos opciones, montar la imagen del disco virtual desde Linux es un comando de una sola línea:
guestmount --add image.img --mount /dev/sda1 /tmp/dos
Después de un momento, esto monta la unidad C: virtual en el punto de montaje temporal / tmp / dos. Puede entrar a los archivos de la imagen del disco virtual /tmp/dos
usando herramientas estándar de Linux, como cp
y mv
, para copiar datos dentro y fuera del disco virtual. Tenga cuidado de montar la imagen del disco solo cuando QEMU no se esté ejecutando, o puede dañar el disco virtual.
Cuando haya terminado con la unidad C: virtual, puede desmontar el sistema de archivos usando el guestunmount
mando.