| '\" t |
| .TH mtools 1 "26Dec21" mtools-4.0.37 |
| .SH Name |
| mtools - utilities to access DOS disks in Unix. |
| '\" t |
| .de TQ |
| .br |
| .ns |
| .TP \\$1 |
| .. |
| |
| .tr \(is' |
| .tr \(if` |
| .tr \(pd" |
| |
| .PP |
| .SH Introduction |
| Mtools is a collection of tools to allow Unix systems to manipulate |
| MS-DOS files: read, write, and move around files on an MS-DOS |
| file system (typically a floppy disk). Where reasonable, each program |
| attempts to emulate the MS-DOS equivalent command. However, |
| unnecessary restrictions and oddities of DOS are not emulated. For |
| instance, it is possible to move subdirectories from one subdirectory |
| to another. |
| .PP |
| Mtools is sufficient to give access to MS-DOS file systems. For |
| instance, commands such as \fR\&\f(CWmdir a:\fR work on the \fR\&\f(CWa:\fR floppy |
| without any preliminary mounting or initialization (assuming the default |
| \&\fR\&\f(CW\(if/etc/mtools.conf\(is\fR works on your machine). With mtools, one can |
| change floppies too without unmounting and mounting. |
| .PP |
| .SH Where\ to\ get\ mtools |
| .PP |
| Mtools can be found at the following places (and their mirrors): |
| |
| .nf |
| .ft 3 |
| .in +0.3i |
| http://ftp.gnu.org/gnu/mtools/mtools-4.0.37.tar.gz |
| .fi |
| .in -0.3i |
| .ft R |
| .PP |
| |
| \&\fR |
| .PP |
| These patches are named |
| \&\fR\&\f(CWmtools-\fR\fIversion\fR\fR\&\f(CW-\fR\fIddmm\fR\fR\&\f(CW.taz\fR, where version |
| stands for the base version, \fIdd\fR for the day and \fImm\fR for the |
| month. Due to a lack of space, I usually leave only the most recent |
| patch. |
| .PP |
| There is an mtools mailing list at info-mtools @ gnu.org . Please |
| send all bug reports to this list. You may subscribe to the list at |
| https://lists.gnu.org/mailman/listinfo/info-mtools. (N.B. Please |
| remove the spaces around the "@". I left them there in order to fool |
| spambots.) Announcements of new mtools versions will also be sent to |
| the list, in addition to the Linux announce newsgroups. The mailing |
| list is archived at http://lists.gnu.org/pipermail/info-mtools/ |
| .PP |
| .SH Common\ features\ of\ all\ mtools\ commands |
| .PP |
| .SS Options\ and\ filenames |
| MS-DOS filenames are composed of a drive letter followed by a colon, a |
| subdirectory, and a filename. Only the filename part is mandatory, the |
| drive letter and the subdirectory are optional. Filenames without a |
| drive letter refer to Unix files. Subdirectory names can use either the |
| \&'\fR\&\f(CW/\fR' or '\fR\&\f(CW\e\fR' separator. The use of the '\fR\&\f(CW\e\fR' separator |
| or wildcards requires the names to be enclosed in quotes to protect them |
| from the shell. However, wildcards in Unix filenames should not be |
| enclosed in quotes, because here we \fBwant\fR the shell to expand |
| them. |
| .PP |
| The regular expression "pattern matching" routines follow the Unix-style |
| rules. For example, `\fR\&\f(CW*\fR' matches all MS-DOS files in lieu of |
| `\fR\&\f(CW*.*\fR'. The archive, hidden, read-only and system attribute bits |
| are ignored during pattern matching. |
| .PP |
| All options use the \fR\&\f(CW-\fR (minus) as their first character, not |
| \&\fR\&\f(CW/\fR as you'd expect in MS-DOS. |
| .PP |
| Most mtools commands allow multiple filename parameters, which |
| doesn't follow MS-DOS conventions, but which is more user-friendly. |
| .PP |
| Most mtools commands allow options that instruct them how to handle |
| file name clashes. See section name clashes, for more details on these. |
| .PP |
| All commands accept the \fR\&\f(CW-i\fR flag which allows to specify an |
| image file (See section drive letters). |
| .PP |
| All commands accept the \fR\&\f(CW-V\fR flag which prints the version, and |
| most accept the \fR\&\f(CW-v\fR flag, which switches on verbose mode. In |
| verbose mode, these commands print out the name of the MS-DOS files |
| upon which they act, unless stated otherwise. See section Commands, for a |
| description of the options which are specific to each command. |
| .PP |
| .SS Drive\ letters |
| .PP |
| The meaning of the drive letters depends on the target architectures. |
| However, on most target architectures, drive A is the first floppy |
| drive, drive B is the second floppy drive (if available), drive J is a |
| Jaz drive (if available), and drive Z is a Zip drive (if available). On |
| those systems where the device name is derived from the SCSI id, the Jaz |
| drive is assumed to be at SCSI target 4, and the Zip at SCSI target 5 |
| (factory default settings). On Linux, both drives are assumed to be the |
| second drive on the SCSI bus (/dev/sdb). The default settings can be |
| changes using a configuration file (see section Configuration). |
| .PP |
| The drive letter : (colon) has a special meaning. It is used to access |
| image files which are directly specified on the command line using the |
| \&\fR\&\f(CW-i\fR options. |
| .PP |
| Example: |
| |
| .nf |
| .ft 3 |
| .in +0.3i |
| mcopy -i my-image-file.bin ::file1 ::file2 . |
| .fi |
| .in -0.3i |
| .ft R |
| .PP |
| |
| \&\fR |
| .PP |
| This copies \fR\&\f(CWfile1\fR and \fR\&\f(CWfile2\fR from the image file |
| (\fR\&\f(CWmy-image-file.bin\fR) to the \fR\&\f(CW/tmp\fR directory. |
| .PP |
| You can also supply an offset within the image file by including |
| \&\fR\&\f(CW@@\fR\fIoffset\fR into the file name. |
| .PP |
| Example: |
| |
| .nf |
| .ft 3 |
| .in +0.3i |
| mcopy -i my-image-file.bin@@1M ::file1 ::file2 . |
| .fi |
| .in -0.3i |
| .ft R |
| .PP |
| |
| \&\fR |
| .PP |
| This looks for the image at the offset of 1M in the file, rather than |
| at its beginning. |
| .PP |
| .SS Current\ working\ directory |
| .PP |
| The \fR\&\f(CWmcd\fR command (\(ifmcd\(is) is used to establish the device and |
| the current working directory (relative to the MS-DOS file system), |
| otherwise the default is assumed to be \fR\&\f(CWA:/\fR. However, unlike |
| MS-DOS, there is only one working directory for all drives, and not one |
| per drive. |
| .PP |
| .SS VFAT-style\ long\ file\ names |
| .PP |
| This version of mtools supports VFAT style long filenames. If a Unix |
| filename is too long to fit in a short DOS name, it is stored as a |
| VFAT long name, and a companion short name is generated. This short |
| name is what you see when you examine the disk with a pre-7.0 version |
| of DOS. |
| The following table shows some examples of short names: |
| .PP |
| |
| .nf |
| .ft 3 |
| .in +0.3i |
| Long name MS-DOS name Reason for the change |
| --------- ---------- --------------------- |
| thisisatest THISIS~1 filename too long |
| alain.knaff ALAIN~1.KNA extension too long |
| prn.txt PRN~1.TXT PRN is a device name |
| \&\&.abc ABC~1 null filename |
| hot+cold HOT_CO~1 illegal character |
| .fi |
| .in -0.3i |
| .ft R |
| .PP |
| |
| \&\fR |
| .PP |
| As you see, the following transformations happen to derive a short |
| name: |
| .TP |
| * \ \ |
| Illegal characters are replaced by underscores. The illegal characters |
| are \fR\&\f(CW;+=[]',\e"*\e\e<>/?:|\fR. |
| .TP |
| * \ \ |
| Extra dots, which cannot be interpreted as a main name/extension |
| separator are removed |
| .TP |
| * \ \ |
| A \fR\&\f(CW~\fR\fIn\fR number is generated, |
| .TP |
| * \ \ |
| The name is shortened so as to fit in the 8+3 limitation |
| .PP |
| The initial Unix-style file name (whether long or short) is also called |
| the \fIprimary\fR name, and the derived short name is also called the |
| \&\fIsecondary\fR name. |
| .PP |
| Example: |
| |
| .nf |
| .ft 3 |
| .in +0.3i |
| mcopy /etc/motd a:Reallylongname |
| .fi |
| .in -0.3i |
| .ft R |
| .PP |
| |
| \&\fR Mtools creates a VFAT entry for Reallylongname, and uses REALLYLO as |
| a short name. Reallylongname is the primary name, and REALLYLO is the |
| secondary name. |
| |
| .nf |
| .ft 3 |
| .in +0.3i |
| mcopy /etc/motd a:motd |
| .fi |
| .in -0.3i |
| .ft R |
| .PP |
| |
| \&\fR Motd fits into the DOS filename limits. Mtools doesn't need to |
| derivate another name. Motd is the primary name, and there is no |
| secondary name. |
| .PP |
| In a nutshell: The primary name is the long name, if one exists, or |
| the short name if there is no long name. |
| .PP |
| Although VFAT is much more flexible than FAT, there are still names |
| that are not acceptable, even in VFAT. There are still some illegal |
| characters left (\fR\&\f(CW\e"*\e\e<>/?:|\fR), and device names are still |
| reserved. |
| .PP |
| |
| .nf |
| .ft 3 |
| .in +0.3i |
| Unix name Long name Reason for the change |
| --------- ---------- --------------------- |
| prn prn-1 PRN is a device name |
| ab:c ab_c-1 illegal character |
| .fi |
| .in -0.3i |
| .ft R |
| .PP |
| |
| \&\fR |
| .PP |
| As you see, the following transformations happen if a long name is |
| illegal: |
| .TP |
| * \ \ |
| Illegal characters are replaces by underscores, |
| .TP |
| * \ \ |
| A \fR\&\f(CW-\fR\fIn\fR number is generated, |
| .PP |
| .SS Name\ clashes |
| .PP |
| When writing a file to disk, its long name or short name may collide |
| with an already existing file or directory. This may happen for all |
| commands which create new directory entries, such as \fR\&\f(CWmcopy\fR, |
| \&\fR\&\f(CWmmd\fR, \fR\&\f(CWmren\fR, \fR\&\f(CWmmove\fR. When a name clash happens, mtools |
| asks you what it should do. It offers several choices: |
| .TP |
| \&\fR\&\f(CWoverwrite\fR\ |
| Overwrites the existing file. It is not possible to overwrite a |
| directory with a file. |
| .TP |
| \&\fR\&\f(CWrename\fR\ |
| Renames the newly created file. Mtools prompts for the new filename |
| .TP |
| \&\fR\&\f(CWautorename\fR\ |
| Renames the newly created file. Mtools chooses a name by itself, without |
| prompting |
| .TP |
| \&\fR\&\f(CWskip\fR\ |
| Gives up on this file, and moves on to the next (if any) |
| .PP |
| To chose one of these actions, type its first letter at the prompt. If |
| you use a lower case letter, the action only applies for this file only, |
| if you use an upper case letter, the action applies to all files, and |
| you won't be prompted again. |
| .PP |
| You may also chose actions (for all files) on the command line, when |
| invoking mtools: |
| .TP |
| \&\fR\&\f(CW-D\ o\fR\ |
| Overwrites primary names by default. |
| .TP |
| \&\fR\&\f(CW-D\ O\fR\ |
| Overwrites secondary names by default. |
| .TP |
| \&\fR\&\f(CW-D\ r\fR\ |
| Renames primary name by default. |
| .TP |
| \&\fR\&\f(CW-D\ R\fR\ |
| Renames secondary name by default. |
| .TP |
| \&\fR\&\f(CW-D\ a\fR\ |
| Autorenames primary name by default. |
| .TP |
| \&\fR\&\f(CW-D\ A\fR\ |
| Autorenames secondary name by default. |
| .TP |
| \&\fR\&\f(CW-D\ s\fR\ |
| Skip primary name by default. |
| .TP |
| \&\fR\&\f(CW-D\ S\fR\ |
| Skip secondary name by default. |
| .TP |
| \&\fR\&\f(CW-D\ m\fR\ |
| Ask user what to do with primary name. |
| .TP |
| \&\fR\&\f(CW-D\ M\fR\ |
| Ask user what to do with secondary name. |
| .PP |
| Note that for command line switches lower/upper differentiates between |
| primary/secondary name whereas for interactive choices, lower/upper |
| differentiates between just-this-time/always. |
| .PP |
| The primary name is the name as displayed in Windows 95 or Windows NT: |
| i.e. the long name if it exists, and the short name otherwise. The |
| secondary name is the "hidden" name, i.e. the short name if a long name |
| exists. |
| .PP |
| By default, the user is prompted if the primary name clashes, and the |
| secondary name is autorenamed. |
| .PP |
| If a name clash occurs in a Unix directory, mtools only asks whether |
| to overwrite the file, or to skip it. |
| .PP |
| .SS Case\ sensitivity\ of\ the\ VFAT\ file\ system |
| .PP |
| The VFAT file system is able to remember the case of the |
| filenames. However, filenames which differ only in case are not allowed |
| to coexist in the same directory. For example if you store a file called |
| LongFileName on a VFAT file system, mdir shows this file as LongFileName, |
| and not as Longfilename. However, if you then try to add LongFilename to |
| the same directory, it is refused, because case is ignored for clash |
| checks. |
| .PP |
| The VFAT file system allows you to store the case of a filename in the |
| attribute byte, if all letters of the filename are the same case, and if |
| all letters of the extension are the same case too. Mtools uses this |
| information when displaying the files, and also to generate the Unix |
| filename when mcopying to a Unix directory. This may have unexpected |
| results when applied to files written using an pre-7.0 version of DOS: |
| Indeed, the old style filenames map to all upper case. This is different |
| from the behavior of the old version of mtools which used to generate |
| lower case Unix filenames. |
| .PP |
| .SS high\ capacity\ formats |
| .PP |
| Mtools supports a number of formats which allow storage of more data on |
| disk than usual. Due to different operating system abilities, these |
| formats are not supported on all operating systems. Mtools recognizes |
| these formats transparently where supported. |
| .PP |
| In order to format these disks, you need to use an operating system |
| specific tool. For Linux, suitable floppy tools can be found in the |
| \&\fR\&\f(CWfdutils\fR package at the following locations~: |
| |
| .nf |
| .ft 3 |
| .in +0.3i |
| \&\fR\&\f(CWhttp://www.fdutils.linux.lu/. |
| .fi |
| .in -0.3i |
| .ft R |
| .PP |
| |
| \&\fR |
| .PP |
| See the manual pages included in that package for further detail: Use |
| \&\fR\&\f(CWsuperformat\fR to format all formats except XDF, and use |
| \&\fR\&\f(CWxdfcopy\fR to format XDF. |
| .PP |
| .SS \ \ More\ sectors |
| .PP |
| The oldest method of fitting more data on a disk is to use more sectors |
| and more cylinders. Although the standard format uses 80 cylinders and |
| 18 sectors (on a 3 1/2 high density disk), it is possible to use up to |
| 83 cylinders (on most drives) and up to 21 sectors. This method allows |
| to store up to 1743K on a 3 1/2 HD disk. However, 21 sector disks are |
| twice as slow as the standard 18 sector disks because the sectors are |
| packed so close together that we need to interleave them. This problem |
| doesn't exist for 20 sector formats. |
| .PP |
| These formats are supported by numerous DOS shareware utilities such as |
| \&\fR\&\f(CWfdformat\fR and \fR\&\f(CWvgacopy\fR. In his infinite hubris, Bill Gate$ |
| believed that he invented this, and called it \fR\&\f(CW\(ifDMF disks\(is\fR, or |
| \&\fR\&\f(CW\(ifWindows formatted disks\(is\fR. But in reality, it has already existed |
| years before! Mtools supports these formats on Linux, on SunOS and on |
| the DELL Unix PC. |
| .PP |
| .SS \ \ Bigger\ sectors |
| By using bigger sectors it is possible to go beyond the capacity which |
| can be obtained by the standard 512-byte sectors. This is because of the |
| sector header. The sector header has the same size, regardless of how |
| many data bytes are in the sector. Thus, we save some space by using |
| \&\fIfewer\fR, but bigger sectors. For example, 1 sector of 4K only takes |
| up header space once, whereas 8 sectors of 512 bytes have also 8 |
| headers, for the same amount of useful data. |
| .PP |
| This method permits storage of up to 1992K on a 3 1/2 HD disk. |
| .PP |
| Mtools supports these formats only on Linux. |
| .PP |
| .SS \ \ 2m |
| .PP |
| The 2m format was originally invented by Ciriaco Garcia de Celis. It |
| also uses bigger sectors than usual in order to fit more data on the |
| disk. However, it uses the standard format (18 sectors of 512 bytes |
| each) on the first cylinder, in order to make these disks easier to |
| handle by DOS. Indeed this method allows you to have a standard sized |
| boot sector, which contains a description of how the rest of the disk |
| should be read. |
| .PP |
| However, the drawback of this is that the first cylinder can hold less |
| data than the others. Unfortunately, DOS can only handle disks where |
| each track contains the same amount of data. Thus 2m hides the fact that |
| the first track contains less data by using a \fIshadow |
| FAT\fR. (Usually, DOS stores the FAT in two identical copies, for |
| additional safety. XDF stores only one copy, but tells DOS that it |
| stores two. Thus the space that would be taken up by the second FAT copy |
| is saved.) This also means that you should \fBnever use a 2m disk |
| to store anything else than a DOS file system\fR. |
| .PP |
| Mtools supports these formats only on Linux. |
| .PP |
| .SS \ \ XDF |
| .PP |
| XDF is a high capacity format used by OS/2. It can hold 1840 K per |
| disk. That's lower than the best 2m formats, but its main advantage is |
| that it is fast: 600 milliseconds per track. That's faster than the 21 |
| sector format, and almost as fast as the standard 18 sector format. In |
| order to access these disks, make sure mtools has been compiled with XDF |
| support, and set the \fR\&\f(CWuse_xdf\fR variable for the drive in the |
| configuration file. See section Compiling mtools, and \(ifmiscellaneous variables\(is, |
| for details on how to do this. Fast XDF access is only available for |
| Linux kernels which are more recent than 1.1.34. |
| .PP |
| Mtools supports this format only on Linux. |
| .PP |
| \&\fBCaution / Attention distributors\fR: If mtools is compiled on a |
| Linux kernel more recent than 1.3.34, it won't run on an older |
| kernel. However, if it has been compiled on an older kernel, it still |
| runs on a newer kernel, except that XDF access is slower. It is |
| recommended that distribution authors only include mtools binaries |
| compiled on kernels older than 1.3.34 until 2.0 comes out. When 2.0 will |
| be out, mtools binaries compiled on newer kernels may (and should) be |
| distributed. Mtools binaries compiled on kernels older than 1.3.34 won't |
| run on any 2.1 kernel or later. |
| .PP |
| .SS Exit\ codes |
| All the Mtools commands return 0 on success, 1 on utter failure, or 2 |
| on partial failure. All the Mtools commands perform a few sanity |
| checks before going ahead, to make sure that the disk is indeed an |
| MS-DOS disk (as opposed to, say an ext2 or MINIX disk). These checks |
| may reject partially corrupted disks, which might otherwise still be |
| readable. To avoid these checks, set the MTOOLS_SKIP_CHECK |
| environmental variable or the corresponding configuration file variable |
| (see section global variables) |
| .SS Bugs |
| An unfortunate side effect of not guessing the proper device (when |
| multiple disk capacities are supported) is an occasional error message |
| from the device driver. These can be safely ignored. |
| .PP |
| The fat checking code chokes on 1.72 Mb disks mformatted with pre-2.0.7 |
| mtools. Set the environmental variable MTOOLS_FAT_COMPATIBILITY (or the |
| corresponding configuration file variable, \(ifglobal variables\(is) to |
| bypass the fat checking. |
| .PP |
| .SH See also |
| floppyd_installtest |
| mattrib |
| mbadblocks |
| mcd |
| mcopy |
| mdel |
| mdeltree |
| mdir |
| mdu |
| mformat |
| minfo |
| mkmanifest |
| mlabel |
| mmd |
| mmount |
| mmove |
| mrd |
| mren |
| mshortname |
| mshowfat |
| mtoolstest |
| mtype |