ISO9660
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.
Inhaltsverzeichnis
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.