home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  

Running Linux, 4th Ed.Running Linux, 4th Ed.Search this book

Chapter 12. Windows Compatibility and Samba

Linux is a remarkably effective operating system, which in many cases can completely replace MS-DOS/Windows. However, there are always those of us who want to continue to use other operating systems as well as Linux, or at least to exchange files directly with them. Linux satisfies such yearnings with internal enhancements that allow it to access foreign filesystems and act on their files. It can mount DOS/Windows partitions on the system's hard disk, or access files and printers shared by Windows servers on the network. Linux can also run DOS and Windows applications, using compatibility utilities that allow it to invoke MS-DOS or Windows.

We use the terms MS-DOS and Windows somewhat generically in this chapter to refer to any of the DOS-based operating systems coming from Microsoft or those compatible with them. These include MS-DOS, PC-DOS, and DR-DOS/Novell DOS (all with or without Windows 3.x running on top of them), as well as the various Windows versions themselves, no matter whether they build upon a separate DOS installation, such as Windows 3.x, or whether they have a DOS kernel built in, such as Windows 95/98/ME. Windows NT/2000/XP are different, and some of the things described here will not work with them, or will work differently.

One of the most common reasons for needing to run Windows is that it often has better support for new hardware products. If you have installed Windows because you need to use a piece of hardware that is supported by Windows, but for which there is no Linux driver, do not despair. Although you may have to wait a while for it, most mainstream hardware devices that are supported by Windows will eventually be supported by Linux, too. For example, Linux drivers for USB devices used to be rare and flaky, but now many common USB devices work just fine on Linux. You can get updated information about which USB devices work on Linux at http://www.linux-usb.org.

You may also need to run Windows in order to use "standard" applications, such as Photoshop or Microsoft Office. In both of these cases, there are free, Open Source applications (namely, The Gimp, KOffice and OpenOffice) that can match or even outdo their proprietary, closed-source equivalents. However, it is still sometimes necessary to run Windows to obtain access to software products that have no Linux equivalent, or for which the Linux counterpart is not fully compatible.

There are essentially four ways in which Linux and Windows can cooperate:

  • Sharing CDs and floppy disks ("sneakernet")

  • Sharing a computer by being installed on separate partitions

  • Sharing data over a network

  • Running concurrently on the same computer using an emulator or virtual machine

When Windows and Linux are running on separate hardware, and the systems are not networked, a floppy disk or CD (either CD-R or CD-RW) can be written on one system and read on the other. Both Windows and Linux have the capability to read and write CDs in industry standard, ISO9660 format. The cdrecord program, which runs on Linux and other Unix flavors, can create CDs using Microsoft's Joliet extensions to the ISO9660 standard, making Windows feel right at home with the disc format.

Although floppy disks hold much less data than CDs, they can be useful when just a few small files need to be transferred. Data can be shared between Linux and Windows on MS-DOS formatted floppy disks using the MTools utilities described later in this chapter.

A more cost-effective approach is to install both Windows and Linux on the same computer, each in their own disk partitions. At boot time, the user is given the choice of which operating system to run. Section 5.2 in Chapter 5, tells you how to configure a multiboot system.

MTools can be used to access files on the Windows partition while running Linux, but a much more convenient method is to mount the Windows partition directly onto the Linux file system. Then Windows files can be accessed similarly to regular Unix files.

For networked computers, the most outstanding tool for getting Linux and Windows to cooperate is Samba, an Open Source software suite that lets you access Unix files and printers from Windows. Linux servers running Samba can — depending on the circumstances — serve Windows computers even faster than Windows servers can! In addition, Samba has proven to be very stable and reliable.

The Samba package also includes programs that work with the smbfs filesystem supported by Linux, which allows directories shared by Windows to be mounted onto the Linux file system. We'll discuss the smbfs filesystem and Samba in enough depth to help you mount shared directories and get a basic, functional server running.

Finally, there are methods that can be used to directly run Windows applications under Linux, or even run Windows itself. Wine is an Open Source project with the goal of directly supporting Windows applications, without needing to install Windows. Another approach is used by the commercial VMware application, which is able to concurrently run a number of installations of Windows, Linux, FreeBSD or some other operating systems. When running Windows under VMware, data is shared with the Linux host using the Samba tools.

You should be a little skeptical of some claims of compatibility. You might find, for example, that you need twice the disk storage in order to support two operating systems and their associated files and applications programs, plus file conversion and graphic-format conversion tools, and so on. You may find that hardware tuned for one OS won't be tuned for the other, or that even when you've installed and correctly configured all the necessary software, small unresolvable compatibility issues remain.

12.1. Sharing Disks with MTools

The MTools package is a collection of commands that let you manipulate files and directories on one or more MS-DOS disks. The commands work similarly to commonly-used MS-DOS commands, although there are significant differences that take a little getting used to.

The file /etc/mtools.conf is used to conjure MTools, and you will probably find it already set up to identify your primary and secondary floppy disks as the MS-DOS A: and B: drives:

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

If you have a DOS partition on your hard drive, you can access it as C: using a line in mtools.conf, such as:

drive c: file="/dev/hda1"

When adding this line, use the filename corresponding to your MS-DOS partition instead of /dev/hda1. Be very careful to use the correct partition of your disk. If you make a mistake, you could very easily destroy an entire Linux partition, or other valuable data.

Occasionally, you will encounter a floppy disk that is not MS-DOS formatted. To use the floppy, you will first need to low-level format it using the fdformat command, which is not part of MTools. Then, you can use the MTools mformat command to put a FAT and directory structure on the floppy:

$ fdformat /dev/fd0
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
$ mformat a:

The mdir command, used for listing the contents of an MS-DOS directory, will now show:

$ mdir a:
 Volume in drive A has no label
 Volume Serial Number is 4077-6090
Directory for A:/

No files
                          1 457 664 bytes free

The disk is now ready to have files copied to it with the mcopy command:

$ mcopy /etc/hosts a:
$ mdir
 Volume in drive A has no label
 Volume Serial Number is 4077-6090
Directory for A:/

hosts              948 10-02-2002  19:28  hosts
        1 file                  948 bytes
                          1 456 640 bytes free

The file on the floppy can be read by any MS-DOS or Windows system. The above examples give you a basic idea of how the MTools utilities work. The mcopy command is typical in that it can accept either MS-DOS or Linux filenames as arguments, and performs the copy operation accordingly. Some other useful MTools commands are mmd, to create a directory, and mcd, to change directories. When you use mcd to change your working directory on an MS-DOS disk, the MTools utilities keep track of the working directory, to simulate the normal MS-DOS behavior. For example, consider the following command sequence:

$ mmd a:dir1
$ mcd a:dir1
$ copy c:file1 a:
$ mdir a:
 Volume in drive A has no label
 Volume Serial Number is 4077-6090
Directory for A:/dir1

.            <DIR>     10-02-2002  19:42 
..           <DIR>     10-02-2002  19:42
file1    TXT       948 10-02-2002  19:50  file1.txt
        3 files                 948 bytes
                          1 454 080 bytes free

The result is that file1.txt on the C: drive is copied to the dir1 directory on the A: drive, and the mdir command shows the contents of A:\dir1. If you are not used to using the MS-DOS/Windows command shells, be careful of this, because it is different from standard Unix behavior.

Notice in the above directory listing that the directory name is printed as A:/dir1, using a forward slash instead of a backslash. This is your clue that when using MTools utilities, you must use a slash do specify directory paths, such as:

$ mdel c:/dir1/dir2/readme.txt

Also, the MTools commands use a dash instead of a slash to specify options. For example, to print a concise listing of the A: drive, we can use the following command:

$ mdir -b a:

What follows is a quick description of each MTools command. You can learn more about them by reading the manual pages for mtools(1), and for each of the individual commands.

12.1.1. mattrib

Changes attributes of an MS-DOS file, which is assumed to be in the current MS-DOS working directory.

Tests a disk, and writes entries in the disk's file allocation table (FAT) to mark bad blocks.

Changes the MS-DOS working directory.

Copies files.

Deletes a file.

Deletes an MS-DOS directory and its contents, including any subdirectories.

Lists the contents of an MS-DOS directory. Defaults to the current MS-DOS working directory.

Reports on the amount of space on the disk used by each file on the MS-DOS disk, similarly to the Unix du command.

Creates an empty MS-DOS FAT filesystem on a disk. The disk must already have been low-level MS-DOS formatted (as with the fdformat command).

Prints low-level information about an MS-DOS disk.

Creates a file containing a table of MS-DOS to Unix filename translations for the files on an MS-DOS disk. Useful when a number of Unix files are copied to an MS-DOS disk, and they need to be copied back later and given their original filenames on the Unix system.

Writes a disk volume label to an MS-DOS disk.

Creates a directory on an MS-DOS disk.

Mounts an MS-DOS disk onto the Linux file system. The disk must be low-level MS-DOS formatted, and contain an MS-DOS filesystem. In order for this to work, the /etc/fstab file must have an entry similar to:

/dev/fd0     /mnt/floppy      auto    noauto,owner    0 0

Using the above entry, the command mmount a: will mount the filesystem on the floppy on the directory /mnt/floppy, which can then be accessed directly by Linux. Use the Linux umount command to unmount the disk.

Moves or renames a file or directory on an MS-DOS disk.

Removes one or more directories from an MS-DOS disk. The directory must be empty. To delete an MS-DOS directory and its contents, use the mdeltree command.

Renames a file or directory on an MS-DOS disk.

Displays the contents of a file, which can be either on an MS-DOS disk or the local Linux system.

Library Navigation Links

Copyright © 2003 O'Reilly & Associates. All rights reserved.