7.5 Drives, Mounts, and File Systems

The /proc file system also contains information about the disk drives present in the system and the file systems mounted from them.

7.5.1 File Systems

The /proc/filesystems entry displays the file system types known to the kernel. Note that this list isn't very useful because it is not complete: File systems can be loaded and unloaded dynamically as kernel modules. The contents of /proc/filesystems list only file system types that either are statically linked into the kernel or are currently loaded. Other file system types may be available on the system as modules but might not be loaded yet.

7.5.2 Drives and Partitions

The /proc file system includes information about devices connected to both IDE controllers and SCSI controllers (if the system includes them).

On typical systems, the /proc/ide subdirectory may contain either or both of two subdirectories, ide0 and ide1, corresponding to the primary and secondary IDE controllers on the system. [5] These contain further subdirectories corresponding to physical devices attached to the controllers. The controller or device directories may be absent if Linux has not recognized any connected devices. The full paths corresponding to the four possible IDE devices are listed in Table 7.1.

[5] If properly configured, the Linux kernel can support additional IDE controllers. These are numbered sequentially from ide2.

Table 7.1. Full Paths Corresponding to the Four Possible IDE Devices

Controller

Device

Subdirectory

Primary

Master

/proc/ide/ide0/hda/

Primary

Slave

/proc/ide/ide0/hdb/

Secondary

Master

/proc/ide/ide1/hdc/

Secondary

Slave

/proc/ide/ide1/hdd/

See Section 6.4, "Hardware Devices," for more information about IDE device names.

Each IDE device directory contains several entries providing access to identification and configuration information for the device. A few of the most useful are listed here:

·         model contains the device's model identification string.

·         media contains the device's media type. Possible values are disk, cdrom, tape, floppy, and UNKNOWN.

·         capacity contains the device's capacity, in 512-byte blocks. Note that for CD-ROM devices, the value will be 231–1, not the capacity of the disk in the drive. Note that the value in capacity represents the capacity of the entire physical disk; the capacity of file systems contained in partitions of the disk will be smaller.

For example, these commands show how to determine the media type and device identification for the master device on the secondary IDE controller. In this case, it turns out to be a Toshiba CD-ROM drive.

 
% cat /proc/ide/ide1/hdc/media 
cdrom 
% cat /proc/ide/ide1/hdc/model 
TOSHIBA CD-ROM XM-6702B 

If SCSI devices are present in the system, /proc/scsi/scsi contains a summary of their identification values. For example, the contents might look like this:

 
% cat /proc/scsi/scsi 
Attached devices: 
Host: scsi0 Channel: 00 Id: 00 Lun: 00 
  Vendor: QUANTUM  Model: ATLAS_V__9_WLS   Rev: 0230 
  Type:   Direct-Access                    ANSI SCSI revision: 03 
Host: scsi0 Channel: 00 Id: 04 Lun: 00 
  Vendor: QUANTUM  Model: QM39100TD-SW     Rev: N491 
  Type:   Direct-Access                    ANSI SCSI revision: 02 

This computer contains one single-channel SCSI controller (designated "scsi0"), to which two Quantum disk drives are connected, with SCSI device IDs 0 and 4.

The /proc/partitions entry displays the partitions of recognized disk devices. For each partition, the output includes the major and minor device number, the number of 1024-byte blocks, and the device name corresponding to that partition.

The /proc/sys/dev/cdrom/info entry displays miscellaneous information about the capabilities of CD-ROM drives. The fields are self-explanatory:

 
% cat /proc/sys/dev/cdrom/info 
CD-ROM information, Id: cdrom.c 2.56 1999/09/09 
 
drive name:  hdc 
drive speed:  48 
drive # of slots:  0 
Can close tray:  1 
Can open tray:  1 
Can lock tray:  1 
Can change speed:  1 
Can select disk:  0 
Can read multisession:  1 
Can read MCN:  1 
Reports media changed:  1 
Can play audio:  1 

7.5.3 Mounts

The /proc/mounts file provides a summary of mounted file systems. Each line corresponds to a single mount descriptor and lists the mounted device, the mount point, and other information. Note that /proc/mounts contains the same information as the ordinary file /etc/mtab, which is automatically updated by the mount command.

These are the elements of a mount descriptor:

·         The first element on the line is the mounted device (see Chapter 6). For special file systems such as the /proc file system, this is none.

·         The second element is the mount point, the place in the root file system at which the file system contents appear. For the root file system itself, the mount point is listed as /. For swap drives, the mount point is listed as swap.

·         The third element is the file system type. Currently, most GNU/Linux systems use the ext2 file system for disk drives, but DOS or Windows drives may be mounted with other file system types, such as fat or vfat. Most CD-ROMs contain an iso9660 file system. See the man page for the mount command for a list of file system types.

·         The fourth element lists mount flags. These are options that were specified when the mount was added. See the man page for the mount command for an explanation of flags for the various file system types.

In /proc/mounts, the last two elements are always 0 and have no meaning.

See the man page for fstab for details about the format of mount descriptors. [6] GNU/Linux includes functions to help you parse mount descriptors; see the man page for the getmntent function for information on using these.

[6] The /etc/fstab file lists the static mount configuration of the GNU/Linux system.

7.5.4 Locks

Section 8.3, "fcntl: Locks and Other File Operations," describes how to use the fcntl system call to manipulate read and write locks on files. The /proc/locks entry describes all the file locks currently outstanding in the system. Each row in the output corresponds to one lock.

For locks created with fcntl, the first two entries on the line are POSIX ADVISORY. The third is WRITE or READ, depending on the lock type. The next number is the process ID of the process holding the lock. The following three numbers, separated by colons, are the major and minor device numbers of the device on which the file resides and the inode number, which locates the file in the file system. The remainder of the line lists values internal to the kernel that are not of general utility.

Turning the contents of /proc/locks into useful information takes some detective work. You can watch /proc/locks in action, for instance, by running the program in Listing 8.2 to create a write lock on the file /tmp/test-file.

 
% touch /tmp/test-file 
% ./lock-file /tmp/test-file 
file /tmp/test-file 
opening /tmp/test-file 
locking 
locked; hit enter to unlock. . . 

In another window, look at the contents of /proc/locks.

 
% cat /proc/locks 
1: POSIX  ADVISORY  WRITE 5467 08:05:181288 0 2147483647 d1b5f740 00000000 
dfea7d40 00000000 00000000 

There may be other lines of output, too, corresponding to locks held by other programs. In this case, 5467 is the process ID of the lock-file program. Use ps to figure out what this process is running.

 
% ps 5467 
  PID TTY      STAT   TIME COMMAND 
 5467 pts/28   S      0:00 ./lock-file /tmp/test-file 

The locked file, /tmp/test-file, resides on the device that has major and minor device numbers 8 and 5, respectively. These numbers happen to correspond to /dev/sda5.

 
% df /tmp 
Filesystem           1k-blocks      Used Available Use% Mounted on 
/dev/sda5              8459764   5094292   2935736  63% / 
% ls -l /dev/sda5 
brw-rw----    1 root     disk       8,   5 May  5  1998 /dev/sda5 

The file /tmp/test-file itself is at inode 181,288 on that device.

 
% ls --inode /tmp/test-file 
 181288 /tmp/test-file 

See Section 6.2, "Device Numbers," for more information about device numbers.