ISO9660

Aus Lowlevel
Wechseln zu: Navigation, Suche

iso9660 ist ein Dateisystem, das extra zur Benutzung auf CDROMs entworfen wurde. Es ist ähnlich wie FAT aufgebaut, nur werden Dateien weder fragmentiert noch wird das Dateisystem mehr als einmal beschrieben.

Dateien

Die Form und Art der Dateien ähnelt sehr derer von FAT. Dateinamen sind auf 8.3 Zeichen (8 Zeichen Name, 1 Punkt und 3 Zeichen Erweiterung) beschränkt. Außerdem dürfen Dateinamen nur aus Großbuchstaben, Ziffern oder dem Unterstrich gebildet werden. Es gibt maximal 8 Ebenen an Verzeichnissen.

BothEndian

Viele Multibytewerte werden bei iso9660 also BothEndian gespeichert. D. h. erst kommt der Wert in LittleEndian, dann in BigEndian. Multibytewerte werden in diesem Artikel wie folgt bezeichnet:

  • Little Endian (LE)
  • Big Endian (BE)
  • Both Endian (XE)

Zu beachten ist natürlich, dass z. B. ein 4 Byte großer BothEndian-Wert nur ein Word ist.

Allgemeiner Aufbau

Die ersten 16 Sektoren sind systemspezifisch, danach folgen in einigen Sektoren die sogenannten Volume-Deskriptoren. Ein Sektor hat normalerweise eine Größe von 2048 Bytes, kann aber auch eine andere Größe haben. Nach den Volume-Deskriptoren liegen Pathtables und Datensektoren (Sektoren die Datei oder Verzeichnis-Informationen enthalten).

Volume-Deskriptoren

Es gibt 2 wichtige Typen an Volume Deskriptoren:

  • Primäre Volume-Deskriptoren: Enthalten wichtige Informationen über das Dateisystem
  • Terminierender Volume-Deskriptor: Zeigt das Ende der Volume-Deskriptoren an.

Ein Volume-Deskriptor füllt dabei einen ganzen Sektor.

Volume-Deskriptoren füllen immer einen ganzen Sektor aus und fangen mit dem Typ und der Signatur an:

Offset Größe Beschreibung
0x00 1 Typ
0x01 5 Signatur
0x06 1 Version

Danach folgen Typabhängige Daten.

Primärer Volume-Deskriptor

Offset Größe Beschreibung
0x00 1 Typ
0x01 5 Signatur
0x06 1 Version
0x07 1 Null
0x08 32 System-Identifizierer*
0x28 32 Volume-Identifizierer*
0x48 8 Null
0x50 8 Number of sectors (XE)
0x58 32 Null
0x78 4 Setgröße (XE)
0x7C 4 Sequenznummer (XE)
0x80 4 Sektorgröße (XE)
0x84 8 Pathtablegröße (XE)
0x8C 4 Sektor der 1. Pathtable (LE)
0x90 4 Sektor der 2. Pathtable (LE)
0x94 4 Sektor der 1. Pathtable (BE)
0x98 4 Sektor der 2. Pathtable (BE)
0x9C 34 Verzeichniseintrag des Rootverzeichnis
0xBE 128 Volume-Set-Identifizierer
0x13E 128 Hersteller-Identifizierer
0x1BE 128 Data-Preparer-Identifizierer
0x23E 128 Application-Identifizierer
0x2BE 37 Copyright-Identifizierer
0x2E3 37 Abstract-File-Identifizierer
0x308 37 Bibliographical-File-Identifizierer
0x32D 17 Erstellungsdatum
0x33E 17 Modifikationsdatum
0x34F 17 Ablaufdatum
0x360 17 Effektivdatum
0x371 1 One (1)
0x372 1 Zero
0x373 512 Reserviert für Application-Benutzung
0x573 653 Zero
* Diese Namen werden mit Leerzeichen (0x20) aufgefüllt um alle 32 Byte zu füllen

Terminierender Volume-Deskriptor

Offset Größe Beschreibung
0x00 1 Typ
0x01 6 Signature

Dieser Volume-Deskriptor enthält keine Informationen. Er ist nur zum Anzeigen des Ende der Volume-Deskriptoren da.

Verzeichniseintrag

Ein Verzeichniseintrag enthält Metainformationen zu den Dateien bzw. Verzeichnissen auf der CD. Der Root-Verzeichniseintrag befindet sich im primären Volume-Deskriptor. Jedes Verzeichnis (somit auch das Rootverzeichnis) enthält eine Liste an Verzeichniseinträgen im Datenbereich.

Offset Größe Beschreibung
0x00 1 Größe des gesamten Verzeichniseintrags
0x01 1 Anzahl an Sektoren im erweiterten Attributeintrag
0x02 8 Erster Sektor des Datenbereichs (XE)
0x0A 8 Größe des Datenbereichs (XE)
0x13 1 Erstellungsjahr (seit 1900)
0x14 1 Erstellingsmonat (1=Januar, 2=Februar,...)
0x15 1 Erstellungstag (Tag des Monats)
0x16 1 Erstellungsstunde
0x17 1 Erstellungsminute
0x18 1 Erstellungssekunde
0x19 1 GMT Verschiebung (in 15min-Intervallen)
0x1A 1 Flags
0x1B 1 Einheitengröße für Interleaved-Dateien
0x1C 1 Abstand zwischen Blöcken von Interleaved-Dateien
0x1D 4 Volume-Sequenz-Nummer (XE)
0x22 1 Länge des Identifizierers
0x23 X Identifizierer
0x23+X (1) Padding-Byte. Füllt so, dass die System Use Area mit einem geraden Offset anfängt.
0x23+X+Y Rest Für Erweiterungen (System Use Area)

Rockridge

Rockridge ist eine Erweiterung von ISO9660 für POSIX-Systeme. Rockridge erweitert dabei ISO9660 um:

  • lange Dateinamen
  • Zugriffsrechte
  • Gerätedateien
  • Symbolische Links
  • Timestamps
  • weiteres

Rockridge teilt sich die System Use Area (Ab jetzt SUA genannt) in jeden Verzeichniseintrags nach den SUSP-Standard ein. Dabei wird die SUA in Einträge gegliedert, die hintereinander liegen. Jeder Eintrag beginnt mit einem Kopf, mit dem er eindeutig identifizierbar ist.

Kopf eines Eintrags

Offset Größe Beschreibung
0x00 2 Signatur
0x02 1 Größe des Eintrags
0x03 1 Version (1)

Die Signatur entspricht der Abkürzung (z.B "PX" entspricht 'P'|('X'<<8)).

SP-Eintrag

Der SP-Eintrag sollte nach dem SUSP-Standart eigentlich der erste Eintrag sein. Er zeigt an, dass diese SUA SUSP verwendet. Auf meinen ISOs hab ich bis jetzt nur RR-Einträge am Anfang der SUA gefunden. Wegen diesen Umstimmigkeiten wird hier nicht weiter auf den Inhalt dieser Einträge eingegangen. Sie können außerdem problemlos übersprungen werden.

ST-Eintrag

Der ST-Eintrag terminiert die Liste der Einträge in einer SUA. Er sollte immer vorhanden sein, außer wenn nur noch 4 oder weniger Bytes im SUA verbleiben. Dieser Eintrag hat keinen speziellen Inhalt.

PX-Eintrag

Der PX-Eintrag enthält Informationen zu den Zugriffsrechten und weitere Daten.

Offset Größe Beschreibung
0x00 2 Signatur
0x02 1 Größe des Eintrags
0x03 1 Version (1)
0x04 8 Mode (XE)
0x0C 8 Number of Links (XE)
0x14 8 UID (XE)
0x1C 8 GID (XE)
0x24 8 Serielle Nummer (XE)

Diese Felder stimmen mit denen aus struct stat überein.

PN-Eintrag

SL-Eintrag

NM-Eintrag

TF-Eintrag

Links