Comment savoir si grub est installé sur un périphérique?

37

Comment savoir si grub est installé sur un disque et quels sont ses paramètres (en particulier ce qu’il a pour le paramètre root)

Je dois vérifier un grand nombre de disques dans les baies logicielles RAID1 pour m'assurer que grub est installé sur les deux disques, le grub de chaque disque ayant la valeur racine appropriée.

DrStalker
la source
3
Pouvez-vous envisager d'accepter la nouvelle réponse ci-dessous? depuis que la réponse acceptée est obsolète
rubo77
@ rubo77, ma réponse était correcte à l'époque, lorsque grub0,9 x ou moins était couramment utilisé et longtemps avant qu'il ne soit renommé grub-legacy. Si cela vous dérange, je suggère de poser une nouvelle question spécifiquement sur grub2. Vous pouvez également mener une campagne pour corriger toutes les questions et réponses devenues obsolètes avec le temps.
cas
3
Aucune infraction. Je pense que SO est une base de connaissances qui doit évoluer avec le temps. Une fois que les réponses périmées doivent être mises à jour.
rubo77

Réponses:

28

MISE À JOUR:

Cette réponse date de 2009 et s'applique à grub-legacy, pas à grub2.

Vous pouvez utiliser filepour identifier GRUB dans un MBR. par exemple

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3
, stage2 address 0x2000, stage2 segment 0x200; partition 1:
ID=0xfd, starthead 1, startsector 63, 1044162 sectors; partition
2: ID=0x82, starthead 0, startsector 1044225, 1028160 sectors;
partition 3: ID=0xfd, starthead 0, startsector 2072385,
1951447680 sectors, code offset 0x48

Le root=paramètre n'est pas stocké dans le MBR, mais dans le menu.lstfichier GRUB stocké dans un système de fichiers (généralement dans le répertoire / boot / grub de la racine fs ou le répertoire grub du système de fichiers / boot - mais pas toujours pourrait être n'importe où).

Vous devrez analyser la sortie du fichier ci-dessus, déterminer le disque / la partition sur lequel se trouve le menu.lstfichier, le monter, le lire et l’analyser. Vous voudrez aussi lire dans le fichier grub / default pour déterminer quelle entrée de menu est la valeur par défaut, car c'est probablement celle qui a le paramètre root = qui vous intéresse le plus.

cas
la source
Dans ce cas, j'ai besoin d'un moyen de m'assurer que grub recherche menu.lst au bon endroit ... le chargeur de démarrage doit être informé du disque et de la partition sur lesquels il doit se rendre pour pouvoir obtenir le menu de démarrage.
DrStalker
il y a beaucoup d'informations utiles sur grub sur la page d'accueil de grub gnu.org/software/grub , le wiki grub.enbug.org , et sur wikipedia en.wikipedia.org/wiki/GRUB
cas le
8
Ce n'est plus correct avec grub2. Voir la réponse de @ benrifkah à la place.
Paul Tomblin
52

Méthode alternative

file -sne fonctionnait pas pour moi dans Ubuntu Lucid, car les fichiers magiques de ma commande de fichier étaient obsolètes . Une autre façon de procéder si vos fichiers magiques n’ont pas suivi les modifications de GRUB consiste à examiner les 512 premiers octets du périphérique à l’aide de la ddcommande suivante:

user@host:~$ sudo dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error

Cela envoie la sortie de la ddcommande à travers la stringscommande, éliminant ainsi les caractères non imprimables (les statistiques de transfert sont ignorées /dev/null).

Si vous voyez des messages que GRUB afficherait en cas d'échec, vous avez installé grub.

Chapeau de chapeau à louib sur ubuntuforums.org pour avoir répondu à cet article protégé par mot de passe: http://ubuntuforums.org/showthread.php?t=363372

Pour les curieux, voici ce que j'ai obtenu file -s:

user@host:~$ sudo file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 20
48, 337211392 sectors; partition 2: ID=0x5, starthead 254, startsector 337215486, 1434214
6 sectors, code offset 0x63

Il n'y a rien spécifiquement à propos de GRUB.

benrifkah
la source
5
Spot sur. La réponse acceptée ne fonctionnait pas pour moi sur plusieurs machines, mais la tienne aussi.
Cerin
13
La réponse acceptée a été écrite en 2009 et (comme il ressort de la mention de menu.lst plutôt que de grub.cfg) était pour grub1 aka "grub-legacy". évidemment, les choses ont changé depuis et grub2 ne met pas d'identifiant dans le MBR. si cela fonctionnait sur certaines machines pour vous mais pas sur d'autres, cela impliquerait que vous avez grub1 sur certaines machines et grub2 sur d'autres.
cas
1
Merci pour les précisions Craig. Le système file -ssur lequel j'ai initialement essayé la commande utilise grub-pc, qui est apparemment GRUB2, donc on dirait que vous êtes partiellement correct. Cependant, j'ai file -sutilisé GRUB 0.97 sur d’autres systèmes, mais cela ne fonctionnait pas sur d’autres. La différence entre ces systèmes résidait dans les numéros des fichiers magiques fournis avec la commande de fichier. L'échange de fichiers de nombres magiques a confirmé que les définitions du système inutilisé entraînaient l'échec de ce dernier.
Benrifkah
7

Vous pouvez utiliser grub-emupour voir le menu que grub affichera lors du prochain redémarrage de la machine.

$ sudo apt-get install grub-emu
$ sudo grub-emu

Sur mon ordinateur de bureau, le menu était affiché comme prévu, bien que si je prétendais réellement démarrer un noyau, je reçois une erreur «aucun de ces périphériques». Je pense que c'est le comportement attendu.

Sur mon DigitalOcean VPS, aucune entrée n’était affichée dans le menu grub, bien que le serveur ait réellement redémarré. (Il s'agit d'un VPS 2013, votre kilométrage peut donc varier.)

Quelques notes lors de l'exécution grub-emu:

  • Dans X-windows, si vous voulez interagir avec grub, vous avez besoin de votre focus clavier pour être sur le terminal à partir duquel vous avez exécuté grub-emu, et non pas sur la fenêtre qui surgit.
  • Vous pouvez quitter l'émulateur en appuyant sur, cpuis en tapant exit.
  • Après avoir quitté, votre émulateur de terminal peut être dans un état médiocre (par exemple, Enter ne s'affichera pas sur une nouvelle ligne). Corrigez cela en tapant reset. (Ne vous inquiétez pas, il ne redémarrera pas votre ordinateur. Il ne fera que nettoyer votre terminal.)
Joeytwiddle
la source
Dactylographie csuivie de exitne fonctionnait pas pour moi.
Faheem Mitha
1
assurez-vous que vous avez le focus sur le terminal d'origine qui a engendré la fenêtre de grub et non la fenêtre de grub elle-même (il m'a fallu une seconde pour m'en rendre compte)
Madivad