O que o Grub grava no setor de inicialização para inicialização MBR?

O que o Grub grava no setor de inicialização para inicialização MBR?

Parte do Syslinuxprocesso de instalaçãoenvolve a instalação mbr.binno registro mestre de inicialização de um dispositivo.

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

Se eu restaurar esses bytes do disco e compará-los com o mbr.binarquivo original, eles serão idênticos.

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

Até agora tudo bem! Parece lógico que essas duas somas de verificação sejam idênticas.

Grub me parece um pouco mais misterioso quando tento usá-lo para realizar o mesmo comportamento do Syslinux.

Fazendo uma pequena investigação, dpkg-reconfigure grub-pcposso ver que minha grubinstalação acaba chamando isso quando instala um novo gerenciador de inicialização ...

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

Ao executar o mesmo grub-installcomando e adicionar --verbose, vejo que grub-installchama grub-bios-setup.

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

Olhando para alguns dosfonte, EUpensarisso grub-bios-setupé o que é responsável por gravar no MBR, porque se eu zerar os primeiros 512 bytes e executar novamente grub-bios-setup, vejo esses bytes voltarem ao que eram antes de eu zerá-los.

Infelizmente, não entendo o código bem o suficiente para entender totalmenteo queestá sendo escrito por grub-bios-setup.

Eu tive alguns palpites. EUpensarparte do que está escrito tem a ver com boot.img. Na verdade, se eu comparar certos bytes do meu setor de inicialização e boot.img, eles serão iguais (observe que o número total de bytes lidos aqui é 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...

Eles têm semelhanças, mas não sãointeiramenteo mesmo. Os primeiros 104bytes diferem e não consigo entender o que causa essa diferença.

Existe um mbr.bintipo de arquivo comparável para o Grub? É isso boot.img? O Grub modifica alguns desses bytes? O Grub está gerando esses bytes diferentes dinamicamente? Esses bytes gerados pelo Grub são específicos para cada sistema e únicos sempre que o Grub os grava?

Responder1

Sim, boot.imgestá gravado nos primeiros 440 bytes do MBR. boot.imgcontém um "Bloco de parâmetros do BIOS", que contém dados que dependem do sistema em que está instalado. Esses dados são gravados no BPM quando o Grub é instalado.Aquié o código fonte.

Aliás, eu não gastaria muito tempo no GRUB. Este código provavelmente não será executado em novos PCs dentro de alguns anos. A Intel está planejando se livrar do modo BIOS legado até 2020.

informação relacionada