Agence web » Actualités du digital » Comment monter une image de disque virtuel QEMU –

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.

★★★★★