ftp.nice.ch/pub/next/unix/disk/vmount.0.6a.README

This is the README for vmount.0.6a.s.tar.gz [Download] [Browse] [Up]

This is the README file for vmount.

* What does vmount do?
======================
vmount is a utility that allows you to mount foreign filesystems in your
directory hierarchy. It uses the NFS-interface to the kernel to make the
files available and the Linux code for the low level filesystem access.


* What filesystems can currently be accessed?
=============================================
The filesystem sources are taken from the Linux 2.0.25 kernel, which supports
the following filesystems for disk devices:
    ext         the old Linux native filesystem
    ext2        the new Linux native filesystem
    xiafs       another old Linux native filesystem
    minix       the minix filesystem (Linux floppies)
    umsdos      unix permissions on top of a FAT filesystem
    msdos       normal FAT filesystem
    vfat        FAT filesystem with long filenames (Win95, NT compatible)
    iso9660     CDROM filesystem
    xenix       System V filesystem for XENIX (PC-Unix)
    sysv        SCO-Unix System V filesystem format
    coherent    System V filesystem for Coherent (PC-Unix)
    hpfs        the OS/2 filesystem (read only)
    affs        the Amiga Fast FileSystem
    ufs         should be standard berkeley "fast file system" format
    ntfs        NT-filesystem, read only (not part of the kernel but a
                separate module written by Martin von Loewis)
I have tested (unarchiving, compiling):
    ext2:   read and write OK.
    minix:  read and write OK.
    vfat:   read and write OK.
    ntfs:   read only, seems to work OK although the implementation of the
            "." and ".." directory entries is not completely correct (wrong
            inode numbers in ls). Some directoryies generate endless loops
            of warning or error messages. I had to modify the ntfs module
            sources a bit to make things work, mostly removing #includes of
            non-kernel headers and removing access restrictions.
    iso9660: read only :-), multi session uses an ioctl() that is not
            available on NEXTSTEP. However, it seems to work better than
            NeXT's implementation with multi session disks. Sizing etc. is
            much faster than on NeXT's iso9660 filesystem.
    hpfs:   I have not tested this myself, but Peter Eybert
            <pjoe@charon.muc.de> has reported that it works for read only
            access.


* What do I need to run vmount?
===============================
To run vmount:
1.) An i386 based machine (i386 is the CPU-class, not the actual processor).
2.) NEXTSTEP 3.2 or higher (I have only tested on 4.0, however).

To compile from the sources:
1.) NEXTSTEP 3.3 Developer or higher. I have also tested with gcc 2.7.2 and
    NEXTSTEP 3.2 Developer, this works too. gcc 2.2.2, which comes with
    3.2 Developer, complains about prototype mismatches for built in
    functions. This can probably be solved easily, but I have not tried.
    You should edit the Makefile to reflect the compiler you intend to use.
2.) GNU-make. Openstep 4.0 and higher comes with GNU-make, it is available
    under the name "gnumake".

And, of course, you need the vmount distribution:
    vmount.0.5.I.b.gnutar.gz        for the binary only distribution
    vmount.0.5.I.s.gnutar.gz        for the vmount sources
    vmount-Linux-2.0.25.s.gnutar.gz for the Linux filesystem sources
        This directory contains the "fs" and "include" hierarchy of the
        Linux kernel sources. "fs" contains only the filesystem specific
        subdirectories. Alternatively you may unpack the original Linux
        kernel sources in the vmount directory.
    vmount-ntfs-cs.s.gnutar.gz      for the modified ntfs sources

You can get these files from
    ftp://peanuts.leo.org/pub/comp/platforms/next/Unix/disk/vmount*
    ftp://next-ftp.peak.org/pub/next/apps/utils/disk/vmount*
and from our local machine:
    ftp://hal.kph.tuwien.ac.at/pub/NeXT/tools/vmount/


* How reliable is it?
=====================
This depends on several factors. First, there is the NFS server code. This
should be relatively stable now, although there might still be some
problems with permissions (eg. the deletion phase in 'cvs release -d' fails
for no apparent reason). Second, there are functions of the Linux kernel
that have to be emulated. Since I don't know exactly what they should
do, there might still be problems. The main functionality seems to work,
however. And third, there are the filesystem modules themselves. I really
don't know how stable they are, but the Linux community works with them, so
they must be quite useable.

I have done a lot of read/write access to ext2, vfat and minix now and have
not lost any data on the disks. Nevertheless, I would not use vmount
to mount a main data partition with write enabled.

If you are afraid of data-loss, there are several strategies you may adapt.
1.) You may use vmount for read access only. As long as you don't pass
    the "-w" parameter, the device is opened read-only and no write access
    is attempted. There should be no danger whatsoever for your data.
2.) You may test vmount on a disk image file, on a floppy or on a removable
    medium. You would not place any valuable data on such a medium, of
    course.

I still have very little experience with vmount's reliability. If you use
vmount on a certain filesystem with success for some time, please tell me.


* Does Workspace recognize DOS-floppies as VFAT when I have vmount?
===================================================================
There is good news and bad news. First the good news: There will soon be
a NEXTSTEP frontend available for vmount that integrates it into
Workspace's automounter. You just insert a floppy or other removable medium
and it is automatically mounted with the correct filesystem. This frontend
is called "MountMe" and will be available from the archives.

Now the bad news: MountMe will be a commercial product. The good news
within the bad news is, however, that I plan to sell it for a very low
price.

* Why is there no fat vmount?
=============================
vmount is based on the Linux source, which was originally written for the
i386. The assembler optimized inline functions in the "linux/asm" directory
are available for several other architectures, but I have no way to test
such a port. On the other hand, most of the filesystems read data
structures from the disk by mapping a C-structure to them directly. This
results in all sorts of byte ordering problems for processors with different
endianness. This problem will have to be solved for other Linux-ports, too.


* How do I use vmount?
======================
vmount is a daemon that accesses the raw device and serves the kernel via
the NFS interface. In order to use the mount() system call, vmount must be
run as root. The general usage parameters are:

[1]   vmount -i <raw-device>
or
[2]   vmount -i -f<offset> <raw-device>
or
[3]   vmount -m<mount-point> -t<fs-type> [-p<partition> | -f<offset>]
            [-s<sector-size>] [-o<options>] [-d<debug-mode>] [-w]
            [-u <uid-translation-file>] [-g <gid-translation-file>]
            [-U<fixed-UID>] [-G<fixed-GID>] [-S] <deivce>

The first two invocations help you figure out your disk contents. The fist
one is for DOS-partitioned disks, the second one for not partitioned ones
(the <offset> parameter is usually 0). The first form prints the partition
table to stderr and both forms print filesystem information to stdout.

Example:
    root@zaphod# vmount -i /dev/rsd3h
output to stderr:
    mounting read only
      primary 1 0x83 start/sec=0x00000020 size/sec=0x000057e0
      primary 2 0x83 start/sec=0x00005800 size/sec=0x00005800
      logical 5 0x83 start/sec=0x0000b020 size/sec=0x000057e0
      logical 6 0x83 start/sec=0x00010820 size/sec=0x000057e0
      logical 7 0x83 start/sec=0x00016020 size/sec=0x000057e0
      logical 8 0x83 start/sec=0x0001b820 size/sec=0x000057e0
      logical 9 0x83 start/sec=0x00021020 size/sec=0x000057e0
      logical 10 0x83 start/sec=0x00026820 size/sec=0x00008fe0
output to stdout:
    1/ext2: -p1 -text2
    2/ext2: -p2 -text2
    5/ext2: -p5 -text2
    6/ext2: -p6 -text2
    7/ext2: -p7 -text2
    8/ext2: -p8 -text2
    9/ext2: -p9 -text2
    10/ext2: -p10 -text2

The first partition in this example is marked active and all partitions
are of type Linux Native (0x83). All partitions are formatted with an ext2
filesystem. The filesystem information is of the format

    <partition-id>/<fs-type>: <mount-options>

The mount options are the parameters that have to be passed to vmount (in
addition to the raw device and optional flags) to mount the listed
filesystem from the listed partition.

Other example:
    root@zaphod# vmount -i -f0 /dev/rsd0h
output to stderr:
    mounting read only
output to stdout:
    0/iso9660: -f0 -tiso9660


The third form actually mounts the filesystem. Parameter description:
  -v
      Prints the version number and exits.
  -m <mount-point>
      Specifies the mount point. This option is mandatory.
  -t <fs-type>
      The name type of the filesystem-type. Although an autodetection
      would be possible, you could not distinguish between the various
      types of FAT filesystems. You can use the -i option if you want
      to implement autodetection. This option is also mandatory.
  -p <partition>
      If you run vmount on a DOS-partitioned disk (which is the usual
      partitioning scheme on i386 based systems), you can specify the
      number of the partition you want to mount. The numbering scheme is
      now the same as in Linux: the primary partitions are numbered from
      1 to 4 and all logical partitions are numbered beginning at 5. You
      should use the -i option to examine the partition layout of your disk.
      If you don't specify either -p or -f, a default of -f0 is used.
  -f <offset>
      If your disk is not partitioned in the DOS scheme or you have to access
      an extended partition, you can still use vmount if you can figure out
      the offset (in bytes) of your partition's boot sector. This option
      cannot be used together with -p, of course. The number can be given
      in decimal, octal (0 prefix) or hexadecimal (0x prefix) notation.
      If you want to protect the disk against accesses outside of this
      partition, you should use the -s option in conjunction with -f.
      The default value for the offset is 0.
  -s <partition-size>
      Size of the partition. This value is only used when an offset was
      specified with the -f option. It is used to check for out-of-partition
      accesses in the low level disk access routine. If no partition size
      is specified and the size can not be determined from the partition
      table, it is set to the maximum possible value of 4GB.
  -o <options>
      The string passed with -o is passed on to the mount command. It's
      interpretation depends on the filesystem. On FAT filesystems you can
      set the default user and permission for accesses in this way.
      More documentation about this can be found in the Linux distributions.
  -d <debug-mode>
      The number passed with this option is interpreted as bitmask for
      debugging prints. The following debug options are available:
         0x01   debugging of the buffering code (buffers.c)
         0x02   debugging of basic data access routines (missing.c)
         0x04   debugging of dummy functions and regular mechanism (dummies.c)
         0x08   debugging of basic file operations for NFS (file_ops.c)
         0x10   debugging of NFS calls (nfs_funcs.c)
         0x20   even more debugging of NFS calls (nfs_funcs.c)
         0x40   debugging of uid and gid translation (id_translate.c)
         0x80   debugging of the mainloop (mount.c), may be useful if vmount
                hangs.
      The number can be given in decimal, octal (0 prefix) or
      hexadecimal (0x prefix) notation. When debugging is active (even if
      the mask is 0), vmount does not put itself to background. This makes
      it possible to run vmount in the debugger.
  -u <uid-translation-file>
  -g <gid-translation-file>
      Normally, the uids and gids for the same user will not be the same on
      different OSes on a multi-boot system. These options allows you to
      translate uids and gids for disk accesses. Every line in the file must
      consist of two integer numbers, the first one giving the local id and
      the second one giving the id that is used on the disk for the same user
      or group. Example for a uid-mapping:

            #local  disk
            100     500
            101     501
            102     502

      This mapping would be appropriate for a Linux-disk where the user-ids
      are allocated from 500 instead of 100 on the NeXT.
  -U <uid> or -U<username>
  -G <gid> or -G<groupname>
      With these options the file ownership of the filesystem is ignored
      and the given values are substituted instead. This is the usual way
      filesystems are automounted by NeXT's Workspace.
  -S
      Use small cache blocksize. This option sets the cache blocksize to
      4kB instead of 64kB. This speeds up all operations on floppy disks.

<device> may be any device that supports read(), write() and lseek(), that is
either a block device or a file.

Examples:
For running vmount on the third primary partition of your (scsi-)harddisk
which is an ext2-linux partition, type:
    vmount -m /ext2-fs -p3 -t ext2 -w /dev/rsd0h

For running it on a VFAT ZIP drive, which is the third SCSI device, type:
    vmount -m /vfat-fs -p4 -w -t vfat -o "uid=100,gid=21" /dev/rsd2h
Type this before you insert the medium to avoid the NEXTSTEP automount. You
are then asked to insert the disk, which you should do. To eject it (after
stopping vmount), you can use
    disk -e /dev/rsd2h

If you have a disk image file in 'disk-image', you can type:
    vmount -m /minix-fs -w -t minix disk-image

If you want to mount a vfat floppy, you have to insert it first, then type:
    vmount -m /floppy -w -t vfat -S /dev/rfd0b
(don't ask me why /dev/rfd0b, but it's the only one that works). Before you
remove the floppy, you should type:
    disk -e /dev/rfd0b

Using vmount for an iso9660 CD-ROM can be done this way:
    vmount -m /CDROM -f0 -t iso9660 /dev/rsd2h
Again, the command must be issued without a CD inserted.


* How do I unmount things mounted with vmount?
==============================================
For unmounting, the program "vumount" is supplied. Its usage is:

[1]   vumount
or
[2]   vumount <directory>

The first form lists all directories mounted with vmount, the second one
unmounts the given directory.

If vumount does not work or if you don't want to use it, you can simply
send the vmount daemon the hangup signal (kill -HUP <pid_of_vmount>).


* How do I build vmount from the sources?
=========================================
1.) Unpack the archive. You should be left with a directory named 'vmount'.
    This are the sources I have written.
2.) You have to get the Linux filesystem sources from somewhere. For
    simplicity, I provide the sources from Linux 2.0.25 in a separate
    archive. Unpacking this archive should generate the directories
    'vmount/Linux/include' and 'vmount/Linux/fs'.
2a.) If you need the NTFS-support, you have to unpack the ntfs archive as
    well.
3.) Edit the file config.make for your needs. It determines the filesystem
    modules that are compiled in. Edit the Makefile to reflect your compiler
    and don't forget to set the proper options in CFLAGS.
4.) Run the script mklinks.sh from the directory 'vmount'. It sets up some
    links and patches the Makefile for your absolute directory path.
    You can run mklinks.sh at any time without doing any harm to the sources.
5.) Type 'gnumake' (GNU-make) in the 'vmount' directory. This takes several
    minutes.
6.) Optionally strip the programs 'vmount' and 'vumount'.


* What comes next, can I help in the development?
=================================================
There are some more filesystems in the Linux 2.0.25 kernel:
    NFS     (well, we have that already...)
    smbfs   SMB client for Windows-networks
    ncpfs   Novell Core Protocol
Smbfs would be interesting, of course, but it can't be used due to its
inode numbering scheme, which is incompatible to NFS. I have written a
different utility that implements an SMB client via NFS: it's called
"rumba". It is available at the same sites as vmount, although in different
directories.

* What about the copyright?
===========================
vmount comes with the GNU GPL (GNU General Public License), as it has to,
because it uses code from Linux, which is GPL'd.

And of course, there is ABSOLUTELY NO WARRANTY etc....


* Who's the Author?
===================
That's me: Christian Starkjohann <cs@hal.kph.tuwien.ac.at>

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.