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와 동일한 동작을 수행하려고 할 때 Grub이 좀 더 신비스러워 보입니다.
조금 조사해 보면 설치가 새 부트로더를 설치할 때 이것을 호출하게 된다는 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바이트를 0으로 만든 다음 다시 실행하면 grub-bios-setup
해당 바이트가 0으로 만들기 전의 상태로 되돌아가는 것을 볼 수 있기 때문입니다.
불행히도 나는 완전히 이해할 만큼 코드를 잘 이해하지 못합니다.무엇은(는) 님이 작성 중입니다 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
MBR의 처음 440바이트에 기록됩니다. boot.img
설치된 시스템에 따라 달라지는 데이터를 포함하는 "BIOS 매개변수 블록"을 포함합니다. 이 데이터는 Grub이 설치될 때 BPM에 기록됩니다.여기소스 코드입니다.
그런데 저는 GRUB에 많은 시간을 소비하지 않을 것입니다. 이 코드는 아마도 몇 년 후에는 새 PC에서 실행되지 않을 것입니다. 인텔은 2020년까지 레거시 BIOS 모드를 없앨 계획입니다.