A few stupid questions regarding MBR and boot0

Aleksander Alekseev afiskon at devzen.ru
Thu Apr 14 12:37:18 UTC 2016


Hello, Trond

Thanks for your replies.

> > 1) If I understand correctly first 512 bytes of /dev/ad0
> > and /boot/boot0 file should match, but they don't:
> > 
> > http://afiskon.ru/s/31/665dc9755c_mbr.txt
> 
> The MBR consists of two parts, the bootcode and the partition table. 
> Any discrepancies is generally due to the partition table being zero 
> in /boot/boot0 and realistic data stored in block 0.

Yes, but if I'm not mistaken partition table starts only at 0x1be. But
in my case data is not just slightly different in last few bytes. Its
not the same at all.

> BTW, check out /boot/mbr.

OK, this looks like something I have on ad0. But this file is not
mentioned in corresponding chapters of Handbook [1] or Architecture
Handbook [2]. Besides Architecture Handbook clearly states:

"""
Indeed, boot0 /is/ the MBR.
"""

If /boot/boot0 is MBR then what is /boot/mbr? Current version of
Handbook mentions it twice in 18.3.2 and doesn't exactly explains what
this file is for. According to FreeBSD 8.4 Handbook [3]:

"""
By default, the MBR installed by fdisk(8) is such an MBR and is based
on /boot/mbr.
"""

Do I right understand that current version of Handbook is wrong
regarding:

"""
The MBR installed by the FreeBSD installer is based on /boot/boot0.
"""

... and in fact boot0 is only used in dual-boot case?

BTW `cd sys/boot/i386/mbr && make` works as expected.

> I have never attempted to build the FreeBSD sources outside /usr/src. 
> The advice below might be plain wrong.
> 
> Try:
> 
>   cd sys/boot/i386/boot0
>   make clean
>   make OBJDIR=/usr/home/eax/freebsd-obj obj
>   make OBJDIR=/usr/home/eax/freebsd-obj all
> 
> If you want it installed, run
> 
>   make OBJDIR=/usr/home/eax/freebsd-obj install
> 

Doesn't work:

```
$ make OBJDIR=/usr/home/eax/freebsd-obj obj
mkdir: /usr/obj/usr: Permission denied
*** Error code 1

Stop.
make: stopped in /usr/home/eax/freebsd-src/sys/boot/i386/boot0
```

I also tried `OBJDIR=... make`. Naturally I could try `sudo make ...`
but if I'm not wrong boot0 doesn't have any dependencies, it's a
reasonably simple assembly program.

[1]https://www.freebsd.org/doc/handbook/boot-introduction.html
[2]https://www.freebsd.org/doc/en/books/arch-handbook/boot-boot0.html
[3]https://docs.freebsd.org/doc/8.4-RELEASE/share/doc/freebsd/handbook/boot-introduction.html

-- 
Best regards,
Aleksander Alekseev
http://eax.me/


More information about the freebsd-hackers mailing list