Outils pour utilisateurs

Outils du site


multiboot_windows

Multiboot Windows_xp-linux en utilisant le multiboot de Windows xp

Cette info a déjà fait l'objet d'un post partiel au forum d'alionet: http://www.alionet.org

Problème à résoudre:

On a un PC avec windows XP (home ou pro) implanté de manière courante sur le 1er disque (C:\pour windows, hda1 pour linux et (hd0,0) pour grub), et on veut installer en plus une ou plusieurs distribution(s) linux, sans toucher au MBR de Windows XP, en utilisant le multiboot de Windows XP. On prendra la suse 10.0 pour exemple.

On va considérer ici que le problème des partitions a déjà été résolu: la partition principale linux choisie (affectée à “/”) sera, par exemple hdb5 (1ère partition logique du 2ème disque).

NB : j'ai déjà expérimenté et réussi ce qui suit dans 3 configurations différentes et avec plusieurs distributions:

  • linux sur le 1er disque dur avec un portable,
  • linux sur un 2ème disque dur interne (IDE),
  • linux sur un disque dur USB2 avec un portable.

A noter que l'installation de la suse 10.0 sur le disque USB nécessite une opération supplémentaire pour intégrer les modules usb au tout début du processus de boot (dans l'image “initrd”) car sinon, le disque usb n'est pas reconnu. Voir les pages dédiées sur ce sujet (menu de gauche).

A noter aussi que je n'ai jamais essayé avec des disques sata.

Principe de solution:

Au boot du PC, le bios démarre le programme situé sur le 1er secteur de 512 octet du disque désigné par le bios (en général le 1er disque c:\ pour windows, hda pour linux). Ce secteur est appelé “MBR” (Master Boot Record). Celui-ci contient en plus des infos sur les partitions de ce disque. Le rôle du MBR “windows” est de passer la main au chargeur de winxp (qui s'appelle NTLDR=NT Loader), qui lit le fichier c:\boot.ini, qui affiche le menu du multiboot.

C'est ce fichier c:\boot.ini qu'il faut modifier pour présenter un menu des différents systèmes d'exploitation à lancer, y compris un ou plusieurs linux (Il est d'ailleurs peu probable que Microsoft ait prévu que son multiboot passerait un jour la main à linux…).

Afin que ce multiboot de windows xp puisse passer la main à un ou plusieurs linux, on peut utiliser 3 solutions:

  • utilisation du logiciel “bootpart.exe”: il crée un petit fichier placé dans “c:\” qui passera la main à l'amorce de boot de la partition du linux à lancer.
  • utilisation du logiciel “grubinstall.exe”: c'est la version windows de grub: Il créé un petit fichier qui lance un menu grub sous windows.
  • utilisation directe du “stage1” de grub du linux installé qui passera la main à l'amorce de boot de la partition du linux à lancer.

Solution avec "bootpart"

Installation de bootpart

Sous Windows, on télécharge le programme bootpart (bootpa26.zip=version d'oct. 2005) sur le site:

http://www.winimage.com/bootpart.htm

On le décompresse et on place le résultat dans un répertoire c:\bootpart créé à cette occasion. Attention: c'est un programme dos et pas windows, il n'y a pas de programme d'installation et il n'est pas placé ni à placer dans “c:\program files”.

Mode opératoire

On lance l'installation de la suse 10.0 par le 1er cd ou par le dvd.

A un certain moment, on se retrouve avec une page appelée “Paramètres d'installation ”. Cette page comporte 2 onglets : “Aperçu ” et Expert“. On clique sur Expert. C'est souvent le cas aussi pour les autres distributions.

La page ” Expert “ comporte une liste de chapitre d'installation. On clique sur le chapitre qui nous intéresse qui s'appelle ” Paramètres du chargeur d'amorçage “.

C'est ici qu'on choisit le chargeur (GRUB par exemple), ainsi que ” l'emplacement du chargeur d'amorçage “. Et là, au lieu de choisir ” secteur maître d'amorçage de /dev/hda “ qui correspond au MBR, on choisit ” secteur d'amorçage de la partition d'amorçage /dev/hdb5 “, qui doit être la partition root de votre linux (celle affectée à ” / “).

On valide et on continue l'installation.

A la fin de la 1ère phase de l'installation, le pc reboote sur …Windows! Normal. On laisse faire.

Sous winxp, on ouvre la console DOS:

  • démarrer → exécuter → cmd

A l'intérieur de la fenêtre dos, et au prompt du dos (”>“), on se place dans le répertoire bootpart:

> cd \bootpart  

On lance le programme bootpart sans paramètre:

> bootpart  

L'exécution sans paramètre donne la liste de toutes les partitions de tous les disques du pc, avec un numéro attribué en début de ligne à chacune d'entre elles. On repère le numéro attribué à notre partition linux, celle affectée à ”/“. Le formatage de chaque partition étant indiqué, on recherche celle marquée ”<linux native>“ (souvent avec un astérisque au début qui devrait identifier les partitions “actives”, c'est à dire reconnues amorçable dans la table des partitions).

Ci-dessous l'exemple avec mon portable (1 seul disque) :

Physical number of disk 0 : b7c8b7c8
0 : C:* type=7 (HPFS/NTFS), size= 77200326 KB, Lba Pos=63
1 : C: type=f (Win95 XInt 13 extended), size= 20482875 KB, Lba Pos=154400715
2 : C:* type=83 (Linux native), size= 18434556 KB, Lba Pos=154400778
3 : C: type=5 (Extended), size= 2048287 KB, Lba Pos=191269890
4 : C: type=82 (Linux swap), size= 2048256 KB, Lba Pos=191269953  

Dans cet exemple, c'est la partition numéro 2 qui est la partition linux.

Si vous voulez plus d'infos sur bootpart, faites:

> bootpart /?  

Admettons que le numéro de la partition linux soit “xx”. On lance ensuite:

> bootpart xx lba c:\bootsuse.bin "Suse linux v 10.0"  

lba est optionnel, et sert à forcer la gestion des grands disques.

c:\bootsuse.bin est n'importe quel nom de fichier que vous avez choisi (format 8.3 svp).

“Suse linux v 10.0” est le titre qui apparaitra au menu du multiboot winxp

Voilà, c'est fait.

On retire le cd de linux, et on reboote le pc. On se retrouve donc devant le menu multiboot de winxp (conforme au boot.ini), qui propose winxp et Suse linux v 10.0. On choisit Suse linux v 10.0, et l'installation de la suse se poursuit normalement.

Désormais, le menu du multiboot de windows xp apparaîtra à chaque boot, conformément à boot.ini.

Vérification

Sous windows. Il faut d'abord que winxp permette le listage des fichiers cachés: dans l'explorateur windows, prendre “outils” et “options de dossiers” et “affichage”. On coche le choix “afficher les fichiers et dossiers cachés”.

Toujours dans l'explorateur windows, si on examine le contenu de c:\boot.ini avec un éditeur de texte type “bloc-notes” (pas de traitement de texte svp!), on voit quelque chose comme cela:

[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Edition familiale"/fastdetect /NoExecute=OptIn
c:\bootsuse.bin="Suse linux v 10.0"  

En fait, bootpart n'a fait qu'ajouter la dernière ligne, qui renvoie au fichier c:\bootsuse.bin, qu'il a créé à notre demande. C'est ce même fichier qui passera la main au grub de linux là où il a été installé, c'est à dire au début de votre partition linux.

Option cosmétique: comment changer après coup le libellé proposé par boot.ini ? En fait, ce n'est pas trivial, car boot.ini a deux attributs: caché (H) et système(S). Pour modifier boot.ini, il faut donc annuler ces deux attributs et les remettre après.

Tout d'abord, pour voir le fichier c:\boot.ini sous “windows explorer”, il faut faire ceci:

Dans les options de windows explorer, faire: outils → options des dossiers → affichage”. Il y a plusieurs cases à modifier:

  • cocher “afficher le contenu des dossiers système”
  • cocher “afficher les fichiers et dossiers cachés”
  • décocher “masquer les fichiers protégés du système d'exploitation”.
  • décocher “masquer les extentions de fichier dont le type est connu”

Ce dernier pt étant un pt de sécurité: ça évitera de cliquer sur “machin.jpg” pour voir la photo, alors que c'est un virus “machin.jpg.exe”. Je suis encore sidéré que ce soit le mode par défaut.

Sous winxp, reprenons la console dos de tout à l'heure (démarrer→exécuter→cmd).

On change de répertoire:

> cd \  

On annule les attributs qui nous gênent:

> attrib -h -s boot.ini  

On peut alors modifier le libellé “suselinux” et le remplacer par n'importe quoi d'autre, par exemple “Suse Linux v 10.0 sur hda5” (toujours avec un éditeur de texte type “bloc-notes”), et on enregistre.

On restaure les bons attributs:

> attrib +h +s boot.ini  

C'est fait !

ATTENTION: si vous abimez boot.ini, plus rien ne marche !! Faites une sauvegarde (boot.ini.sav par exemple) que vous saurez retrouver sous console de récupération winxp.

Solution avec grubinstall.exe de windows

On utilise ici la version windows de grub: “grubinstall.exe”.

L'avantage de cette solution est que vous pouvez lancer tout ce que grub de linux sait lancer, avant le chargement de windows, et sans avoir un linux installé.

Vous pouvez même lancer l'installation de la suse en lançant le contenu du dvd d'installation (obtenu par une image iso téléchargée) recopié sur le disque dur! Donc, sur un pc sans lecteur de disquette ni lecteur de cd-dvd ni d'autre linux installé! Mais il faut tout de même avoir un moyen de charger le disque dur: internet, réseau local, carte mémoire ou clé usb, voire en chargeant le disque dur sur un autre pc) et de résoudre le problème de partitionnement.

L'inconvénient (mineur), c'est que grub présente un second menu derrière celui de boot.ini, alors que dans la solution “bootpart”, tout est lancé à partir du menu boot.ini.

Téléchargement de grubinstall

Ls site web qui parle de grubinstall.exe est ici: http://www.geocities.com/lode_leroy/grubinstall/

Vous pouvez télécharger grubinstall.zip ici: https://sourceforge.net/tracker/download.php?group_id=56574&atid=481055&file_id=81331&aid=923097

Mode opératoire

Ce programme est un programme DOS qui n'a pas besoin d'être installé (ce qui évite de saloper le registre…): vous créez un répertoire c:\grub dans lequel vous placez l'extraction de grubinstall.zip. Il y a dans ce zip: grubinstall.exe, stage1, stage2 et des textes d'aide (que vous êtes invité à consulter…).

On crée un second répertoire: c:\boot, dans lequel on place les stage1 et stage2 du zip, ainsi que le menu.lst désiré qu'il faut créer. Par exemple avec la suse dans hda5:

# Menu grub
#
color white/blue black/light-gray
default 0
timeout 8
#
title SUSE LINUX 10.0 dans hda5
    root (hd0,4)
    kernel /boot/vmlinuz root=/dev/hda5 vga=0x317 selinux=0    resume=/dev/hda6  splash=silent showopts
    initrd /boot/initrd
#
title Suse Linux 10.0 dans hda5 (avec chainloader)
    chainloader (hd0,4)+1
#
title Failsafe -- SUSE LINUX 10.0 dans hda5
    root (hd0,4)
    kernel /boot/vmlinuz root=/dev/hda5 vga=normal showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off  3
    initrd /boot/initrd
#
title Windows xp sp2
    chainloader (hd0,0)+1  

Vous voyez qu'on peut lancer la suse de 2 manières différentes, comme le grub normal de linux: soit en lançant le kernet et initrd directement, soit par chainloader. Si c'est par chainloader, donc comme on lance windows, cela suppose que l'on a placé à l'installation l'amorce de boot au début de la partition du linux (“/”) et non sur le mbr.

Il faut modifier le fichier texte “c:\boot.ini” en ajoutant la ligne suivante avec un éditeur de texte:

c:\boot\stage1="menu grub"  

Mais il faut neutraliser avant les drapeaux s (système) et h (caché) du fichier en console DOS, avec

> attrib -r -s -h c:\boot.ini  

et les restaurer après:

> attrib +r -s -h c:\boot.ini  

Pour la configuration, il faut lancer maintenant, toujours en console DOS, le programme grubinstall.

Si vous êtes dans une configuration similaire à la mienne (c:\ windows dans hda1), vous faites:

> cd \grub
> grubinstall  

Et c'est tout: il est difficile de faire plus simple. D'après ce que j'ai compris, le programme a modifié stage1 pour qu'il appelle stage2 là où il est: stage1 est un programme tout petit, qui ne tient pas compte du système de fichier. Il doit donc charger stage2 en sachant dans quel bloc il est! Conséquence: en cas de défragmentation, il faut relancer grubinstall pour qu'il sache de nouveau retrouver stage2.

Si vous êtes dans une situation plus complexe, par exemple la partition système de windows dans hdb2, et les stage1, 2 et menu.lst à d'autres endroits que \boot, il faut lancer grubinstall avec les bons paramètres:

> grubinstall  -d  (hd1,1)  -1  c:\boot\stage1  -2  c:\boot\stage2  -m  /boot/menu.lst  

Il y a encore d'autres paramètres: voir le fichier install.txt.

Au boot de windows, et avant que windows ne soit chargé, apparait le menu du multiboot de windows (c:\boot.ini) avec une ligne de type “menu grub” qui, si elle est choisie, lance un menu grub entièrement paramétrable, qui peux lancer n'importe quel OS sans s'appuyer sur un linux déjà installé.

La désinstallation est super simple: elle consiste à effacer la ligne “menu grub” dans c:\boot.ini, ainsi que les 2 répertoires grub.

Solution avec le stage1 du linux installé:

  • au lieu de rebooter sur windows à la fin de la 1ère phase d'installation, on reboote sur le CD d'installation de linux pour lancer le linux qu'on est en train d'installer. Ceci pour poursuivre l'installation jusqu'au bout.
  • Lorsque l'installation est terminée, (ici, /dev/hda5 est la partition de linux affectée à “/”) on fait en root dans une console:
  dd if=/dev/hda5 of=/bootlin.bin count=1 bs=512  

Ce qui fabrique le fichier bootlin.bin à la racine des répertoires linux (“/”). Ce fichier contiendra exactement le contenu du secteur d'amorçage de la partition linux.

  • Il faut ensuite transporter ce fichier /bootlin.bin dans le répertoire windows c:\bootlin.bin en passant par un support intermédiaire que windows sait lire (disquette, clé usb ou partition fat32-vfat).
  • On passe ensuite sous windows pour ajuster le boot.ini en conséquence, comme c'est indiqué plus haut: ajout de la ligne c:\bootlin.bin=“Suse Linux v 10.0”.
  • Le reste est pareil.

Mais ça ne marche que si linux est sur le même disque que windows ! En effet, contrairement à la solution “bootpart”, la simple recopie de la zone d'amorçage de la partition linux ne transmet pas d'instruction de changement de disque.

On peut alors utiliser une petite astuce qui est la suivante:

1. créer une petite partition (10 Mo suffisent) sur le 1er disque (hda). J'utilise Partition Magic pour cela. En fait, pour mon essai, j'ai piqué 10 Mo à la partition swap d'un autre linux implanté sur hda… (cette partition swap étant la dernière partition logique, ce qui fait que cela ne modifie rien aux partitions de ce linux !).

2. à la 1ère phase d'installation de la suse, demander que l'amorce soit implantée au début de cette petite partition, au lieu du MBR.

3. A la fin de l'installation complète, transporter l'amorce de cette petite partition sur c:\bootlin.bin (par exemple) et modifier en conséquence c:\boot.ini comme indiqué plus haut.

Il faut donc en déduire que le programme d'installation de la suse ne se contente pas de recopier bêtement le stage 1 de grub comme amorce, mais en fait une copie adaptée à la configuration multi-disque du pc.

Mais dans ce cas, je préfère quand même bootpart ou grubinstall.exe qui ne nécessitent pas la création d'une partition supplémentaire sur hda.

Références documentaires:

Pour ceux qui ne haïssent pas trop windows, je recommande chaleureusement l'excellent site de Bellamy: http://www.bellamyjc.org/ qui contient tout un chapitre consacré au multiboot, ainsi qu'aux procédures de récupération du MBR de Windows XP quand on s'est planté…

multiboot_windows.txt · Dernière modification: 2007/12/15 08:41 par tyrtamos

Outils de la page