Grub은 MBR 부팅을 위해 부팅 섹터에 무엇을 기록합니까?

Grub은 MBR 부팅을 위해 부팅 섹터에 무엇을 기록합니까?

syslinux의 일부설치 과정mbr.bin장치의 마스터 부트 레코드에 설치하는 작업이 포함됩니다 .

dd \
  conv=notrunc \
  bs=440 \
  count=1 \
  if=/usr/lib/syslinux/mbr/mbr.bin \
  of=/dev/sdX

디스크에서 해당 바이트를 복원하고 원본 mbr.bin파일과 비교하면 동일합니다.

$ sha512sum /usr/lib/syslinux/mbr/mbr.bin
3ba2bd96c7e5d81e...
$ dd bs=440 count=1 if=/dev/sdX | sha512sum
3ba2bd96c7e5d81e...

여태까지는 그런대로 잘됐다! 두 체크섬이 동일해야 한다는 것이 논리적인 것 같습니다.

Grub을 사용하여 Syslinux와 동일한 동작을 수행하려고 할 때 Grub이 좀 더 신비스러워 보입니다.

조금 조사해 보면 설치가 새 부트로더를 설치할 때 이것을 호출하게 된다는 dpkg-reconfigure grub-pc것을 알 수 있습니다 ...grub

grub-install --target=i386-pc --force --no-floppy /dev/sdX

동일한 grub-install명령을 실행하고 를 추가하면 해당 호출이 --verbose표시됩니다 .grub-installgrub-bios-setup

grub-bios-setup \
  --verbose \
  --force \
  --directory='/boot/grub/i386-pc' \
  --device-map='/boot/grub/device.map' \
  '/dev/sdX'

일부를 살펴보면원천, 나생각하다이것이 grub-bios-setupMBR에 쓰는 일입니다. 처음 512바이트를 0으로 만든 다음 다시 실행하면 grub-bios-setup해당 바이트가 0으로 만들기 전의 상태로 되돌아가는 것을 볼 수 있기 때문입니다.

불행히도 나는 완전히 이해할 만큼 코드를 잘 이해하지 못합니다.무엇은(는) 님이 작성 중입니다 grub-bios-setup.

나는 몇 가지 예감을 느꼈다. 나생각하다쓰여진 것의 일부는 와 관련이 있습니다 boot.img. 실제로, 내 부트 섹터의 특정 바이트와 를 비교하면 boot.img동일합니다(여기서 읽은 총 바이트 수는 입니다 440).

$ skip=104 count=336; \
  sudo dd if=/boot/grub/i386-pc/boot.img \
    skip=$skip bs=1 count=$count 2>/dev/null | sha512sum ; \
sudo dd if=/dev/sdX \
    skip=$skip bs=1 count=$count 2>/dev/null | sha512sum

e531a81fd3eedb324a9...
e531a81fd3eedb324a9...

그들은 유사점을 가지고 있지만 그렇지 않습니다.전적으로똑같다. 첫 번째 104바이트가 다르며 그 차이의 원인을 이해할 수 없습니다.

mbr.binGrub과 비슷한 종류의 파일이 있나요 ? 그것은 boot.img? 그런 다음 Grub은 해당 바이트 중 일부를 수정합니까? Grub이 이러한 다른 바이트를 즉시 생성합니까? Grub이 생성한 바이트는 각 시스템마다 다르며 Grub이 쓸 때마다 고유합니까?

답변1

예, boot.imgMBR의 처음 440바이트에 기록됩니다. boot.img설치된 시스템에 따라 달라지는 데이터를 포함하는 "BIOS 매개변수 블록"을 포함합니다. 이 데이터는 Grub이 설치될 때 BPM에 기록됩니다.여기소스 코드입니다.

그런데 저는 GRUB에 많은 시간을 소비하지 않을 것입니다. 이 코드는 아마도 몇 년 후에는 새 PC에서 실행되지 않을 것입니다. 인텔은 2020년까지 레거시 BIOS 모드를 없앨 계획입니다.

관련 정보