내 서버가 여전히 grub 레거시(GRUB 1) MBR을 사용하고 있나요?

내 서버가 여전히 grub 레거시(GRUB 1) MBR을 사용하고 있나요?

Debian이 GRUB 2(패키지 grub-pc)로 업데이트할 때 MBR을 자동으로 업그레이드하지 않습니다. 대신, GRUB 2를 체인로드하도록 이전 GRUB 1 설치를 구성합니다. 이를 통해 관리자는 새로운 GRUB 2 구성을 테스트할 수 있습니다. 어떤 이유로 GRUB 2가 실패하더라도 이전 GRUB 1 항목 중 하나를 사용하여 시스템을 부팅할 수 있습니다. GRUB 2를 테스트한 후 실행하여 upgrade-from-grub-legacyMBR을 교체한 다음 수동으로 제거 해야 합니다 /boot/grub/menu.lst*.

불행하게도 우리는 실제로 많은 서버에서 이 작업을 수행하지 않으므로 이제 GRUB 1과 GRUB 2 MBR이 혼합되어 있으며 어떤 서버가 어떤 버전을 사용하고 있는지 알 수 없습니다. GRUB MBR 버전을 감지하는 방법이 있습니까?

답변1

독일 우분투 위키(걱정하지 마세요. 이 정보는 독일어를 구사하지 않는 사람도 이해할 수 있어야 함)가 더 나은 접근 방식을 보여주는 것 같습니다.

http://wiki.ubuntuusers.de/GRUB-Umgebung_analysieren?redirect=no#GRUB-Version-in-MBR-oder-Partitions-Bootsektor-ermitteln

sudo hexdump -v -s 0x80 -n  2 -e '2/1 "%x" "\n"'  /dev/sdXY

결과는 다음 표로 변환될 수 있습니다.

5272    GRUB (Legacy)
aa75    GRUB (Legacy)
48b4    GRUB 2 (version 1.96)
7c3c    GRUB 2 (version 1.97 or 1.98)
020     GRUB 2 (version 1.99)
488     Grub 2 core.img
31d2    Grub 2 core.img
8053    LILO

원본 Wiki 기사에는 다른 운영 체제에서 다른 많은 MBR을 식별하는 데 사용할 수 있는 더 많은 ID가 포함되어 있습니다.

답변2

서버가 여전히 GRUB 1 MBR을 사용하고 있을 때 장치의 세 번째 512바이트 블록에 다음 문자열이 포함되어 있음을 발견했습니다.

some-server ~ # dd if=/dev/sda bs=512 count=1 skip=2 2>/dev/null | strings
0.97
/boot/grub/stage2 /boot/grub/menu.lst

서버가 GRUB 2 MBR을 사용하는 경우 이 블록에는 읽을 수 있는 문자열이 포함되지 않습니다.

some-other-server ~ % dd if=/dev/sda bs=512 count=1 skip=2 2>/dev/null | strings
WVSS
Z[^_]

관련 정보