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 (.txt) of a file to determine whether the file is a
program, or a 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 you to
build up a hierarchy of directories within one another. This makes it much easier to
organize your 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. If you have directory foo, which contains
directory bar, which contains the file readme.txt, then the full name, or path to
the file is foo/bar/readme.txt.
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 then contain other directories.
So far this is probably similar to any other operating system you may have used. There
are a few differences; for example, MS-DOS® uses \ to separate file and directory names, while Mac OS® uses :.
FreeBSD does not use drive letters, or other drive names in the path. You would not
write c:/foo/bar/readme.txt on FreeBSD.
Instead, one file system is designated the root file system.
The root file system's root directory is referred to as /. Every
other file system is then mounted under the root file system. No
matter how many disks you have on your FreeBSD system, every directory appears to be part
of the same disk.
Suppose you have 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 you used the ls command to view the contents of this directory you would see 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. So now suppose
that you mount 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:
If you are familiar with MS-DOS, this is similar,
although not identical, to the join command.
This is not normally something you need to concern yourself with. Typically you create
file systems when installing FreeBSD and decide where to mount them, and then never
change them unless you add a new disk.
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, with careful planning, the root file system can be mounted read-only, making it
impossible for you to inadvertently delete or edit a critical file. Separating
user-writable file systems, such as /home, from other file
systems also 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 very robust should you lose power. However, a power loss at
a critical point could still damage the structure of the file system. By splitting your
data over multiple file systems it is more likely that the system will still come up,
making it easier for you 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. Swap space
provides FreeBSD with 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.
Each partition-that-contains-a-file-system is stored in what FreeBSD calls a slice. Slice is FreeBSD's term for what the common call partitions,
and again, this is because of FreeBSD's UNIX background.
Slices are numbered, starting at 1, through to 4.
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 you can have logical slices inside
physical slices of the appropriate type. These extended slices are numbered starting at
5, so “ad0s5” is the
first extended slice on the first IDE 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”.
“ad1s3e” is the fifth
partition in the third slice of the second IDE 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 that you will see are listed in Table 3-1.
When referring to a partition FreeBSD requires that you also name the slice and disk
that contains the partition, and when referring to a slice you must also refer to the
disk name. Thus, you refer to a partition by listing the disk name, s, the slice number, and then the partition letter. Examples are
shown in Example 3-1.
Example 3-2 shows a
conceptual model of the disk layout that should help make things clearer.
In order to install FreeBSD you must first configure the disk slices, then create
partitions within the slice you will use for FreeBSD, and then create a file system (or
swap space) in each partition, and decide where that file system will be mounted.
Table 3-1. Disk Device Codes
Code |
Meaning |
ad |
ATAPI (IDE) disk |
da |
SCSI direct access disk |
acd |
ATAPI (IDE) CDROM |
cd |
SCSI CDROM |
fd |
Floppy disk |
Example 3-1. Sample Disk, Slice, and Partition Names
Example 3-2. Conceptual Model of a Disk
This diagram shows FreeBSD's view of the first IDE disk attached to the system. Assume
that the disk is 4 GB in size, and contains two 2 GB slices (MS-DOS partitions). The first slice contains a MS-DOS disk, C:, and the second
slice contains a FreeBSD installation. This example FreeBSD installation has three data
partitions, and a swap partition.
The three partitions will each hold a file system. Partition a will be used for the root file system, e
for the /var directory hierarchy, and f for the /usr directory hierarchy.