Serveur Ubuntu, table de partition gpt, mdadm, échec d'amorçage grub

9

Détails du système de travail de base:

J'ai utilisé le CD du serveur Ubuntu 12.04 pour installer un serveur.

J'ai 4 disques. Sur tous les disques, j'ai fait ce qui suit, similaire à ce guide :

  • créé une partition de swap de 2 Go
  • créé une partition de 256 Go / boot
  • créé une partition RAID10 de 64 Go (pour root)
  • créé une grande partition RAID10 prenant le reste de l'espace

J'ai formaté le démarrage en ext3. J'ai configuré RAID10 sur la racine et les grandes partitions. J'ai formaté la racine un ext4. J'ai créé un volume logique sur le grand et l'ai formaté ext4.

Le système résultant fonctionne correctement et démarre correctement.

Détails du problème:

J'ai alors décidé de documenter une procédure d'échec. Comme première étape, j'ai décidé de réinstaller grub.

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

Il semble donc qu'il ait échoué, mais il semble également qu'il ait abandonné et n'ait pas apporté de modifications. J'ai donc redémarré. Le démarrage a échoué. Il se bloque simplement avec un écran noir avec un curseur clignotant à environ 4 lignes vers le bas. Si je démarre en maintenant "Shift" enfoncé, j'obtiens le mot "GRUB" à gauche du curseur, mais aucune invite interactive.

À ce stade, j'ai utilisé le disque de réparation de démarrage pour générer ce rapport: http://paste.ubuntu.com/966531/

Remarque dans le rapport ci-dessus, il indique que le chargeur de démarrage ne pointe pas vers le secteur correct pour core.img. (sda est le cd virtuel; sdb est le disque de démarrage; sdc est un miroir de sdb, mais le démarrage n'est pas mis en miroir, juste une partition distincte indépendante est là et formatée ext3; sdd et sde ont de l'espace pour le démarrage mais il n'est pas formaté)

Ensuite, j'ai démarré à partir du CD du serveur Ubuntu, démarré le système de secours et émis les commandes suivantes, qui se sont terminées sans erreur (où sda est le CD virtuel et b, c, d, e sont les disques qui étaient a, b, c , d dans les commandes grub précédentes):

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

À ce stade, j'ai utilisé le disque de réparation de démarrage pour générer ce rapport: http://paste.ubuntu.com/966561/

Notez que dans le rapport ci-dessus, le problème concernant core.img a disparu. Il semble indiquer le bon secteur.

Maintenant, si j'essaie de démarrer, je reçois une invite grub. Si je lance "set", je vois que la racine est trouvée et définie. Si je lance "ls /", je vois mon répertoire racine à partir du volume de raid, y compris le fichier du noyau vmlinuz. Si je tape "ls / vmlinuz", il dit "erreur: fichier introuvable." Il indique la même erreur si j'utilise la commande "linux" pour essayer de charger le noyau. Le fichier vmlinuz n'est pas répertorié si j'utilise "ls -l /".

Détails trop verbeux, au cas où vous voudriez suivre:

J'ai remarqué qu'il n'y a pas non plus de /boot/grub/grub.cfg, donc j'ai couru

# grub-mkconfig -o /boot/grub/grub.cfg

Mais le problème demeure.

Si j'utilise l'outil "gptsync", il n'y a aucun changement dans ce comportement.

Le disque de réparation de démarrage ne réparera pas le système, car il veut que je démarre avec un bios compatible EFI. J'ai brièvement examiné cela, mais je ne sais pas comment cela fonctionne. J'ai trouvé un shell UEFI dans mes options de démarrage, mais je n'en sais rien et je ne vois pas comment changer le démarrage à partir de là (par exemple, pour démarrer le CD à partir de ce shell EFI).

J'ai également lu cette page , mais Ubuntu ne vient pas avec la commande "grub", donc je ne peux pas la suivre exactement. Je pourrais simplement installer cette commande, mais je suis plus curieux de savoir comment le programme d'installation d'Ubuntu a réussi à l'installer plutôt que d'avoir une configuration différente. A-t-il utilisé des listes de blocage?

Voici la sortie de parted, lors du démarrage sur le disque de réparation de démarrage (où ici le sdb est le premier disque dur, sda lorsqu'il est démarré à partir du disque, et "boot" devient "bios_grub" dans le 2ème lien de collage):

Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

Voici une super vieille machine virtuelle sans rapport pour comparaison (pour ceux qui ne connaissent pas le disque de réparation de démarrage ): http://paste.ubuntu.com/966799/

Voici la dernière pâte du système problématique, après avoir exécuté le grub-mkconfig ci-dessus, et également remis "bios_grub" à "boot". http://paste.ubuntu.com/966808/

En comparant les deux, cela semble intéressant:

sdb2: __________________________________________________________________________

File system:       
Boot sector type:  Grub2's core.img
Boot sector info: 
Mounting failed:   mount: unknown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info: 
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

Il semble que le raid ait les fichiers de démarrage et que le sdb2 ne soit pas formaté. (malgré cela, le système a démarré avant d'exécuter grub-install). À partir du CD de secours, «mount -t ext3 / dev / sdb2 / boot» échoue. Mais il est logique que cela perturbe les choses, car grub utilise explicitement la partition 2 (le 2 de la commande parted qui active bios_grub).

J'ai donc fait quelque chose comme ça:

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

Puis redémarré, et j'ai à nouveau l'écran noir, aucune invite. http://paste.ubuntu.com/966848/

Donc, à ce stade, je suppose que lorsque bios_grub est défini, grub ne s'installe pas sur le MBR, et non sur le système de fichiers ext3 sur ext3, mais sur la partition elle-même, comme s'il s'agissait d'EFI ... qui gâcherait évidemment le système de fichiers ext3 là-bas. Et d'après ma brève lecture sur EFI, cela sonnait comme EFI suppose que la première partition est le démarrage, mais dans mon cas, la première est swap, et elle devrait alors être FAT plutôt que quelque chose de démontable ... donc puisque cela fait peu / pas de sens, je suis toujours complètement perdu sans un indice. [EDIT: maintenant j'ai un indice ... sauter un peu pour la mise à jour]

Et maintenant, lorsque je clique sur réparer dans boot-repair-disk , il me demande autre chose. La dernière fois, l'erreur a été cachée sous la fenêtre et j'ai dû faire glisser l'autre pour le voir. Cette fois, la fenêtre principale a disparu et la nouvelle fenêtre indique:

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?

J'ai donc cliqué sur Oui, et il a dit qu'il s'était réparé avec succès, et j'ai créé une autre pâte: http://paste.ubuntu.com/966862/

Mais j'ai toujours un écran noir avec un curseur clignotant.

Maintenant, ma théorie est que le démarrage a été écrasé par une chose non fat non EFI qui est juste du code grub qui aurait autrement été dans les secteurs 0-63 auparavant. Heureusement, je suis tombé sur une déclaration très claire sur cette page, qui a probablement complété ma compréhension de ce que tout cela signifie. Et puis, après avoir trouvé cela, Jeremy a posté une réponse qui, si elle est vraie, confirme que c'est le concept clé manquant. http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

Des questions:

Que se passe-t-il? Pourquoi grub ne devrait-il pas démarrer? Pourquoi dit-il "fichier non trouvé"?

Pourquoi grub ne veut-il pas installer sans ce paramètre que j'ai défini avec parted (qui n'a pas été défini par le programme d'installation d'Ubuntu)? Je pensais que tout ce dont j'avais besoin pour l'installer était un / boot séparé qui n'est pas en LVM ni RAID logiciel, car ma racine est en RAID et la table de partition est GPT.

Comment le programme d'installation du CD Ubuntu l'installe-t-il sans ce problème et sans le paramètre bios_grub?

J'envisagerais également d'utiliser EFI. Si c'est une bonne idée et qu'il existe un moyen standard de le configurer, je suis toujours prêt à apprendre de nouvelles choses.

La réponse la plus rapide qui me ferait plaisir, même sans répondre à toutes mes questions, serait un ensemble de commandes que je pourrais exécuter à partir du CD de secours pour réparer le chargeur de démarrage de la même manière que le CD d'installation. Ce serait également très bien si je pouvais les exécuter avec le système démarré, au lieu du CD.

Peter
la source
Pourriez-vous ajouter la sortie d'impression de parted?
Jeremy
Vous pouvez le voir dans les 2 liens de collage sur la ligne 993, mais par demande, je vais l'ajouter à ma question.
Peter

Réponses:

8

La solution consiste à utiliser une partition bios_grub, qui n'est pas la même que la partition / boot.

Par défaut, la partition bios_grub est de 1 Mo, et elle doit être marquée bios_grub. La mienne est la première partition de mon disque. Si votre partition 2 est réellement / boot comme le suggère Parted, cela ne serait pas correct et vous devriez créer une autre partition de 1 Mo.

Avec GPT et GRUB2, le système de fichiers minimum a trois partitions: bios_grub, root, swap. (pas tout à fait sûr que le swap est requis)

Pourquoi grub ne démarre-t-il pas après avoir simplement exécuté "grub-install"?

Inconnu ... On pourrait penser que cela ne modifierait rien s'il dit clairement qu'il ne peut pas être intégré, donc il ne peut pas fonctionner.

Pourquoi dit-il "fichier non trouvé"?

/ vmlinuz est un lien symbolique qui utilise la partition de démarrage et la partition de démarrage est corrompue. Le code bios_grub a été écrit au-dessus de sa structure ext3. Cela signifiait probablement que / boot n'était pas monté et que les fichiers grub vus se trouvaient en fait sur le système racine, qui ne contenait pas le noyau.

Pourquoi grub ne veut pas installer sans ce paramètre que j'ai défini avec parted

Une table de partition GPT n'a pas d'espace pour un chargeur de démarrage, contrairement au MBR. Une partition spécifique doit donc être créée pour contenir le code de démarrage. Avant d'exécuter "grub-install", spécifiez cette partition avec la commande:

    parted /dev/sda set 1 bios_grub on

Je pensais que tout ce dont j'avais besoin était un / boot séparé. Comment le programme d'installation du CD Ubuntu l'installe-t-il sans le paramètre bios_grub?

Cette exigence semble être tout ce qui est nécessaire pour le programme d'installation d'Ubuntu, mais elle crée un système non standard qui se casse facilement.

Lorsque GRUB dit "Cette étiquette de partition GPT n'a pas de partition de démarrage BIOS ", cela signifie la partition bios_grub, pas / boot.

Jeremy
la source
Je vous remercie. C'est en fait très proche de ce sur quoi je travaille actuellement. Voir mon "Je suis toujours complètement perdu sans indice." section ci-dessus. Maintenant, ma théorie est que le démarrage a été écrasé par une chose non fat non EFI qui est juste du code grub qui aurait autrement été dans les secteurs 0-63 auparavant. Je travaille sur une expérience, puis je vous ferai savoir comment ça se passe.
Peter
Utilisez-vous Ubuntu? Existe-t-il un moyen pour que le programme d'installation d'Ubuntu s'installe correctement à l'aide de la partition bios_grub?
Peter
@Peter J'utilise Ubuntu, et si vous effectuez un partitionnement guidé, le programme d'installation doit le configurer correctement. Je sais que cela a été le cas pour moi avec le programme d'installation 11.10.
Jeremy
Merci beaucoup. Telle est la réponse. Ensuite, je vais essayer avec des configurations plus complexes (raid et lvm au démarrage), puis je modifierai votre réponse avec des détails.
Peter