Using mtools

Using mtools

One way to access the MS-DOS file systems is to mount the DOS hard disk or floppy disk by using the mount command and then use regular Linux commands, such as ls and cp, to work with the mounted DOS file system. This approach of mounting a DOS file system is fine for hard disks. Linux can mount the DOS partition automatically at startup, and you can access the DOS directories on the hard disk at any time.

If you want a quick directory listing of a DOS floppy disk, however, mounting can soon become quite tedious. First, you must mount the floppy drive. Then, you must use the ls or cp command to work with the files. Finally, you must use the umount command before ejecting the floppy out of the drive.

This is where the mtools package comes to the rescue. The mtools package implements most common DOS commands; the commands use the same names as in DOS, except that you add an m prefix to each command. Thus, the command for getting a directory listing is mdir, and mcopy copies files. The best part of mtools is the fact that you don't need to mount the floppy disk to use the mtools commands.

Insider Insight 

Because the mtools commands write to and read from the physical device (floppy disk), you must log in as root to perform these commands. If you want any user to access the mtools commands, you must alter the permission settings for the floppy drive devices. Use the following command to permit anyone to read from and write to the first floppy drive:

chmod o+rw /dev/fd0

Trying mtools

The mtools package comes with the Red Hat Linux distribution on this book's companion CD-ROMs. When you install Linux, mtools installs automatically as part of the base Linux. The mtools executable files are in the /usr/bin directory. To see whether you have mtools, type ls /usr/bin/mdir at the shell prompt. If the ls command shows that this file exists, mtools is available on your system.

You also can type the following rpm command to verify that mtools is on your system:

rpm -q mtools

If mtools is present, the output shows you the full name of the mtools package. The sample output shows that mtools version 3.9.8 is present on the system.

To try out mtools, follow these steps:

  1. Log in as root or type su - and then enter the root password.

  2. Place an MS-DOS floppy disk in your system's A drive.

  3. Type mdir. You should see the directory of the floppy disk (in the standard DOS directory-listing format).

The /etc/mtools.conf File

The mtools package should work with the default setup, but if you get any errors, you should check the /etc/mtools.conf file. That file contains the definitions of the drives (such as A, B, and C) that the mtools utilities see. Following are a few lines from a typical /etc/mtools.conf file:

drive a: file="/dev/fd0" exclusive mformat_only
drive b: file="/dev/fd1" exclusive mformat_only

# First SCSI hard disk partition
#drive c: file="/dev/sda1"

# First IDE hard disk partition
drive c: file="/dev/hda1"

# IDE Zip drive
drive X: file="/dev/hdd4" exclusive

The pound sign (#) indicates the start of a comment. Each line defines a drive letter, the associated Linux device name, and some keywords that indicate how to access the device. In this example, the first two lines define drives A and B. The third noncomment

line defines drive C as the first partition on the first IDE drive (/dev/hda1). If you have other DOS drives (D, for example), you can add another line that defines drive D as the appropriate disk partition.

If your system's A drive is a high-density, 3.5-inch drive, you shouldn't need to change anything in the default /etc/mtools.conf file to access the floppy drive. If you also want to access any DOS partition in the hard drive, uncomment and edit an appropriate line for the C drive.

Typically, you use the mtools utilities to access the floppy disks. Although you can define C and D drives for your DOS hard-disk partitions, you may want to access those partitions by using the Linux mount command to mount them. Because you can mount the hard-disk partitions automatically at startup, accessing them through the Linux commands is normally just as easy.

Insider Insight 

You also can access Iomega Zip drives through mtools. Simply specify a drive letter and the appropriate device's filename. For built-in IDE (ATAPI) Zip drives, try /dev/hdd4 as the device file, and add the following line in the /etc/mtools.conf file:

drive e: file="/dev/hdd4"

After that, you should be able to use mtools commands to access the Zip drive (refer to it as the E drive). For example, to see the directory listing, place Zip disk in the Zip drive and type:

mdir e:

Learning the mtools Commands

The mtools package is a collection of utilities. So far, I have been using mdir-the mtools counterpart of the DIR command in DOS. The other mtools commands are fairly easy to use.

Insider Insight 

If you know the MS-DOS commands, you find that using the mtools commands is very easy. Type the DOS command in lowercase letters, and remember to add m in front of each command. Because the Linux commands and filenames are case sensitive, you must use all lowercase letters as you type mtools commands.

Table 12-3 summarizes the commands available in mtools.

Table 12-3: The mtools Commands

mtools Utility

MS-DOS Command (If Any)




Changes MS-DOS file-attribute flags



Tests a floppy disk and marks the bad blocks in the file allocation table (FAT)



Changes an MS-DOS directory



Copies files between MS-DOS and Linux



Deletes an MS-DOS file



Recursively deletes an MS-DOS directory



Displays an MS-DOS directory listing



Lists space that a directory and its contents occupy



Places an MS-DOS file system on a low-level-formatted floppy disk (Use fdformat to low-level-format a floppy in Red Hat Linux)



Gets information about an MS-DOS file system



Makes a list of short name equivalents



Initializes an MS-DOS volume label



Creates an MS-DOS directory



Moves or renames an MS-DOS file or subdirectory



Mounts an MS-DOS disk



Creates an MS-DOS file system as a partition



Deletes an MS-DOS directory



Renames an existing MS-DOS file



Shows FAT entries for an MS-DOS file



Tests and displays the current mtools configuration



Displays the contents of an MS-DOS file



Copies a Linux file to MS-DOS



Performs certain operations on SCSI Zip disks

You can use the mtools commands just as you'd use the corresponding DOS commands. The mdir command, for example, works the same as the DIR command in DOS. The same goes for all the other mtools commands shown in Table 12-3.

Formatting a DOS Floppy

Suppose that you run Red Hat Linux on your home PC and MS-DOS is no longer on your system, but you need to copy some files onto an MS-DOS floppy disk and take the disk to your office. If you already have a formatted MS-DOS floppy, you can simply mount that floppy and copy the file to the floppy by using the Linux cp command. But what if you don't have a formatted DOS floppy? The mtools package again comes to the rescue.

The mtools package provides the mformat utility, which can format a floppy disk for use in MS-DOS. Unlike the DOS format command that formats a floppy in a single step, the mformat command requires you to follow a two-step process:

  1. Use the fdformat command to low-level-format a floppy disk. The fdformat command uses the floppy device name as the argument; the device name includes all the parameters necessary for formatting the floppy disk. Figure 12-9 illustrates the device-naming convention for the floppy drive device. Based on the information shown in Figure 12-9, you use the following command to format a 3.5-inch, high-density floppy disk in your system's A drive:

    fdformat /dev/fd0H1440

    Click To expand
    Figure 12-9: Naming Convention for the Floppy Disk Drive in Red Hat Linux.

  2. Use the mformat command to put an MS-DOS file system on the low-level- formatted floppy disk. If the floppy is in drive A, type the following command to create a formatted DOS floppy:

    mformat a: