2007年12月25日

UDF1.02 4-2 File Set Descriptor

File Set Descriptor (ファイル集合記述子) はファイルセットの情報を記述します。 また、ルートディレクトリの場所を記しており、 ディレクトリ構造や個々のファイルを読み取る際の起点になります。

File Set Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=256
16〜2712struct timestampRecording Date and Time記録日時
28〜292unsigned shortInterchange Level=3 交換レベル
30〜312unsigned shortMaximum Interchange Level=3 最大交換レベル
32〜354unsigned longCharacter Set List=1 文字集合リスト
36〜394unsigned longMaximum Character Set List=1 最大文字集合リスト
40〜434unsigned longFile Set Number(=0) ファイルセット番号
44〜474unsigned longFile Set Descriptor Number(=0) FSD番号
48〜11164charspecLogical Volume Identifier Character Set={0,"OSTA Compressed Unicode"}
112〜239128char[128]Logical Volume Identifier論理ボリュームラベル (dstring)
240〜30364charspecFile Set Character Set={0,"OSTA Compressed Unicode"}
304〜33532char[32]File Set Identifierファイルセット名 (ボリュームラベルに同じ) (dstring)
336〜36732char[32]Copyright File Identifier著作権ファイル識別子 (dstring)
368〜39932char[32]Abstract File Identifier抄録ファイル識別子 (dstring)
400〜41516struct long_adRoot Directory ICBルートディレクトリ ICB の場所
416〜44732struct regidDomain Identifier={0, "*OSTA UDF Compliant", 2,1,3}
448〜46316struct long_adNext Extent=0 次の FSD の位置
464〜47916struct long_adSystem Stream Directory ICB=0 使用しない
480〜51132-Reserved=0


Interchange Level と Maximum Interchange Level はファイル文字数などの制限を定めます。 UDF1.02 では、どちらも 3 (制限なし) です。

UDF1.02 では、使用する文字セットは決められており、 Character Set List と Maximum Character Set List には 1 を入れます。

ファイルセットが一つの場合、 File Set Number には 0 を入れます。
FSD が一つの場合、 File Set Descriptor Number には 0 を入れます。

File Set Character Set で指定される文字セットは、 ファイルセット名だけでなくファイルセットが持つファイルやディレクトリの名前にも適用されます。

Copyright File Identifier と Abstract File Identifier を使わない場合は 0 で埋めます。

次の FSD が無ければ Next Extent は 0 です。

posted by 七癖 at 09:44| Comment(8) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月21日

UDF1.02 4-1 ファイル集合記述子列

一つの論理ボリュームに一つの File Set Descriptor Sequence (ファイル集合記述子列) があります。

ファイル集合記述子列は
一つ以上の File Set Descriptor (FSD) と終端記述子 (TD) で構成されます。

ファイル集合記述子列の場所は、ボリューム記述子列内の Logical Volume Descriptor に記述されています。

列は複数の FSD を持っていてもかまいません。その場合 FSD にはそれぞれ異なるファイルセット番号と FSD 番号が記されています。ですが、実際には FSD は一つあれば十分であり、UDF1.02 では基本的に一つです。よって、多くの DVD-ROM では、ファイル集合記述子列の長さは FSD + TD の 2 論理ブロックです。
posted by 七癖 at 09:09| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月17日

UDF1.02 3-11 Logical Volume Integrity Descriptor

Logical Volume Integrity Descriptor (論理ボリューム保全記述子) は、 論理ボリュームの情報の内、よく変更される値を保持します。

Logical Volume Integrity format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=9
16〜2712struct timestampRecording Date and Time記録日時
28〜314unsigned longIntegrity Type=1
32〜398struct extent_adNext Integrity Extent=0 (指定せず)
40〜7132unsigned char[32]Logical Volume Contents Use次の一意ID
72〜754unsigned longNumber of Partitions (=N_P)(=1) パーティション数
76〜794unsigned longLength of Implementation Use (=L_IU)=46
80〜80 + N_P×4 -1N_P×4unsigned long[N_P]Free Space Table(=0) 各パーティションの空き領域の大きさ [LBs]
80 + N_P×4〜80 + N_P×8 -1N_P×4unsigned long[N_P]Size Table各パーティションが使用している論理ブロックの数 [LBs]
80 + N_P×8〜80 + N_P×8 + L_IU -1L_IUunsigned char[L_IU]Implementation Use下記参照

Integrity Type は、0 がオープン、1 がクローズ、2〜255 は予約です。

Next Integrity Extent は、次の論理ボリューム保全列の位置を示します。無ければ 0 です。

Logical Volume Contents Use には、次の Logical Volume Header Descriptor (論理ボリュームヘッダ記述子) を記述します。

Logical Volume Header Descriptor format
RBP大きさ名称内容
0〜78unsigned __int64Unique Id一意ID
8〜3124unsigned char[24]Reserved=0

Unique Id は、全てのファイルとディレクトリに割り振られた番号です。 ルートディレクトリは 0、1〜15 は Macintosh 用に予約で、 他のファイルとディレクトリは、16 以上のそれぞれ別の番号をもちます。 普通は、記録順に番号を振ってゆきます。 そして、この LVID の UniqueID には、どのファイルやディレクトリよりも大きな値、 もし、次にファイルを加えるとすれば、それに割り振る値を入れます。 (なお、Macintosh のことを考え 231 - 1 未満の値にしてください。)

Free Space Table と Size Table の値が 0xFFFFFFFF ならば、サイズは未定義ですが、 これだと OS が困るのでちゃんとした値を入れましょう。

UDF1.02 では、Implementation Use は次のとおりです。

Implementation Use format
RBP大きさ名称内容
0〜3132entity_idImplementation ID*開発者名
32〜354unsigned longNumber of Filesファイル総数
36〜394unsigned longNumber of Directoriesディレクトリ総数
(ルートディレクトリを含む)
40〜412unsigned shortMinimum UDF Read Revision=0x0102 読出し最小版数
42〜432unsigned shortMinimum UDF Write Revision=0x0102 書込み最小版数
44〜452unsigned shortMaximum UDF Write Revision=0x0102 書込み最大版数

それぞれ、論理ボリューム内の数です。

今説明しているのは UDF 1.02 なので、各版数は 0x0102 です。 他のバージョンの場合は、対応するマニュアルを調べてください。
(確か UDF 1.50 の場合は、0x0150 だったと思います。)

posted by 七癖 at 11:07| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月15日

UDF1.02 3-10 論理ボリューム保全列

一つの論理ボリュームは、一つの論理ボリューム保全列(Logical Volume Integrity Sequence)を持ちます。
論理ボリューム保全列は、
一つ以上の Logical Volume Integrity Descriptor (LVID) と終端記述子 (TD) で構成されます。

列は複数の LVID を持っていてもかまいませんが、
普通の DVD-ROM では LVID は一つで、
ファイル集合記述子列の長さは LVID + TD の 2 論理セクタです。

論理ボリューム保全列の場所は、
ボリューム記述子列内の Logical Volume Descriptor に記述されています。

続く保全列の位置は、前の保全列に書かれています。(つまり、場所がばらばらにあっても辿れます。)

以下宣伝
posted by 七癖 at 09:06| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月11日

UDF1.02 3-9 Volume Descriptor Pointer

Volume Descriptor Pointer (ボリューム記述子ポインタ) (VDP) は、 TD のかわりにボリューム記述子列の最後に置かれ、 次のボリューム記述子列の場所を示します。

Volume Descriptor Pointer format
位置大きさ名称内容
0〜1516struct tagDescriptor TagTagID=3
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜278struct extent_adNext Volume Descriptor Sequence Extent次のボリューム記述子列の場所
28〜511484-Reserved=0


最後のボリューム記述子列ならば、Next Volume Descriptor Sequence Extent は 0 です。

VDP は、 ボリューム記述子列が用意された論理セクタのブロックに収まらないとき、 ランダム書き込みが長じてボリュームがぐちゃぐちゃになった時の救済用に用意されていると思います。 だから、あえて使う必要はありませんし、 使わない方が読み取りが速くなります。

posted by 七癖 at 10:56| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月09日

UDF1.02 3-8 Unallocated Space Descriptor

Unallocated Space Descriptor (未割付け空間記述子) は、空き領域の範囲を記述します。 ボリューム空間に空きが無い場合でも、USD は記録されます。

Unallocated Space Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=7
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜234unsigned longNumber of Allocation Descriptors (=N_AD)=0 (空きが無い場合)
24〜24+N_AD×8-1N_AD×8struct extent_ad[N_AD]Allocation Descriptors(=0)


DVD-ROM のように書き込めない=空きが無い場合、Number of Allocation Descriptors に 0 をセットします。 Allocation Descriptors は記録しません。

posted by 七癖 at 10:03| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月05日

UDF1.02 3-7 Logical Volume Descriptor

一つの論理ボリュームの情報は、一つの Logical Volume Descriptor (論理ボリューム記述子) (LVD) に記述されます。 LVD には、 論理ボリュームに含まれる全てのパーティションの番号と、論理ブロックの大きさ、 論理ボリューム保全列の位置と大きさが書かれています。
ボリュームセットが持つ全ての論理ボリュームの LVD は、 一番大きなボリューム番号のボリュームに記録されます。

Logical Volume Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=6
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜8364charspecDescriptor Character Set={0,"OSTA Compressed Unicode"}
84〜211128char[128]Logical Volume Identifier論理ボリュームラベル (dstring)
212〜2154unsigned longLogical Block Size論理ブロック長, 大抵=2048
216〜24732struct regidDomain Identifier={0, "*OSTA UDF Compliant", 2,1,3}
248〜26316long_adLogical Volume Contents Use(={2,{0,0},0}) ファイル集合記述子列の場所
264〜2674unsigned longMap Table Length (=MT_L)パーティションマップ長[bytes] =6
268〜2714unsigned longNumber of Partition Maps (=N_PM)パーティションマップ数 =1
272〜30332struct regidImplementation Identifier*開発者名
304〜431128unsigned char[128]Implementation Use(=0) 処理方法用
432〜4398struct extent_adIntegrity Sequence Extent論理ボリューム保全列の位置と大きさ
440〜440+MT_L - 1MT_Lunsigned char[MT_L]Partition Mapsパーティションマップ


Logical Volume Contents Use にはその論理ボリュームにあるファイル集合記述子列の 場所を入れます。 多くの DVD-ROM では、ファイル集合記述子列はパーティション 0 の先頭にあるので位置は {0,0} 、 中には FSD 一つしかないので、大きさは FSD + TD の 2 です。 (DVD-RAM では使用/空き領域情報である空間ビットマップをパーティションの先頭に持ってくることが多いため、 ファイル集合記述子列の位置はその後になります。)

Integrity Sequence Extent には論理ボリューム保全記述子列の場所を入れます。 UDF1.02 によると上書き、追記媒体のために大きさを 8k バイト以上用意すべきと書いてありますが、 多くの DVD-ROM では LVID + TD の 2 * 2048 バイトになっています。

partition map (パーティションマップ)には1種と2種がありますが、UDF1.02 では1種を使います。

Type 1 Partition Map format
RBP大きさ名称UDF 1.02 の場合
01unsigned charPartition Map Type=1
11unsigned charPartition Map Length=6
2〜32unsigned shortVolume Sequence Number(=1) パーティションが所属するボリュームの番号
4〜52unsigned shortPartition Number(=0) パーティション番号


一応、2種パーティションマップも載せておきます。

Type 2 Partition Map format
RBP大きさ名称内容
01unsigned charPartition Map Type=2
11unsigned charPartition Map Length=64
2〜6362unsigned char[62]Partition Identifier当事者間の同意による


パーティションが一つしかなければ、partition map は一つのみです。

posted by 七癖 at 10:26| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月03日

UDF1.02 3-6 Partition Descriptor

Partition Descriptor (区画記述子) (PD) には、そのボリュームが持つ 一つのパーティションの情報が書かれています。

Partition Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=5
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜212unsigned shortPartition Flags(=1) 区画フラグ
22〜232unsigned shortPartition Number(=0) パーティション番号
24〜5532struct regidPartition Contents="+NSR02"or"+NSR03"
56〜183128unsigned char[128]Partition Contents Use(=0) Partition Header Descriptor を記入する
184〜1874unsigned longAccess Type(=1) アクセス種別
188〜1914unsigned longPartition Starting Locationパーティションの先頭位置 [LSN]
192〜1954unsigned longPartition Lengthパーティションの大きさ [LSs]
196〜22732struct regidImplementation Identifier*開発者名
228〜355128unsigned char[128]Implementation Use処理方法用 使わなければ =0
356〜511156-Reserved=0


Partition Flags は、次のとおりです。

Partition characteristics
Bit内容
00=このパーティションにボリュームスペースが割り振られていない
1=このパーティションにボリュームスペースが割り振られている
1〜15予約


Access Type は、次のとおりです。

Access interpretation
Access Type内容
0パーティションは未定義
1読み取り専用
21回だけ書き込み可能
3書き込み可能
4上書き可能
5予約


Partition Contents Use には、次の Partition Header Descriptor が入ります。 これは、パーティションの空き領域を記録してある場所を記述します。

Partition Header Descriptor format
BP大きさ名称内容
0〜78struct short_adUnallocated Space Table(=0) 未割付け空間表の場所
8〜158struct short_adUnallocated Space Bitmap(=0) 未割付け空間ビットマップの場所
16〜238struct short_adPartition Integrity Table=0 パーティション保全テーブル表の場所
24〜318struct short_adFreed Space Table(=0) 未初期化空間表の場所
32〜398struct short_adFreed Space Bitmap(=0) 未初期化空間ビットマップの場所
40〜12788unsigned char[88]Reserved=0


UDF1.02 では、Partition Integrity Table は使用しません。
Space Table が指す記述子は USE であり、 空き位置が配置記述子列 (場所の配列) で記述されています。
Space Bitmap が指す記述子は SBD であり、 論理ブロックをビットで表してその ON/OFF で空きか使用中かを記述します。
UDF1.02 では、空間表と空間ビットマップのどちらか片方のみ使用します。同時に使用しません。 UDF1.50 では、これに加えて Freed の側を使用しないらしいです。

使用しない空間表や空間ビットマップの場所は 0 に設定してください。 空きがない DVD-ROM では、全て 0 になっています。

posted by 七癖 at 10:30| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月01日

UDF1.02 3-5 Implementation Use Volume Descriptor

Implementation Use Volume Descriptor (処理方法用ボリューム記述子)(IUVD) は、処理方法に関する情報を提供します。

Implementation Use Volume Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=4
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜5132struct regidImplementation Identifier={0,"*UDF LV Info", 1,2}
52〜511460-Implementation Use処理方法用


IUVD は自由度が高く、必要な情報の数だけ用意することが出来ますが、 UDF1.02 では一種類の情報のみに使います。
それは、論理ボリュームの情報です。
そのために、Implementation Identifier の ID には "*UDF LV Info" と記入し、 Implementation Use には以下の Logical Volume Information を記述します。

Logical Volume Information format
RBP大きさ名称内容
0〜6364charspecLVI Charset={0,"OSTA Compressed Unicode"}
64〜191128char[128]Logical Volume Identifier論理ボリューム名 (dstring)
192〜22736char[36]LV Info 1(=0) ディスク情報1 (dstring)
228〜26336char[36]LV Info 2(=0) ディスク情報2 (dstring)
264〜29936char[36]LV Info 3(=0) ディスク情報3 (dstring)
300〜33132struct regidImplemention ID*開発者名
332〜459128unsigned char[128]Implementation Use処理方法用

LV Info 1〜3 には所有者名、組織名、連絡先などそのディスク特有の情報を 書き込むことが出来ます。 あえて使う必要が無ければ、0 でかまいません。

posted by 七癖 at 09:28| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする