ISO 9660 Edit

目次 Edit

概要 Edit

ISO 9660は、ISOで標準化された、CD-ROMのファイルシステムです。
さまざまなOSに対応するため、かなり制限があり、文字コードまで決まっています。

ISO 9660ファイルシステムのCDイメージを作成するために、mkisofsというコマンドがlinuxにあります。
Manpage of MKISOFS

エンディアン Edit

ISO 9660は、エンディアンが違っても読み取れるように、工夫されています。

  • L : リトルエンディアン
  • B : ビッグエンディアン

L,B Edit

リトルエンディアンにビッグエンディアンが続く構成。
これは、両エンディアンに対応するため。

0x050-0x057(8Byte)ボリューム空間の大きさボリュームの論理ブロック数(L,B)

の場合、

Byte01234567
ボリューム空間の大きさLB

L/B Edit

リトルエンディアンかビッグエンディアンのどちらかで記述する。

d文字, a文字 Edit

d文字a文字
HexCharHexCharHexCharHexCharHexCharHexCharHexCharHexChar
0x000x200x400x600x000x20SP0x400x60
0x010x210x41A0x610x010x21!0x41A0x61
0x020x220x42B0x620x020x22"0x42B0x62
0x030x230x43C0x630x030x230x43C0x63
0x040x240x44D0x640x040x240x44D0x64
0x050x250x45E0x650x050x25%0x45E0x65
0x060x260x46F0x660x060x26&0x46F0x66
0x070x270x47G0x670x070x27'0x47G0x67
0x080x280x48H0x680x080x28(0x48H0x68
0x090x290x49I0x690x090x29)0x49I0x69
0x0a0x2a0x4aJ0x6a0x0a0x2a*0x4aJ0x6a
0x0b0x2b0x4bK0x6b0x0b0x2b+0x4bK0x6b
0x0c0x2c0x4cL0x6c0x0c0x2c,0x4cL0x6c
0x0d0x2d0x4dM0x6d0x0d0x2d-0x4dM0x6d
0x0e0x2e0x4eN0x6e0x0e0x2e.0x4eN0x6e
0x0f0x2f0x4fO0x6f0x0f0x2f/0x4fO0x6f
0x100x3000x50P0x700x100x3000x50P0x70
0x110x3110x51Q0x710x110x3110x51Q0x71
0x120x3220x52R0x720x120x3220x52R0x72
0x130x3330x53S0x730x130x3330x53S0x73
0x140x3440x54T0x740x140x3440x54T0x74
0x150x3550x55U0x750x150x3550x55U0x75
0x160x3660x56V0x760x160x3660x56V0x76
0x170x3770x57W0x770x170x3770x57W0x77
0x180x3880x58X0x780x180x3880x58X0x78
0x190x3990x59Y0x790x190x3990x59Y0x79
0x1a0x3a0x5aZ0x7a0x1a0x3a:0x5aZ0x7a
0x1b0x3b0x5b0x7b0x1b0x3b;0x5b0x7b
0x1c0x3c0x5c0x7c0x1c0x3c<0x5c0x7c
0x1d0x3d0x5d0x7d0x1d0x3d=0x5d0x7d
0x1e0x3e0x5e0x7e0x1e0x3e>0x5e0x7e
0x1f0x3f0x5f_0x7f0x1f0x3f?0x5f_0x7f

ボリュームの構成 Edit

ISO 9660のボリュームは、次の要素で構成されます。

ちなみに、ボリュームとは管理の単位で、直訳すると(本の)"巻"などの意味がある。

ボリューム・ディスクリプタ群 Edit

ボリューム・ディスクリプタには、以下のものがある。

PVD : Primary Volume Descriptor, SVD : Supplementary Volume Descriptor, EVD : Enhanced Volume Descriptor Edit

PVDは必須のディスクリプタで、システムエリア(0-15セクタ)の次(16セクタ)に配置する。

ByteSize内容
0x00000x0001ボリューム記述子タイプPVD1
SVD2
EVD2
0x00010x0005規格識別子"CD001"
0x00060x0001ボリューム記述子バージョンPVD1
SVD1
EVD2
0x00070x0001未使用PVD0
フラグSVDbit0:ISO 2375登録外のエスケープシーケンスが含まれない(0)/含まれる(1)
EVD
0x00080x0020システム識別子a文字
0x00280x0020ボリューム識別子d文字
0x00480x0008未使用0
0x00500x0004*2ボリューム空間サイズボリュームの論理ブロック数(L,B)
0x00580x0020未使用PVD0
エスケープシーケンスSVDエスケープシーケンス
EVD
0x00780x0002*2ボリューム集合サイズボリューム集合サイズ(L,B)
0x007c0x0002*2ボリューム順序番号ボリューム順序番号(L,B)
0x00800x0002*2論理ブロックのサイズ論理ブロックのバイト数(通常は2,048)(L,B)
0x00840x0004*2パステーブルサイズパステーブルのバイト数(L,B)
0x008c0x0004パステーブルの位置先頭の論理ブロック番号(L)
0x00900x0004任意のパステーブルの位置先頭の論理ブロック番号(L)
0x00940x0004パステーブルの位置先頭の論理ブロック番号(B)
0x00980x0004任意のパステーブルの位置先頭の論理ブロック番号(B)
0x009c0x0022ルートディレクトリのディレクトリ・レコードディレクトリ・レコード
0x00be0x0080ボリューム集合識別子d文字
0x013e0x0080出版者識別子a文字
0x01be0x0080データ編集者識別子a文字
0x023e0x0080応用システム識別子a文字
0x02be0x0025著作権ファイル識別子d文字
0x02e30x0025抄録ファイル識別子d文字
0x03080x0025書誌ファイル識別子d文字
0x032d0x0011ボリューム作成日時日時構造体
0x033e0x0011ボリューム更新日時日時構造体
0x034f0x0011ボリューム失効日時日時構造体
0x03600x0011ボリューム発効日時日時構造体
0x03710x0002ファイル構造バージョン1
0x03730x0001予約0
0x03740x0200アプリケーション用-
0x05740x028c予約0
日時構造体 Edit
ByteSize内容
0x00000x0004西暦年d文字(1-9999)
0x00040x0002d文字(1-12)
0x00060x0002d文字(1-31)
0x00080x0002d文字(0-23)
0x000a0x0002d文字(0-59)
0x000c0x0002d文字(0-59)
0x000e0x00021/100秒d文字
0x00100x0001グリニッジ標準時からの偏差15分単位

"グリニッジ標準時からの偏差"以外は文字列で、数値ではありません。

システム識別子 (Byte:0x0008) Edit
ボリューム識別子 (Byte:0x0028) Edit

ボリュームの名前です。
DOS等ではボリュームラベルとして見えるようです。

ボリューム空間サイズ (Byte:0x0050) Edit
ボリューム集合サイズ (Byte:0x0078), ボリューム順序番号 (Byte:0x007c), ボリューム集合識別子 (Byte:0x00be) Edit

ディスクが複数枚で構成される場合に使用します。

ボリューム集合サイズ (Byte:0x0078) Edit

ディスクの枚数を指定します。
2バイト*2の(L,B)構成です。
1枚構成の場合は、01 00 00 01です。

ボリューム順序番号 (Byte:0x007c) Edit

ディスクの番号を指定します。
2バイト*2の(L,B)構成です。
1枚構成の場合は、01 00 00 01です。

ボリューム集合識別子 (Byte:0x00be) Edit

複数枚ディスクのグループに対する名前を指定します。 ボリューム識別子と同じでいいと思います。

ルートディレクトリのディレクトリ・レコード (Byte:0x009c) Edit

0x22バイト構成のディレクトリ・レコードがそのまま入ります。
ディレクトリ識別子は0x00で、システム用エリアはありません。
ディレクトリ識別子までで0x22バイトなので、パディングもありません。

VPD : Volume Partition Descriptor Edit

ByteSize内容
0x00000x0001ボリューム記述子タイプ3
0x00010x0005規格識別子"CD001"
0x00060x0001ボリューム記述子バージョン1
0x00070x0001未使用0
0x00080x0020システム識別子a文字
0x00280x0020ボリューム・パーティション識別子d文字
0x00480x0004*2ボリューム区画の位置先頭の論理ブロック番号(L,B)
0x00500x0004*2ボリューム空間の大きさボリュームの論理ブロック数(L,B)
0x00580x07a8システム用システム用

BRVD : Boot Record Volume Descriptor Edit

ByteSize内容
0x00000x0001ボリューム記述子タイプ0
0x00010x0005規格識別子"CD001"
0x00060x0001ボリューム記述子バージョン1
0x00070x0020起動システム識別子a文字
0x00270x0020起動識別子a文字
0x00470x07b9起動システム用起動システム用

VDT : Volume Descriptor Set Terminator Edit

ボリューム・ディスクリプタ群の終端を表すディスクリプタ。
無駄遣いもいいところ。。。

ByteSize内容
0x00000x0001ボリューム記述子タイプ255
0x00010x0005規格識別子"CD001"
0x00060x0001ボリューム記述子バージョン1
0x00770x07f9予約0

パステーブル Edit

パステーブルには、ボリュームが持つ全てのディレクトリの階層情報と、ディレクトリの場所が記されています。
その情報はパステーブル・レコードに記されていて、一つのパステーブル・レコードは一つのディレクトリに対応しています。

パステーブル・レコード Edit

ByteSize内容
0x00000x0001ディレクトリ識別子の長さ
0x00010x0001拡張属性レコードの長さ
0x00020x0004ディレクトリ・レコードの先頭LBA(L/B)
0x00060x0002親ディレクトリの番号(L/B)
0x0008可変ディレクトリ識別子
0x0001パディング全体を偶数にするための埋め合わせ。

ディレクトリ・レコード Edit

ディレクトリ・レコードは、そのディレクトリが持つファイルやディレクトリの情報を記したものです。
子ファイル(ディレクトリ)の情報が連続で格納されています。

ByteSize内容
0x00000x0001このディレクトリ・レコード自体の長さディレクトリ・レコードのバイト数
0x00010x0001拡張属性レコードの長さ
0x00020x0004*2ディレクトリまたはファイルの先頭位置論理ブロック番号(L,B)
0x000a0x0004*2ディレクトリまたはファイルの大きさディレクトリまたはファイルのバイト数(L,B)
0x00120x0007記録日時
0x00190x0001ファイル属性フラグファイル属性フラグ
0x001a0x0001ファイルユニットの大きさ
0x001b0x0001インタリーブ間隙の大きさ
0x001c0x0002*2ボリューム順序番号(L,B)
0x00200x0001ファイル識別子の長さ
0x0021可変ファイル/ディレクトリ識別子d文字
0x0001パディング全体を偶数にするための埋め合わせ。
可変システム用

日時構造体 Edit

ByteSize内容
0x00000x0001西暦年1900年からの年
0x00010x00011-12
0x00020x00011-31
0x00030x00010-23
0x00040x00010-59
0x00050x00010-59
0x00060x0001グリニッジ標準時からの偏差15分単位

ファイル属性フラグ Edit

bit内容
00可視
1不可視
10ファイル
1ディレクトリ
20主ファイル
1関連ファイル
30ファイルがレコード形式を持たない
1ファイルがレコード形式を持つ
40許可条件無効
1許可条件有効
5予約
6予約
70ファイルの最終ディレクトリレコードである
1ファイルの最終ディレクトリレコードでない

ファイルユニットの大きさ Edit

インタリーブ間隙の大きさ Edit

ボリューム順序番号 Edit

ファイル/ディレクトリ識別子 Edit

ファイル名・ディレクトリ名です。
d文字を使い、

ファイル名 + '.' + 拡張子 + ';' + バージョン

の形で記述します。

参考・関連 Edit


Since 2008 July. OS Project Wiki
リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS