Linux and FreeBSD label hard drives and partitions after two differents schemes. This section explains the main differences between the two schemes. In fact the FreeBSD labelling scheme is an adaption of the traditional BSD labelling style ported to live within the PC's fdisk partitions. Thus it is very similar to other BSD-based Unix systems such as NetBSD, OpenBSD, Ultrix, Digital Unix, SunOS, and Solaris.
FreeBSD needs one of the four entries in the partition table on
your PC's hard drive. This primary partition is called a
``slice'' in FreeBSD terminology. It then uses the
disklabel program to make up to eight partitions in
this primary partition. These logical partitions are called
``partitions'' in FreeBSD terminology. This concept is
similar to the way Linux (and DOS) handles logical partitions in
an extended partition. You cannot install FreeBSD in an extended
partition made by Linux (or DOS). Note that the Linux
fdisk program doesn't display the BSD partitions in
a FreeBSD slice from the main menu, but it can display BSD
disklabel information if you give the command `b'. The output is
something like this (/dev/hda4 is the FreeBSD
slice):
bash# fdisk /dev/hda Command (m for help): p Disk /dev/hda: 64 heads, 63 sectors, 621 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 27 54400+ 83 Linux native /dev/hda2 28 28 55 56448 83 Linux native /dev/hda3 56 56 403 701568 83 Linux native /dev/hda4 404 404 621 439488 a5 BSD/386 Command (m for help): b Reading disklabel of /dev/hda4 at sector 1624897. BSD disklabel command (m for help): p 8 partitions: # size offset fstype [fsize bsize cpg] a: 64512 1624896 4.2BSD 0 0 0 # (Cyl. 404 - 419) b: 104832 1689408 swap # (Cyl. 420 - 445) c: 878976 1624896 unused 0 0 # (Cyl. 404 - 621) e: 64512 1794240 4.2BSD 0 0 0 # (Cyl. 446 - 461) f: 645120 1858752 4.2BSD 0 0 0 # (Cyl. 462 - 621) BSD disklabel command (m for help): q bash#
The letters `a'...`f' in the first column are the same labels as shown below in the example for a FreeBSD slice. There are three special partitions in BSD parlace. The letter `a' designates the root partition, `b' designates the swap partition, while `c' designates the whole slice. See the FreeBSD documentation for more information on the ``standard'' way of assigning these letters to different partition types.
The hard drives are labelled in the following way in Linux and FreeBSD:
Linux FreeBSD
First IDE drive /dev/hda /dev/wd0
Second IDE drive /dev/hdb /dev/wd1
First SCSI drive /dev/sda /dev/sd0
Second SCSI drive /dev/sdb /dev/sd1
The partitions (FreeBSD slices) on an IDE drive are labelled in
the following way (/dev/hda is used as an example):
Linux FreeBSD
First primary partition /dev/hda1 /dev/wd0s1
Second primary partition /dev/hda2 /dev/wd0s2
Third primary partition /dev/hda3 /dev/wd0s3
Fourth primary partition /dev/hda4 /dev/wd0s4
The partitions in my FreeBSD slice is labelled in the following
way. It is the labelling you get by default. It is possible to
change the labelling if you do a custom installation of FreeBSD
(/dev/hda4 is the FreeBSD slice in the example):
Linux label FreeBSD label FreeBSD mount point /dev/hda5 /dev/wd0s4a / /dev/hda6 /dev/wd0s4b swap /dev/hda7 /dev/wd0s4e /var /dev/hda8 /dev/wd0s4f /usr
If you run dmesg in Linux you will see this as (The
linux kernel must be build with UFS filesystem support for
this to work. See section Installing and preparing
Linux):
Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >
If you have installed FreeBSD in the /dev/sd1s3
slice (/dev/sdb3 in Linux parlace), and
/dev/sdb2 is a Linux extended partition containing
two logical partitions (/dev/sdb5 and
/dev/sdb6), the previous example would look like
this:
Linux label FreeBSD label FreeBSD mount point /dev/sdb7 /dev/sd1s3a / /dev/sdb8 /dev/sd1s3b swap /dev/sdb9 /dev/sd1s3e /var /dev/sdb10 /dev/sd1s3f /usr
This will be shown as
Partition check: sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 >in the output from
dmesg.
If you have a Linux extended partition after your
FreeBSD slice you're in for trouble, because most Linux kernels
installation floppies are build without UFS support, they will
not recognise the FreeBSD partitions inside the slice. What
should have have been seen as (/dev/hda3 is the
FreeBSD slice and /dev/hda4 is the Linux extended
partition)
Partition check: hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 >is seen as:
Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 >
This can give you the wrong device assignment and cause the loss of data. My advice is to always put your FreeBSD slice after any Linux extended partitions, and do not change any logical partitions in your Linux extended partitions after installing FreeBSD!