Часть 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
Да, boot.img
записывается в первые 440 байт MBR. boot.img
содержит "Блок параметров BIOS", содержащий данные, зависящие от системы, на которой он установлен. Эти данные записываются в BPM при установке Grub.Здесьэто исходный код.
Кстати, я бы не стал тратить много времени на GRUB. Этот код, вероятно, не будет работать на новых ПК через пару лет. Intel планирует избавиться от устаревшего режима BIOS к 2020 году.