Назад | Перейти на главную страницу

Как без разрушения проверить, установлен ли grub2 в загрузочном секторе или загружается по цепочке grub1 без перезагрузки?

Мы обновляем несколько систем с Debian Lenny до Squeeze, и я хотел бы убедиться, что я не пропустил ни одной установки grub2. По умолчанию Squeeze chain-boot-loaded от grub1, и вам нужно запустить upgrade-from-grub-legacy усовершенствовать. Поэтому я хотел бы иметь возможность удаленно проверить, установлен ли grub2 в загрузочный сектор диска без перезагрузки и без перезаписи загрузочного сектора.

Есть ли что-нибудь проще, чем сделать шестнадцатеричный дамп первых блоков жесткого диска и попытаться идентифицировать байты, специфичные для grub2?

Я наткнулся на ответ в пакете исходного кода debian grub2. Оказывается, для этого требуется дамп загрузочного сектора, поэтому может пригодиться отдельно упакованный скрипт. Вот сценарий (просто оболочка для официальной функции), который сообщит вам, установлен ли grub2 в загрузочный сектор. Его можно легко модифицировать для аналогичных целей.

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