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:
R1000 Command Reference (pdf page 51)
The same text, also documenting a new menu item 5 is in
RECOVERY.HLP in the DFS filesystem.
Actual Ada specifications for /a/ version of the disk layout can be found in:
Epsilon - Principles of Operation II - Ada specs (APIs) (pdf page 20)
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.