Pertanyaan Bagaimana Anda Tidak Merusak Periksa apakah grub2 Dipasang di Sektor Boot atau Sedang Berisi Rantai oleh grub1, Tanpa Reboot?


Kami memperbarui beberapa sistem dari Debian Lenny ke Squeeze dan saya ingin memastikan bahwa saya tidak melewatkan instalasi grub2. Secara default, Squeeze chain-boot-load dari grub1 dan Anda harus menjalankannya upgrade-from-grub-legacy untuk meningkatkan. Jadi saya ingin dapat memeriksa dari jarak jauh untuk melihat apakah grub2 telah diinstal di sektor boot disk tanpa me-reboot, dan tanpa menimpa boot sector.

Adakah yang lebih mudah daripada melakukan hexdump blok awal hard drive dan mencoba mengidentifikasi byte grub2-spesifik?


6
2018-04-13 04:39






Jawaban:


Saya menemukan jawabannya di paket sumber debian grub2. Ternyata itu memang membutuhkan dump bootsector - jadi skrip paket terpisah mungkin berguna. Berikut ini skrip (hanya pembungkus di sekitar fungsi resmi) yang akan memberi tahu Anda apakah grub2 telah diinstal ke dalam boot sector atau tidak. Ini dapat dengan mudah dimodifikasi untuk penggunaan serupa.

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

4
2018-04-15 03:50