1

Часть процесса установки syslinux включает установку mbr.bin в основную загрузочную запись устройства.

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

Если я восстановлю эти байты с диска и сравню их с исходным файлом mbr.bin , они идентичны.

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

Все идет нормально! Кажется логичным, что эти две контрольные суммы должны быть идентичны.

Grub кажется мне немного более загадочным, когда я пытаюсь использовать его для того же поведения, что и Syslinux.

Немного покатавшись в dpkg-reconfigure grub-pc я вижу, что моя установка grub конечном итоге вызывает это, когда устанавливает новый загрузчик ...

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

Запустив эту же команду grub-install и добавив --verbose , я вижу, что grub-install вызывает grub-bios-setup .

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

Глядя на некоторые источники, я думаю, что grub-bios-setup отвечает за запись в MBR, потому что, если я обнуляю первые 512 байт, а затем повторно запускаю grub-bios-setup , я вижу, что эти байты возвращаются обратно к тому, что они были, прежде чем я обнулил их.

К сожалению, я недостаточно хорошо понимаю код, чтобы полностью понять, что пишет grub-bios-setup .

У меня были некоторые догадки. Я думаю, что часть написанного связана с boot.img . Действительно, если я сравниваю определенные байты из моего загрузочного сектора и boot.img , они совпадают (обратите внимание, что общее количество прочитанных байтов здесь составляет 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...

У них есть сходство, но они не совсем одинаковы. Первые 104 байта отличаются, и я не могу понять, что вызывает эту разницу.

Существует ли сопоставимый mbr.bin для Grub? Это boot.img? Grub изменяет некоторые из этих байтов? Grub генерирует эти разные байты на лету? Эти байты, сгенерированные Grub, специфичны для каждой системы и уникальны каждый раз, когда Grub пишет их?

1 ответ1

1

Да, boot.img записывается в первые 440 байтов MBR. boot.img содержит "Блок параметров BIOS", который содержит данные, которые зависят от системы, в которой он установлен. Эти данные записываются в BPM при установке Grub. Вот исходный код.

Кстати, я бы не стал тратить много времени на GRUB. Этот код, вероятно, не будет работать на новых ПК через пару лет. Intel планирует избавиться от устаревшего режима BIOS к 2020 году.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .