Rational R1000/s400 Disk Images

Disk Images from Rational R1000/s400 computers, running one particular version of the Environment.

Usage

from autoarchaeologist.vendor.rational import r1k_disk
…
self.add_examiner(*r1k_disk.ALL)

Notes

Reverse engineered from effectively one sample.

Test input

  • RATIONAL_1000/DISK

Documentation

There are clues about the overall layout in the documentation for the RECOVERY.M200 program, which can be found at:

The same text, also documenting a new menu item 5 is in

Actual Ada specifications for /a/ version of the disk layout can be found in:

But it does not entirely match the disk images from the running system.

Structure of the disklayout

The code in the AutoArchaeologist is the de-factor documentation for the disk-layout, so the internals of this examiner is documented here for reference:

Rational R1000/s400 Disk Volumes

A Rational Enviroment consists of between one and four physical disks, each of which contains a self-consistent “filesystem”.

The disks are formatted with 1024 byte sectors, and access is generally by LBA, but left-over code from the days of UNIBUS disks translates LBA to CHS, sends it to the IOC which translates it back to LBA for the SCSI disks in the s400.

LBA #0 (may) contain bootcode.

LBA #1 (may) contain 9 DFS directory entries for the operator boot-menu.

LBA #2 is the “Shared Volume Label” which we call a SuperBlock.

Rational R1000/s4000 Superblock

Aka: “The Shared Volume Label”

In the first part all fields are aligned to 32 bit, which indicates that the fields are shared between the R1000 and the IOC:

  • Magic number

  • Constant 0x00300000

  • The CHS geometry

  • Partition table

    • #0: The bad-sector relocation map

    • #1: The free-space map

    • #2: The (optional) DFS filesystem (optional)

    • #3: The worlds and segments of the Environment

    • #4: Test/Maintenance area or the bad-sector replacement pool.

  • 16 bit (Flags ?)

  • Volume Serial number (Serial number of the original harddisk/diskpack ?)

The next approx 200 bits are terra inkognita, and some of them may be shared between the IOC and R1000.

The next and subsequent identified fields are not byte aligned, which indicates that they are R1000 only, and this is where things get complicated and interesting.

Not all fields have been figured out, but amongst other things this part of the Superblock contains:

  • Disk volume name (»volume 1«, »volume 2«)

  • Disk volume number

  • First and last LBA of partition #3

  • (Disk-)Pointer to the freelist information

  • Four other (Disk-)Pointers of unknown significance (XXX ?)

  • A 49 bit Volume identifier

  • A table of up to 16 volume identifiers (only filled out on boot volume)

  • (Disk-)Pointer to the Worlds

  • (Disk-)Pointer to something else

  • Boolean flag

  • (Disk-)Pointer to the syslog structure

  • (Disk-)Pointer to the log sectors

  • Two Snapshot numbers

  • More unidentified stuff

  • The 49 bit Volume identifier of this volume

  • The 49 bit Volume identifier of the boot volume

  • Possibly a magic number

The syslog and log areas seems to be shared between IOC and R1000, most likely one in each direction, so the R1000 can report what the IOC might be unhappy about while the system is running, and the IOC can report what the R1000 might have complained about before keeling over.

Bad sector tables