SINTRAN III on-disk filesystem format (Phases 1-4)¶
Byte-exact layouts of the four on-disk structures that make up a SINTRAN III
directory device, each grounded in real disk bytes (SMD0.IMG,
volume PACK-ONE) and cross-checked against the NDFS C reader, the ndtool
inspector, and the carved 006-S3FS filesystem code. See the
Filesystem foundation for the full source map and phased plan.
Evidence tags used throughout: VERIFIED (real-disk bytes and/or the producing code), INFERRED (NDFS/doc only), OPEN (unresolved, with the source that would settle it). On-disk multi-byte values are big-endian words.
The four structures¶
| # | Document | Structure | Size | Anchor |
|---|---|---|---|---|
| 1 | directory-label.md | Master block / directory label | 32 B | page 0, byte 2016 |
| 1b | extended-info-block.md | Extended-info block (checksum, flag word, system number, capacity) | 16 B | page 0, byte 2000 |
| 2 | object-entry.md | Object (file) entry | 64 B | object file (indexed) |
| 3 | user-entry.md | User (account) entry | 64 B | user file (indexed) |
| 4 | page-bitmap.md | Page allocation bitmap (bit file) | 1 bit/page | bit file (contiguous) |
Page 0 also carries the raw boot code ahead of the master block:
boot-sector.md - the page-0 map and the three ND-100
boot-code formats (BPUN, FLOMON, raw binary bootstrap), with the real SMD0.IMG
boot sector decoded as evidence and the PIOF/IOF + IOX/IOXT detection
logic. VERIFIED: SMD0.IMG / PACK-ONE is a raw SMD/ECC bootstrap
(corrects the earlier "boot format None" reading).
flowchart TB
MB["Master block - page 0 byte 2016<br/>name + 3 block pointers"]
MB -->|object_file_ptr - indexed| OF["Object file<br/>64-byte object entries<br/>32 per page"]
MB -->|user_file_ptr - indexed| UF["User file<br/>64-byte user entries<br/>32 per page"]
MB -->|bit_file_ptr - contiguous| BF["Bit file<br/>1 bit / page, 0=free 1=used"]
OF -->|user index byte 34| UF
OF -->|file pointer bytes 60-63| DATA["File data pages"]
BF -.tracks allocation of.-> DATA
classDef orange fill:#FFF3E0,stroke:#E65100,color:#E65100;
classDef green fill:#E8F5E9,stroke:#2E7D32,color:#2E7D32;
classDef purple fill:#F3E5F5,stroke:#7B1FA2,color:#7B1FA2;
classDef teal fill:#E0F7FA,stroke:#00838F,color:#00838F;
classDef blue fill:#E3F2FD,stroke:#0D47A1,color:#0D47A1;
class MB orange
class OF green
class UF purple
class BF teal
class DATA blue
Block-pointer encoding (shared by all four)¶
Every 4-byte block pointer is a big-endian value: top 2 bits = type, bottom
30 bits = block/page id. Types: 0 contiguous, 1 indexed, 2 sub-indexed,
3 reserved. Full derivation in
directory-label.md 3.2.
VERIFIED.
Verification status (real disk PACK-ONE)¶
| Structure | Byte decode | Cross-reader (ndtool) |
Producing code (006-S3FS) |
|---|---|---|---|
| Master block | VERIFIED (2 disks) | -i volume/name match |
GMAIN/WDIRE/CRDIR |
| Object entry | VERIFIED (3 entries) | --stat field-for-field |
ROBJE/COBJE/WOBJE |
| User entry | VERIFIED (3 entries, all 10 users) | -u / --friends match |
RUSER/WUSER/GUSEN |
| Page bitmap | VERIFIED (popcount = ndtool used/free) |
-i 14277/24123 match |
GPAGE/ALPAG/RLPAG |
Real disk vs NDFS - one discrepancy: on the SMD system disk the label points
the bit file at block 18468, but the NDFS image_creator SMD template
hard-codes 18472. The on-disk pointer is authoritative (the reader follows
it); only the NDFS creator template differs, because PACK-ONE was written by
genuine SINTRAN CRDIR. Details in
directory-label.md 7.
Open questions carried forward¶
- Master block:
unreserved_pagessemantics vs the bitmap free count; relationship of the 32-byte label to the 24-word directory entry MON 244 returns. - Object entry: extra header-byte flag bits (SEGFIL0 =
0x90); byte 33;next_version/prev_versionchaining. - User entry: bytes 38-39 and 42-47 (byte 47
mxobl/acobl); password hashing. - Bitmap: allocation search direction (upward vs highest-range) and the
0-6 reservation in the carved
GPAGE/ALPAG(OPEN-Q3).
See the foundation README section 6 for the full list. Allocation-code and CRDIR analysis (Phases 5-7) live under ../code-logic/.
The extended-info block's checksum, flag word, system number and pages-available
are now kernel-proven (WXDIR/CHDSI) - see
extended-info-block.md and the report validation in
../NDFS-VALIDATION.md.