¿Qué escribe Grub en el sector de arranque para el arranque MBR?

¿Qué escribe Grub en el sector de arranque para el arranque MBR?

Parte de syslinuxproceso de instalaciónImplica la instalación mbr.binen el registro de arranque maestro de un dispositivo.

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

Si restauro esos bytes del disco y los comparo con el mbr.binarchivo original, son idénticos.

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

¡Hasta ahora, todo bien! Parece lógico que esas dos sumas de verificación sean idénticas.

Grub me parece un poco más misterioso cuando intento usarlo para lograr el mismo comportamiento que Syslinux.

Al investigar un poco, dpkg-reconfigure grub-pcpuedo ver que mi grubinstalación termina llamando a esto cuando instala un nuevo gestor de arranque...

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

Al ejecutar el mismo grub-installcomando y agregar --verbose, veo que grub-installllama grub-bios-setup.

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

Mirando algunos de losfuente, Ipensareso grub-bios-setupes lo que es responsable de escribir en el MBR, porque si pongo a cero los primeros 512 bytes y luego los vuelvo a ejecutar grub-bios-setup, veo que esos bytes vuelven a ser lo que eran antes de que los pusiera a cero.

Desafortunadamente, no entiendo el código lo suficientemente bien como para comprenderlo totalmente.quéestá siendo escrito por grub-bios-setup.

Tuve algunas corazonadas. Ipensarparte de lo que está escrito tiene que ver con boot.img. De hecho, si comparo ciertos bytes de mi sector de arranque y boot.img, son iguales (tenga en cuenta que el número total de bytes leídos aquí es 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...

Tienen similitudes, pero no lo son.enteramentelo mismo. Los primeros 104bytes difieren y no puedo entender qué causa esa diferencia.

¿Existe un mbr.bintipo de archivo comparable para Grub? Lo es boot.img? ¿Grub modifica entonces algunos de esos bytes? ¿Grub genera esos bytes diferentes sobre la marcha? ¿Esos bytes generados por Grub son específicos de cada sistema y únicos cada vez que Grub los escribe?

Respuesta1

Sí, boot.imgse escribe en los primeros 440 bytes del MBR.boot.img contiene un "Bloque de parámetros del BIOS", que contiene datos que dependen del sistema en el que está instalado. Estos datos se escriben en BPM cuando se instala Grub.Aquíes el código fuente.

Por cierto, no dedicaría mucho tiempo a GRUB. Es probable que este código no se ejecute en PC nuevas en un par de años. Intel planea deshacerse del modo BIOS heredado para 2020.

información relacionada