Comment monter une image de disque virtuel QEMU

Contenu

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.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.