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.
Réponses:
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:
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.
la source