.
Tips For Linux

>> Accessing CDROMs in Linux (covers mount, umount, fstab configuration file)

One of the first things you'll need to do after you're up and running is access programs and documentation on CDROMs. But where the heck are they? There's no D: drive!! (like you used to have in Windows). Vince Veselosky explains how you can access CDROMs and floppies in Linux by using a procedure known as mounting.

Before you can access files on a floppy, CDROM, zip drive, or any other device (including your hard drive), you need to tell Linux where in the directory tree you would like those files to appear. This process is called mounting the file system. Please note that you do not mount a device, you mount a file system that resides on the device. Also note that when you are done using it you should unmount the file system. Most new CDROM drives will not eject the disc until it has been unmounted. Oddly, the command to unmount a drive is not 'unmount', it is 'umount' (without the "n").

 

Using the 'mount' Command

The simplest way to get something mounted is at the command line. You use the command mount <device name> <mount point>. For example, to mount my CDROM drive from the command line

# mount /dev/hdc /mnt/cdrom

This tells Linux to take the file system found on device /dev/hdc and cause it to appear as part of the Linux file system in the directory /mnt/cdrom. We could have specified the type of file system to be found on /dev/hdc, but since we did not, Linux will try to automatically detect it. /dev/hdc is known as the device-name

There are a few items of note here...

First, I performed this operation as root (The # indicates that it the root and not a normal user). When mounting drives this way, you will usually need to be Superuser. There are ways to allow normal users to mount drives, but this will be covered later.

Second, the mount point /mnt/cdrom is a directory that already exists on my hard drive. If the mount point does not exist, you will get an error. Most distributions include a directory called /mnt that is intended for this purpose.

Third, you should make special directories just for mounting devices, and leave them empty. Technically you can mount your cdrom anywhere in the directory tree, even a directory that is not empty. However, any files in that directory will become invisible in the virtual file system. They will still exist on disk, but you will be unable to access them until the file system that obscures them is unmounted. There are rare cases where this might be desirable, but in general it can create unexpected behavior and is not advisable. For example, If you mount your CDROM at /usr, you would not be able to access to most of your installed programs in that directory as long as
the mounted filesystem remains mounted.

 

Using the 'umount' command

Once you have finished your work with the mounted filesystem, you need to unmount this filesystem. This would typically be the case when you finish using one CDROM and would like to use another CDROM, you need to unmount the first one before removing the CDROM from the drive. To unmount a filesystem (such as the one we mounted above) type the following

# umount /mnt/cdrom


Remember to type 'umount' and not 'unmount'. There is no "n"!

This would unmount the filesystem. In case you view the contents of the /mnt/cdrom directory, you would see that it is empty.

 

Where does <device-name> come from?

The most common type of hard drives and CDROMs in personal computers are IDE drives. These drives require a controller, and there can only be two drives per controller, a Master and a Slave. Most PCs made in recent years have two IDE controllers built in, a Primary and a Secondary, which allows you to install up to four IDE devices. Each IDE device under Linux has a fixed device name.

Linux device
IDE Controller Drive Designation
/dev/hda
Primary Master
/dev/hdb
Primary Slave
/dev/hdc
Secondary Master
/dev/hdd
Secondary Slave

CDROM drives typically ship from the factory as the Secondary Master device, /dev/hdc . Occasionally you will find one slaved to the hard drive as /dev/hdb .

The mount command will accept many options, but the defaults will do for quick mounts. For details, read the man page. For devices that you mount frequently like CDROM drives and floppy drives, you can store default mount settings in a special file, /etc/fstab (File System TABle).

 

The File System Configuration File - /etc/fstab

This is a plain text file that stores default mount settings for various file systems. When Linux is booting up, it uses the settings in this file to determine what file systems should be mounted automatically. It is laid out in columns, like a table as the name suggests. Although there are various tools that can be used to edit this file (see linuxconf below), it can also be edited with any text editor. Let's take a look at mine

Device Mount Point FS Type Mount Options
Dump
Check
/dev/hda2 / ext2 defaults
1
1
/dev/hda6 /home ext2 defaults
1
2
/dev/hda5 swap swap defaults
0
0
/dev/fd0 /mnt/floppy ext2 noauto
0
0
/dev/fd0 /mnt/a vfat noauto
0
0
/dev/cdrom /mnt/cdrom iso9660 noauto,ro
0
0
/dev/hda7 /share vfat user,rw,exec,uid=500
0
0
/dev/hda1 /win vfat noauto,user,ro
0
0
none /proc proc defaults
0
0

I have added a comment line at the top to serve as column headers. Let's examine them one at a time.

The first column lists the device where the file system may be found. As you can see, there are entries for more than just a CDROM and floppy drive. Since this is a dual boot system running both Linux and Windows 95, I have a lot of hard drive partitions that need to be mounted as well. Notice that the last entry has a device of "none". That's because the /proc file system is not really a device, but a window into the Linux kernel itself. The files found there don't exist on disk, but are generated by Linux to provide information about itself. Also notice that I have two separate entries for /dev/fd0 (the floppy drive), using different information in the other columns. More on this later.

The second column lists the place in the directory tree where its contents will appear. Remember that this directory must already exist on your drive or you will receive an error and the mount will fail. The sole exception to this is the partition set aside as "swap" space. This is hard drive space that Linux uses as virtual memory when there is not enough physical memory to handle all the running programs. It is not actually mounted anywhere in the Virtual File System (VFS), but is listed here for informational purposes. Don't mess with it.

The third column lists the type of file system that lives on the device. The "ext2" file system is the native file system for Linux. My root (/) and /home partitions are of this type. I also have several "vfat" (Windows 95) file systems. I use these to share files between my Windows and Linux installations. The file system type for any and all CDROMs is "iso9660". The "swap" and "proc" file system types are special cases, as described above. The only other file systems you might run into are "msdos" (obvious) and "minix", which is sometimes used for boot floppies because it is more efficient on small file systems than ext2.

The fourth column is a comma separated list (no spaces!) of any options you wish to enable when the file system is mounted. For a complete list of options, check the man page for mount. The most common options are shown here. "Defaults" is usually fine for file systems that are mounted at boot time. However, for removable media, you should use the "noauto" option to prevent Linux trying to mount this at boot time. You may also want normal users to be able to mount and unmount the media (rather than just root), so include the option "user". By default, user mountable file systems are mounted with the implicit options "ro,noexec", which means it is read only and no programs can be run from that file system. You should include "rw,exec" if you want users to have full access. The "uid=" option is only used for vfat or msdos file systems. Since ownership information is not stored on these file systems, this option tells Linux who the owner will be. Without this option, the file system is owned by whoever mounted it, or root if it was mounted automatically. The /share file system shown here will always be owned by user 500, me.

The fifth column is used by the dump command to determine what needs to be backed up. One means back it up, zero means don't.

The last column is used by fsck to determine what file systems to check for errors and in what order when Linux boots. A value of zero means the file system will not be checked automatically (floppies and CDROMs should not be checked). The root file system should be given a value of 1, and others should get 2.

Notice how I have two separate entries for /dev/fd0, the floppy drive. This is because there are two types of floppies I may want to use, those formatted under Linux and those formatted under Windows. Formatted "vfat" diskettes, get mounted on /mnt/a while ext2 diskettes get mounted on /mnt/floppy. It is not strictly necessary to have these entries, but I have done it for convenience. You see, if you use the mount command but give it only one parameter (e.g. mount /mnt/a ), mount searches the /etc/fstab for an entry that matches the parameter, either in the device column or the mount point column. If it finds one, it uses the settings listed. If there are multiple listings that match, it uses the first one from the top. So if I type ' mount /dev/fd0 ', Linux will try to mount an ext2 file system. If the floppy was formatted for Windows, it will fail with an error because it is the wrong file system type.

 

Using linuxconf to modify fstab

linuxconf is your best tool for system configuration. Any time you have to pull some kind of administrative duty, you can pretty much trust that linuxconf can do it for you. First off, you must be Superuser to do this. Type the following at the prompt or alternatively you could click on linuxconf link present in the KMenu

# linuxconf

Select the Config menu -> Select File Systems -> Select Access local drive. You should now be viewing a list of mounted file systems. Select Add. Now we fill out the form.

Partition

/dev/hdc
, If your CDROM drive is the master drive on the second IDE controller. I think this is the most common setting.

/dev/hdb , If your CDROM is slaved to the hard drive on the primary IDE controller. If your option doesn't appear on the list, type it in.

Type

iso9660 . This is same for all PC CDROM's. Just select it from the list.If this option isn't on the list, you'll probably have to recompile the kernel or something. Don't ask me how to do that. When it happened to me, I just reinstalled Linux from the CD.

Mount Point

/mnt/cdrom Probably this directory already exists on your system specifically for this purpose. If not, linuxconf will create it.

Now select Options and choose 'Read Only' and 'User Mountable'. Set Dump Frequency and Fsck Priority both to 0 (zero). Select Accept.

Now your system knows all about how to mount the CDROM... but it still hasn't done it. To actually mount it, type the following at the prompt

# mount /mnt/cdrom

Now the contents of the CDROM will appear in the folder /mnt/cdrom. You can follow a similar procedure to access floppies or a secondary harddisk as well.

About the Author - Vince Veselosky (vince@control-escape.com) is a Microsoft Certified Professional who defected to Linux in 1998. He started a Linux help site named Control Escape, immediately after adopting Linux, finding that some basic operations were very simple but not clearly documented. You can access his site at http://www.control-escape.com

Copyright 2001 by Vince Veselosky (vince@control-escape.com). All rights reserved. Contact the author for permissions.

>
Tips For Linux © All Copyrights Reserved