Persistent Mounts with or etc or fstab Raw

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"
        /dev/sdd1: UUID="c1e9157e-6572-4ec1-b1d0-8adb97052a59" 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  
    password=OMG_FLUFFY_PUPPIES