Grub, efi et windows XP 64 bits

Bonjour à tous,

J’ai un macbook sur lequel cohabitent harmonieusement plusieurs systèmes, schématiquement Mac Mountain Lion, Debian Jessie et Windows XP.

Windows XP 32 bits ne reconnait que les tables de partitions MBR, Mac OSX n’accepte que le GPT (en tout cas pas le MBR), j’ai dû donc me tourner vers la version 64 bits de Windows XP (qui, elle accepte le GPT) afin de pouvoir faire coexister les systèmes facilement sur un même DD.

Le problème : Grub ne voit pas mon Windows tandis que le lien géré automatiquement vers linux et celui que j’ai construit vers Mac sont parfaitement fonctionnels. Sur d’autre machine, grub n’a jamais eu de problème pour gérer Windows XP 32 bits… Du coup je me dis que le problème vient de la version 64 bits.

os-prober ne remarque même pas windows. Update-grub ne sert donc à rien pour régler ce problème.

Mes paquets grub :

  • grub-efi-amd64
  • grub-common
  • grub2-common
  • grub-efi-amd64-bin

Les trois systèmes fonctionnent très bien, il n’y a pas d’autre soucis que grub qui ne voit pas windows.

Une dernière reflexion : Pour faire fonctionner grub sur ma machine je suis “obligé” d’utiliser le paquet grub-efi-amd64. Peut-être que le couple EFI / WIN XP est un peu détonnant…

Je vous remercie,

Si vous avez une idée n’hésitez pas,

Briceco

GRUB repose sur os-prober pour détecter les autres systèmes installés. Vérifie qu’os-prober est installé et pas désactivé (pas de ligne GRUB_DISABLE_OS_PROBER dans /etc/default/grub) et exécute os-prober manuellement pour vérifier ce qu’il détecte. Comme les installations de Windows XP en UEFI doivent être très rares, il se peut que la détection de ce cas ne soit pas prise en charge. Windows XP n’utilise pas le même chargeur d’amorçage que Windows Vista et les versions ultérieures.

Si os-prober ne détecte pas le chargeur d’amorçage EFI de Windows, il va falloir le localiser et l’ajouter manuellement dans le menu de GRUB.

La commande efibootmgr -v affiche les entrées d’amorçage EFI avec l’emplacement des exécutables EFI correspondants. La partition est identifiée par son UUID de partition GPT (PARTUUID) qu’on peut retrouver avec la commande blkid. Normalement c’est la partition système EFI, montée sur /boot/efi. Tu peux l’explorer pour trouver le chargeur NT. La variante pour PC BIOS s’appelle ntldr, je ne connais pas celle pour UEFI.

EDIT :
D’après le site de Microsoft, Windows XP x64 n’accepte le format GPT que pour les disques de données et ne peut pas booter depuis un disque au format GPT. Je serais curieux de savoir comment il a accepté de s’installer et comment il arrive à démarrer.

La variante de GRUB doit être adaptée à l’architecture du firmware UEFI. Ici, il s’agit probablement d’un firmware UEFI x86 64 bits.

Pourquoi soulignes-tu ce détail ? Ce n’est pas la variante qui a été choisie par défaut lors de l’installation de Debian ?

Bonjour PascalHambourg,

Oui, effectivement, d’ordinaire je désactive os-prober dans le fichier /etc/default/grub afin de permettre des update-grub sans que cette commande ne viennent créer des liens non fonctionnels vers Mac. C’est d’ailleurs très essentiellement grâce à toi que j’avais pu résoudre ce problème, il y a quelques mois (Gérer les entrées de grub /Grub et mac).

Mais non, dans ce cas je l’ai bien réactivé en commentant la ligne qui le désactivait, et oui, il est bien installé.

La commande os-prober ne me renvoie rien d’autre que :

/dev/sda2:Mac OS X:MacOSX:macosx
/dev/sda3:Mac OS X:MacOSX1:macosx

Ok pour générer le lien manuellement vers windows xp, à ceci près que deux choses :

  1. Je ne sais pas vers quel chargeur d’amorçage pointer, car non ma partition sda1, soit /boot/efi/EFI, ne contient aucun chargeur d’amorçage windows.
# ls -a /boot/efi/EFI/
APPLE      debian

APPLE ----> firmware.scap (Gérer les entrées de grub /Grub et mac)
debian ------> le grubx64.efi habituel.

  1. Je ne sais pas si tu te rappelles, mais dans mon cas les uuid sorties par la commande blkid sont différents de ceux que grub utilise (Gérer les entrées de grub /Grub et mac). Tu avais toi-même pointé cette différence. Dans le cas de ce sujet, il s’agissait de créer les liens manuellement vers les mac, et la je pouvais obtenir les uuid “spécial grub” aisément puisque grub, dans sa moulinette, remarquait les systèmes mac et bien qu’il fut incapable de les charger en lien automatique, les uuid en question restaient accessibles dans le fichier grubx64.efi. Il suffisait de faire copier / coller.

Puisque grub ne remarque en aucune façon windows, je me demande bien comment je vais faire pour obtenir l’uuid “spécial”. Je pourrais essayer avec l’uuid de base, peut-être existe-t-il une petite chance pour que ca fonctionne. Sinon, je peux aussi lui indiquer simplement hd0, gpt 4, mais tant que je n’ai pas le chargeur…

Dans ces conditions, je peux accéder à windows XP de la façon suivante : D’une part, en maintenant la touche alt au démarrage, ce qui permet de booter sur un volumes au choix. Cet option reconnaît les formats mac (hfs) et aussi le ntfs de windows. (Pas le ext2, 3, 4 évidemment). L’utilitaire “Super Grub2”, un grub enrichi disponible (http://www.supergrubdisk.org/super-grub2-disk/) à graver sur CD-R par exemple le remarque tout les systèmes et me les propose. Les liens sont-ils fonctionnels ? Vers linux évidemment, pour le reste j’essaie immédiatement.

Comment a-t-il accepté de s’installer ? Je vais te décevoir car ça s’est fait le plus naturellement du monde. L’unique différence avec une installation 32 bits, c’est que l’installation 64 bits reussi à “lire” ma table GPT la ou la versions 32 bits ne voyait rien d’autre qu’un DD sans rien comprendre de son contenu.

Non, lors de l’installation de debian, il ne m’a même pas été proposé d’installer grub, en fait, à ce niveau là, tout s’est déroulé comme si la table de partition avait été MBR et non GPT. Au démarrage de linux j’ai dû moi-même modifier fstab pour lui faire comprendre que /dev/sda1 existait et lui indiquer le point de montage et les options, etc, et j’ai du moi-même installer grub. Je commence à être rompu a cet exercice qui consiste à faire cohabiter mac et linux sur du matériel mac, mais ça ne m’avait encore jamais fait ça.

Je me souviens de cette histoire d’UUID différents entre GRUB et blkid, mais j’ai tendance à penser que c’est une particularité liée aux systèmes de fichiers HFS/HFS+ d’Apple et qui ne devrait pas affecter NTFS.

Tu peux garder la ligne qui désactive l’utilisation d’os-prober par update-grub pour ne pas polluer la génération du menu de GRUB, elle n’empêche pas de l’exécuter directement.

Etant donné ma méconnaissance totale du monde Mac, j’ignore comment Windows XP a accepté de s’installer et comment le Mac le démarre alors qu’il n’est pas censé être compatible UEFI. Peut-être y a-t-il une prise en charge spéciale par le firmware du Mac.

Certes Windows XP x64 sait lire le format GPT mais n’est pas censé pouvoir booter dessus. Windows Vista et 7 savent aussi lire le format GPT, et pour avoir testé je peux t’assurer qu’ils refusent de s’installer sur un disque au format GPT si on a booté en mode BIOS. On ne peut booter qu’en mode UEFI (ce que Windows XP x86/x64 n’est pas censé supporter, seule la version pour Itanium/IA-64 en étant capable).

Je me demande si ce n’est pas lié à BootCamp dont j’ai vaguement entendu parler.

Le contenu de la table de partition du disque et de la sortie de efibootmgr -v pourrait m’éclairer un peu.

BootCurrent: 0000
BootOrder: 0000,0080,0001
Boot0000* debian        HD(1,28,64000,c0b04bac-0f94-45bc-8305-c8ef755d3a70)File(\EFI\debian\grubx64.efi)
Boot0001* rEFInd Boot Manager   HD(1,28,64000,e5db7ba7-4363-49be-9cdd-a3ddc8f1e29b)File(\EFI\refind\refind_x64.efi)
Boot0080* Mac OS X      ACPI(a0341d0,0)PCI(b,0)SATA(0,0,0)HD(3,8c55c70,5d21dc0,f33793c5-b13e-4dc3-8038-d99f0519f2b6)
Boot0081* Mac OS X      ACPI(a0341d0,0)PCI(b,0)SATA(0,0,0)HD(2,64028,e8c6e940,17cf479b-665e-4a27-8304-8fd353067b75)
Boot0082*       ACPI(a0341d0,0)PCI(b,0)SATA(0,0,0)HD(3,8c55c70,5d21dc0,f33793c5-b13e-4dc3-8038-d99f0519f2b6)
BootFFFF*       ACPI(a0341d0,0)PCI(6,1)USB(1,0)HD(3,5e5,1397,None)File(\System\Library\CoreServices\boot.efi)

Normalement refind n’a rien à faire la. J’ai été amené à le mettre lors des diverses installations, mais je l’ai aussi supprimé depuis. Il ne devrait plus y être. D’autant que le fichier et l’arborescence refind n’existe concretement plus.

Ah, dommage. J’allais te suggérer de tester si rEFInd ne permettrait pas de démarrer Windows.
Et la table de partition (si possible avec gdisk pour vérifier le format du MBR) ?

Et bien je vais sûrement le remettre pour essayer avec lui. Il s’en sortira sans doute mieux que grub.

# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: hybrid
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with hybrid MBR; using GPT.

Sur le net, et même sur youtube on peut voir des manips très étrange à mon gout. Sur youtube par exemple un gars installe via bootcamp un windows xp 32 bits à coté de son mac Mountain lion. Je ne sais pas comment fonctionne bootcamp, mais ce qui est certain c’est que je ne peux faire cohabiter mac et windows xp 32 bits.

J’ai réinstallé refind, le tout fonctionne correctement, il pointe et charge correctement vers windows, tout comme linux (alors que d’habitude charger le noyau de linux avec refind s’était, sur mac en tout cas, se priver de wi-fi) et les mac.

Après avoir lu des trucs sur BootCamp et l’installation de Windows sur Mac, je m’en doutais : le MBR est au format “hybride”, c’est-à-dire qu’il combine la partition de protection GPT (type EE) et une ou plusieurs partitions classiques pour l’installation et l’amorçage de systèmes non compatibles avec GPT et UEFI. A confirmer en comparant les tables de partitions DOS/MBR et GPT :

fdisk -l -t gpt fdisk -l -t dos

Le firmware du Mac a un mode de compatibilité BIOS pour démarrer d’anciennes versions de Windows, et je pense que c’est ce qui se passe. Tu peux regarder à la racine de la partition de Windows s’il y a les fichiers de boot en mode BIOS classiques NTLDR et compagnie. Si c’est bien le cas, alors je crains que GRUB EFI soit incapable de chaîner autre chose qu’un exécutable EFI.

# fdisk -l -t gpt

Disque /dev/sda : 465,8 GiB, 500107862016 octets, 976773168 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant de disque : B85A1CF7-CE83-4A03-BF41-CC1A3716B3B2

Device         Start       End   Sectors  Size Type
/dev/sda1         40    409639    409600  200M EFI System
/dev/sda2     409640 146889839 146480200 69,9G Apple HFS/HFS+
/dev/sda3  147151984 244808239  97656256 46,6G Apple HFS/HFS+
/dev/sda4  245071872 391555071 146483200 69,9G Microsoft basic data
/dev/sda5  391555072 450148821  58593750   28G Microsoft basic data
/dev/sda6  450150400 645462015 195311616 93,1G Linux filesystem
/dev/sda7  645462016 655226879   9764864  4,7G Linux swap
# fdisk -l -t dos
Disque /dev/sda : 465,8 GiB, 500107862016 octets, 976773168 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x31843183

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1               1    409639    409639  200M ee GPT
/dev/sda2          409640 146889839 146480200 69,9G af HFS / HFS+
/dev/sda3       147151984 244808239  97656256 46,6G af HFS / HFS+
/dev/sda4  *    245071872 391555071 146483200 69,9G  7 HPFS/NTFS/exFAT

A la racine de mon Windows XP, il y a bien un fichier ntldr

Je viens de remettre rEFInd, qui lui s’en sort à merveille avec l’ensemble des systèmes. Surprise, en chargeant le noyau de linux avec son lien, je conserve mon Wi-fi ce qui n’était pas le cas d’habitude, le linux était parfaitement fonctionnel, mais sans wifi.

J’aime bien rEFInd pour les avantages qu’il apporte, mais c’est vrai que j’aurai vraiment aimé réaliser le tout avec grub. Tant pis, je ne peux pas installer grub-pc sans que ce paquet rentre en conflit avec grub-efi-amd64. Et puis, rEFInd est d’une esthétique entièrement modulable / modifiable. Je vais choisir un thème et ça ira bien.

Merci. Cela confirme mes soupçons, il y a bien tout ce qu’il faut pour démarrer Windows en mode BIOS.

Tu peux.

  1. Désinstaller grub-efi-amd64 ne supprime pas le chargeur GRUB EFI installé dans la partition système EFI et /boot/grub.
  2. Les paquets qui servent réellement à installer les chargeurs d’amorçage sont grub-efi-amd64-bin et grub-pc-bin, et ils ne sont pas en conflit. Le programme grub-install est fourni par grub2-common qui est une dépendance des deux. Pour forcer l’installation d’une variante du chargeur, il faut utiliser l’option --target=i386-pc (pour BIOS) ou --target=x86_64-efi (pour EFI x64).

Mais je doute que ça apporte quelque chose, car pour lancer GRUB PC il faudrait passer par le menu de boot du firmware (touche alt) comme pour Windows, et il ne permet pas forcément de démarrer MacOS X (en tout cas pas en chaînant les exécutables EFI comme avec GRUB EFI).

Ok, merci à toi. Il ne me reste plus qu’à effectuer l’installation et la mise en cohabitation de XP sur ma machine et pas sur celle de “test” (même configuration sauf qu’il n’y a pas le XP).

Mais je suis inquiet, car je viens de me rendre compte que la situation n’est pas exactement la même sur cette machine :

 # gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Je vais devoir créer une nouvelle partition, et je ne sais pas comment créer un MBR hybrid / GPT.

A tout hasard, protective = hybrid ?

Non. Un MBR protecteur ne contient que la partition de protection GPT qui occupe tout le disque. Tu peux le vérifier en affichant la table de partition du MBR avec fdisk -t dos ou avec les commandes en mode expert de gdisk.

Ce n’était pas la même chose sur la machine de test avant d’installer Windows ?

J’oubliais un avertissement : ne pas utiliser parted (et possiblement gparted) avec un MBR hybride. La dernière fois que je l’ai fait, ça a transformé le MBR hybride en MBR protecteur standard. Le MBR hybride n’est pas un format standard, il peut arriver des choses inattendues avec.

Bonjour

Je m’incruste dans la discussion mais ne pense pas être au hors sujet en demandant à PascalHambourg si le dernier de ces trois liens est selon lui assez bien documenté concernant les MBR hybrides.

Je connais très bien le premier type de MBR, et je n’ai pas eu l’occasion de tester assez souvent le deuxième.
Par contre, je n’ai encore jamais eu à faire avec le troisième type de MBR, alors il faut que je m’y mette.

http://www.rodsbooks.com/gdisk/hybrid.html


Bien sûr, je ne demande pas une réponse détaillée : juste une appréciation rapide.
Si besoin d’une plus longue réponse, on ouvrira un autre fil de discussion en y déplaçant ce message.

Oui, l’auteur de gdisk et rEFInd maîtrise assez bien son sujet.

Juste pour la culture alors, pas pour le mettre en oeuvre autrement qu’en test. Franchement, je ne recommande pas l’utilisation de MBR hybride, à réserver en dernier recours s’il n’y a vraiment pas d’autre solution. C’est un hack, ce n’est pas fiable.

Merci pour les commentaires éclairés.


Sûr : déjà que je n’utilise même pas GPT parce que je n’en ai pas besoin,
mais j’ai toujours été curieux de voir ce qu’il se faisait ailleurs.

J’ai peut-être compris. Lorsque j’ai commencé la phase de cohabitation des systèmes, c’est-à-dire de les installer, au moment de partitionner mon DD avec l’utilitaire mac, ayant été inattentif un instant, j’ai d’abord créé une table MBR. Puis, l’installation de mac n’ayant pu débuter avec le MBR je suis revenu en arrière pour reformater avec une table GPT cette fois. C’est la seule différence qu’il y a eu vis-à-vis du protocole habituel, je ne vois pas d’ou peut venir ce MBR hybrid sinon. Et de la, à mon avis, les différentes remarques inexpliquables alors au cours des diverses installations de systèmes :

  • Mac qui me prévient que si je l’installe l’option “filevault” de cryptage du DD par mac ne pourra pas fonctionner, sans possibilité d’en savoir plus.
  • Debian qui m’explique qu’un bootloader ne peut-être installer, et qui donc ne me propose pas grub.
  • Le fait que j’ai du modifier fstab et installer grub, etc.

====> Tout ça différent d’habitude y compris sur la même machine avec exactement la même configuration, à une partition près, celle prévue pour Windows XP.

Bon mais ce qui est important dans mon cas c’est la possibilité du firmware uefi du materiel mac qui est compatible avec un mode BIOS. MBR hybrid ou protective, ce n’est peut-être pas totalement en cause. Je vais essayer l’installation de xp ce soir sur ma machine de référence. Si xp 64 bits arrive à lire ma GPT, je pourrais alors l’installer, et le reste sera résolu par rEFInd.

Remplacer une table de partition MBR par une table de partition GPT ne produit pas un MBR hybride mais un MBR protecteur. Là on voit bien que les 3 partitions définies dans le MBR hybride correspondent exactement à des partitions de la table GPT.

Qu’est-ce qui a créé les partitions NTFS ? L’installateur Windows XP ou bien tu les avais créées avant d’installer Windows ?