3.6.Â Disk Organization

The smallest unit of organization that FreeBSD uses to find
files is the filename. Filenames are case-sensitive, which
means that readme.txt and
README.TXT are two separate files. FreeBSD
does not use the extension of a file to determine whether the
file is a program, document, or some other form of data.

Files are stored in directories. A directory may contain no
files, or it may contain many hundreds of files. A directory
can also contain other directories, allowing a hierarchy of
directories within one another in order to organize
data.

Files and directories are referenced by giving the file or
directory name, followed by a forward slash,
/, followed by any other directory names that
are necessary. For example, if the directory
foo contains a directory
bar which contains the
file readme.txt, the full name, or
path, to the file is
foo/bar/readme.txt. Note that this is
different from WindowsÂ® which uses \ to
separate file and directory names. FreeBSD does not use drive
letters, or other drive names in the path. For example, one
would not type c:\foo\bar\readme.txt on
FreeBSD.

Directories and files are stored in a file system. Each
file system contains exactly one directory at the very top
level, called the root directory for that
file system. This root directory can contain other directories.
One file system is designated the
root file system or /.
Every other file system is mounted under
the root file system. No matter how many disks are on the FreeBSD
system, every directory appears to be part of the same
disk.

Consider three file systems, called A,
B, and C. Each file
system has one root directory, which contains two other
directories, called A1, A2
(and likewise B1, B2 and
C1, C2).

Call A the root file system. If
ls(1) is used to view the contents of this directory,
it will show two subdirectories, A1 and
A2. The directory tree looks like
this:

A file system must be mounted on to a directory in another
file system. When mounting file system B
on to the directory A1, the root directory
of B replaces A1, and
the directories in B appear
accordingly:

Any files that are in the B1 or
B2 directories can be reached with the path
/A1/B1 or
/A1/B2 as necessary. Any
files that were in /A1
have been temporarily hidden. They will reappear if
B is unmounted from
A.

If B had been mounted on
A2 then the diagram would look like
this:

and the paths would be
/A2/B1 and
/A2/B2
respectively.

File systems can be mounted on top of one another.
Continuing the last example, the C file
system could be mounted on top of the B1
directory in the B file system, leading to
this arrangement:

Or C could be mounted directly on to the
A file system, under the
A1 directory:

It is entirely possible to have one large root file system,
and not need to create any others. There are some drawbacks to
this approach, and one advantage.

Benefits of Multiple File Systems

Different file systems can have different
mount options. For example, the root
file system can be mounted read-only, making it impossible
for users to inadvertently delete or edit a critical file.
Separating user-writable file systems, such as
/home, from other
file systems allows them to be mounted
nosuid. This option prevents the
suid/guid bits
on executables stored on the file system from taking effect,
possibly improving security.

FreeBSD automatically optimizes the layout of files on a
file system, depending on how the file system is being used.
So a file system that contains many small files that are
written frequently will have a different optimization to one
that contains fewer, larger files. By having one big file
system this optimization breaks down.

FreeBSD's file systems are robust if power is lost.
However, a power loss at a critical point could still damage
the structure of the file system. By splitting data over
multiple file systems it is more likely that the system will
still come up, making it easier to restore from backup as
necessary.

Benefit of a Single File System

File systems are a fixed size. If you create a file
system when you install FreeBSD and give it a specific size,
you may later discover that you need to make the partition
bigger. This is not easily accomplished without backing up,
recreating the file system with the new size, and then
restoring the backed up data.

Important:

FreeBSD features the growfs(8) command, which makes
it possible to increase the size of file system on the
fly, removing this limitation.

File systems are contained in partitions. This does not
have the same meaning as the common usage of the term partition
(for example, MS-DOSÂ® partition), because of FreeBSD's UNIXÂ®
heritage. Each partition is identified by a letter from
a through to h. Each
partition can contain only one file system, which means that
file systems are often described by either their typical mount
point in the file system hierarchy, or the letter of the
partition they are contained in.

FreeBSD also uses disk space for
swap space to provide
virtual memory. This allows your
computer to behave as though it has much more memory than it
actually does. When FreeBSD runs out of memory, it moves some of
the data that is not currently being used to the swap space, and
moves it back in (moving something else out) when it needs
it.

Some partitions have certain conventions associated with
them.

Partition

Convention

a

Normally contains the root file system.

b

Normally contains swap space.

c

Normally the same size as the enclosing slice.
This allows utilities that need to work on the entire
slice, such as a bad block scanner, to work on the
c partition. A file system would not
normally be created on this partition.

d

Partition d used to have a
special meaning associated with it, although that is now
gone and d may work as any normal
partition.

Disks in FreeBSD are divided into slices, referred to in
WindowsÂ® as partitions, which are numbered from 1 to 4. These
are then divided into partitions, which contain file systems,
and are labeled using letters.

Slice numbers follow the device name, prefixed with an
s, starting at 1. So
“da0s1” is the first slice on
the first SCSI drive. There can only be four physical slices on
a disk, but there can be logical slices inside physical slices
of the appropriate type. These extended slices are numbered
starting at 5, so “ada0s5” is
the first extended slice on the first SATA disk. These devices
are used by file systems that expect to occupy a slice.

Slices, “dangerously dedicated” physical
drives, and other drives contain
partitions, which are represented as
letters from a to h. This
letter is appended to the device name, so
“da0a” is the
a partition on the first
da drive, which is
“dangerously dedicated”.
“ada1s3e” is the fifth
partition in the third slice of the second SATA disk
drive.

Finally, each disk on the system is identified. A disk name
starts with a code that indicates the type of disk, and then a
number, indicating which disk it is. Unlike slices, disk
numbering starts at 0. Common codes are listed in
TableÂ 3.3, “Disk Device Names”.

When installing FreeBSD, configure the disk slices, create
partitions within the slice to be used for FreeBSD, create a file
system or swap space in each partition, and decide where each
file system will be mounted.

The first partition (a) on the
first slice (s1) on the first
SATA
disk (ada0).

da1s2e

The fifth partition (e) on the
second slice (s2) on the second
SCSI disk (da1).

ExampleÂ 3.13.Â Conceptual Model of a Disk

This diagram shows FreeBSD's view of the first
SATA disk attached to the system. Assume
that the disk is 250Â GB in size, and contains an
80Â GB slice and a 170Â GB slice (MS-DOSÂ®
partitions). The first slice contains a WindowsÂ®
NTFS file system, C:,
and the second slice contains a FreeBSD installation. This
example FreeBSD installation has four data partitions and a swap
partition.

The four partitions each hold a file system. Partition
a is used for the root file system,
d for /var/,
e for /tmp/, and
f for /usr/.
Partition letter c refers to the entire
slice, and so is not used for ordinary partitions.