Problème de multiboot Vista – XP

25 juin 2009 – 0:35

Je viens tout juste de me pencher sur un problème de multiboot avec mon ordi portable. Pour résumer grossièrement la situation, j’avais un triple boot fonctionnel entre Windows Vista, Windows XP et Ubuntu, et un beau jour je me suis décidé de supprimer la partition contenant Vista. Résultat : impossible de booter sur XP ; Grub me renvoie une erreur « Invalid device requested ». Après quelques bidouilles, d’autres messages d’erreurs font leur apparition, comme « NTLDR is missing » ou « Invalid partition table ». Finalement, après deux soirées d’acharnement, je parviens à refaire démarrer mon Windows XP. Je poste cet article dans l’espoir qu’il vienne en aide à ceux qui seront confronté à un problème similaire.

Le décor

Il y a environ 2 ans, j’achète un laptop. Vista est préinstallé dessus, et la machine n’a qu’1 Go de RAM et un AMD Turion x2 pas très véloce. Bref, je ne vous fais pas de dessin : Vista est sans surprise extrèmement lent. Je décide donc d’installer un XP. Pour éviter les problèmes avec un éventuel retour SAV de la machine, je préfère garder Vista ; je réduis donc sa partition à 20 Go et installe XP sur le reste. Et je me dis que je l’utiliserai sans doute occasionnelement…

Lors de l’installation, XP détecte Vista, et s’installe dans une partition étendue qu’il crée automatiquement. Pourquoi une étendue et pas une principale ? Seul Microsoft le sait… Une fois XP installé, celui-ci a viré le boot loader de Vista. Il faut donc que j’utilise Vista Boot Pro afin de mettre en place un dual boot Vista – XP. Je vous passe les détails, ce n’est pas le but de cet article.

Enfin, je me décide à installer une Ubuntu. Je rétrécis donc XP et installe Ubuntu dans des partitions à la suite de celle contenant XP. Grub s’installe sur le MBR et me permet alors de mettre en place mon triple boot. En fait, Grub détecte les deux Windows comme une seul entrée. Au boot, il me propose le choix entre Linux et les Windows. Si je choisis Windows, le boot loader de Vista prend la relève et me donne le choix entre booter Vista ou XP. Ouf !

Pour résumer, mon disque dur est donc partitionné comme suit :

  • Une partition primaire contenant Vista
  • Une partition étendue avec :
    • XP
    • Linux

La revanche de Vista

Cette config a très bien marché pendant près de 2 ans. Jusqu’au jour ou je me rend compte qu’en fait, je n’ai jamais utilisé Vista, alors qu’il m’utilise tout de même 20 Go sur mon disque. Comme la garantie du laptop est de toutes façon arrivée à terme, je me dis que je ne risque rien à le supprimer. Ni une ni deux ; je supprime la partition avec GParted, sous Linux. Je reboote. Et là, c’est le drame. XP ne boote plus, j’obtiens le message « Invalid device requested« . Il faut croire que Vista a emporté XP dans sa tombe…

Le combat

En cherchant un peu sur le Web, je m’aperçois que cette erreur viendrait de Grub. Je vérifie l’entrée correspondant à XP (en tapant « e » au menu de Grub lors du boot), qui est toujours valide. En effet, XP étant au début de la partition étendue, Grub la nomme (hd0,4) (équivalent de /dev/sda5). D’où vient l’erreur ?

Je continue à chercher, et je m’aperçois que Windows XP n’a apparemment pas été prévu pour pouvoir booter sur une partition étendue. La question que je me pose alors est : dans ce cas, pourquoi bootait-il lorsque Vista était encore là ? En me documentent sur le multiboot Vista – XP, j’apprends que lorsqu’un tel multiboot est mis en place, c’est Vista qui se charge de booter XP. Ce qui expliquerait donc pourquoi XP ne boote plus désormais…

La solution se dessine : il faudrait que je « sorte » ma partition XP de ma partition étendue, pour en faire une primaire. Peut-être que de cette façon, XP sera capable de booter tout seul comme un grand. Sous Linux, j’utilise donc GParted pour copier ma partition XP en dehors de la partition étendue (à la place de l’ancien Vista). Après pas mal de temps, l’opération se termine avec succès. Tant qu’à faire, je marque la partition comme bootable. Je reboote, et demande à Grub de booter désormais sur (hd0,0), c’est à dire la nouvelle partition. Cette fois-ci, nouvelle erreur : « NTLDR is missing« .

NTLDR est le boot loader de XP, et il semble introuvable. Je glane encore quelques infos sur le Web. Il semblerait qu’il soit possible de remédier à ce problème avec la console de récupération du CD de XP, en utilisant l’utilitaire fixboot. Je le fais, mais cela n’améliore rien. Je recommence, en rajoutant cette fois-ci un coup de fixmbr. Là, c’est encore pire : Grub ne démarre même plus, car Windows a écrasé le MBR (logique), mais le processus de boot va encore moins loin car j’obtiens une erreur « Invalid partition table« . De mieux en mieux…

Je commence par réinstaller Grub, en utilisant un live CD d’Ubuntu et l’utilitaire grub-install, qui répare le MBR. Je peux alors booter à nouveau sous Linux. Je monte ma partition Windows défectueuse et liste les fichiers situés à la racine. Dans /dev/sda1 (C:), je ne vois aucun fichier ntldr. Ni de boot.ini, ni de ntdetect.com… Pourtant, ces fichiers sont vitaux au démarage de Windows ! J’en conclus donc que Vista avait du déplacer ces fichiers dans sa partition (vu qu’il boote XP lui-même), et qu’ils ont été effacés avec le reste de la partition. Heureusement, j’ai un autre XP qui fonctionne sur une autre machine. J’utilise donc une clé USB pour copier les fichiers ntldr, boot.ini et ntdetect.com sur ma partiton XP defectueuse. Au passage, je vérifie que le boot.ini est correct. Je repasse ensuite un coup de fixboot avec la console de récupération XP. Je reboote, et…

Le bout du tunnel

Yeah, XP démarre ! Après un check des disques, tout semble fonctionner… Du moins pendant quelques secondes. Rapidement, plusieurs services se mettent à planter. En regardant de plus près, je commence à comprendre pourquoi : les lettres des lecteurs ont changé. En effet, lorsque j’avais installé XP pour la 1ère fois, il s’était attribué la lettre F, car il était sur la partition étendue. Comme cette fois-ci je boote sur une partition primaire (copie de l’ancienne), et que Windows attribue « bêtement » les lettres dans l’ordre des partitions sur le disque, cette partition se retrouve nommée C. Seul problème : tous les programmes, raccourcis et la base de registre pointent encore vers F…

La solution est donc de renommer les lecteurs, en inversant C et F. Cependant, l’utilitaire de gestion des disques Windows refuse, car la partition C est une partition système. Quasiment désespéré, je reparcours le Web en recherche d’une méthode miracle pour renommer de force cette partition… Et je finis par en trouver une, que voici !

Pour résumer, il s’agit d’inverser deux clés dans la base de registre. Elles se trouvent dans HKEY_LOCAL_MACHINESYSTEMMountedDevices. Dans mon cas, je dois inverser DosDevicesC: et DosDevicesF:.  Je le fais, et je reboote…

Ca marche ! Au reboote, F: est bien ma partition système primaire, et C: est devenu l’ancienne partition. Mon XP est désormais stable, il pète de nouveau la forme… Je supprime C et à reboote une dernière fois pour m’assurer que tout roule, et c’est le cas. Encore une victoire de canard ;)

Morales

Les leçons à tirer de cette histoire sont :

  • Méfiez vous comme la peste du multiboot Vista – XP, surtout quand vous supprimez Vista.
  • N’installez pas Windows dans une partition étendue.
  • Ayez toujours un CD de Windows XP sous la main, car la console de restauration est bien pratique.
  • Même chose concernant les live CD de Linux : GParted est un outil gratuit incontournable qui pourra vous sauver la mise même si tous vos OS sont inutilisables. En plus, vous pourrez aller sur Internet avec et chercher de la doc…
  • Sauvegardez votre ntldr, boot.ini et ntdetect.com pour les avoir à disposition au cas où (ils ne font que quelques ko).
  • Changer la lettre d’une partition système est possible… mais ne changera pas les références gardées en dur par tous vos programmes. Ne le faites que si la lettre de votre partition a changée toute seule !

Sur ce, j’espère avoir aidé du monde !

  1. 7 réponses à “Problème de multiboot Vista – XP”

  2. Salut :)

    Tu aurais du me demander,ça t’aurais fait gagner du temps. En particulier le fait qu’il ne faut jamais installer Windows dans une partition étendue (quelque soit la version…).

    Il s’agit de la meilleur solution pour un triple boot sans effet secondaires, et de cette manière tu peut supprimer Vista sans avoir à changer les lettres de partitions.

    Et oui, le multi boot est tout un art :)

    @++

    Par Léo le 25 juin 2009

  3. Bah, au moins, j’aurais appris pas mal de trucs par moi même ;)
    Mais tout de même, ce qui me sidère c’est que XP s’installe automatiquement dans une partition étendue, même s’il reste encore de la place pour une partition primaire…

    Par Emilien Girault le 25 juin 2009

  4. « Les leçons à tirer de cette histoire sont : »
    - ne pas installer windows

    Par sh4ka le 25 juin 2009

  5. Effectivement, c’est également un bon moyen. :)
    Pour une fois que ce n’est pas moi qui le propose…

    Par Léo le 26 juin 2009

  6. Oui c’est une bonne idée, mais bon, développer du rootkit Windows sans Windows, ce n’est quand même pas facile…

    Par Emilien Girault le 26 juin 2009

  7. Bon à savoir tout ça. Bientôt il va falloir refaire la même analyse avec Windows7 qui changera pour la Nième fois la manière de booter :) .

    Pour une bonne trousse de secours pour le boot, je recommande également Supergrub, un cd permettant de détecter les OS sur une machine et de démarrer dessus. Pratique quand on a tout cassé.

    Par cloud le 26 juin 2009

  8. Salut,

    De mon côté, j’installe Windows sur une partition étendue depuis un bon moment… mais ma partition primaire de boot est une petite partition de 500 Mo en FAT16. Comme ça elle marche avec tous les systèmes, et Windows n’hurle pas quand j’installe les service packs.

    Enfin bon d’ailleurs Windows maintenant je le virtualise, la barbe du multiboot, c’est trop galère de devoir rebooter sans cesse…

    Par gojul le 15 août 2009

Désolé, les commentaires sont fermés pour le moment.