Comment monter une image de disque virtuel QEMU –
Supposons que vous découvriez des données d’entreprise critiques dans un ancien fichier de feuille de calcul DOS et qu’Excel ne puisse pas lire le fichier. Si l’ancien programme fonctionnait à l’origine sous DOS, vous pouvez démarrer une copie de FreeDOS et y installer l’ancien programme pour extraire ou exportation les données dans un format de fichier commun, comme un fichier CSV séparé par des virgules.
Vous pouvez suivre nos instructions pour installer et démarrer FreeDOS à l’aide de 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: en utilisant un décalage pour monter l’image directement, ou en utilisant le libguestfs-tools
paquet.
Linux peut monter le format d’image de disque brut de QEMU, en supposant qu’il sache 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ème d’exploitation héritées comme 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
option listera les partitions sur le disque virtuel:
$ 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
Ici, le lecteur C: est la première et la seule partition du lecteur virtuel, répertoriée comme image.img1
Pour déterminer le décalage du lecteur C :, vous devez connaître le secteur de départ de cette partition. La sortie de fdisk
montre cela comme 63.
Pour calculer le décalage, vous devez également connaître la taille du secteur. Cette image de disque virtuel a des secteurs de 512 octets. Vous calculez le décalage comme le produit du décalage et de la taille du secteur: 63 × 512 = 32256.
Utilisez cette valeur de décalage pour monter le lecteur virtuel C: à partir de 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
Vous pouvez automatiser le calcul à l’aide d’un script Bash. Le script doit d’abord rassembler les valeurs dans un format facilement analysable. Sur mon système Linux, j’utilise le -o
option avec fdisk
pour spécifier les colonnes à imprimer. Comme je n’ai besoin que de faire correspondre la partition (périphérique) et la valeur de démarrage, j’utilise ceci fdisk
commande pour lister les colonnes dont j’ai besoin:
$ 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
Et un script Bash peut analyser cette sortie à l’aide de Gawk pour calculer lui-même le décalage:
#!/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
Après avoir monté l’image de disque virtuel QEMU sur le /tmp/dos
point de montage temporaire, vous pouvez lire et écrire des données sur le lecteur virtuel C :. Il s’agit d’un moyen pratique de copier un programme d’installation de programme hérité sur la machine virtuelle ou de copier des données hors de la machine virtuelle. Cependant, vous ne devez monter l’image de disque virtuel que lorsque QEMU n’est pas en cours d’exécution. Si vous tentez de monter une image disque QEMU pendant son utilisation, vous risquez de corrompre le disque virtuel.
Lorsque vous avez terminé d’accéder à l’image du disque virtuel depuis Linux, n’oubliez pas de démonter l’image avec le umount
commander.
le libguestfs-tools
package fournit un ensemble d’outils pour accéder aux images de disque de machine virtuelle. Cette boîte à outils comprend guestmount
, ce qui facilite le montage d’une image disque QEMU à partir de Linux. Si votre distribution n’inclut pas ce paquet par défaut, vous devrez peut-être installer le logiciel libguestfs séparément. Cependant, 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 accéder à l’image disque QEMU. le --add imagefile
L’option spécifie l’image de disque virtuel avec laquelle travailler et la --mount device
option dit guestmount
quelle partition utiliser à partir de l’image disque. Vous devez indiquer le périphérique en utilisant un chemin Linux standard, tel que /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 sur une seule ligne:
guestmount --add image.img --mount /dev/sda1 /tmp/dos
Après un moment, cela monte le lecteur virtuel C: sur le point de montage temporaire / tmp / dos. Vous pouvez accéder aux fichiers sur l’image du disque virtuel /tmp/dos
à l’aide d’outils Linux standard, tels que 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 vous risquez de corrompre le disque virtuel.
Lorsque vous avez terminé avec le lecteur virtuel C :, vous pouvez démonter le système de fichiers à l’aide du guestunmount
commander.