Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/04/2009, à 15:27

BorX

GPT, ça pue (avec dmraid)

GPT, ça pue (avec dmraid)

Désolé pour le jeu de mot facile, mais c'est en comprenant que GPT (GUID Partition Table) était une grosse m***e d'Intel et d'Apple que j'ai pensé à le faire sauter pour faire fonctionner dmraid.
Voici donc un petit post pour vous faire part de mes déboires pour installer Linux sur un RAID0 en fakeRAID.

Avant l'installation, je m'étais préalablement documenté, essentiellement à partir des pages suivantes :
- https://help.ubuntu.com/community/FakeRaidHowto
- http://doc.ubuntu-fr.org/tutoriel/comment_installer_ubuntu_sur_raid0_materiel
- http://doc.ubuntu-fr.org/tutoriel/comment_utiliser_le_raid_onboard
- http://forum.ubuntu-fr.org/viewtopic.php?pid=1738308#p1738308

Je m'étais donc préparé à rencontrer quelques problèmes, notamment avec Grub, mais j'étais rassuré par une note concernant Intrepid Ibex avec lequel plus aucun problème ne se posait en utilisant l'Alternate CD.
Je me lance donc l'installation d'Intrepid Ibex avec l'Alternate CD et tout commence bien : mon RAID0 est reconnu direct, je n'ai plus qu'à créer mes partitions et installer le système (la routine, quoi). C'est au moment de créer mes partitions que je découvre les nouveautés qu'offrait GPT : plus limité à seulement 4 partitions primaires, donc plus besoin de partition logique (des nouveautés que je ne connaissais pas).
Bref, tout s'annonce pour le mieux jusqu'au redémarrage où je me retrouve sous une BusyBox, avec le message suivant :

"ALERT! /dev/mapper/isblabla_blabla4 does not exist. Dropping to a shell!"

Bon, j'en déduis que c'est Grub qui galère à trouver la partition racine sur mon RAID0...
Je reboote sur un liveCD, j'installe et lance dmraid pour activer mon RAID0, et constate dans /dev/mapper que seul mon disque dur (/dev/mapper/isblabla_blabla) apparaît, mais pas les partitions (/dev/mapper/isblabla_blabla1, /dev/mapper/isblabla_blabla2, ...). Je ne m'en soucis pas plus que ça (je découvre), et je suis rassuré en retrouvant bien mes partitions grâce un parted sur le disque dur.

Bref, ne voyant pas mes partitions, je ne pouvais pas toucher à Grub via le LiveCD. Je relance donc une nouvelle installation afin de suivre la procédure décrite dans les pages pré-citées.
Nouvelle installation : à la fin, juste avant le reboote, je touche à Grub, et reboote (les détails dans les pages pré-citées)... Résultat : idem.
Je réessaye 5 ou 6 fois (10 ? 15 ?) des réinstallations en tentant à chaque fois une nouvelle configuration de Grub (je me retape à chaque fois une nouvelle réinstall car c'est le seul moyen que j'ai de monter mes partitions pour modifier Grub via un chroot). Mais rien à faire...

Au bout d'un moment, voyant que j'avais fait le tour de Grub, je pousse mes recherches (y'en n'a pas tant sur le sujet), et je tombe sur ce post http://forum.ubuntu-fr.org/viewtopic.php?pid=2489131#p2489131. J'y vois une astuce (qui a trop la classe) qui consiste à modifier le initramfs (le micro-linux lancé par Grub) pour qu'il charge dmraid autrement.
-> Je réinstalle une nouvelle fois ; à la fin de l'install, je monte mes partitions ; je chroot ; je modifie le chargement de dmraid ; j'update mon initramfs ; et je reboote. Et là, devinez quoi : replantage, BusyBox et tout le bordel.

Décidément, je ne vois rien à faire. J'ai retourné le web pour trouver plus d'infos sur le chargement de Grub et sur dmraid. Je ne trouve rien.
Une chose m'intrigait encore :
- la plupart des gens ont des soucis pour faire que Grub boote sur leur RAID. Chez moi, mon Grub semblait bien configuré.
- certains ont des problèmes car dmraid n'est pas chargé lors du lancement de Grub ce qui fait que rien de leur RAID n'apparaît (ni les partitions, ni même le disque dur).
- dans mon cas, je voyais bien le disque dur (/dev/mapper/isblabla_blabla) mais pas les partitions (/dev/mapper/isblabla_blabla1, /dev/mapper/isblabla_blabla2, ...) !! et il en était certainement de même pour Grub !

Mais pourquoi, dès lors que dmraid était chargé, seul mon disque dur apparaissait et pas mes partitions ??
Ce qui m'a mis la puce à l'oreille, c'est le warning que j'obtenais en lançant fdisk sur mon disque dur :

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.

Bah oui, je suis en GPT. Et alors ?

Au point où j'en étais, j'ai voulu essayer sans GPT. Et là, c'était une autre paire de manches. Très peu de docs sur GPT sont disponibles sur Internet, et encore moins sur la conversion de GPT en MBR (en fait, je n'en ai pas trouvée).
D'où, l'intérêt de ce post (oui, je raconte ma vie, mais certains s'y reconnaitront peut-être) : comment convertir du GPT en MBR ?
On voit ici comment un disque est marqué en GPT : http://en.wikipedia.org/wiki/GUID_Partition_Table
Il y a, comme pour MBR, quelques secteurs en début de disque dur... mais également à la fin !
J'ai donc lancé les commandes suivantes (syntaxe à vérifier) :
Pour supprimer les premiers secteurs pourris par GPT :

dd if=/dev/zero of=/dev/mapper/isblabla_blabla bs=1K count=20

Pour supprimer les derniers secteurs pourris par GPT :

dd if=/dev/zero of=/dev/mapper/isblabla_blabla seek=[taille du disque dur, moins 20Ko] bs=1K count=20

Evidemment, inutile de préciser que cette commande rend les données présentes sur le disque inutilisables.

Après ces commandes, j'ai enfin pu lancer fdisk sans warning (ce qui m'a redonné espoir sur la reconnaissance de mes partitions par dmraid une fois lancé par Grub). J'ai donc recréé mes partitions avec fdisk et j'ai relancé une install (j'ai oublié de préciser que dans tous mes essais, j'étais finalement passé en Ubuntu 9.04 Jaunty Jackalope AlternateCD ; cela dit, je suis sûr que ça marchera également avec la 8.10 Intrepid Ibex).
Durant l'install, j'ai pris soin de ne pas partitionner mon disque dur avec l'utilitaire de l'installation afin de garder mes partitions telles que je les avais faites avec fdisk (je pense en effet que l'utilitaire m'aurait refoutu mon disque dur en GPT).
Fin de l'installation, je ne fais rien de particulier : pas de bricolage de Grub, pas de chroot et encore moins d'initramfs ; je reboote, tout simplement.

Ô magie ! Ô satisfaction d'avoir trouvé l'origine du mal ! Mon système boote enfin, et en moins de deux !

Depuis le début, Grub était bien configuré (c'est pris en compte depuis Intrepid Ibex).
Depuis le début, dmraid était bien lancé dès le démarrage (c'est grâce à lui que je pouvais bien voir mon disque dur).
Et depuis le début, si mes partitions n'apparaissaient pas, empêchant Grub de faire son boulot, c'est parce que mon disque dur était en GPT.

Pourquoi l'install de Ubuntu formate désormais par défaut les disques durs en GPT ? Je ne sais pas (il paraît que GPT est un progrès ; il semble que ce soit surtout un norme imposée par Intel et Apple pour les PowerPC, et relayée par Microsoft).
Reste que je n'ai rien trouvé sur le net qui révèle ce problème et que j'ai eu beau retourner le net pour savoir comment convertir du GPT en MBR, je n'ai rien trouvé d'autre qu'utiliser un soft qui tourne sous DOS (mais où on va, là ???), alors que 2 commandes suffisent sous Linux :

dd if=/dev/zero of=/dev/mapper/isblabla_blabla bs=1K count=20
dd if=/dev/zero of=/dev/mapper/isblabla_blabla seek=[taille du disque dur, moins 20Ko] bs=1K count=20

En espérant sortir de la m***e ceux qui s'y trouvent...

Dernière modification par BorX (Le 27/04/2009, à 15:44)

Hors ligne

#2 Le 01/04/2010, à 20:25

jibe

Re : GPT, ça pue (avec dmraid)

Salut,

C'est un peu du déterrage, mais j'ai deux questions qui, je pense, pourront intéresser ceux qui se battent avec GPT...

D'abord, dans tes commandes, tu utilises en sortie /dev/mapper/isblabla_blabla. Je suppose que c'est à cause du raid ? Lorsqu'on n'a pas de raid, mais un simple disque à repasser en MBR (dans mon cas, un disque récupéré dans une FreeNAS), je suppose qu'il faut utiliser /dev/sdx (x étant à adapter selon l'emplacement du disque : sda, sdb etc.) ?

Ensuite, à propos du seek : peux-tu préciser comment calculer la valeur à donner ? dd m'insulte toujours en me disant que je donne un mauvais argument à seek... J'ai supposé qu'il s'agissait du nombre de blocs de 1k (bs=1k) total du disque, moins 20 blocs ? J'ai essayé de jouer avec les k à 1000 ou 1024, utiliser des multiples en M ou G, mais sans succès... Doit pourtant pas être bien compliqué, mais je ne vois pas...

En tous cas, merci pour tes explications : c'est très instructif !


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne

#3 Le 02/04/2010, à 00:34

BorX

Re : GPT, ça pue (avec dmraid)

Salut smile

jibe a écrit :

C'est un peu du déterrage, mais j'ai deux questions qui, je pense, pourront intéresser ceux qui se battent avec GPT...

C'est avec plaisir que je vais tâcher d'y répondre ! smile

jibe a écrit :

D'abord, dans tes commandes, tu utilises en sortie /dev/mapper/isblabla_blabla. Je suppose que c'est à cause du raid ?

Précisément.
J'ai rencontré ce problème alors que je cherchais à installer un Linux sur un Raid0 fraîchement monté. D'où mes longues investigations, car j'ai d'abord cherché l'origine du problème dans plein d'endroits (config Raid, grub, dmraid, ...).
Après avoir compris que mon problème venait de GPT, j'ai exposé ici cette solution dans l'optique d'aider ceux qui se galéraient aussi avec leur Raid, considérant que GPT ne devait pas poser de problème pour un simple disque.
(2 sec de réflexion roll)
Après, c'est vrai que GPT ne devrait pas non plus poser de problème avec du Raid... alors c'est effectivement possible que GPT pose problème pour un simple disque wink

jibe a écrit :

Lorsqu'on n'a pas de raid, mais un simple disque à repasser en MBR (dans mon cas, un disque récupéré dans une FreeNAS), je suppose qu'il faut utiliser /dev/sdx (x étant à adapter selon l'emplacement du disque : sda, sdb etc.) ?

Oui, c'est effectivement le disque sur lequel tu configureras ensuite tes partitions (avec fdisk, ou parted, ...).

Donc,
- pour du Raid : /dev/mapper/isblabla_blabla
- pour de l'IDE : /dev/hdx (avec x = a ou b ou c ou...)
- pour du SCSI/SATA : /dev/sdx (avec x = a ou b ou c ou...)

jibe a écrit :

Ensuite, à propos du seek : peux-tu préciser comment calculer la valeur à donner ? dd m'insulte toujours en me disant que je donne un mauvais argument à seek... J'ai supposé qu'il s'agissait du nombre de blocs de 1k (bs=1k) total du disque, moins 20 blocs ? J'ai essayé de jouer avec les k à 1000 ou 1024, utiliser des multiples en M ou G, mais sans succès... Doit pourtant pas être bien compliqué, mais je ne vois pas...

euh... de tête, là, je me souviens plus trop... hmm
Je dirais un truc du style :

Commençons par connaître la taille de mon disque :

$ sudo fdisk -l /dev/mapper/isw_diefhfejhi_Raid

Disque /dev/mapper/isw_diefhfejhi_Raid: 2000.4 Go, 2000404348928 octets
255 têtes, 63 secteurs/piste, 243201 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Identifiant de disque : 0x000b4840

Chez moi, mon disque fait 2000404348928 octets, soit 1953519872Ko.
Donc, pour balancer 20Ko de zeros après avoir sauté 1953519852 Ko (1953519872 - 20 = 1953519852), je lancerais donc la commande :

dd if=/dev/zero of=/dev/mapper/isblabla_blabla seek=1953519852 bs=1K count=20
jibe a écrit :

En tous cas, merci pour tes explications : c'est très instructif !

De rien, c'est un plaisir.

J'espère rester clair et ne pas dire d'ânerie tongue
De toute façon, tu ne peux pas faire de bêtise : le contenu de ton disque est condamné big_smile
(à moins de te tromper de disque lol)

Hors ligne

#4 Le 02/04/2010, à 22:51

jibe

Re : GPT, ça pue (avec dmraid)

Salut,

Merci pour ces précisions. Je referai un essai de seek à l'occasion, mais c'est bien ainsi que j'avais calculé.  Comprends pas pourquoi je me suis fait jeter, ou alors j'étais mal réveillé et je me suis trompé quelque part...

Finalement, j'ai pris les grands moyens : j'ai rempli tout le disque de zéros. C'est plus long, mais efficace wink


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne

#5 Le 26/04/2011, à 20:35

obeone

Re : GPT, ça pue (avec dmraid)

Salut, petit retour sur le sujet, quelle commande utiliser pour remplir le DD de zéro?


9 fois sur 10 le souci se trouve entre la chaise et le clavier !
Asus Z68, i7 3770K, 8Gb, SSD 830 128Gb

Hors ligne

#6 Le 26/04/2011, à 20:55

lynn

Re : GPT, ça pue (avec dmraid)

obeone a écrit :

Salut, petit retour sur le sujet, quelle commande utiliser pour remplir le DD de zéro?

Salut,

Peut-être en allant voir ici
http://doc.ubuntu-fr.org/dd


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#7 Le 26/04/2011, à 22:10

jibe

Re : GPT, ça pue (avec dmraid)

Salut,

Très intéressante, cette doc ! Je ne connaissais pas, et m'étais simplement servi de

man dd

et de quelques astuces qui pour la plupart en découlent...

J'ai donc utilisé la commande suivante :

dd if=/dev/zero of=/dev/sdx bs=16M

Concernant la taille de bloc choisie (bs=16M), voir ce fil.


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne