Supposons que vous découvriez des données commerciales critiques dans un fichier de feuille de calcul DOS hérité et qu'Excel ne puisse pas lire le fichier. Si le programme hérité s'exécutait à l'origine sous DOS, vous pouvez démarrer une copie de FreeDOS et y installer le programme hérité pour extraire ou exporter les données dans un format de fichier commun, en tant que fichier CSV séparé par des virgules.
Vous pouvez suivre nos instructions pour installer et démarrer FreeDOS en utilisant la machine virtuelle QEMU. Mais après avoir installé FreeDOS, Comment installer et exécuter le programme hérité dans QEMU?
Vous pouvez monter une image disque QEMU en utilisant deux méthodes de base: utiliser un décalage pour monter l'image directement, ou en utilisant le libguestfs-tools
emballer.
Linux peut monter le format d'image disque brut de QEMU, en supposant que vous sachiez où trouver le début de la partition du lecteur C: sur le disque virtuel. le disque virtuel peut contenir plusieurs partitions, mais pour la plupart des installations de systèmes d’exploitation hérités telles que DOS, vous n’avez probablement qu’une seule partition. Il s’agit du lecteur C :.
Regardons la sortie de Linux fdisk
Programme. En utilisant le -l
l’option affichera une liste de partitions sur le disque virtuel:
$ fdisk -l image.img Image disque.img: 100 Mio, 104857600 octets, 204800 Secteurs Unités: secteurs de 1 * 512 = 512 bytes Sector size (logique/physique): 512 octets / 512 bytes I/O size (minimum/optimal): 512 octets / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Début du démarrage du périphérique Secteurs de fin Type d’ID de taille image.img1 * 63 204623 204561 99.9M 6 FAT16
Ici, lecteur C: est la première et la seule partition sur le lecteur virtuel, répertorié comme image.img1
Pour définir le décalage du lecteur C :, vous devez connaître le secteur de démarrage de cette partition. La sortie de fdisk
montrer ceci comme 63.
Pour calculer le déplacement, il faut aussi connaître la taille du secteur. Cette image de disque virtuel a des secteurs de 512 octets. Calcule la rémunération comme le produit de la rémunération et de la taille du secteur: 63 × 512 = 32256.
Utilisez cette valeur de décalage pour monter le lecteur C: virtuel de linux:
$ mkdir /tmp/dos
$ sudo mount -o boucle,offset=32256 image.img /tmp/dos
$ ls /tmp/dos
AUTOEXEC.BAT COMMAND.COM FDCONFIG.SYS FDOS KERNEL.SYS
$ sudo umount /tmp/dos
Vous pouvez automatiser le calcul via un script Bash. Le script doit d’abord collecter les valeurs dans un format facile à analyser. Sur mon système Linux, utiliser le -o
option avec fdisk
pour spécifier les colonnes à imprimer. Comme j’ai juste besoin de faire correspondre la partition (Dispositif) et la valeur Start, J’utilise ceci fdisk
pour répertorier les colonnes dont j’ai besoin:
$ fdisk -l -o Périphérique,Démarrer image.img Image disque.img: 100 Mio, 104857600 octets, 204800 Secteurs Unités: secteurs de 1 * 512 = 512 bytes Sector size (logique/physique): 512 octets / 512 bytes I/O size (minimum/optimal): 512 octets / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Démarrage de l’appareil image.img1 63
Et un script Bash peut analyser cette sortie à l’aide de Gawk pour calculer le décalage par lui-même.:
#!/poubelle/bash # usage: Monture qemu {fichier image} # 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 Périphérique,Commencer ${1} | grep "^${1}1" | gawk'{imprimer $2}' ) secteurs=$( fdisk -l ${1} | grep '^Unités: secteurs de' | gawk'{imprimer $(NF-1)}' ) offset=$(( $début * $Secteurs )) [ -d /tmp/deux ] || mkdir /tmp/dos sudo mount -o loop,décalage=$offset ${1} /tmp/deux
Après avoir monté l’image de disque virtuel QEMU sur le /tmp/dos
point de montage temporaire, peut lire et écrire des données sur le lecteur C: virtuel. C'est un moyen pratique de copier un programme d'installation d'un programme hérité dans la machine virtuelle ou de copier des données en dehors de la machine virtuelle. Malgré cela, vous ne devez monter l'image du disque virtuel que lorsque QEMU n'est pas en cours d'exécution. Si vous essayez de monter une image disque QEMU pendant son utilisation, peut corrompre le disque virtuel.
Lorsque vous avez fini de saisir l'image du disque virtuel à partir de Linux, n'oubliez pas de démonter l'image avec le umount
commander.
Les libguestfs-tools
Le package fournit un ensemble d'outils pour accéder aux images de disque de la machine virtuelle. Inclus dans cette boîte à outils est guestmount
, ce qui rend vraiment facile le montage d'une image disque QEMU à partir de Linux. Si votre distribution n'inclut pas ce package par défaut, vous devrez peut-être installer le libguestfs logiciel séparément. Malgré cela, de nombreuses distributions Linux, y compris Fedora, Red Hat Enterprise Linux, Debian et Ubuntu fournissent un libguestfs-tools
package que vous pouvez installer via votre gestionnaire de packages.
Deux options disent guestmount
comment entrer l'image disque QEMU. Les --add imagefile
L'option spécifie l'image de disque virtuel avec laquelle travailler et le --mount device
option dit guestmount
quelle partition utiliser à partir de l'image disque. Vous devez pointer l'appareil via un chemin Linux standard, Quoi /dev/sda1
pour la première partition de l'image de disque virtuel.
Avec ces deux options, le montage de l'image de disque virtuel à partir de Linux est une commande à une seule ligne:
guestmount --add image.img --mount /dev/sda1 /tmp/dos
Après un moment, cela monte le lecteur C: virtuel sur le point de montage temporaire / tmp / De. Peut entrer des fichiers d'image de disque virtuel /tmp/dos
à l'aide d'outils Linux standard, Quoi cp
et mv
, pour copier des données dans et hors du disque virtuel. Veillez à ne monter l'image disque que lorsque QEMU n'est pas en cours d'exécution, ou cela peut corrompre le disque virtuel.
Lorsque vous avez terminé avec le lecteur C: virtuel, vous pouvez démonter le système de fichiers en utilisant le guestunmount
commander.