web-dev-qa-db-fra.com

Comment savoir si grub est installé sur un appareil?

Comment puis-je savoir si grub est installé sur un disque et si ce sont ses paramètres (notamment, ce qu'il a pour le paramètre racine)

J'ai besoin de vérifier un grand nombre de disques dans les matrices RAID1 logicielles pour m'assurer que les deux disques ont installé grub, le grub sur chaque disque ayant la valeur racine appropriée.

39
DrStalker

MISE À JOUR:

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

Vous pouvez utiliser file pour 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= le paramètre n'est pas stocké dans le MBR, il est stocké dans le GRUB menu.lst fichier qui est stocké sur un système de fichiers (généralement dans le répertoire/boot/grub du root fs ou dans le répertoire grub du système de fichiers/boot - mais pas toujours, il pourrait être n'importe où).

Vous devrez analyser la sortie du fichier ci-dessus, déterminer quel disque/partition le menu.lst le fichier est activé, montez-le, lisez-le et analysez-le. Vous voudrez également lire le fichier grub/default pour savoir quelle entrée de menu grub est la valeur par défaut, car c'est probablement celle qui a le paramètre root = qui vous intéresse le plus.

28
cas

Méthode alternative

file -s n'a pas fonctionné pour moi dans Ubuntu Lucid car mes les fichiers magiques de la commande file étaient obsolètes. Une autre façon de le faire si vos fichiers magiques n'ont pas rattrapé les modifications GRUB est d'examiner les 512 premiers octets du périphérique en utilisant la commande dd comme ceci:

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 commande dd via la commande strings, supprimant ainsi les caractères non imprimables (les statistiques de transfert sont ignorées dans /dev/null).

Si vous voyez des messages qui GRUB s'afficheraient en cas d'échec, alors vous avez installé grub.

Pointe du chapeau à louib sur ubuntuforums.org pour avoir répondu à ce message protégé par mot de passe: http://ubuntuforums.org/showthread.php?t=363372

Pour les curieux, c'est ce que j'ai obtenu de 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 à propos de GRUB là-dedans spécifiquement.

53
benrifkah

Vous pouvez utiliser grub-emu pour voir le menu que grub affichera au prochain redémarrage de la machine.

$ Sudo apt-get install grub-emu
$ Sudo grub-emu

Sur ma machine de bureau, le menu était affiché comme prévu, bien que si j'ai fait semblant de démarrer un noyau, j'ai eu une erreur "no such device". Je pense que c'est un comportement attendu.

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

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

  • Dans X-windows, si vous voulez interagir avec grub, vous devez que votre focus clavier soit sur le terminal à partir duquel vous avez exécuté grub-emu, et non sur la fenêtre qui est apparue.
  • Vous pouvez quitter l'émulateur en appuyant sur c puis en tapant exit.
  • Après avoir quitté, votre émulateur de terminal peut être en mauvais état (par exemple, Enter ne s'affichera pas sur une nouvelle ligne). Corrigez cela en tapant reset. (Ne vous inquiétez pas, cela ne redémarrera pas votre machine. Cela nettoiera simplement votre terminal.)
7
joeytwiddle