O que o Grub escreve no setor de inicialização para a inicialização do MBR?

1

Parte do processo de instalação do syslinux envolve a instalação de mbr.bin no 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 ao arquivo mbr.bin 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é aí tudo bem! Parece lógico que esses dois checksums sejam idênticos.

O grub parece um pouco mais misterioso para mim quando tento usá-lo para realizar o mesmo comportamento que o Syslinux.

Ao fazer uma pequena investigação sobre dpkg-reconfigure grub-pc , posso ver que meu grub install 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 comando grub-install e adicionar --verbose , vejo que grub-install chama grub-bios-setup .

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

Olhando para algumas das fonte , penso <<> / em> que grub-bios-setup é o responsável por gravar no MBR, porque se eu zerar os primeiros 512 bytes e executar novamente grub-bios-setup , vejo esses bytes revertidos para o que eram antes de zerá-los.

Infelizmente, não entendi bem o código para entender totalmente o que está sendo escrito por grub-bios-setup .

Eu tive alguns palpites. Eu acho que parte do que está escrito tem a ver com boot.img . De fato, se eu comparar certos bytes do meu setor de inicialização e boot.img , eles são os mesmos (note 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ão totalmente iguais. Os primeiros 104 bytes diferem e não consigo entender o que causa essa diferença.

Existe um tipo de arquivo mbr.bin comparável para o Grub? É boot.img ? O Grub então modifica alguns desses bytes? O Grub está gerando esses bytes diferentes on-the-fly? Os bytes gerados pelo Grub são específicos de cada sistema e são únicos sempre que o Grub os escreve?

    
por Will Haley 02.04.2018 / 04:50

1 resposta

1

Sim, boot.img é gravado nos primeiros 440 bytes do MBR. boot.img contém um "BIOS Parameter Block", 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.

Por falar nisso, eu não gastaria muito tempo no GRUB. Esse código provavelmente não será executado em novos PCs em alguns anos. A Intel está planejando se livrar do modo de BIOS legado em 2020.

    
por 02.04.2018 / 08:27

Tags