「HDDの中を見る(UDF編)」の編集履歴(バックアップ)一覧に戻る

HDDの中を見る(UDF編) - (2007/03/13 (火) 22:51:48) のソース

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
 0030  00 4F 53 54 41 20 43 6F  6D 70 72 65 73 73 65 64
 0040  20 55 6E 69 63 6F 64 65  00 00 00 00 00 00 00 00
 0050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0070  08 54 53 42 30 30 30 33  00 00 00 00 00 00 00 00
 0080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 00A0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 00B0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 00C0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 00D0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 00E0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 08
 00F0  00 4F 53 54 41 20 43 6F  6D 70 72 65 73 73 65 64
 0100  20 55 6E 69 63 6F 64 65  00 00 00 00 00 00 00 00
 0110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0130  08 55 44 46 20 46 69 6C  65 20 53 65 74 00 00 00
 0140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 0D
 0150  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0180  00 00 00 00 00 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)バイト目の、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
 0030  07 00 00 00 00 00 00 00  48 01 00 00 00 00 00 00
 0040  01 00 00 00 00 00 00 00  1C 12 D7 07 01 15 10 32
 0050  10 4A 00 00 1C 12 D7 07  01 15 10 32 10 4A 00 00
 0060  1C 12 D7 07 01 15 10 32  0D 13 1E 00 01 00 00 00
 0070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0080  00 2A 54 4F 53 48 49 42  41 20 52 54 52 20 46 53
 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
 00D0  20 00 00 00 0C 00 00 00  01 00 00 00 1C 12 D7 07
 00E0  01 15 10 32 0D 13 1E 00  00 08 00 00 01 00 00 00
 00F0  38 00 00 00 08 00 00 00  00 2A 55 44 46 20 44 56
 0100  44 20 43 47 4D 53 20 49  6E 66 6F 00 00 00 00 00
 0110  00 02 00 00 00 00 00 00  48 05 00 00 03 00 00 00
 0120  00 08 00 00 01 00 00 00  34 00 00 00 04 00 00 00
 0130  00 2A 55 44 46 20 46 72  65 65 45 41 53 70 61 63
 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)バイト配置されている
-0x158(344)バイト目からは、Allocation Descriptorで、このディレクトリに対する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
 0070  00 02 00 00 00 00 00 00  13 00 00 00 00 00 08 54
 0080  53 5F 54 48 4D 4E 4C 00  01 01 03 00 52 00 00 00
 0090  EF 68 20 00 D5 01 00 00  01 00 02 07 00 08 00 00
 00A0  20 02 00 00 00 00 00 00  14 00 00 00 00 00 08 54
 00B0  53 5F 4C 4F 47 00 00 00  01 01 03 00 71 00 00 00
 00C0  D0 A6 20 00 D5 01 00 00  01 00 02 09 00 08 00 00
 00D0  40 02 00 00 00 00 00 00  15 00 00 00 00 00 08 54
 00E0  53 5F 4C 42 52 52 59 00  01 01 03 00 37 00 00 00
 00F0  08 34 20 00 D5 01 00 00  01 00 02 09 00 08 00 00
 0100  80 03 00 00 00 00 00 00  18 00 00 00 00 00 08 54
 0110  53 5F 48 44 44 41 56 00  01 01 03 00 4F 00 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の位置で、この場合のICBは、File Entryで、論理セクタ0x1d4からの0x800バイトとなっている
-0x28(40)バイト目は、二番目のFile Identifier Descriptor
--0x3a(58)バイト目は、File Characteristicsで、0x02なので、ディレクトリエントリとなる
--0x3c(60)バイト目は、ICBの位置で、この場合、論理セクタ0x1e0からの0x800バイトとなっている
--0x4e(78)バイト目は、ディレクトリ名で、"TS_MANGR"となる


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
 0030  01 00 00 00 00 00 00 00  C0 01 00 00 00 00 00 00
 0040  01 00 00 00 00 00 00 00  1C 12 D7 07 01 15 10 32
 0050  37 41 3C 00 1C 12 D7 07  01 15 10 32 37 41 3C 00
 0060  1C 12 D7 07 01 15 10 32  0E 14 50 00 01 00 00 00
 0070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
 0080  00 2A 54 4F 53 48 49 42  41 20 52 54 52 20 46 53
 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
 00D0  20 00 00 00 0C 00 00 00  01 00 00 00 1C 12 D7 07
 00E0  01 15 10 32 0E 14 50 00  00 08 00 00 01 00 00 00
 00F0  38 00 00 00 08 00 00 00  00 2A 55 44 46 20 44 56
 0100  44 20 43 47 4D 53 20 49  6E 66 6F 00 00 00 00 00
 0110  00 02 00 00 00 00 00 00  48 05 00 00 03 00 00 00
 0120  00 08 00 00 01 00 00 00  34 00 00 00 04 00 00 00
 0130  00 2A 55 44 46 20 46 72  65 65 45 41 53 70 61 63
 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の値が、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
 0070  80 02 00 00 00 00 00 00  17 00 00 00 00 00 08 54
 0080  54 4C 55 54 4C 54 59 2E  49 46 4F 00 01 01 03 00
 0090  EE 00 00 00 A9 2B 24 00  F0 01 00 00 01 00 00 0D
 00A0  00 08 00 00 30 03 00 00  00 00 00 00 1A 00 00 00
 00B0  00 00 08 54 54 44 45 54  41 49 4C 2E 49 46 4F 00
 00C0  01 01 03 00 B8 00 00 00  67 3B 20 00 F0 01 00 00
 00D0  01 00 00 09 00 08 00 00  30 BD 03 00 00 00 00 00
 00E0  1B 00 00 00 00 00 08 44  49 53 43 2E 49 46 4F 00
 00F0  01 01 03 00 83 00 00 00  AB BE 24 00 F0 01 00 00
 0100  01 00 00 0C 00 08 00 00  50 BD 03 00 00 00 00 00
 0110  1C 00 00 00 00 00 08 44  49 53 43 4E 4F 32 2E 49
 0120  46 4F 00 00 01 01 03 00  44 00 00 00 CC 5E 24 00
 0130  F0 01 00 00 01 00 00 0C  00 08 00 00 30 5B 04 00
 0140  00 00 00 00 26 00 00 00  00 00 08 54 4D 50 4D 45
 0150  4E 55 2E 44 41 54 00 00  01 01 03 00 0E 00 00 00
 0160  41 B3 24 00 F0 01 00 00  01 00 00 0C 00 08 00 00
 0170  90 93 04 00 00 00 00 00  27 00 00 00 00 00 08 55
 0180  53 52 4D 45 4E 55 2E 44  41 54 00 00 01 01 03 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の位置で、この場合、子ディレクトリなので、値が入っていない
-0x28(40)バイト目は、二番目のFile Identifier Descriptor
--0x3a(58)バイト目は、File Characteristicsで、0x00なので、ファイルとなる
--0x3c(60)バイト目は、ICBの位置で、この場合のICBはファイルの内容そのもので、論理セクタ0x260からの0x800バイトとなっている
--0x4e(78)バイト目は、ファイル名で、"SGI.IFO"となる