Contributed by &a.phk;. v1.1, April 26th.
Booting FreeBSD is essentially a three step: Load the kernel,
determine the root filesystem and initialize user-land things. This
leads to some interesting possibilities shown below.
Loading a kernel
We presently have three basic mechanisms for loading the
kernel as described below:
They all pass some
information to the kernel to help the kernel decide what to do
next.
Biosboot
Biosboot is our ``bootblocks'', it consists of two files, which
will be installed in the first 8Kbytes of the floppy or hard-disk
slice to be booted from.
Biosboot can load a kernel from a FreeBSD filesystem.
Dosboot
Dosboot was written by DI. Christian Gusenbauer, and is
unfortunately at this time one of the few pieces of code that
will not compile under FreeBSD itself because it is written for
Microsoft compilers.
Dosboot will boot the kernel from a MS-DOS file or from a FreeBSD
filesystem partition on the disk. It attempts to negotiate with
the various and strange kinds of memory manglers that lurk in
high memory on MS/DOS systems and usually wins them for its
case.
Netboot
Netboot will try to find a supported Ethernet card, and use
BOOTP, TFTP and NFS to find a kernel file to boot.
Determine the root filesystem
Once the kernel is loaded and the boot-code jumps to it, the kernel
will initialize itself, trying to determine what hardware is
present and so on, and then it needs to find a root filesystem.
Presently we support the following types of root filesystems:
UFS
This is the most normal type of root filesystem. It can reside on
a floppy or on hard disk.
MSDOS
While this is technically possible, it is not particular useful,
because of ``FAT'' filesystems inability to make links, device
nodes and such ``UNIXisms''.
MFS
This is actually a UFS filesystem which has been compiled into
the kernel. That means that the kernel does not really need any
disks/floppies or other HW to function.
CD9660
This is for using a CD-ROM as root filesystem.
NFS
This is for using a fileserver as root filesystem, basically
making it a diskless machine.
Initialize user-land things
To get the user-land going, when the kernel has finished
initialization, it will create a process with ``/sbin/init''.
You can substitute any program for /sbin/init, as long as you keep
in mind that:
there is no stdin/out/err unless you open it yourself, if you exit,
the machine panics, signal handling is special for ``/stand/sysinstall''
program on the installation floppy.
Interesting combinations
Boot a kernel with a MFS in it with a special /sbin/init
which...
mounts your /C:Attaches C:/freebsd.fs on /dev/vn0mounts /dev/vn0 as /rootfsmakes symlinks/rootfs/bin -> /bin/rootfs/etc -> /etc/rootfs/sbin -> /sbin
(etc...)
Now you run FreeBSD without repartitioning your hard disk...
server:˜you/FreeBSD as
/nfs, chroots to /nfs and executes
/sbin/init there
Now you run FreeBSD diskless, even though you do not control
the NFS server...
/dev/rwd0 and writes it to a remote tape
station or fileserver.
Now you finally got that backup you should have made a year
ago...
E -- Acts as a firewall/web-server/what do I know...
This is particular interesting since you can boot from a write-
protected floppy, but still write to your root filesystem...