Parte do Syslinuxprocesso de instalaçãoenvolve a instalação 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 com o mbr.bin
arquivo 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-pc
posso ver que minha grub
instalaçã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-install
comando 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 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 104
bytes diferem e não consigo entender o que causa essa diferença.
Existe um mbr.bin
tipo 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.img
está gravado nos primeiros 440 bytes do MBR. boot.img
conté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.