Jego pierwsza wersja powstała w 1986 roku pod nazwą "High Sierra", a następnie została zaadaptowana przez ISO (International Organization for Standardization) jako standard nr 9660 - stąd jego nazwa. Formaty "High Sierra" i ISO 9660 różnią się nieznacznie, przy czym obecnie używany jest jedynie nowszy ISO.
Standard ISO definiuje 3 poziomy w jakich mogą być systemy plików, nakładające dodatkowe ograniczenia:
Dysk podzielony jest na sektory logiczne, o rozmiarze co najmniej
2048 bajtów i będącym potęgą dwójki (2048 wynika z rozmiaru sektora
fizycznego standardowych płyt CD-ROM). Zdefiniowany jest też równoległy
podział na bloki logiczne. Rozmiar bloku także musi być potęgą 2
nie mniejszą niż 2Kb, i, dodatkowo, nie może być on większy niż rozmiar
sektora logicznego.
Numery sektorów logicznych używane są do adresowania informacji o
samym dysku oraz katalogach, zaś bloki logiczne wyznaczają granice
plików.
Zarówno sektory jak i bloki logiczne numerowane są od 0.
W praktyce prawie zawsze oba te rozmiary są równe i wynoszą dokładnie
2048 bajtów.
Wszystkie struktury danych systemu ISO rozpoczynają się na granicy logicznego bloku (niektóre - logicznego sektora) i zajmują spójny obszar (pewną liczbę kolejnych bloków), nazywany extentem. Są trzy typy struktur:
Pierwsze 16 sektorów logicznych dysku jest zarezerwowanych dla systemu operacyjnego i ich zawartość nie jest zdefiniowana przez standard ISO.
Od 16. logicznego sektora rozpoczyna się spójny obszar tzw. deskryptorów woluminu. Każdy deskryptor zajmuje kolejny sektor logiczny i ma przypisany odpowiedni typ; system, który go nie rozpoznaje, przechodzi do następnego deskryptora. Każdy deskryptor może występować w kilku kopiach (na wypadek uszkodzenia nośnika), całą serię kończy specjalny typ (Volume Descriptor Set Terminator). W standardzie ISO zdefiniowanych jest kilka typów deskryptorów:
Położenie deskryptorów woluminu jest jedynym adresem bezwzględnym zapisanym w standardzie. Wzajemne położenie pozostałych struktur może być dowolne, o ile odpowiednie są wzajemne dowiązania między nimi.
Tablice ścieżek są ciągami rekordów zmiennej długości, opisującymi całą hierarchię katalogów na woluminie. Każdemu katalogowi odpowiada jeden rekord, zawierający:
Rekordy są posortowane ze względu na poziom zagłębienia, numer kolejny nadkatalogu i nazwę. Ponieważ główny katalog jest jedynym o poziomie zagłębienia 1, zajmuje on zawsze pierwszy wpis w tablicy.
Takie ułożenie pozwala odnaleźć katalog nadrzędny każdego pliku używając tylko jednego przestawienia głowicy (szczególnie powolnego w czytnikach CD) - wystarczy sekwencyjnie przeczytać tablicę ścieżek, która jest stosunkowo niewielka, wyszukując kolejnych fragmentów pełnej ścieżki pliku.
Tablica ścieżek zawsze istnieje w 2 wersjach: LSB i MSB, a każdy z
tych typów może dodatkowo mieć kopię. Zapisywanie informacji w obu
formatach w jednej tablicy byłoby niepraktyczne, bo zwiększyłoby jej
rozmiar i sekwencyjne przeglądanie trwałoby dłużej. Z tego samego
względu rekordy w tablicach ścieżek mogą przekraczać granicę bloków
(nie są wyrównywane, w przeciwieństwie do formatu w katalogach).
Z kolei istnienie drugiej kopii tablicy, poza zwiększeniem
bezpieczeństwa, pozwala zmniejszyć odległość o jaką musi zostać
przesunięta głowica podczas wyszukiwania nowego pliku.
Katalogi są także ciągami rekordów zmiennej długości, jednak zawierają także informacje o plikach. Każdy katalog zaczyna się od granicy logicznego sektora, a poszczególne rekordy nie mogą przekraczać granicy bloku (puste miejsce zostaje wypełnione zerami).
Kolejność wpisów w katalogu wyznacza porządek leksykograficzny. Ponieważ nazwą katalogu bieżącego (odpowiednik ".") jest znak o kodzie 0, a katalogu nadrzędnego ("..") kod 1, to są to dwa pierwsze rekordy w każdym katalogu
Każdy rekord zawiera następujące informacje:
Identyfikator pliku jest w formacie: nazwa.rozszerzenie;wersja. Większość implementacji usuwa ten ostatni fragment.
Pliki opisane jednym wpisem katalogu mogą zajmować tylko jeden spójny fragment dysku. Aby plik mógł składać się z kilku extentów, musi pojawić się w katalogu kilkukrotnie (z powodu posortowania będą to sąsiednie rekordy), a także mieć ustawioną odpowiednią flagę (Multi-Extent). Jest to opcja użyteczna przy plikach nagrywanych w kilku sesjach.
Z plikami mogą być związane rekordy rozszerzonych atrybutów - zajmują one wtedy podaną tu liczbę początkowych bloków logicznych pliku (rozszerzonych atrybutów nie mogą mieć katalogi). Używają ich głównie systemy Apple.
Możliwe jest zapisanie plików (ale nie katalogów) w trybie Interleave. Służy on do takiego zapisywania dwóch plików, by czytane naraz (sekwencyjnie) nie powodowały przemieszczania głowicy. Dane tych plików zostają ze sobą przeplecone, np:
Blok 1 |
Blok 2 |
Blok 3 |
Blok 1 |
Blok 2 |
Blok 4 |
Blok 5 |
Blok 6 |
Blok 3 |
Blok 3 |
System plików ISO9660 jest na tyle elastyczny, że dał się dostosować do dysków CD-R nagrywanych w kilku sesjach. Stworzenie nowej sesji polega na dograniu pewnych plików do istniejącego woluminu.
Z punktu widzenia systemu plików, podział na sesje jest przezroczysty. Dysk widziany jest jako spójny, jednolity ciąg bloków o kolejnych numerach, niezależnych od rzeczywistych granic ścieżek i sesji. Przykładowo:
Jedyną cześcią systemu ISO o sztywno zdefiniowanym położeniu są deskryptory woluminu. Położenie pozostałych struktur określone jest jedynie przez wzajemne dowiązania.
Jednak deskryptory zostały już zapisane w sektorze 16 podczas tworzenia pierwszej sesji, i nie da się ich zmienić. Aby rozwiązać ten problem, zmieniono sposób odnajdowania deskryptorów: jako aktualne traktowane są deskryptory zapisane od 16. sektora ostatniej stworzonej sesji (w szczególności jedynej, gdy dysk jest jednosesyjny). Poprzednie struktury nadal są na dysku, ale w niczym nie przeszkadzają.
W każdej nowej sesji zapisywane są:
Z uwagi na wzajemne dowiązania nad- i podkatalogów, trzeba skopiować całą ich
hierarchię do nowej sesji (ze zmodyfikowanymi wskaźnikami). W przypadku płyt
CD nie jest to duży problem, bo dopisanie nowej sesji wiąże się z dużo
większymi stratami.
Z poprzednimi sesjami współdzielone są jedynie niezmienione pliki.