This is version 1.0.0 of my implementation of the OpenVMS ODS-5 file system
for Linux. It can read OpenVMS On Disk Structures (ODS) version 2 and 5.
Here the Linux file system is named 'ods5', references to the OpenVMS file systems
are 'ODS', 'ODS-2' or 'ODS-5'. The ODS file system is also known as 'Files 11'.
The Linux ods5 file system is read-only and there's no plan to change that.
The major work for version 1.0.0 was to fix a few bugs and to support UTF-8
filenames (and the usual adjustments to current kernels).
The Linux implementation of the file system is based on the description in
Kirby McCoy (1990), VMS File System Internals, Digital Press, ISBN
1-55558-056-4 and on publicly available header files.
VMS files can be structured in records, VMS supplies the Record Management
Services (RMS) to allow record oriented I/O. The Linux ods5 file system
supplies a tool to display RMS file attributes, rats, and a tool to copy RMS
records, copr.
You can try out the filesystem with a Tiny Core Linux iso image. Just burn
and boot the
remastered ISO image
of Tinycore 9.0, with the ods5 kernel module.
For more info on this distribution, see
Tiny Core Linux.
Please note, by default Tiny Core Linux has no UTF-8 support. So consider using the vtf7
mount option. If you want to explore the UTF-8 support in the ods5 file
system you need to install and use a couple of Tiny Core Extensions (tce).
See the Tiny Core Linux documentation or the wiki if you don't know how to
do this, especially if you want to make these additions persistent.
Essentially you need to
- boot Tiny Core Linux with UTF-8 support: the boot option "lang="; for example
"lang=en_US.UTF-8".
- install getlocale, run sudo getlocale.sh to select your language with
UTF-8 support, for example en_US.UTF-8; this generates and loads the
extension mylocale.tce.
- install urxvt, a terminal emulator which supports UTF-8, which you have to
use instead of the default terminal emulator aterm.
- install coreutils, which adds an ls utility which supports UTF-8, which
will be automatically used instead of the default, busybox version of ls.
Current limitation: Exporting an ods5 files system with nfs is not supported.
This limitation may be lifted, sometime.
Limitation: Using an disk image file from an ods5 volume for a Linux loop
device is supported, but may not work for older kernels. The error 'ioctl:
LOOP_SET_FD: Invalid argument' indicates that there is no support in ods5
required by the loop driver in such kernels.
Limitation: In general, ods5 can be used with stackable unification file
systems such as aufs, unionfs-fuse and unionfs. However, aufs
does not forward ioctl or getxattr calls, which are used by the
ods5 tools rats and copr. That is, here you can not retrieve the RMS file
attributes, which are required to do a record based copy of the file content.
The unionfs-fuse supports forwarding of getxattr but only if it was compiled
with HAVE_SETXATTR. The unionfs seems to forward both calls, but I have no current version of it
to do some testing.
Limitation: ODS Volume sets are not supported.
Known incompatibility: On VMS, following a symbolic link depends on the
process context. The context can be case blind or case sensitive. In a case
blind context a link to "hello" can be followed to the file "HELLO.;1". A
Linux process is always case sensitive and will not follow such a link.
Please note that ODS-5 filenames are sorted in the directories. You want to
use "ls -U" to keep the ODS-5 sorting. The ODS-5 sort is caseblind in
uppercase. Therefore 'x' comes before 'Y' and 'z' before '_'.
How the Linux ods5 looks like,
an overview.
What you can
do with it.
List of ods5 specific
mount options
Comparing the OpenVMS ODS and the Linux ods5 file systems.
Design and Implementation
notes.
Any question, suggestion, bug report? Send an email to: ods5 dot info at vms2linux dot de.