ディスク内部の論理的レイアウトを解説


データ復旧のプロが教えるデータ復元から消去までの豆知識:メールマガジン

================================================================================
 ■■      ■             ■      豆知識  Vol.02-07
■  ■     ■             ■ ■     ディスクの論理構造
■  ■ ◆■■ ■■■ ■ ■ ■■◆ ■■ ■ ■  ■  ■
■  ■ ■ ■ ■  ■■ ■  ■ ■   ■■  ■■ ■ ■■ ■ ■ ■
■  ■ ■ ■ ■  ■  ■  ■ ■ ■ ■ ■  ■ ■■ ■ ■ ■■■■
 ■■  ■ ■ ■■ ■   ■■◆ ■■ ■ ■ ■  ■ ■■  ■ ■
=============================================================2004.07.26=========

【ディスク内部の論理的レイアウト】

一般的にフォーマットと呼ぶ操作は、物理的にフォーマットされた媒体上にファイル構造
を構築し、その構成要素を初期化する事をいいます。

物理フォーマットはHDD等におけるサーボ情報及びシリンダー/ヘッド/セクタと一般的
に呼ぶ位置情報を媒体上に書き込む事を言います。 これは各製造メーカーの管理された
環境で行われるのもで、一般ユーザーの手元では行うべきものではありません。

昨今のHDDでの位置情報の表現方法はLBA(Logical Block Address)と呼ぶ先頭を
“0”としたオフセットで表す方法が一般的になっています。 これは記録密度の上昇に
伴い、シリンダー/ヘッド/セクタという従来の表現とディスク上での実記録位置情報を
合わせられなくなった事によります。

円盤に記録するHDDでは内周部と外周部では線長が異なりますので、ここに等角速度
記録を行うと、最も線長が短い内周に合わせて記録密度を変化させねばなりませんし、
この方式では記録容量を稼ぐ事が出来ません。 この為現在のドライブでは等密度記録を
行っています。 この方式を取ると、例えば最外周トラックは300セクタだが、
最内周は100セクタという事になります。 只、1シリンダー毎にリニアに制御を
行ったのでは大変ですのである幅は同じ記録密度で記録し、残りは隙間としてあけると
いう方式が取られています。

これらのHDD自身が自らを制御する為の情報は、データを書き込むシリンダーより
外側に制御情報シリンダーを設け、ここに書き込まれているケースが多い様です。
この部分の状態については各メーカー共公表していませんが、先に掲げた書込み密度の
切り換え情報、初期不良セクタ情報、S.M.A.R.T.情報等があると思われます。

ヘッドクラッシュや異常書込みでこの領域が破壊されると、一般的な方法での読み取りは
不能となります。 私共はこの状況をフォーマットコラプトと呼んでおり、データ復旧
業者は夫々強制的な読出し方法を持っていますので、この種の障害にも対応します。

【区画設定の方法】

DOS/Win3.1/Win95/Win98ではFDISKというソフトをFD/CD
から起動して区画設定、開放を行いますが、

NT系では [スタート]左クリック - [設定] - [コントロールパネル] - [管理ツール]
- [コンピュータの管理] - [ディスクの管理]と選択し、俗にデバイスマネージャーと
呼ばれるプログラム上で、区画の管理やフォーマットを行います。

起動区画については、破壊を避ける為、フォーマット/区画開放共に出来ない様になって
います。 この区画を扱う場合、インストールCDからという事になりますが、この
処置を行う場合は、前以て必要部分はバックアップを取っておく必要があります。

【区画レイアウト】

(プライマリーのみ1区画)
┏━┳━┳━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃M┃ ┃B┃                                ┃
┃B┃ ┃P┃                                ┃
┃R┃ ┃B┃                                ┃
┗━┻━┻━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

(プライマリを使わず、拡張区画に2論理区画)
┏━┳━┳━┳━┳━┳━━━━━━━━━━━━━━━━┳━┳━━━━━━━━━┓
┃M┃ ┃M┃ ┃B┃                ┃B┃         ┃
┃B┃ ┃B┃ ┃P┃                ┃P┃         ┃
┃R┃ ┃R┃ ┃B┃                ┃B┃         ┃
┗━┻━┻━┻━┻━┻━━━━━━━━━━━━━━━━┻━┻━━━━━━━━━┛
│32M│

(プライマリ及び拡張区画に1論理区画)
┏━┳━┳━┳━━━━━━━━━┳━┳━┳━┳━━━━━━━━━━━━━━━━┓
┃M┃ ┃B┃         ┃M┃ ┃B┃                ┃
┃B┃ ┃P┃         ┃B┃ ┃P┃                ┃
┃R┃ ┃B┃         ┃R┃ ┃B┃                ┃
┗━┻━┻━┻━━━━━━━━━┻━┻━┻━┻━━━━━━━━━━━━━━━━┛

【区画構造情報について】

〔MBR(Master Boot Record)〕          offset 1BEh1CEh1DEh1EEh1FEh
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━┳━┳━┳━┳━┓
┃                            ┃第┃第┃第┃第┃ ┃
┃                            ┃1┃2┃3┃4┃識┃
┃                            ┃区┃区┃区┃区┃別┃
┃                            ┃画┃画┃画┃画┃子┃
┃                            ┃情┃情┃情┃情┃ ┃
┃                            ┃報┃報┃報┃報┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━┻━┻━┻━┻━┛

MBR/BPBの識別子は“55AA”h

各区画情報領域の内容

offset	000h	1byte	起動ドライブ指定	“00”h=非起動 “80”h=起動
	001h	1byte	開始ヘッド		最大64ヘッド
	002h	下6bit	開始セクター	最大63セクタ
	002-3h	8bit	開始シリンダー	最大1024シリンダー
	004h	1byte	システム識別子
	005-7h	3byte	最終ヘッド/セクター/シリンダー(開始に同じ)
	008-Bh	4byte	開始論理セクター番号	0-0-1=0とした通し番号
	00C-Fh	4byte	総セクター数	この区画が持つセクター総数


区画の制限

	1024cylinder * 64 head * 63sector * 512byte = 2,113,929,216byte

	FAT16は1区画2GB迄しか取れませんが、これは上の計算値が示す値に
	よる制限です。

	多くのソフトも内部構造は2バイトで表していますので、

	65535 * 32,768byte(最大クラスターサイズ) = 2,147,450,880byte

	となり、扱えるファイルの最大容量は2GBと言う事が判ります。

	FAT32/NTFSでは008h-000Fhの値を使いますので、一般的使用で区画の
	の制限については気にする必要はないでしょう。

システム識別子

	01h	FAT12 Primary 区画	0~15MB
	04h	FAT16 Primary 区画	15~32MB
	05h	拡張MBR		0~2GB
	06h	FAT16 Primary 区画	32~2GB
	07h	NTFS,HPFS,UNIX etc
	0Ch	DOS FAT32		1024シリンダ以上の場合
	0Eh	WIN95 FAT16
	0Fh	WIN95 拡張MBR	1024シリンダ以上の場合
	12h	Compaq Diagnostic 区画	コンパック製PCのみ
	16h	Partition Magic FAT16	パーティションマジックFAT16
	1Bh	Partition Magic FAT32	  同上       FAT32
	42h	Windows2000 Dynamic Volume
	63h	PC UNIX			SCO,VANYAN etc
	64h	NetWare 2.X
	65h	NetWare 3以降
	81h	LINUX/MINIX
	82h	SOLARIS,LINUX SWAP
	83h	LINUX 基本
	84h	LINUX 拡張
	86h	WindowsNT		RAIDの第2区画以降
	87h	WinodwsNT		RAIDの第1区画
	A5h	BSD/386
	A6h	OPEN BSD

〔BPB(Boot Parameter Block)〕

Offset	Byte数	内容
--------------------------------------------------------------------------------
00h	  3	(a)	起動プログラムへの分岐命令
03h	  8	(b)	OEM名/初期化を行ったOS・Version
0Bh	  2	(c)	セクター当りのバイト数 通常512固定
0Dh	  1	(d)	クラスタ当りのセクター数
0Eh	  2	(e)	起動プログラムが使用するセクター数
10h	  1	(f)	FATの数(通常2)
11h	  2	(g)	ルートディレクトリのエントリー数(通常512)
			(ルートにおけるフォルダ/ファイルの数)
13h	  2	(h)	論理ディスク当りのセクタ数
15h	  1	(i)	ディスクタイプ
16h	  2	(j)	FAT当りのセクター数
18h	  2	(k)	トラック当りのセクタ数
1Ah	  2	(l)	ヘッド数
1Ch	  4	(m)	隠しセクター数
20h	  4	(m)	論理ディスク当りのセクタ数
24h	  1	(o)	物理ドライブ番号
25h	  1	(p)	予約
26h	  1	(q)	拡張ブート識別コード
27h	  4	(r)	ボリュームS/N
2Ah	 11	(s)	ボリューム名称
36H	  8	(t)	FATタイプ(FAT12/FAT16という文字が入る。)

【ファイル構造】

ここでは一般的なFAT16について、その概略を説明します。

〔FAT(File Allocation Table)の基本レイアウト〕

BPBの情報からFATについてはFATの位置、ルートの位置、データ部先頭等の
情報が計算出来る。

┏━┳━┳━━━━┳━━━━┳━━━━┳━━━━━━━━━━━━━━━━━━━┓
┃B┃ ┃    ┃    ┃    ┃                   ┃
┃P┃ ┃FAT1┃FAT2┃ROOT┃ データ領域             ┃
┃B┃ ┃    ┃    ┃    ┃                   ┃
┗━┻━┻━━━━┻━━━━┻━━━━┻━━━━━━━━━━━━━━━━━━━┛

 FAT1アドレス	= (e)
 FAT2アドレス	= (e) + (j)
 ROOTアドレス	= (e) + (j) * (f)
 データ領域先頭	= ROOTアドレス + (g) * 32 / (c)

 - FATの構造

FATは2バイト単位のアドレスを収納するテーブルの形式となっています。FATでは

クラスタ・サイズ = 512バイト * (d)

となりこの単位で書込み、読出しが行われます。 FAT上ではどの位置に書かれたかが
次の書込み位置を示す事で表されます。 最初の書込み位置はディレクトリ側にあり、
この位置に最初に書き込む位置が書かれます。

 〔クラスタ使用状況コード〕

 0000h			未使用
 0001h			システム予約
 0002~FFEFh		次に使用しているクラスタを示す。
 FFF0~FFF6h		システム予約
 FFF7h			後発不良クラスタを示す
 FFF8~FFFEh		システム予約
 FFFFh			ファイルの最後を表す。

【ディレクトリ構造】

〔ルートディレクトリ〕

PC-AT互換機(現在のWindowsマシンの殆どはこれです。)、DOSベース
でのルートのエントリー数(ルートに取り得るフォルダ/ファイルの総数)は512個
です。
ロングファイル名での説明は冗長になりますので、DOS8.3(ファイル名8桁・
拡張子3桁)で説明を行います。

Offset
 00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F 
-------------------------------------------------------------------------------
|ファイル名               |拡張子    |属性|予約       |
-------------------------------------------------------------------------------
|               |更新時間 |更新日  |開始クラスタ |ファイルサイズ  |
-------------------------------------------------------------------------------

固定長の8.3フォーマットでは1つのファイル情報は上記の様に32バイトで構成
されます。

フィールド内容  長さ 値         解      説
--------------------------------------------------------------------------------
ファイル名     8 00h    先頭1バイトが“00”hであれば未使用として扱う
            E5h    先頭1バイトが“E5”hであれば削除ファイル
--------------------------------------------------------------------------------
属性        1 01h    読出し専用ファイル
            02h    隠しファイル
            04h    システムファイル
            08h    ボリュームラベル
            10h    サブ・ディレクトリ
            20h    未バックアップ・ファイル
                 このフィールドには上記属性の論理和が入る。
--------------------------------------------------------------------------------
更新時間      2      上位5ビット・・・時
                 次の6ビット・・・分
                 下位5ビット・・・秒(但し2秒単位)
--------------------------------------------------------------------------------
更新日付      2      上位7ビット・・・年(1980年をゼロ換算)
                 次の4ビット・・・月
                 下位5ビット・・・日
--------------------------------------------------------------------------------
開始クラスタ    2      データ領域の先頭を2とした場合のこのファイルの
                 先頭論理レコード迄のオフセット
--------------------------------------------------------------------------------
ファイルサイズ   2      ファイルの総バイト数
--------------------------------------------------------------------------------

〔サブ・ディレクトリ〕

サブ・ディレクトリの先頭部構造は以下の通り

Offset
 00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F 
-------------------------------------------------------------------------------
|2E 20 20 20 20 20 20 20|20 20 20|10| 予約      |
-------------------------------------------------------------------------------
|予約             |更新時間 |更新日付 |自己アドレス| 予約      |
-------------------------------------------------------------------------------
|2E 2E 20 20 20 20 20 20|20 20 20|10| 予約      |
-------------------------------------------------------------------------------
|予約             |更新時間 |更新日付 |親アドレス | 予約      |
-------------------------------------------------------------------------------
|サブDIRの最初のファイル名      |拡張子    |属性|予約       |
-------------------------------------------------------------------------------
|               |更新時間 |更新日  |開始クラスタ |ファイルサイズ  |
-------------------------------------------------------------------------------

サブ・ディレクトリには親ディレクトリの位置情報が記録されており、親ディレクトリ
には最初の子ディレクトリのアドレスが記録されていますので、これを追う事で
ディレクトリ構造を追う事が出来ます。

〔クラスタ・サイズについて〕

HDDを始め、一般的な記録媒体の物理レコード長は512バイトになっています。
ファイルシステムは最大のレコード数との関連からアクセスの単位であるクラスタの
サイズを変える事でその区画容量に対応します。

 記録容量(MB)    クラスタ・サイズ  セクター/クラスタ  FATシステム
-------------------------------------------------------------------------------
    0~  15    4KB        8       FAT12
   15~ 128    2KB        4       FAT16
  128~ 256    4KB        8       FAT16
  256~ 512    8KB       16       FAT16
  512~1024   16KB       32       FAT16
 1024~2048   32KB       64       FAT16

【区画開放の動作】

区画開放はデータ領域の先頭迄、各トラックの先頭1セクター512バイトを“FF”h
で埋めます。

(注) 全てテキストで表現しておりますので、視覚的に捉えづらいと思います。
    一度紙に落として見て頂ければ、少しは判りやすくなるのでは。
    昨今のHTMLメールにするか、PDFの添付ファイルにする方が良いの
    かもしれませんが、全てテキストで表現するという事も編集子の命題でも
    ありますので、ご容赦下さい。

【フォーマット】

フォーマットには簡易フォーマットと完全フォーマットがあります。

FDD		簡易フォーマット	FAT/ROOTだけを初期化します。
				データ部は完全な形で残ります。
		完全フォーマット	FAT/ROOTを初期化した上で
				データ部の全てを固有文字で埋めます。
HDD他
		フォーマット	FAT/ROOTだけを初期化します。
				FATが初期化されますので、ファイルの
				接続情報のすべてが失われます。 FAT
				の場合、回収結果はこれが理由で保証され
				なくなります。
				NTFSの場合もファイル構造だけを
				初期化します。 File*と呼ぶ
				どこにファイルが書かれたかという情報は
				残りますので、データの殆どは正常回収が
				可能です。

【2000/XPでのフォーマットで注意すべき事】

1。 エクスプローラ上でのフォーマットはFDDに限る。 其の他の媒体は
   管理ツール若しくはメーカー提供のフォーマッタで行う事。

2。 可搬媒体(MO/モバイルHDD等)についてNTFSは使わない事。

3。 デジタルカメラで使用する媒体はフォーマットしない事。 必ずカメラ側で
   行う事。

【復旧ソフトで出来る事及び回収精度】

削除及び区画開放、フォーマットといったファイル構造の論理的破壊に関しては
市販されるソフトで出来る事とデータ復旧サービスで行う内容との間に大きな差は
ありません。 強いて言えば、データ復旧サービスではお客様の媒体の内容を一度
イメージとして仮想ディスク上に展開して、このイメージに対し処置を行いますので
誤った処置により症状を重くするというリスクはありません。 又、専門の技術者が
中身をセクター単位にチェックし、消失した構造を再構築しますので、回収精度と
回収範囲が上がる事位です。


区画開放	Rootを含むシリンダ迄の各トラックの先頭セクタを“FF”hで
		上書きします。 この為、FATシステムでは区画容量により影響度が
		異なる為、FAT全てが再生出来る場合も相当部分に欠損が発生する
		場合も出てきます。 最良のケースでは回収データは全て正常という
		事もありえます。

		NTFSでは下層ファイル構造はそのまま残っていますので、殆どの
		場合、100%正常に回収可能です。

フォーマット	FATシステムではファイルの繋がりを示す情報の全てが消失します。
		ルートも上書きされますので、サブディレクトリ以下のファイルは
		回収可能ですが、フラグメントを起こしているファイルについては
		接続を予測して回収しますので、回収内容の保証は出来なくなります。

		NTFSの場合はディレクトリとファイルの接続を示す情報とこれらの
		情報格納領域の使用状況だけが初期化されます。 この為、個別の
		ファイルについてはその書込み位置情報を含め残っています。
		NTFSではユーザーファイルは上書きが無い限り、正常に回収可能
		です。

削除		削除はディレクトリ構造のルートパスにあるフォルダ/ファイル名の
		先頭1バイトを“F6”hに置き換える事で削除を示します。
		同時に削除対象のファイル、ディレクトリ構造が使用していたFATを
		初期化します。 この為、条件はフォーマットより悪くなります。

		NTFSについてはフォーマットと同一条件です。

================================================================================
   A1Data RecoveryServices--
======================================================豆知識===Vol.02-07=END====

※本記事は、A1データ株式会社の前身、株式会社ワイ・イー・データ時代に執筆・記載されたコラムです。