Introduction

J’ai besoin de transférer des fichiers lourds (quelques Gio) depuis le disque dur virtuel d’une machine VirtualBox vers la machine hôte. La machine virtuelle est sous Windows, mais les additions invités ne fonctionnent pas, et je ne désire pas modifier la configuration réseau pour mêler mon réseau local à celui de la machine virtuelle. Pour pouvoir transférer mes fichiers, je vais donc devoir monter l’image disque de ma machine virtuelle.

Émuler un périphérique bloc

Sous Linux, une manière de créer des périphériques blocs dynamiquement est de recourir au module noyau nbd. NBD est un protocole similaire à iSCSI, qui permet de créer des périphériques blocs à partir d’un serveur. On charge le module nbd avec la commande suivante :

sudo modprobe nbd max_part=8

Vous devriez voir apparaître plusieurs entrées nbd0, nbd1, etc. dans le répertoire/dev.

On cherche à faire de notre image disque VirtualBox un périphérique bloc, et pour ce faire, nous allons utiliser le serveur NBD qemu-nbd (sur certaines distributions, il est contenu dans un paquet qemu-utils). On le lance ainsi :

sudo qemu-nbd --connect=/dev/nbd0 monimagedisque.vdi

Si vous inspectez encore une fois le répertoire /dev, de nouvelles entrées sont arrivées pour représenter les différentes partitions contenues dans l’image disque, sous la forme nbd0p0, nbd0p1, etc.

Monter les partitions

Dans mon cas l’image contient deux partitions (la première contient le bootloader, la seconde l’OS et mes données), et je ne vais monter que la seconde (nbd0p1). On commence par créer un dossier dans lequel sera monté la partition :

sudo mkdir /mnt/vbpart1

Ensuite on peut monter la partition avec la commande mount :

sudo mount /dev/nbd0p1 /mnt/vbpart1

Si la commande mount s’exécute correctement, vous devriez pouvoir accéder aux fichiers de la partition dans le point de montage que vous avez configuré.

Démonter les partitions et arrêter le serveur nbd

La procédure à suivre se déroule en deux étapes. D’abord on démonte la ou les partitions montées :

sudo umount /dev/nbd0p1

Une fois toutes les partitions démontées du périphérique nbd0, on peut procéder à l’extinction du serveur NBD :

sudo qemu-nbd -d /dev/nbd0