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-pc내 grub설치가 이것을 호출 한다는 것을 알 수 있습니다 ...

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.