Cloner un système MS Windows physique dans une machine virtuelle sous VirtualBox🔗

Posted by Médéric Ribreux 🗓 In blog/ Sysadmin/

#debian #windows

Introduction

L'objectif de cet article est de présenter une méthode pour passer d'un système physique à un système virtuel. La méthode utilisée n'a pas la prétention de faire référence, c'est juste un moyen que j'ai trouvé pour parvenir à mes fins.

Passer d'un système MS-Windows XP physique à une machine virtuelle s'est révélé plein de surprises et pas forcément si simple que ça. Voilà pourquoi j'ai préféré concentrer la documentation dans ce document.

Par ailleurs, je suis sûr que les informations qui y sont présentes pourront être utiles à quelqu'un.

Étape zéro: l'état des lieux

Nous avons une installation physique organisée de la manière suivante:

Le bootloader de cette machine est GRUB2. Cette machine est, à l'origine, une machine sous MS Windows XP Pro dont nous avons réduit la partition initiale (qui occupait tout le disque) grâce à un système d'exploitation GNU/Linux sous forme de LiveCD.

Une fois la place libérée, nous avons utilisé l'espace disponible pour installer notre nouveau système d'exploitation.

Nous voulons maintenant prendre le système d'exploitation installé sur la première partition (et tous les logiciels/paramétrages qui vont avec) et le virtualiser. Le fichier d'image disque sera situé dans /opt/ qui est une partition suffisamment dimensionnée pour accueillir le volume de données.

Pour atteindre cet objectif, nous allons utiliser VirtualBox et quelques outils systèmes supplémentaires.

Étape 1: Importer les données

Pour commencer, il nous faut un moyen de récupérer les données de la première partition et de les rendre exploitables pour VirtualBox. En d'autres termes, nous devons fabriquer un fichier VDI qui contiendra le système de fichiers présents dans notre partition n°1.

La commande VBoxManage convertfromraw permet de faire ce genre d'opération. Toutefois, un détail important ne vous a sans doute pas échappé ! En effet, un fichier VDI est une image d'un disque et non d'une partition. Pour être exploitable, il faut donc cloner un disque avec sa table de partition et tout ce dont il a besoin pour démarrer.

Si vous avez installé GRUB2, il vous faudra donc récupérer également la partition /boot qui contient les binaires et les fichiers de conf de GRUB2. Dans le cas contraire, vous aurez droit à un plantage de GRUB (grub rescue).

Notre problème est donc de bien faire attention à récupérer notre disque et non notre partition. Mais, dans notre situation, notre machine ne dispose que d'un seul disque dur physique avec un espace assez contraint. Nous allons donc devoir ruser et récupérer un début d'image de disque contenant notre table de partition et notre partition MS Windows XP complète. Nous récupérerons une image disque VDI non bootable dans un premier temps (GRUB2 tentera d'accéder à des fichiers non présents dans l'image car situés trop loin sur le disque physique).

Pour commencer, vous devez connaître le nombre d'octets de votre partition MS Windows XP. Pour cela, nous allons utiliser fdisk (sous root):

fdisk -s /dev/sda1
25602016

Pour obtenir notre taille en octets, il suffit de multiplier par 1000. Toutefois, nous devons également récupérer notre table de partition au début. Le nombre d'octets que nous allons devoir récupérer est donc un peu plus important que prévu. Dans le doute, autant en mettre un peu plus. Nous utiliserons donc la valeur de 25702016000.

Pour importer tout ça, nous allons utiliser la commande suivante:

cat /dev/sda | VBoxManage convertfromraw stdin /opt/VM/WinXP.vdi 25712016000

La commande importe les données du disque /dev/sda depuis le début et transforme le tout en image disque au format VDI (celui de VirtualBox). L'import s'arrêtera au bout de 25712016000 octets ce qui nous permettra de récupérer proprement:

Étape 2: Objectif: Booter sous Windows XP

Si vous essayez de créer une machine virtuelle en lui attachant cette image disque et que vous bootez dessus, vous serez vite arrêté par GRUB qui passera en mode rescue: il manque en effet tous les fichiers de la deuxième partition (/dev/sda2) qui sont utiles à GRUB pour se lancer.

Comment faire pour booter sur Windows XP ?

J'ai utilisé la démarche suivante:

Toutefois, notre objectif est d'avoir une machine virtuelle qui ne contient que MS Windows XP. Il faudrait donc supprimer la partition qui permet de lancer Debian. Mais cette suppression va poser des problèmes à GRUB qui a besoin de fichiers situés dans la partition Debian pour pouvoir s'exécuter correctement.

Pour contourner le problème, il faudrait donc installer un bootloader capable de booter sur MS-windows XP. Il en existe pléthore mais mon choix s'est rabattu sur celui de ms-sys. Ce dernier permet d'installer un bootloader (non libre) simpliste permettant de démarrer MS-Windows XP. Comme le bootloader n'est pas libre, il n'est pas packagé dans Debian. Il faut donc le récupérer et le compiler. C'est ce travail que nous allons réaliser dans notre Debian virtuelle (qui a accès à tous les disques).

aptitude install build-essential gettext
./ms-sys -m /dev/sda1

Conclusion

Grâce à ces quelques outils, on peut récupérer un système MS-Windows valide, même sans le mot de passe administrateur de ce système d'exploitation. Bien entendu, il restera des choses à faire comme installer les extensions VirtualBox et pour lesquelles il faut justement un compte d'administrateur. Mais ceci est une autre histoire…

Je suis sûr qu'il existe d'autres techniques mais celle qui est présentée permet de se débrouiller avec une seule machine disposant d'un seul disque.