6 votos

¿Cómo No Destructiva Comprobar si grub2 se Instala en El Sector de Arranque o está Siendo la Cadena-Cargado por grub1, Sin necesidad de Reiniciar?

Estamos actualizando varios sistemas de Debian Lenny a Squeeze y me gustaría asegurar que no me he perdido ningún grub2 instalaciones. De forma predeterminada, Apriete la cadena de-arranque-carga de grub1 y usted tiene que ejecutar upgrade-from-grub-legacy a actualizar. Así que me gustaría ser capaz de realizar un control remoto para ver si grub2 ha sido instalado en el disco de sector de arranque sin necesidad de reiniciar, y sin sobrescribir el sector de arranque.

No hay nada más fácil que hacer un hexdump de los primeros bloques de la unidad de disco duro y tratando de identificar grub2 específico de bytes?

4voto

aaron sacker Puntos 1

Se topó con la respuesta en el grub2 paquete fuente de debian. Resulta que no requieren un volcado del sector de arranque, por lo que un envasados por separado secuencia de comandos puede ser útil. Aquí está una secuencia de comandos (sólo una envoltura alrededor de la función oficial) que le dirá si es o no grub2 se ha instalado en el sector de arranque. Puede ser fácilmente modificado para usos similares.

#!/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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: