Часть процесса установки 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 пишет их?