UDFの基礎を踏まえて、RD-X4のHDDを見る。
なお、IDE HDDのセクタ長は512バイトであるが、ここでは、ファイルシステムの設定どおり、セクタ長を2048バイトとして記述していく。

256セクタ目までは、
セクタ  識別子
0~15  未使用
16  Beginning Extended Area Descriptor
17  Volume Structure Descriptor(NSR03 Descriptor)
18  Terminating Extended Area Descriptor
19~31  未使用
32  Primary Volume Descriptor
33  Implementation Use Volume Descriptor
34  Partition Descriptor
35  Logivcal Volume Descriptor
36  Unallocated Space Descriptor
37  Terminating Descriptor
38~47  未使用
48  Logical Volume Integrity Descriptor
49  Terminating Descriptor
50~255  未使用
256  Anchor Volume Descriptor Pointer
の様になっている。

Partition Descriptorには、
Partition Starting Location 0x110
Partition Length 0x0746944a
の値が記録されている。
これらは、論理セクタの配置で、
  • 論理セクタ(0)は、物理セクタ0x110から始まる
  • 論理セクタは、0x0746944a(122065994)セクタある
という意味になる。

このセクタ数に関しては、Logical Volume Integrity Descriptorでも、
Size Table 0x0746944a
と同じ値が指定されている。

また、Anchor Volume Descriptor Pointerは、
Main Volume Descriptor Sequence Extent 0x20セクタ
Reserve Volume Descriptor Sequence Extent 0x07469570セクタ
と、Volume Descriptor Sequenceの開始位置を指定しているらしい。

と言う事は、0x0746944aなどの値と、Allocation情報を変える事で、500GBなどの容量にする事が出来るのか?


論理セクタ0に相当する、物理セクタ0x110は、
08 03 03 00 C9 00 00 00  B8 FB 08 00 00 00 00 00
45 69 74 00 29 8D 0E 00  00 00 00 00 00 00 00 00
と、0x0308というtag値となっていて、一見、ゴミのようにも見えるのだが、Descriptor Tagの
  • TagChecksum
  • TagLocation
の各値がそれらしいものになっている。


論理セクタ466以降は、
セクタ 識別子
466(0x1d2) File Set Descriptor
467(0x1d3) Terminating Descriptor
468(0x1d4) File Entry
469(0x1d5) File Identifier Descriptor
の様なDescriptorが記述されている。

File Set Descriptor

ルートディレクトリを格納している識別子の位置情報などの、ファイル構造が定義されている
0000  00 01 03 00 2C 00 00 00  76 EE F0 01 D2 01 00 00
0010  1C 12 D7 07 01 15 10 32  18 56 5A 00 03 00 03 00
0020  01 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00
                     ・・・・・・・・・
0190  00 08 00 00 D4 01 00 00  00 00 00 00 00 00 00 00
01A0  00 2A 4F 53 54 41 20 55  44 46 20 43 6F 6D 70 6C
01B0  69 61 6E 74 00 00 00 00  00 02 00 00 00 00 00 00
  • 0x190(400)バイト目(long_ad)の、Root Directory ICBの値が、「セクタ0x1d4から0x800バイト」と記述されているので、ルートディレクトリのFile Entryが論理セクタ0x1d4にある(はず)


File Entry

ディレクトリの属性情報で、Extended Attribute Header Descriptorをパラメータとして持つことが出来る
0000  05 01 03 00 35 00 00 00  AF 5B 4C 01 D4 01 00 00
0010  00 00 00 00 04 00 00 00  01 00 00 04 D4 01 00 00
0020  00 00 20 00 FF FF FF FF  FF FF FF FF D6 5A 00 00
                     ・・・・・・・・・
0090  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00
00A0  00 00 00 00 00 00 00 00  A4 00 00 00 08 00 00 00
00B0  06 01 03 00 71 00 00 00  C9 C1 08 00 D4 01 00 00
00C0  38 00 00 00 FF FF FF FF  05 00 00 00 01 00 00 00
                     ・・・・・・・・・
0140  65 00 00 00 00 00 00 00  00 02 00 00 00 00 00 00
0150  60 05 00 00 48 01 00 00  D5 01 00 00 00 00 00 00
  • 0xa8(168)バイト目は、Length of Extended Attribute(0xa4バイト)
  • 0xac(172)バイト目は、Length of Allocation Descriptor(0x08バイト)
  • 0xb0(176)バイト目からは、Extended Attribute領域で、Extended Attribute Header Descriptorが0xa4(164)バイト配置されている
  • 0x154(340)バイト目からは、Allocation Descriptor(short_ad)で、このディレクトリに対するFile Identifier Descriptorの論理セクタ位置が指定されている(→ 論理セクタ0x01d5にFile Identifier Descriptorが存在する)

File Identifier Descriptor

ディレクトリや、ファイルの名前、開始位置などの情報が配列状に格納されている
0000  01 01 03 00 F1 00 00 00  53 AB 18 00 D5 01 00 00
0010  01 00 0A 00 00 08 00 00  D4 01 00 00 00 00 00 00
0020  00 00 00 00 00 00 00 00  01 01 03 00 E3 00 00 00
0030  A0 48 20 00 D5 01 00 00  01 00 02 09 00 08 00 00
0040  E0 01 00 00 00 00 00 00  12 00 00 00 00 00 08 54
0050  53 5F 4D 41 4E 47 52 00  01 01 03 00 C1 00 00 00
0060  A3 23 20 00 D5 01 00 00  01 00 02 09 00 08 00 00
                     ・・・・・・・・・
0120  08 4C 20 00 D5 01 00 00  01 00 02 09 00 08 00 00
0130  20 52 04 00 00 00 00 00  21 00 00 00 00 00 08 54
0140  53 5F 50 46 44 41 54 00  00 00 00 00 00 00 00 00
  • 0x00バイト目は、最初のFile Identifier Descriptor
    • 0x12(18)バイト目は、File Characteristicsで、b1:ディレクトリ、b2:親ディレクトリ情報となり、この場合、0x0aなので、親ディレクトリの情報を格納しているFile Identifier Descriptorとなる
    • 0x14(18)バイト目は、ICBの位置(long_ad)で、この場合のICBは、File Entryで、論理セクタ0x1d4からの0x800バイトとなっている
  • 0x28(40)バイト目は、二番目のFile Identifier Descriptor
    • 0x3a(58)バイト目は、File Characteristicsで、0x02なので、ディレクトリエントリとなる
    • 0x3c(60)バイト目は、ICBの位置(long_ad)で、この場合、論理セクタ0x1e0からの0x800バイトとなっている
    • 0x4e(78)バイト目は、ディレクトリ名で、"TS_MANGR"となる
  • 0x58(88)バイト目は、三番目のFile Identifier Descriptor
……

TS_MANGRディレクトリのFile Entry(論理セクタ0x1e0)を見ると、
0000  05 01 03 00 7C 00 00 00  FE 47 4C 01 E0 01 00 00
0010  00 00 00 00 04 00 00 00  01 00 00 04 00 00 00 00
0020  00 00 00 00 FF FF FF FF  FF FF FF FF D6 5A 00 00
                     ・・・・・・・・・
0090  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00
00A0  12 00 00 00 00 00 00 00  A4 00 00 00 08 00 00 00
00B0  06 01 03 00 7D 00 00 00  C9 C1 08 00 E0 01 00 00
00C0  38 00 00 00 FF FF FF FF  05 00 00 00 01 00 00 00
                     ・・・・・・・・・
0140  65 00 00 00 00 00 00 00  00 02 00 00 00 00 00 00
0150  60 05 00 00 C0 01 00 00  F0 01 00 00 00 00 00 00
  • 実は、0x1d4と大差なく、Allocation Descriptor(short_ad)の値が、0x1f0となっている(→ 論理セクタ0x01f0にFile Identifier Descriptorが存在する)

TS_MANGRディレクトリのFile Identifier Descriptor(論理セクタ0x1f0)を見ると、
0000  01 01 03 00 0C 00 00 00  53 AB 18 00 F0 01 00 00
0010  01 00 0A 00 00 08 00 00  D4 01 00 00 00 00 00 00
0020  00 00 00 00 00 00 00 00  01 01 03 00 9B 00 00 00
0030  EB 9A 20 00 F0 01 00 00  01 00 00 09 00 08 00 00
0040  60 02 00 00 00 00 00 00  16 00 00 00 00 00 08 54
0050  53 47 49 2E 49 46 4F 00  01 01 03 00 55 00 00 00
0060  F4 47 24 00 F0 01 00 00  01 00 00 0D 00 08 00 00
                     ・・・・・・・・・
0190  58 00 00 00 F2 4C 24 00  F0 01 00 00 01 00 00 0D
01A0  00 08 00 00 30 AA 04 00  00 00 00 00 28 00 00 00
01B0  00 00 08 52 53 56 44 45  54 41 49 2E 49 46 4F 00
01C0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
  • 0x00バイト目は、最初のFile Identifier Descriptor
    • 0x12(18)バイト目は、0x0aなので、親ディレクトリの情報を格納しているFile Identifier Descriptorとなる
    • 0x14(18)バイト目は、ICBの位置(long_ad)で、この場合、子ディレクトリなので、値が入っていない
  • 0x28(40)バイト目は、二番目のFile Identifier Descriptor
    • 0x3a(58)バイト目は、File Characteristicsで、0x00なので、ファイルとなる
    • 0x3c(60)バイト目は、ICBの位置(long_ad)で、この場合、論理セクタ0x260からの0x800バイトとなっている
    • 0x4e(78)バイト目は、ファイル名で、"SGI.IFO"となる
  • 0x58(88)バイト目は、三番目のFile Identifier Descriptor
……


SGI.IFOファイルのFile Entry(論理セクタ0x260)を見ると、
0000  05 01 03 00 F1 00 00 00  91 A8 4C 01 60 02 00 00
0010  00 00 00 00 04 00 00 00  01 00 00 05 00 00 00 00
0020  00 00 00 00 FF FF FF FF  FF FF FF FF D6 5A 00 00
                     ・・・・・・・・・
0090  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00
00A0  16 00 00 00 00 00 00 00  A4 00 00 00 08 00 00 00
00B0  06 01 03 00 FE 00 00 00  C9 C1 08 00 60 02 00 00
00C0  38 00 00 00 FF FF FF FF  05 00 00 00 01 00 00 00
                     ・・・・・・・・・
0140  65 00 00 00 00 00 00 00  00 02 00 00 00 00 00 00
0150  60 05 00 00 00 08 00 00  70 02 00 00 00 00 00 00
  • 今までのFile Entryと大差なく、Allocation Descriptorのpointer値が、0x270となっている(→ 論理セクタ0x0270にSGI.IFOのデータが存在する)


ディレクトリ構造

上記の様な手順で、ディレクトリツリーを辿った結果、
  • ルート
    • TS_MANGR
      • TSGI.IFO
      • TTLUTLTY.IFO
      • TTDETAIL.IFO
      • DISC.IFO
      • DISCNO2.IFO
      • TMPMENU.DAT
      • USRMENU.DAT
      • RSVDETAI.IFO
    • TS_THMNL
      • THMNL_SM.DAT
      • THMNL_LR.DAT
    • TS_LOG
      • RECLOG2.IFO
    • TS_LBRRY
      • LIBRARY2.IFO
      • LIBDETAI.IFO
    • TS_HDDAV
      • TMAPDATA.IFO
      • TS_HDDMV.DAT
      • TS_HDDMG.BUP
      • TS_HDDMG.IFO
    • TS_PFDAT
      • TS_PFTHD.DAT
      • TS_PFTDV.DAT
という結果となった。


MPEG-2 PSデータと直接関係するファイルを、DVD-RAMのファイルと対比させると
DVD-RAM  RD-X4 HDD
VR_MOVIE.VRO  \TS_HDDAV\TS_HDDMV.DAT
VR_MANGR.IFO  \TS_HDDAV\TS_HDDMG.IFO
ということになる。



TS_HDDMV.DAT

このファイルが、MPEG-2 PSデータそのものとなる。

このファイルのFile Entry(論理セクタ0x455c0)を見てみると
0000  05 01 03 00 9C 00 00 00  1C 6B EC 07 C0 55 04 00
0010  00 00 00 00 04 00 00 00  01 00 00 F9 00 00 00 00
0020  00 00 10 00 FF FF FF FF  FF FF FF FF D6 5A 00 00
                     ・・・・・・・・・
0090  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00
00A0  24 00 00 00 00 00 00 00  A4 00 00 00 A8 06 00 00
00B0  06 01 03 00 B5 00 00 00  C9 C1 08 00 C0 55 04 00
00C0  38 00 00 00 FF FF FF FF  05 00 00 00 01 00 00 00
                     ・・・・・・・・・
0140  65 00 00 00 00 00 00 00  00 02 00 00 00 00 00 00
0150  60 05 00 00 00 58 89 02  00 A0 0F 00 00 00 6D 40
0160  30 F1 0F 00 00 80 FF 7F  D0 FE 0F 00 00 80 FF 7F
0170  C0 FE 17 00 00 80 FF 7F  B0 FE 1F 00 00 80 FF 7F
0180  A0 FE 27 00 00 80 FF 7F  90 FE 2F 00 00 80 FF 7F
                     ・・・・・・・・・
07E0  E0 F1 87 06 00 80 FF 7F  D0 F1 8F 06 00 80 FF 7F
07F0  C0 F1 97 06 00 08 00 C0  E0 55 04 00 00 00 00 00
  • 0xac(172)バイト目は、Length of Allocation Descriptor(0x6a8バイト)と大きな値となっている
  • 0x154(340)バイト目は、最初のファイルの位置と長さ(0x0fa000から、記録済み0x02895800バイト)の指定
  • 0x15c(348)バイト目は、二番目のファイルの位置と長さ(0x0ff130から、未記録0x006d0000バイト)の指定
  • 0x164(356)バイト目は、三番目のファイルの位置と長さ(0x0ffed0から、未記録0x3fff8000バイト)の指定
  • 0x7ec(2028)バイト目は、0x0697f1c0から、未記録0x3fff8000バイト)の指定
  • 0x7f4(2036)バイト目は、0x0455e0から、次のAllocation情報が0x800バイト続く

さらに、論理セクタ0x455e0(Alloocation Extent Descriptor)を見てみると
0000  02 01 03 00 09 00 00 00  D1 F1 08 00 E0 55 04 00
0010  00 00 00 00 B0 00 00 00  00 80 FF 7F B0 F1 9F 06
0020  00 80 FF 7F A0 F1 A7 06  00 80 FF 7F 90 F1 AF 06
0030  00 80 FF 7F 80 F1 B7 06  00 80 FF 7F 70 F1 BF 06
0040  00 80 FF 7F 60 F1 C7 06  00 80 FF 7F 50 F1 CF 06
                     ・・・・・・・・・
00B0  00 80 FF 7F 80 F0 37 07  00 80 1E 75 70 F0 3F 07
00C0  00 28 00 40 2B F1 0F 00  00 00 00 00 00 00 00 00
  • 0x14(20)バイト目は、Length of Allocation Descriptor(0xb0バイト)
  • 0x18(24)バイト目は、このタグでの最初のファイルの位置と長さ(0x069ff1b0から、未記録0x3fff8000バイト)の指定
  • 0x24(36)バイト目は、次のファイルの位置と長さ(0x06a7f1a0から、未記録0x3fff8000バイト)の指定
  • 0xbc(188)バイト目は、最後のファイルの位置と長さ(0x0ff12bから、未記録0x2800バイト)の指定


これらを整理すると
  • 開始セクタは、論理セクタの0x0fa000で、論理セクタは、物理セクタ0x110から始まっているので、物理セクタ0x0fa110となる
  • ファイルのAllocationは、
開始セクタ番号 長さ(バイト数) 長さ(セクタ数)  次のセクタ番号
最初のshort_ad  0x000fa000  0x2895800  0x512b  0x000ff12b
二番目のshort_ad  0x000ff130  0x06d0000  0x0da0  0x000ffed0
三番目のshort_ad  0x000ffed0  0x3fff8000  0x7fff0  0x0017fec0
四番目のshort_ad  0x0017fec0  0x3fff8000  0x7fff0  0x001ffeb0
最後のshort_ad  0x000ff12b  0x2800  0x0005  0x000ff130
となり、
  • 順番は前後しているものの、全てのセクタがAllocation管理下にあることが分る。
  • 未使用領域の16セクタ未満のセクタは、最後に未使用領域としてリンクされる

ということで、\TS_HDDAV\TS_HDDMV.DATを抜き出して、使用領域が16セクタ未満のブロック位置や、pack_headerのsystem_clock_referenceが大きく外れるところで区切ってあげれば、(ほぼ、タイトル通りの内容を)パソコンで再生する事は出来る。
最終更新:2007年03月14日 17:52