# Persistent Mounts with or etc or fstab

The chief difference between defining a mount in fstab versus autofs is that the kernel dedicates resources to keep fstab mounts in place all the time. Conversely, autofs mounts are “on-demand” and are better suited for NFS or DVD drives.

## Understanding the fstab

Here’s a sample fstab:

# Sample fstab
# default = rw, suid, dev, exec, auto, nouser, and async

# Device                  Mount Point   FS Type  Options         Dump?   fsck

/dev/VolGroup00/LogVol00  /             ext3     defaults        1       1
LABEL=/boot               /boot         ext3     defaults        1       2
tmpfs                     /dev/shm      tmpfs    defaults        0       0
devpts                    /dev/pts      devpts   gid=5,mode=620  0       0
sysfs                     /sys          sysfs    defaults        0       0
proc                      /proc         proc     defaults        0       0
/dev/VolGroup00/LogVol01  swap          swap     defaults        0       0

Column What it is
Device Name of the block device (like /dev/sdc1, etc.) You can also use LABEL= or UUID=
Mount Point Where to mount the device
FS (FileSystem) Type Can be ext2, ext3, reiserfs, vfat and swap (many others depending upon kernel support.) The interesting one is auto, whereby the kernel attempts to detect the filesystem automagically. This is good for CD/DVD-ROMs and (gasp!) floppies. Use an actual FStype for all others
Options For a much more comprehensive list of options, see man mount. Here are some common ones:
auto/noauto - Mount/do not mount at boot
user/nouser - Should normal users be able to mount? If so, use user. Else, it’s nouser
exec/noexec - Execute binaries off the device? noexec off a Linux root partition might be unpleasant…
ro - Mount as read-only
rw - Mount as read/write
sync/nosync - Changes to device are done synchronously with sync (written at the same time the command is issued). Good for USB sticks and (gasp!) floppies. nosync may be preferable for HDD performance.
Dump This is a small backup utility. Set to 0 almost all the time.
fstab Determine the order in which to check filesystems on devices. 0 will cause it to ignore it.

## Using better device identifiers

Given that the device names might change due to myriad factors (e.g. plug HDD into a different USB or SATA port), it’s a better idea to use the device label or, even better, the device’s UUID. I’m going to deal with UUIDs in this example.

### Figure out the device’s UUID

UNIX-like simplicity itself.

[user@example ~]# ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 user user 10 Jun 25 11:00 43b64bd4-ee2b-4e4d-b2af-e868cb47d596 -> ../../sda1
lrwxrwxrwx 1 user user 10 Jun 25 11:00 7c488bee-a567-4432-bdbe-c30e9d33a927 -> ../../sdb5
lrwxrwxrwx 1 user user 10 Jun 25 11:00 c1e9157e-6572-4ec1-b1d0-8adb97052a59 -> ../../sdd1
lrwxrwxrwx 1 user user 10 Jun 28 10:25 edabbb0e-d87a-4c5b-a9aa-492e553c98d1 -> ../../sdc5


You can see what each device is using fdisk -l /dev/sdc5 or, since you know the UUID:

[user@example ~]# fdisk -l /dev/disk/by-uuid/edabbb0e-d87a-4c5b-a9aa-492e553c98d1

Disk /dev/disk/by-uuid/edabbb0e-d87a-4c5b-a9aa-492e553c98d1: 1000.2 GB, 1000202208768 bytes
255 heads, 63 sectors/track, 121600 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes


### Create the fstab entry

UUID=edabbb0e-d87a-4c5b-a9aa-492e553c98d1 /media/usbdrive ext3  defaults  0 0


Et voila!

### Problems with this approach

You might see a “special device UUID=edabbb0e-d87a-4c5b-a9aa-492e553c98d1 does not exist” when you reboot your system, especially when dealing with external drives. Some people report that specifying the full path helps (e.g. UUID=/dev/disk/by-uuid/...) but I haven’t had any luck with this.

Essentially, and to keep things simple, you could still keep the fstab entry and issue a mount -a to mount all the devices you’ve specified after booting up. While there’s really no ‘fix’ to this AFAIK (even using LABEL= doesn’t help), you could alternately add a quick line to /etc/rc.local.

echo -e "Waiting for external drives to mount..." && sleep 30 && echo -e "Done waiting."


This has worked for me, even though I see the “special device” error at startup.

## Miscellaneous

• blkid is another way to figure out UUIDs.

[user@example ~]# blkid
/dev/mapper/VolGroup00-LogVol01: TYPE="swap"
/dev/mapper/VolGroup00-LogVol00: UUID="5aafa32b-d5c0-40a7-9a6a-417b8a9c7832" TYPE="ext3"
/dev/sda1: LABEL="/boot" UUID="43b64bd4-ee2b-4e4d-b2af-e868cb47d596" TYPE="ext3"
/dev/hda: LABEL="CentOS_5.3_Final" TYPE="iso9660"
/dev/VolGroup00/LogVol00: UUID="5aafa32b-d5c0-40a7-9a6a-417b8a9c7832" TYPE="ext3"
/dev/VolGroup00/LogVol01: TYPE="swap"
/dev/sdc5: UUID="edabbb0e-d87a-4c5b-a9aa-492e553c98d1" TYPE="ext3" SEC_TYPE="ext2"
/dev/sdb5: LABEL="/rsync_drive_3" UUID="7c488bee-a567-4432-bdbe-c30e9d33a927" TYPE="ext3"

• To see the changes you’ve made to fstab without rebooting your system, use mount -a
• Samba shares with spaces in them can get a little tricky. I’ve tried single, double quotes with no success. Octal representation of a space (\040) seemed to work :) Here’s an example:
//19.67.18.160/Lab\040Documents /media/secretary cifs rw,credentials=/media/secretary.credentials 0 0

I’ve stored the credentials for the connection in the file /media/secretary.credentials. It has 600 permissions and looks like this:
username=nikhil