During system initialization, the FreeBSD kernel will create device nodes as devices
are found. This method of probing for devices raises some issues, for instance what if a
new disk device is added via USB? It is very likely
that a flash device may be handed the device name of da0 and
the original da0 shifted to da1.
This will cause issues mounting file systems if they are listed in /etc/fstab, effectively, this may also prevent the system from
booting.
One solution to this issue is to chain the SCSI
devices in order so a new device added to the SCSI
card will be issued unused device numbers. But what about USB devices which may replace the primary SCSI disk? This happens because USB devices are usually probed before the SCSI card. One solution is to only insert these devices after
the system has been booted. Another method could be to use only a single ATA drive and never list the SCSI devices in /etc/fstab.
A better solution is available. By using the glabel utility,
an administrator or user may label their disk devices and use these labels in /etc/fstab. Because glabel stores the
label in the last sector of a given provider, the label will remain persistent across
reboots. By using this label as a device, the file system may always be mounted
regardless of what device node it is accessed through.
Note: This goes without saying that a label be permanent. The glabel utility may be used to create both a transient and permanent
label. Only the permanent label will remain consistent across reboots. See the glabel(8) manual page
for more information on the differences between labels.
There are two types of labels, a generic label and a file system label. The difference
between the labels is the auto detection associated with permanent labels, and the fact
that this type of label will be persistent across reboots. These labels are given a
special directory in /dev, which will be named based on their
file system type. For example, UFS2 file system labels
will be created in the /dev/ufs directory.
A generic label will go away with the next reboot. These labels will be created in the
/dev/label directory and are perfect for experimentation.
Permanent labels may be placed on the file system using the tunefs or newfs utilities. To create a
permanent label for a UFS2 file system without
destroying any data, issue the following command:
# tunefs -L home /dev/da3
Warning: If the file system is full, this may cause data corruption; however,
if the file system is full then the main goal should be removing stale files and not
adding labels.
A label should now exist in /dev/ufs which may be added to
/etc/fstab:
/dev/ufs/home /home ufs rw 2 2
Note: The file system must not be mounted while attempting to run tunefs.
Now the file system may be mounted like normal:
# mount /home
From this point on, so long as the geom_label.ko kernel
module is loaded at boot with /boot/loader.conf or the GEOM_LABEL kernel option is present, the device node may change
without any ill effect on the system.
File systems may also be created with a default label by using the -L
flag with newfs. See the newfs(8) manual page
for more information.
The following command can be used to destroy the label:
# glabel destroy home