2 votes

Qu'est-ce que Grub écrit dans le secteur de démarrage pour le démarrage MBR ?

Une partie du syslinux le processus d'installation consiste à installer mbr.bin à l'enregistrement de démarrage principal d'un périphérique.

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

Si je restaure ces octets à partir du disque, et que je les compare à l'original mbr.bin ils sont identiques.

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

Jusqu'à présent, tout va bien ! Il semble logique que ces deux sommes de contrôle soient identiques.

Grub me semble un peu plus mystérieux lorsque j'essaie de l'utiliser pour accomplir le même comportement que Syslinux.

En faisant un peu de recherche sur dpkg-reconfigure grub-pc Je peux voir que mon grub L'installateur finit par appeler ça quand il installe un nouveau chargeur de démarrage...

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

En exécutant ce même grub-install et en ajoutant --verbose Je vois que grub-install appelle grub-bios-setup .

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

En regardant certains des fuente , I pensez à que grub-bios-setup est ce qui est responsable de l'écriture dans le MBR, parce que si je mets à zéro les 512 premiers octets puis relance grub-bios-setup je vois que ces octets reviennent à ce qu'ils étaient avant que je les réduise à zéro.

Malheureusement, je ne comprends pas assez bien le code pour comprendre totalement ce que est en cours d'écriture par grub-bios-setup .

J'avais quelques pressentiments. I pensez à une partie de ce qui est écrit a trait à boot.img . En effet, si je compare certains octets de mon secteur d'amorçage et boot.img ils sont identiques (notez que le nombre total d'octets lus ici est de 1,5 million. 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...

Ils ont des similitudes, mais ils ne sont pas entièrement le même. Le premier 104 Les octets diffèrent, et je n'arrive pas à comprendre ce qui cause cette différence.

Y a-t-il un comparable mbr.bin une sorte de fichier pour Grub ? Est-ce que c'est boot.img ? Est-ce que Grub modifie ensuite certains de ces octets ? Est-ce que Grub génère ces octets différents à la volée ? Ces octets générés par Grub sont-ils spécifiques à chaque système, et uniques à chaque fois que Grub les écrit ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X