7 votes

Comment vérifier de manière non destructive si grub2 est installé dans le secteur de démarrage ou s'il est chargé en chaîne par grub1, sans redémarrer ?

Nous mettons à niveau plusieurs systèmes de Debian Lenny à Squeeze et je voudrais m'assurer que je n'ai pas oublié d'installer grub2. Par défaut, Squeeze charge en chaîne depuis grub1 et vous devez exécuter upgrade-from-grub-legacy à mettre à niveau. J'aimerais donc pouvoir vérifier à distance si grub2 a été installé dans le secteur de démarrage du disque sans redémarrer, et sans écraser le secteur de démarrage.

Y a-t-il quelque chose de plus facile que de faire un hexdump des premiers blocs du disque dur et d'essayer d'identifier les octets spécifiques à grub2 ?

6voto

Matthew Hood Points 363

Je suis tombé sur la réponse dans le paquet source de grub2 debian. Il s'avère que cela nécessite un dump du secteur de démarrage - donc un script emballé séparément pourrait être utile. Voici un script (juste un wrapper autour de la fonction officielle) qui vous dira si oui ou non grub2 a été installé dans le secteur de démarrage. Il peut être facilement modifié pour des utilisations similaires.

#!/bin/bash
set -e

if [ "$UID" -ne "0" ]; then
  echo Must be run as root
  exit 99
fi

scan_grub2()
{
  if ! dd if="$1" bs=512 count=1 2>/dev/null | grep -aq GRUB; then
    # No version of GRUB is installed.
    echo Grub could not be found
    return 1
  fi

  # The GRUB boot sector always starts with a JMP instruction.
  initial_jmp="$(dd if="$1" bs=2 count=1 2>/dev/null | od -Ax -tx1 | \
                 head -n1 | cut -d' ' -f2,3)"
  [ "$initial_jmp" ] || return 1
  initial_jmp_opcode="${initial_jmp%% *}"
  [ "$initial_jmp_opcode" = eb ] || return 1
  initial_jmp_operand="${initial_jmp#* }"
  case $initial_jmp_operand in
    47|4b|4c|63)
      # I believe this covers all versions of GRUB 2 up to the package
      # version where we gained a more explicit mechanism.  GRUB Legacy
      # always had 48 here.
      return 0
    ;;
  esac

  return 1
}

if scan_grub2 "/dev/sda"; then
  echo Found grub 2
else
  echo Did not find grub 2
  #Uncomment the next line to upgrade
  #upgrade-from-grub-legacy
fi

0 votes

Il dit "Grub could not be found, Did not find Grub 2" mais je suppose que j'en utilise au moins un...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X