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) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年11月29日

UDF1.02 3-4 Primary Volume Descriptor

Primary Volume Descriptor (基本ボリューム記述子)(PVD) は、そのボリュームの基本的な内容が記されています。

Primary Volume Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=1
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜234unsigned longPrimary Volume Descriptor NumberPVDの番号
24〜5532char[32]Volume Identifierボリュームラベル (dstring)
56〜572unsigned shortVolume Sequence Number(=1) ボリューム番号
58〜592unsigned shortMaximum Volume Sequence Number(=1) ボリュームセットのボリューム数
60〜612unsigned shortInterchange Level(=2) 交換水準
62〜632unsigned shortMaximum Interchange Level(=2) 最大交換水準
64〜674unsigned longCharacter Set List=1 文字集合リスト
68〜714unsigned longMaximum Character Set List=1 最大文字集合リスト
72〜199128char[128]Volume Set Identifierボリュームセット名 (dstring)
200〜26364charspecDescriptor Character Set={0,"OSTA Compressed Unicode"}
264〜32764charspecExplanatory Character Set={0,"OSTA Compressed Unicode"}
328〜3358struct extent_adVolume Abstract抄録
336〜3438struct extent_adVolume Copyright Notice著作権表示
344〜37532struct regidApplication Identifier応用プログラム識別子
376〜38712struct timestampRecording Date and Time記録日時
388〜41932struct regidImplementation Identifier*開発者名
420〜48364unsigned char[64]Implementation Use(=0) 処理方法用
484〜4874unsigned longPredecessor Volume Descriptor Sequence Location(=0) 障害復旧用
488〜4892unsigned shortFlags=0 フラグ
490〜51122-Reserved=0


Volume Descriptor Sequence Number は、 ボリューム記述子の通し番号で、大抵、列の先頭より 0、1、2、と記録します。

Primary Volume Descriptor Number は、PVD 毎に異なる番号が割り振られており、 一つだけ =0 の PVD があります。読み取りには、これが 0 の PVD を使用します。 これは書き換えのための仕様なので、Primary Volume Descriptor Number = 0 の PVD を 一つ用意しておけば十分です。

Interchange Level と Maximum Interchange Level は、このボリュームが複数のボリュームをもつボリュームセットの内の一つならば 3、 単一ボリュームならば 2 です。 DVD-ROM では 2 です。

UDF1.02 では、文字セットは 1 種のみです。

Volume Set Identifier は、読み取りの際はそのままボリュームセット名と解釈します。
UDF1.02 で書き込む際には、他のボリュームセットと区別できるようにします。 そこで、最初の 16 文字がユニークな値になるようにします。 そのために、最初の 8 文字を、32ビット時間 (time_t?) を 16進数に直した文字を入れることが推奨のようです。

Volume Abstract、Volume Copyright Notice、Application Identifier、Implementation Use、 Predecessor Volume Descriptor Sequence Location は、使われていなければ 0 です。

Flags は、次のとおりです。
Bit内容
00=PVD はボリュームセット内のボリューム毎に異なる
1=PVD はボリュームセット内の全てのボリュームで同じ
1〜15予約

UDF1.02 では、ボリュームは 1 つなので、フラグは 0 です。

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

2007年11月25日

UDF1.02 3-3 ボリューム記述子列

ボリュームの情報は Volume Descriptor Sequence(ボリューム記述子列)に記録されます。

ボリューム記述子列はボリュームに主と予備の 2 つ記録されます。

ボリューム記述子列は開始点に書いてあるセクタから始まり、数論理セクタ続き、
Terminating Descriptor (TD)(終端記述子)
または Volume Descriptor Pointer (ボリューム記述子ポインタ) (VDP) で終わり、
数論理セクタ 00 が続きます。

ボリューム記述子列を構成する記述子は次のとおりです。
・Primary Volume Descriptor (PVD)
・Implementation Use Volume Descriptor (IUVD)
・Partition Descriptor (PD)
・Logical Volume Descriptor (LVD)
・Unallocated Space Descriptor (USD)

内、PVD は一つ以上、他は 0 個以上あります。
各記述子の大きさは、全て 1 論理セクタです。
記述子列に所属する記述子には、
それぞれ異なる Volume Descriptor Sequence Number が割り振られています。
(大抵、先頭から順番に 0 から割り振られます。)

PD はボリュームの持つパーティションの数だけあります。
空のパーティションや廃棄したパーティションの PD も持てるかもしれません。

UDF1.02 では、ボリューム記述子列の長さは最小 16 セクタです。
基本的に、PVD、IUVD、PD、LVD、USD を一つづつ記述します。

多くの DVD-ROM では、32 セクタより主ボリューム記述子列が始まり、次の順序で記録されます。
32 PVD
33 IUVD
34 PD
35 LVD
36 USD
37 TD
38〜47 空白
同じく、副ボリューム記述子は 48 セクタより始まることが多いです。内容は主ボリューム記述子列と同じです。
posted by 七癖 at 10:15| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年11月23日

コメント入力時に認証コード

最近、同じようなスパムコメントがよく記入されます。何か対策はと思い、ブログの機能を調べたところ、認証コード機能がありましたので、有効にしてみます。
認証コードはコメント入力時に画像で表示されるので、半角英数で入力してください。
お手数ですがよろしくお願いします。

posted by 七癖 at 13:14| Comment(0) | TrackBack(0) | このブログについて | このブログの読者になる | 更新情報をチェックする

2007年11月17日

UDF1.02 3-2 Terminating Descriptor

Terminating Descriptor(終端記述子)は、 ボリューム記述子列、論理ボリューム保全列、ファイル集合記述子列、の終端を示します。

Terminating Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=8
16〜511496-Reserved=0


なお、各記述子列において、終端を TD のかわりに何も記述していない (全て 0 の) 論理セクタあるいは 論理ブロックで代用できます。 ただし、DVD-ROM ではきちんと TD を記入します。

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

この広告は90日以上新しい記事の投稿がないブログに表示されております。