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


1

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은 좀 더 신비한 것 같습니다.

약간의 sleuthing을 수행하면 새로운 부트 로더를 설치할 때 dpkg-reconfigure grub-pcgrub설치가 이것을 호출 한다는 것을 알 수 있습니다 ...

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

동일한 grub-install명령을 실행하고 추가하면 --verbose해당 grub-install호출을 볼 수 grub-bios-setup있습니다.

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

의 일부를 보면 소스 , 내가 생각하는 그것이 grub-bios-setup내가 처음 512 바이트를 제로 경우 다음 다시 실행 때문에 MBR 쓰기에 대한 책임이 무엇인가 grub-bios-setup, 나는 그 바이트가 다시 내가 그들을 제로 아웃하기 전에 그들이 무엇인지에 복귀 참조하십시오.

불행히도에 의해 작성된 내용 을 완전히 이해하기에 충분한 코드를 이해하지 못합니다 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에 의해 생성 된 thoes 바이트는 각 시스템에 따라 다르며 Grub이 작성할 때마다 고유합니까?


시스템의 용도를 확인하기 위해 시스템을 살펴 보려고했지만 잠시 후 EFI로 전환했습니다.
Ignacio Vazquez-Abrams

답변:


1

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

Btw, 나는 GRUB에 많은 시간을 소비하지 않을 것입니다. 이 코드는 아마도 몇 년 안에 새로운 PC에서 실행되지 않을 것입니다. 인텔은 2020 년까지 레거시 BIOS 모드를 제거 할 계획입니다.


그 정보에 감사드립니다! "Grub 설치시 BPM에이 데이터가 기록됩니다"라고 말하면 Grub이 MBR에 설치 될 때 BPB 데이터가 파생되거나 기록된다는 의미입니까? 그래서 같은 것을 실행 grub-install하면 시스템 특정 BPB와 일반 boot.img이 MBR의 440 바이트로 결합됩니까? 또는 Grub 바이너리 / 패키지를 호스트 시스템에 설치할 때 BPB가 작성되었음을 의미합니까?
Will Haley

그리고 나는 EFI가 현재 일을하는 현대적 / 적절한 방법이라는 것을 알고 있지만 레거시 BIOS에 약간의 마감 시간이 있다는 것을 알지 못했습니다. 그 2020 년 날짜를 알고 반갑습니다. 감사!
Will Haley

Grub이 설치되면 설치 프로그램은 boot.img메모리를 읽고 새 MBR로 디스크에 쓰기 전에이를 pacthes합니다. 데이터는 BPM과 파티션 테이블이 디스크에서 읽히고 부트 드라이브 (오프셋 0x64) 및 커널 섹터 (오프셋 0x5c)와 같이 즉시 생성됩니다. 필요한 경우 두 개의 명령어 바이트도 NOP로 변경됩니다. BPM은 MBR에 없지만 해당 바이트는 어쨌든 복사됩니다.
Johan Myréen

인텔은 2017 년 말에 2020 기한을 발표했지만 숨을 멈추지 않았습니다. 반면에 BIOS와 UEFI의 공존으로 인해 많은 혼란이 발생하기 때문에 장기적으로 BIOS 덤프가 좋은 것으로 보입니다.
Johan Myréen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.