2007年11月05日

UDF1.02 2-1 ボリューム認識列

ボリューム認識列 (Volume Recognition Sequence) は、 いくつかのボリューム構造記述子で構成され、 ボリュームのフォーマットの種類や そのボリュームからコンピュータを起動するための場所を示します。 ここは ISO9660 のボリューム記述子群に相当し、 各ボリューム構造記述子の先頭 7 バイトは、ISO9660 のボリューム記述子と同じ構造です。

ボリューム認識列は、そのボリュームの先頭から 32767 バイトより後の最初のセクタから始まり、 数セクタ続きます。 1セクタが 2048 バイトならば、16セクタ目から始まります。

記述子はセクタの先頭から記述し、セクタ内の余ったバイトは 0 で埋めます。

各ボリューム構造記述子は、次のようになっています。

Generic Volume Structure Descriptor format
BP大きさ名称内容
01unsigned charStructure Typeボリューム記述子の種類
1〜55char[5]Standard Identifier規格識別子
61unsigned charStructure Versionバージョン
7〜20472041-Structure Data記述子の内容


ECMA167 では、次の種類を使います。

Volume Structure Descriptor interpretation
規格識別子内容
"BEA01"拡張領域先頭記述子
"BOOT2"ブート記述子
"CD001"ISO9660 用
"CDW02" 
"NSR02"NSR記述子 ECMA-167/2
"NSR03"NSR記述子 ECMA-167/3
"TEA01"拡張領域終端記述子


読み取る際には、まず規格識別子を調べ、次にボリューム記述子の種類を読んで区別します。

記述子を記録する順序は、ISO9660 など CD-ROM 用のシステムがある場合、 それらを先に記録します。 ISO9660 では、最低 PVD + TD の2セクタ、 joliet を含む場合 PVD + SVD + TD の 3 セクタを使います。
その後、UDF のボリューム認識列を記述していきます。 先頭に BEA01 (拡張領域先頭記述子) を記録し、 中身である NSR02 や NSR03、BOOT2 を記録した後、 TEA01 (拡張領域終端記述子) を最後に記録して終わります。

よくある UDF Bridge DVD-ROM の一例を挙げておきます。
sectorStandard IdentifierStructure Type備考
16CD0011ISO9660 PVD
17CD0012joliet SVD
18CD001255ISO9660 TD
19BEA010拡張領域の先頭
20NSR020ECMA-167/2 が使われていることを示す
21TEA010拡張領域の終端


ディスクにアクセスする時は、 まず、このボリューム認識列を調べます。 そこに「CD001」があれば、ISO9660 (あるいは joliet) フォーマット、 「NSR02」か「NSR03」があれば、ECMA167 フォーマットのディスクと解釈して 読み取りを開始します。

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

2007年10月27日

UDF1.02 1-20 ext_ad

Allocation Descriptor の最後の一つ ext_ad は UDF1.02 では使われませんが、一応書いておきます。

ext_ad (Extended Allocation Descriptor) は位置の他、 3 種類の大きさを記述します。

ext_ad format
RBP大きさ名称内容
0〜34unsigned longExtent Length下記参照
4〜74unsigned longRecorded Length記録長
8〜114unsigned longInformation Length情報長
12〜176struct lb_addrExtent Locationパーティション番号とその先頭からの位置
18〜192unsigned char[2]Implementation Use予約


Extent Length は次のとおりです (short_ad と同じです)。

Extent interpretation
bit内容
0〜29length of the extent (unsigned、[bytes]、特に規定が無ければ論理ブロック長の整数倍)
30〜31 0: 場所が用意され、記録された
1: 場所が用意されたが、記録されていない
2: 場所は用意されず、記録もされてい
3: 配置記述子列の次の場所を意味する



Recorded Length は 30 ビットの正数で、最上位 2 ビットは 00 です。

Extent Length と Recorded Length と Information Length はそれぞれ違っていてもかまいません。

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

2007年10月25日

UDF1.02 1-19 long_ad

long_ad (Long Allocation Descriptor) は、それが記載されている論理ボリューム内における パーティションと位置と大きさを記述します。

long_ad format
RBP大きさ名称内容
0〜34unsigned longExtent Length下記参照
4〜96struct lb_addrExtent Locationパーティション番号とその先頭からの位置
10〜156unsigned char[6]Implementation Use予約


Extent Length は次のとおりです (short_ad と同じです)。

Extent interpretation
bit内容
0〜29length of the extent (unsigned、[bytes]、特に規定が無ければ論理ブロック長の整数倍)
30〜31 0: 場所が用意され、記録された
1: 場所が用意されたが、記録されていない
2: 場所は用意されず、記録もされてい
3: 配置記述子列の次の場所を意味する


UDF1.02 では、Implementation Use に次の ADImpUse を入れます。

ADImpUse format
RBP大きさ名称内容
0〜12unsigned shortFlagsフラグ
2〜54unsigned longUnique Id一意ID


Flags は次のとおりです。

long_ad Flag
bit内容
0Erased
=0:存在
=1:削除済
1〜15予約


short_ad と異なり、long_ad ではパーティション番号を合わせて記載するため、 複数のパーティションをもつ論理ボリュームや、 論理ボリュームの外から論理ボリュームに アクセスするときにで役に立ちます。

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

2007年10月23日

UDF1.02 1-18 short_ad

Allocation Descriptor (配置記述子) は、 記述子やディレクトリ、ファイル本体の先頭位置と大きさを示します。
論理ボリュームで使われる配置記述子には、 short_ad、long_ad、ext_ad の3種類が用意されています。


short_ad (Short Allocation Descriptor) は、 それが記載されているパーティション内における 先頭位置と大きさを記述します。

short_ad format
RBP大きさ名称内容
0〜34unsigned longExtent Length下記参照
4〜74unsigned longExtent Positionパーティションの先頭からの位置 [LBN]


Extent Length は次のとおりです。

Extent interpretation
bit内容
0〜29length of the extent (unsigned、[bytes]、特に規定が無ければ論理ブロック長の整数倍)
30〜31 0: 場所が用意され、記録された
1: 場所が用意されたが、記録されていない
2: 場所は用意されず、記録もされてい
3: 配置記述子列の次の場所を意味する


Extent Length の length of the extent は 30 ビットしかないため、 230=1,073,741,824 バイトまでしか表記できません。 UDF1.02 では、さらに論理ブロックサイズを引いた大きさが最大です。

DVD-ROM では、shore_ad をディレクトリや(分割)ファイル本体を示すのに使われます。 このときの length of the extent は、実際のファイルのバイト数です。
1,073,739,776=0x3FFFF800 バイトを超えるファイルは、分割し、 2つ以上の short_ad を使って配列として記述します。 実際には一続きのファイルでも同様です。 最後の short_ad 以外は length of the extent を論理ブロックの整数倍にします。

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

2007年10月21日

UDF1.02 1-17 lb_addr

lb_addr (Recorded address) は、ファイルシステム (論理ボリューム) で使われ、 それが所属するパーティションと、その先頭位置を記述します。

lb_addr format
RBP大きさ名称内容
0〜34unsigned longLogical Block Numberパーティションの先頭からの位置 [LBN]
4〜52unsigned shortPartition Reference Number(=0) パーティション番号

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

2007年10月19日

UDF1.02 1-16 tag

tag (Descriptor tag) は、多くの記述子のヘッダに使われ、 記述子の種類が Tag ID で見分けられるようになっています。 また、各種の CRC で、内容に間違いが無いか、本当に記述子なのか 判別できます。

tag format
RBP大きさ名称内容
0〜12unsigned shortTag Identifier (TagID)記述子の種類
2〜32unsigned shortDescriptor Version=2 バージョン
41unsigned charTag ChecksumタグのCRC
51unsigned charReserved=0
6〜72unsigned shortTag Serial Number(=0) 通し番号
8〜92unsigned shortDescriptor CRC記述子のCRC
10〜112unsigned shortDescriptor CRC Lengthタグを除く記述子の大きさ [bytes]
12〜154unsigned longTag Location自身の位置 [LSN/LBN]


Tag Identifier(TagID)は、記述子の種類を示します。

Descriptor interpretation
TagID略語意味適当訳Tag Location の単位
1PVDPrimary Volume Descriptor基本ボリューム記述子LSN
2AVDPAnchor Volume Descriptor Pointer開始点LSN
3VDPVolume Descriptor Pointerボリューム記述子ポインタLSN
4IUVDImplementation Use Volume Descriptor処理方法用ボリューム記述子LSN
5PDPartition Descriptor区画記述子LSN
6LVDLogical Volume Descriptor論理ボリューム記述子LSN
7USDUnallocated Space Descriptor未割付け空間記述子LSN
8TDTerminating Descriptor終端記述子LSN/LBN
9LVIDLogical Volume Integrity Descriptor論理ボリューム保全記述子LSN
256FSDFile Set Descriptorファイル集合記述子LBN
257FIDFile Identifier Descriptorファイル識別記述子LBN
258AEDAllocation Extent Descriptor割付け範囲記述子LBN
259IEIndirect Entry間接エントリLBN
260TETerminal Entry終端エントリLBN
261FEFile EntryファイルエントリLBN
262EAHDExtended Attribute Header Descriptor拡張属性ヘッダ記述子LBN
263USEUnallocated Space Entry未割付け空間エントリLBN
264SBDSpace Bitmap Descriptor空間ビットマップ記述子LBN
265PIEPartition Integrity Entryパーティション保全エントリLBN
266EFEExtended File Entry拡張ファイルエントリLBN


Descriptor Version は、NSR02なら 2、NSR03 なら 3 です。 DVD-ROM では 2 です。

Tag Checksum は、バイト 0〜3 および 5〜15 の単純な総和の下1バイトです。 これは、記述子の作成の最後に計算します。

Tag Serial Number は、使われないとき 0 です。

Descriptor CRC は、タグを除く記述子の CRC です。 その生成多項式は、
x16 + x12 + x5 + 1
です。

Descriptor CRC Length は、Descriptor CRC の計算に使用したデータのバイト数です。 UDF1.02では、記述子の大きさ - タグの大きさ、です。

Tag Location は、タグのある場所の位置です。 開始点やボリューム記述子列、論理ボリューム保全列内の記述子など、 ボリュームシステムに関する記述子は LSN で、 ファイル集合記述子列内の記述子やファイルエントリなど、 論理ボリュームに置かれるファイルシステムに関する記述子はパーティションの先頭からの位置 で LBN で記述します。 TD はどちらでも使うので注意してください。

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

2007年10月17日

UDF1.02 1-15 extent_ad

extent_ad (Extent Descriptor) は、 開始点やボリューム記述子列などボリュームシステムで使われ、 ボリューム内における その記述子や記述子列の先頭位置と大きさを示します。

extent_ad format
RBP大きさ名称内容
0〜34unsigned longExtent Length大きさ [bytes]
4〜74unsigned longExtent Location位置 [LSN]

Extent Length は 230 未満です。 特に規定が無ければ、1論理セクタあたりのバイト数の整数倍です。

Extent Location が 0 であれば、それが示すものは存在しません。

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

2007年10月13日

UDF1.02 1-14 regid

regid (もしくは Entity identifier、EntityID) はその処理方法名を示します。

regid format
RBP大きさ名称内容
01unsigned charFlags=0 フラグ
1〜2323char[23]Identifier方法名 (ASCII)
24〜318unsigned char[8]Identifier Suffix付帯情報


Flags は次のとおりです。

bit意味
0Dirty: 0=有効。1=無効
1Protected: 0=変更可。1=変更不可
2〜7=0 予約

UDF1.02 では、Flags は 0 です。また、Identifier に ASCII 文字を使います。

Identifier Suffix を使わない場合は、0 で埋めます。


UDF では、regid にセットする値は各記述子の変数ごとに決まっています。

Entity Identifiers
変数名IdentifierIdentifier Suffix使用する記述子
Implementation ID"*開発者名"開発者(社)の仕様によるPVD, IUVD, PD, LVD, FID, FE
Domain ID"*OSTA UDF Compliant"{0x02, 0x01, 0x03}LVD, FSD
Implementation ID"*UDF LV Info"{0x02, 0x01}IUVD
Implementation ID"*UDF FreeEASpace"{0x02, 0x01}ファイル拡張属性
Application ID"*UDF FreeAppEASpace"{0x02, 0x01}ファイル拡張属性
Implementation ID"*UDF DVD CGMS Info"{0x02, 0x01}ファイル拡張属性

他に OS/2 用と Macintosh 用が用意されています。


「*開発者名」には、* (=0x2A) (アスタリスク) の後に、 ファイルシステムを作成したプログラム名やそのメーカー名、オ−サリングシステム名 などを ASCII 文字で記述します。
「*開発者名」の Identifier Suffix は、次のとおりです。

Developer IdentifierSuffix field format
RBP大きさ名称内容
01unsigned charOS Class(=0) Operating System Class
11unsigned charOS Identifier(=0) Operating System Identifier
2〜76unsigned char[6]Implementation Use Area開発者(社)の仕様による



「*OSTA UDF Compliant」の Identifier Suffix は、次のようになっています。

Domain IdentifierSuffix field format
RBP大きさ名称内容
0〜12unsigned shortUDF Revision=0x0102 (UDF 1.02)
21unsigned charDomain Flagsbit0:Hard Write-Protect
bit1:Soft Write-Protect
bit2〜7:予約
3〜75-Reserved=0

フラグの Hard Write-Protect は永久に変更不可であり、 Soft Write-Protect は書き換え可能なメディアでユーザーが指定できるようになっており、 Hard Write-Protect が 1 であれば Soft Write-Protect が 0 でも書き込み不可なのですが、 書き換えを考えない場合は、両方 1 でいいでしょう。



他の UDF で定義されている値の Identifier Suffix は、次のとおりです。

UDF IdentifierSuffix field format
RBP大きさ名称内容
0〜12unsigned shortUDF Revision=0x0102 (UDF 1.02)
21unsigned charOS Class(=0) Operating System Class
31unsigned charOS Identifier(=0) Operating System Identifier
4〜74-Reserved=0


Operating System Class と Operating System Identifier は次のとおりです。

Operating System Class
ValueOperating System Class
0未定義 (どれでも対応)
1DOS
2OS/2
3Macintosh OS
4UNIX
5Windows 9x
6Windows NT
7OS/400
8BeOS
9Windows CE
10〜255予約

Operating System Identifier
OS ClassOS IdentifierOperating System Identified
0-未定義 (どれでも対応)
10DOS
20OS/2
30Macintosh OS 9 以前
31Macintosh OS X 以降
40UNIX 一般
41UNIX - IBM AIX
42UNIX - SUN Solaris
43UNIX - HP/UX
44UNIX - Silicon Graphics Irix
45UNIX - Linux
46UNIX - MKLinux
47UNIX - FreeBSD
48UNIX - NetBSD
50Windows 9x 一般(98/MEを含む)
60Windows NT 一般(2000, XP, Server 2003, 及びそれ以降を含む)
70OS/400
80BeOS 一般
90Windows CE 一般
10〜255-予約

このOS の部分のみ、UDF2.50 と UDF2.60 の情報を元に追加しました。
多くの DVD-ROM 、そして DVD-Video では、両方とも 0 になっています。


各 ID は ASCII 文字ですが、一応書き出します。

UDF Entity Identifier Values
IdentifierByte Value
"*OSTA UDF Compliant"{0x2A, 0x4F, 0x53, 0x54, 0x41, 0x20, 0x55, 0x44, 0x46, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x6C, 0x69, 0x61, 0x6E, 0x74}
"*UDF LV Info"{0x2A, 0x55, 0x44, 0x46, 0x20, 0x4C, 0x56, 0x20, 0x49, 0x6E, 0x66, 0x6F}
"*UDF FreeEASpace"{0x2A, 0x55, 0x44, 0x46, 0x20, 0x46, 0x72, 0x65, 0x65, 0x45, 0x41, 0x53, 0x70, 0x61, 0x63, 0x65}
"*UDF FreeAppEASpace"{0x2A, 0x55, 0x44, 0x46, 0x20, 0x46, 0x72, 0x65, 0x65, 0x41, 0x70, 0x70, 0x45, 0x41, 0x53, 0x70, 0x61, 0x63, 0x65}
"*UDF DVD CGMS Info"{0x2A, 0x55, 0x44, 0x46, 0x20, 0x44, 0x56, 0x44, 0x20, 0x43, 0x47, 0x4D, 0x53, 0x20, 0x49, 0x6E, 0x66, 0x6F}


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

2007年10月11日

UDF1.02 1-13 timestamp

日時の記述には次の timestamp を使います。

timestamp format
RBP大きさ名称内容
0〜12unsigned shortType and Time Zone(日本では =0x121C)
2〜32shortYear
41unsigned charMonth
51unsigned charDay
61unsigned charHour
71unsigned charMinute
81unsigned charSecond
91unsigned charCentiseconds1/100秒
101unsigned charHundreds of Microseconds1/10,000秒
111unsigned charMicroseconds1/1,000,000秒

Type and Time Zone の上位 4 ビットは timestamp の内容を示し、それは次のとおりです。

意味備考
0世界標準時 
1現地時間UDF はこれを使う
2当事者間の同意による 
3〜15予約 

Type and Time Zone の下位 12 ビットは、
-1440〜1440 (0xA60〜0x5A0) の時、世界標準時からの分単位のずれです。
-2047 (0x801) の時、ずれの値は使われません。

日本では、+9時間=540分=0x21C のずれがあるので、0x121C になります。

年月日字分秒などは数値です。
マイクロ秒など OS によって使われない値は、 0 を記録するなり読み取りを無視するなりしてください。

全て 0 なら、日時は指定されていません。

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

2007年10月09日

UDF1.02 1-12 OSTA Compressed Unicode

UDF では、dstring 用の文字セットに、"OSTA Compressed Unicode" (OSTA圧縮ユニコード) を使います。

OSTA Compressed Unicode format
RBP大きさ名称内容
01unsigned charCompression ID圧縮方法
1〜lenlenunsigned char[len]Compressed Bit Stream圧縮データ

データの長さ (len) は、別の場所に書かれているか、 記述子内に固定長の領域として確保されています。

Compression ID は、圧縮方法を示します。

Compression ID
Compression ID定義
0〜7予約
81文字は8ビット
9〜15予約
161文字は16ビット
17〜255予約

圧縮前の文字列は Unicode 1.1 です。 ただし、0xFEFF 〜 0xFFFE を除きます。 数値と同様、リトルエンディアンです。 日本語を使用する場合、Compression ID に 16 を指定します。 実際の圧縮、展開には OSTA の UDF 仕様書に載っている C 言語のソースコードを そのまま使うのが楽です。

どうもこれ、先頭に 16 を入れているだけで、実際の長さより 1 バイト大きくなっています。"Compressed" じゃないじゃん。

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

2007年10月07日

UDF1.02 1-11 charspec

charspec (Character set specification) は PVD、LVD、FSD などで使われ、 ボリュームラベル、ファイル名、ディレクトリ名などで使用する文字セットを示します。

charspec format
RBP大きさ名称UDF の場合
01unsigned charCharacter Set Type=0
1〜6363char[63]Character Set Information="OSTA Compressed Unicode"

ECMA167 では、様々な文字セットが使えるようになっていますが、 UDF では「OSTA Compressed Unicode」 (OSTA 圧縮ユニコード) しか使わないので、 Character Set Type には「当事者間の合意」 (CS0文字) を示す 0 を入れ、 Character Set Information には、
0x4F, 0x53, 0x54, 0x41, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x55, 0x6E, 0x69, 0x63, 0x6F, 0x64, 0x65, 残りは 0x00
(ASCII 文字で "OSTA Compressed Unicode") と入れます。

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

2007年10月05日

UDF1.02 1-10 数値と文字

ECMA167 の数値はリトルエンディアンで、マイナスは2の補数を使います。

このブログでは便宜上、数値の型はC++言語と同じものを使用します。
char、short、long です。
正の数値のみの場合は、unsigned を付けます。整数の場合、signed は省略します。

ただ、64ビット=8バイトの数値は、C++では用意されていませんので、VisualC++6.0 に従って __int64、unsigned __int64 を使用します。

このブログでは、16 進数は先頭に 0x をつけて表します。


文字には通常の ASCII 文字と、その他の指定した文字セットの2種類を使い分けます。
このうち、ASCII 文字は、使う文字セットの名前や処理方法名など、システム上最低限必要な用途に用いられます。

その他の、ファイル名、ディレクトリ名、ボリュームラベルなどは、使う文字セットを指定します。但し、UDF では、全て "OSTA Compressed Unicode" (OSTA 圧縮ユニコード) を使います。 文字セットの指定には charspec を使います。指定した文字セットを使って記述する変数には、内容欄に (d-characters) を書き加えます。
固定長の配列では、dstring を使います。これは、d-characters の文字列で、最後のバイトに使用バイト数を記録します。間の余ったバイトは 0 で埋めます。

文字列は全て先詰めです。固定長の配列で余ったバイトは 0 で埋めます。
posted by 七癖 at 10:03| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年10月01日

UDF1.02 1-9 UDF1.02 の制限

UDF1.02 の注意事項と制限、ECMA167 との違いを箇条書きにしておきます。

基本的にボリュームは一つです。
基本的に一つのボリュームにパーティションは一つです。
ディスクに一括書き込みを前提とします (読取専用メディアは当然含まれます)。

論理セクタの大きさは物理セクタの大きさと同じです。

ボリュームセット内の物理セクタの大きさは全て同じです。

ボリュームの最初の 32768 バイトは使用しません。

ファイル名は最大 255 バイトです。
パス長さは最大 1023 バイトです。

一つのデータ列の長さは最大 230 - 論理ブロックサイズ バイトです。大抵、論理ブロックサイズは 2048 バイトなので、値は 1073739776 (0x3FFFF800) です。ファイルサイズがこれを超えるときは、ファイルを分割せねばなりません。

AVDP は第256セクタ、 最終セクタ、最終-256セクタ、の 3 箇所の内 2 箇所に記述します。

有効な PVD は 1 ボリュームに 1 つです。
有効な PD は基本的に 1 ボリュームに 1 つです。
有効な LVD は 1 ボリュームセットに 1 つです。
LVID は記録されます。
有効な USD は 1 ボリュームに 1 つです。
FSD は基本的に 1 論理ボリュームに 1 つです。


DVD-ROM の制限

さらに実際の DVD-ROM には、次の制限がつきます。

論理セクタの大きさと論理ブロックの大きさは 2048 バイトです。

DVD-ROM 片面のボリュームは一つ、パーティションも一つです。なので、ボリューム番号は 1 、ボリューム数は 1、交換水準は 2 です。

AVDP は第256セクタに必ず記述し、 最終セクタ、最終-256セクタ、の内最低 1 箇所に記述します。なお、DVD プレーヤーは第256セクタしか参照しません。

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

2007年09月27日

UDF1.02 1-8 ECMA167の一般事項と制限

ECMA167 の注意事項と制限を箇条書きにしておきます。

記録していないセクタ、論理セクタ、論理ブロック、及びそれらの余ったバイトは全て 0x00 で埋められます。

記述子、ファイル、ディレクトリなどは全て先詰めです。セクタや論理セクタや論理ブロックの
途中から始まることはありません。

ファイルやディレクトリなどが複数の論理ブロックにまたがるときは、前の論理ブロックの最後まで記録し、次の論理ブロックにそのまま続けます。最後の論理ブロックの余ったバイトは 0x00 で埋めます。

一つのディレクトリ構造 (ファイルセット) が持てるファイルとディレクトリの合計数は 232 未満です。

ECMA167 にもファイル名の制限のレベルがあります。ただ、UDF1.02 の方で決められている内容を守れば問題ありません。


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

2007年09月25日

UDF1.02 1-7 ファイルへのアクセス

ディスク内のファイルへアクセスするための順序は、

→ボリューム認識列でNSR記述子を確認

→開始点

→ボリューム認識列
 → LVD (論理ボリューム) を選択
  → LVD からパーティションの番号を読み取る
   → その番号の PD からパーティションの場所を読み取る
    → LVD からファイル集合記述子列の場所を読み取る

→ファイル集合記述子列
 →FSD 内のルートディレクトリの ICB の場所

→ルートディレクトリのファイルエントリ
→ルートディレクトリ本体
 →ルートディレクトリ内の目的の子ディレクトリの ICB の情報

→子ディレクトリのファイルエントリ
→子ディレクトリ本体
 →子ディレクトリ内の目的の孫ディレクトリの ICB の情報

→ディレクトリのファイルエントリ
→ディレクトリ本体
 →ディレクトリ内の目的のファイルの ICB の情報

→ファイルのファイルエントリ
 →(分割) ファイル本体の場所

→(分割) ファイル本体

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

2007年09月23日

UDF1.02 1-6 要素

1論理ボリューム=1パーティションの DVD-ROM のボリュームは、
次の種類の要素で成り立っています。


ボリュームセット┐
 ┌──────┘
 │       ┌ボリューム認識列────────────────┬(CD001)(ISO9660用)
 │┌ボリューム1┤開始点(2個)───────────────┐ │BEA01
 └┤      │主ボリューム記述子列──────────┐ │ │NSR02
  └      │副ボリューム記述子列──────────┤ │ │その他
         │論理ボリューム保全列────────┐ │ │ │TEA01
         │パーティション0──┐       │ │ │ └空白
         │          │       │ │ │
         │その他       │       │ │ └──AVDP
         └空白        │       │ │
                    │       │ └───┬PVD
                    │       │     │IUVD
                    │       │     │PD
                    │       │     │LVD
                    │       │     │USD
                    │       │     │TD
                    │       │     └空白
                    │       │
                    │       └─────┬LVID
                    │             │TD
                    │             └空白
                    │ 
                    └┬ファイル集合記述子列──┬FSD
                     │各ディレクトリ────┐│TD
                     │各ファイルエントリ─┐│└空白
                     │各ファイル本体──┐││
                     │         ││└─FIDの配列
                     │その他      ││ 
                     └空白       │└──FE
                               │
                               └──┬分割ファイル0
                                  │分割ファイル1
                                  └…

右への線は、左のブロックが内包している要素を示します。
ファイルが分割されていないことは多いです。
「その他」や「空白」は、無いこともあります。
UDF Bridge での ISO9660 のディレクトリ群とパステーブルは、パーティションに隣接して置いたり、パーティション内に置かれたりします。

多分、これだけ見ると誤解されると思いますが、理解の足しになるかと思います。
posted by 七癖 at 10:31| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年09月21日

UDF1.02 1-5 三構造

ECMA167 ディスクフォーマットでは、大きく三つの構造があります。

・ボリューム認識部
・ボリュームシステム
・ファイルシステム

です。

ボリューム認識部は、その媒体に最初にアクセスする場所であり、
このディスクがどんな形式でフォーマットされているかが書かれています。
また、起動に関する情報が有る場合もあります。
ISO9660 との共通部分も多いです。
ここは、先頭の空白とボリューム認識列からなります。

ボリュームシステムは、ファイルシステムを置く論理ボリュームと
パーティションを制御し、ファイルシステムの場所を記述します。
ボリュームに収まるパーティションとそれを集めた
論理ボリュームという概念によって、
一つのディスクを複数のドライブに分けたり、
複数のディスクを一つのドライブとして扱ったり出来ます。
ただ、これらは結構煩雑なので、
DVD-ROM では、 論理ボリュームとパーティションは共に一つです。
ここは、開始点とボリューム記述子列、論理ボリューム保全列などからなります。

ファイルシステムは論理ボリューム、実際にはパーティションに置かれ、
ファイル本体とディレクトリ構造を制御します。
ここは、ファイル集合記述子列と、
ファイル及びディレクトリ毎に一つづつあるファイルエントリ、
ディレクトリ本体、分割ファイル本体などからなります。

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

2007年09月19日

UDF1.02 1-4 訳語

前の用語、略語以外で、必要と思われる用語の訳を挙げておきます。

訳語一覧
英語訳語備考
Volume recognition sequenceボリューム認識列CD001, BEA01, NSR02, TEA01 などを持つ
Volume Structure Descriptorボリューム構造記述子PVD, IUVD, PD, LVD, USD の総称
Volume Descriptor Sequenceボリューム記述子列ボリューム構造記述子と終端からなる
Logical volume integrity論理ボリューム保全列LVID と終端からなる
File Set Descriptor Sequenceファイル集合記述子列FSD と終端からなる
Allocation Descriptor配置記述子short_ad, long_ad, ext_ad の 3 種がある
Allocation Descriptors配置記述子列配置記述子の配列


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

2007年09月17日

UDF1.02 1-3 略語

このブログでは、以下の略語を使います。

略語元名備考
UDFUniveral Disk Formatユニバーサルディスクフォーマット
IDIdentifier識別子、名
BPByte position記述子の先頭(バイト0)からのバイト位置
RBPRelative byte positionその構造体の先頭(バイト0)からの相対的なバイト位置
bytesbytesバイトの数
LSNlogical sector number論理セクタ番号
LSslogical sectors論理セクタの数
LBNlogical block number論理ブロック番号
LBslogical blocks論理ブロックの数
 
PVDPrimary Volume Descriptor基本ボリューム記述子
AVDPAnchor Volume Descriptor Pointer開始点
VDPVolume Descriptor Pointerボリューム記述子ポインタ
IUVDImplementation Use Volume Descriptor処理方法用ボリューム記述子
PDPartition Descriptor区画記述子
LVDLogical Volume Descriptor論理ボリューム記述子
USDUnallocated Space Descriptor未割付け空間記述子
TDTerminating Descriptor終端記述子
LVIDLogical Volume Integrity Descriptor論理ボリューム保全記述子
FSDFile Set Descriptorファイル集合記述子
FIDFile Identifier Descriptorファイル識別記述子
AEDAllocation Extent Descriptor割付け範囲記述子
IEIndirect Entry間接エントリ
TETerminal Entry終端エントリ
ICBInformation Control Block 情報制御ブロック
FEFile Entryファイルエントリ
EAHDExtended Attribute Header Descriptor拡張属性ヘッダ記述子
USEUnallocated Space Entry未割付け空間エントリ
SBDSpace Bitmap Descriptor空間ビットマップ記述子
PIEPartition Integrity Entryパーティション保全エントリ
EFEExtended File Entry拡張ファイルエントリ


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

2007年09月13日

UDF1.02 1-2 用語

幾つかの用語と訳語を説明します。ここだけ読んでも判らない場合が多いと思います。

1.ビットとバイト (bit&byte)
 一つのビットは 0 か 1 をとります。
 1 バイトは 8 ビットで、1 バイトがデータ表記の基本単位となります。
 要するに、よくあるコンピュータの考え方と同じです。

2.記述子 (descriptor)
 それぞれのバイトが意味を持った、連続したデータの固まり。
 C言語の構造体に相当しますが、変数の位置を変更したり隙間をあけたり、といったことをやってはいけません。コンパイラが勝手にやる場合があるので注意してください。先頭からの位置が重要なのです。

3.処理方法 (implementation)
 散々悩んだのですが、インプリメンテンションの訳語は、これで行きます。
 これ自体は記述のための共通形式という面が強く、変数 "Implementation Use" の使い方はお任せ、となっていたりするので困るのです。

4.名 (identifier, ID)
 "識別子" が正確な訳語です。
 名称を指す文字列以外に、数値などの付帯情報がつく場合もあります。

5.セクタ (物理セクタ) (sector)
 媒体上のデータにバイト単位でアドレスを割り振ってアクセスするには細かすぎるので、セクタというある程度まとまったデータ単位に区切ってそれにアドレスを割り振り、アクセスします。

6. (物理)セクタの大きさ、(物理)セクタサイズ (sector size)
 セクタの内、アドレスやエラー訂正コードなどを除いた、ユーザーが実際に使用できるデータ領域のバイト数です。

7.ボリューム (volume)
 順番に並べられたセクタの集合。
 例えば、DVD-ROM の片面、CD の 1 データトラックなどが 1 つのボリュームになります。

8.セクタ番号 (sector number)
 セクタ毎に割り振られたアドレス。
 ボリュームの先頭のセクタ番号は 0 で、1、2、…と続きます。

9.ボリュームセット (volume set)
 ボリュームの集合。
 UDF1.02 では、ジュークボックス内の全ての DVD をまとめて呼ぶ場合、といった程度の意味ですが、本来の ECMA167 では複数のボリュームをまとめて取り扱うための概念です。

10.ボリューム番号 (Volume Sequence Number)
 ボリュームセット内のボリュームには 1、2、3、…と番号がついています。

11.論理セクタ (logical sector)
 ボリュームの割り振りの単位。
 512 バイトの整数倍の大きさで、ボリューム内で大きさは全て同じです。各論理セクタの先頭は物理セクタの (ユーザーデータの) 先頭から始まり、論理セクタの長さ分続きます。1 つの物理セクタで足りなければ次の物理セクタへ続きます。次の論理セクタは、前の論理セクタが終わった物理セクタの次の物理セクタから始まります。物理セクタの余った箇所は 0 で埋められます。
 こう書くとややこしいですが、これは媒体内でセクタの大きさが異なっている場合に対応させるためです。UDF1.02 では、物理セクタと論理セクタの大きさとアドレスはそれぞれ同じです。

12.論理セクタ番号 (logical sector number) [LSN]
 論理セクタは、ボリュームの先頭から 0、1、2、と順番に番号を割り振ります。同じ番号に 2 つの論理セクタが対応したり、欠番があることはありません。
 なお、ボリュームは最小 256 論理セクタです。

13.パーティション (partition)
 ボリューム内の連続した論理セクタの集合。
 ボリュームセット内のパーティションには番号が割り振られており、0 〜 65535 の値をとります。

14.論理ボリューム
 一つ以上のパーティションの集合。
 ボリュームセットが持つある意味仮想的なボリュームです。
 ECMA167 では、パーティションは、別々のボリュームに属していてもかまいません。つまり、論理ボリュームは複数のディスクをあたかも一つのドライブとして見せかけるための仕掛けになります。また、ボリュームの中に複数の論理ボリュームがあってもかまいません。こちらは一枚のディスクを複数のドライブに分けるための仕掛けです。
 ただし DVD-ROM では、論理ボリューム、パーティション共に一つです。

15.論理ブロック (logical block)
 論理ボリューム、パーティションの割り振りの単位。
 512 バイトの整数倍の大きさで、パーティション内で大きさは全て同じです。各論理ブロックの先頭は論理セクタの先頭から始まり、論理ブロックの長さ分続きます。一つの論理セクタで足りなければ次の論理セクタへ続きます。次の論理ブロックは、前の論理ブロックが終わった論理セクタの次の論理セクタから始まります。論理セクタの余った部分は 0 で埋められます。
 DVD-ROM では、論理セクタと論理ブロックの大きさは同じです。

16.論理ブロック番号 (logical block number) [LBN]
 各論理ブロックには、パーティションの先頭から 0、1、2、…と番号が割り振られます。パーティションの先頭からの番号なので、セクタや論理セクタと大きさは同じ場合でも番号は異なります。サイズが同じなら間隔は同じです。
 パーティション内で同じ論理ブロック番号のありませんが、全てのパーティションの論理ブロック番号は 0 から始まりますので、(複数のパーティションをもつ) 論理ボリュームでは、論理ブロックのアドレスを、パーティション番号と論理ブロック番号の組で表します。

17.論理ブロックの数 (the size in logical blocks) [LBs]
 連続した論理ブロックの数。複数の論理ブロックをまとめて扱うときに使います。
 "論理ブロックの大きさ" だと1論理ブロックあたりのバイト数になってしまうし、"論理ブロック数" だと上の"論理ブロック番号"あるいは"論理ブロックアドレス"と間違えそうなので、"数"の前に"の"を入れます。

18.ファイルセット
 ファイルとディレクトリの集合。
 ディレクトリ階層の情報、個々のファイル本体とその情報、ディレクトリ階層上の位置などの全てのデータの集まりです。

19.場所 (extent)
 連続したデータの固まりの、先頭位置とその大きさ。
 単位はバイトだったりセクタ、論理セクタ、論理ブロックだったりします。
 正確な訳語は "範囲" です。
posted by 七癖 at 09:51| Comment(0) | TrackBack(1) | ファイルシステム | このブログの読者になる | 更新情報をチェックする
×

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