home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2003 April / VPR0304.ISO / OLS / SALVAG11 / SALVAG11.LZH / SALVAGE.TXT < prev    next >
Text File  |  1998-08-15  |  26KB  |  539 lines

  1. ■Disk Salvage tools - for FAT16/FAT32, Copyright(C) 1998 by Toshiaki Matsuda
  2.   Version 1.10 (1998-8-15)
  3.  
  4. ●ディスク サルベージの手引き
  5. ・サルベージ(Salvage)とは、手元の辞書では「救助(救済)する」という意味だそうで
  6.  ここでは、読めなくなったディスクのデータを回収する事を指します。
  7.  
  8. ●基礎知識
  9.  ここでは、サルベージに必要な基本的なハードウェアーと、FAT16/FAT32ファイルシステムについて解
  10. 説します。もう、知っていると言われる方は、次の章の「作業の手順」を読んでくだ
  11. さい。
  12.  
  13. <ディスクの基礎知識>
  14.  ハードディスクドライブは密閉されていますが、中ではフロッピーの様な磁気円盤が回転して
  15. います。この磁気円盤の上を、磁気ヘッドが動作(seek(シーク)といいます)して、この
  16. 磁気円盤の磁気の変化を読み取り、あるいは磁気変化を磁気円盤に書き込んで、それ
  17. を0-1のデジタル信号に変換してコンピュータの外部記憶装置として使っている訳です。
  18. データがビット単位では、効率が悪いのでディスクでは、データ アクセスの最少単位をセクター
  19. (Sector)として扱います。このセクター(Sector)は、元々は「扇形」という意味です。
  20. IBM互換機では、この1セクターは 512バイトになっています。
  21. 以下、このマニュアルで "SEC" の省略英語は、このセクターを指すものとします。
  22. 「扇形」の言葉からも判る通り、このセクターは幾つか集まると円になります。
  23. この円の1つを、トラック(Track)といいます。元々の意味は「通った跡、運動場のトラック
  24. レコードの溝」という意味だそうです。このマニュアルではトラックの省略英語は使っていません
  25. が、通常は"TRK" 等が使われています。
  26. このマニュアルではトラックではなくシリンダー(Cylinder)の方を使っています。
  27. シリンダーの元々の意味は「円筒形、円柱」という意味だそうです。トラックは、単一の円だ
  28. けを指すのに対し、シリンダーは同位置に在る別の磁気面の円の全て指す意味がありま
  29. す。以下、"CYL" の省略英語はシリンダーを指すものとします。
  30. 磁気円盤が1枚しかなければ、裏と表で磁気ヘッドは2つで足りますが、磁気円盤が増
  31. えれば、磁気ヘッドは磁気面の分だけ必要になります。
  32. このヘッド(Head)は、元々は「頭」という意味ですが、カセットの磁気ヘッドと同じように、
  33. ハードディスクでも使われています。
  34. 以下、"HED" の省略英語は、この磁気ヘッドを指すものとします。
  35.  
  36.  さて、ディスクのデータを参照するには、どんな方法が一番良いでしょうか?
  37. ディスクは、効率良くデータを転送する為になるべくSeek動作を少なくして動作します。
  38. ですから、まず、セクターのアドレスが更新されて、セクターのアドレスがいっぱいになったら、
  39. ヘッドのアドレスが更新されて、最後にシリンダーのアドレスが更新されるといった動作になりま
  40. す。
  41.  さて、私のマシンで "HDD_TEST"をかけると以下のように表示をします。
  42.  
  43. >>HDD Read Test Ver 1.0  Copyright(C) 1998 by Toshiaki Matsuda 
  44.  
  45. >>BIOS から認識されるHddパラメータ:706CYL-31HED-63SEC
  46.  
  47. >>物理パーテーション#1:
  48. >> Boot標識: 80  パーテーション種別: 6 
  49. >> スタートアドレス: 0CYL-1HED-1SEC  エンドアドレス: 519CYL-31HED-63SEC 
  50. >> スタート論理アドレス: 3Fh  総セクター数: FFEC1h 
  51.  
  52.  ここで注意しなければならない事は、CYL と HED のアドレスは 0 から始まりますが、
  53. セクターのアドレスは 1 から始まるという事です。これは、元々MS-DOSがフロッピーのファイルシステム
  54. として作られた事に起因しています。普通の、大型のコンピュータはセクターも 0 から始まり
  55. ます。
  56. ですから、「BIOS から認識されるHddパラメータ:706CYL-31HED-63SEC」という事は
  57. CYL は 0~706 で 707本、HED は 0~31 で 32個、SEC は 1~63 で 63個という事に
  58. なります。このディスクの物理的な容量は何 MBでしょか?
  59.  
  60. 707CYL × 32HED × 63SEC × 512 Byte = 729759744 Byte
  61.  
  62.   という事で、約720MB という事になります。
  63. ところで、今のいわゆるEnhanced IDEと言われるディスクは、実はこの CYL-HED-SEC は
  64. 物理的には、余り意味をもちません。私の720MBのディスクは、HEDが32個在ると BIOSは
  65. 申告していますが、あの小さな3.5"のディスクに、本当に磁気円盤が16枚も入るもので
  66. しょうか?
  67. 結論から言えばナンセンスで、私のディスクは型番からは磁気円盤は2枚しか入っていないはず
  68. です。ですから、磁気ヘッドも当然、裏と表で4個という事になります。
  69. では、なぜBIOSは、この様なディスクパラメータを返してくるのでしょうか?
  70. これは、HDD BIOS インターフェースの仕様の問題で、CYL 0~1023 HED 0~255 SEC 1~63
  71. までしかアクセスできない為です。その為、新しいPC98規格では INT 13h BIOS が拡張さ
  72. れています。とりあえず、旧 BIOS INT13h規格では上記のパラメータしか扱えないと考え
  73. てください。
  74. Enhanced IDEでは、本当の物理パラメータをLBA(Logical Brock Address)に変換後、INT
  75. 13h のBIOS インターフェースに都合の良いパラメータに変換したものを、OSに提供しています。
  76. ですから、物理的な CYL-HED-SEC はどうあれ、BIOSから見えるパラメータを真のディスクパラ
  77. メータとして扱わなければなりません。
  78.  
  79.  なお、Winodws95 OSR2、Windows98 では拡張 INT 13h を使ってFDISK で領域確保
  80. が可能です。拡張 INT 13h をサポートした修復ツールは、次のバージョン (2.0) で
  81. 実現します。本バージョンの制限事項として、
  82. ・ボリュームの最大容量は 約 8.3GB まで
  83. ・LBA 変換されたボリュームと、拡張 INT 13h から見える ボリューム容量とで若干容量が
  84.  違って見える場合があります。LBA 変換された方が少し小さくみえます。本ツール
  85.  では、LBA 変換された方を正しい値として扱います。
  86.  もしかして、ボリュームの最後の最後までデータが入っていれば、そのデータが見えなく
  87.  なる事も考えられます。
  88.  (これはFATファイルシステムの性格上、データの修復には問題無いと考えていますが)
  89.  
  90. <物理アドレスと論理アドレス>
  91.  OSのインターフェースとして、CYL-HED-SEC といった物理的なアドレスを使ってデータを書く事
  92. は、普通は行いません。(やろうと思えば、AX=440Dh INT21h で可能)
  93. この手の操作は、BIOSコールを使うのが一般的です。
  94. 通常のファイルへの参照は、システムコールを使用し、それ以外の直接ディスクを参照する方法は、
  95. INT 25hとINT 26hが用意されています。ただし、FAT32では INT 25h、INT 26hを使う
  96. 事ができません。FAT32 では、AX=7305h INT 21hを使う必要があります。
  97.  INT 25hとINT 26h、または AX=7305h INT 21h は、OSから見える論理アドレス
  98. (または、論理セクタ-とも言います)に対して、読み書きを行う機能です。
  99. ここで、あえて「OSから見える論理アドレス」と書いたのは、OSで見えないセクターがある
  100. からです。このOSから見えないセクターが、隠しセクターと言われるもので、ファイルシステムの基本
  101. パラメータにそのセクター数が書かれています。
  102. そしてこのセクター数は、ディスクの先頭に書かれているマスターブートレコードの、パーティーションテーブ
  103. ルの「パーティーション開始 論理アドレス」と同じ値になります。計算方法を教えますので、
  104. どうしてそうなるか、考えてみてください。
  105.  
  106. 0CYL-0HED-1SEC を論理セクター 0とした時の
  107. 論理アドレス = CYL×(HED数×SEC数)+HED×(SEC数)+SEC-1
  108.  
  109. OSから見える論理アドレス = 上論理アドレス - 隠しセクター数
  110.  
  111.  このOSから見える論理アドレスは、ファイルシステムの基本パラメータである"BIOSパラメータブロック"が
  112. 正常でなければ、OSから使う事はできません。
  113. それから、この論理アドレスはDEBUGからも使用できますが、ほとんどの場合この論理アド
  114. レスと、後に述べるクラスタ(cluster)は、16進数で使用します。
  115. 自分でディスクをサルベージする時には、16進数が計算できる電卓を使うのが良いでしょう。
  116.  
  117. <FAT16 ファイルシステム>
  118.  ハードディスクに、DOSまたはWindows95をインストールすると次のような制御情報がディスクに
  119. 作成されます。
  120.  
  121. +---+-----+---+--------+--------+---------------+---------------------------+
  122. |MBR|隠し |BPB| FAT(1) | FAT(2) |ルートディレクトリ-    | データ領域                  |
  123. |   |セクタ- |&OS|        |        |               |                           |
  124. |   |     |BOO|        |        |               |                           |
  125. |   |     |  T|        |        |               |                           |
  126. +---+-----+---+--------+--------+---------------+---------------------------+
  127.  ↑         ↑
  128. 0CYL-0HED   |
  129.     -1SEC   |
  130.           0CYL-1HED-1SEC
  131.  
  132. (MBR マスターブートレコード)
  133.  ディスクの先頭に在る、"FDISK"によって作成される制御セクターです。
  134. この領域には、OSのBOOTセクターを読み込むプログラムと、パーティーションテーブルがあります。
  135. パーティーションテーブルは、1エントリー16バイトで最大4つまで作成可能です。
  136. パーティーションテーブルには、
  137.  
  138. ・ブート標識(1バイト)
  139. ・開始物理アドレス(3バイト)
  140. ・パーティーション種別(1バイト) 
  141. ・終了物理アドレス(3バイト)
  142. ・開始論理アドレス(4バイト)
  143. ・総セクター数(4バイト)
  144.  
  145. の情報が書かれています。
  146.  
  147. ブート標識: 80hでアクティブパーティーション(BOOT可能),00hで非BOOT
  148. パーティション種別: 0C FAT32 ,拡張 INT 13hの最大領域で確保されたパーティーション
  149.                0B FAT32 ,従来の INT13hで確保されたパーティーション
  150.                06 32MB超の FAT16パーティーション
  151.                05 拡張DOSパーティーション
  152.                04 32MB以下の FAT16パーティーション
  153.                01 FAT12パーティーション
  154.  
  155.  このパッケージに含まれている"MBR_UTIL"は、これらの情報を強制的に書き換えます。
  156. 変更できるパラメータは、
  157.  ブート標識、パーティーション種別、開始物理アドレス(CYLとHEDのみ、SECは1に固定)
  158.  終了物理アドレス(CYLのみ、HED,SECは最大パラメータに固定)
  159.  
  160. になっています。開始論理アドレスと、総セクター数はプログラムで計算します。
  161. 後述しますが、書き換えるのはパーティーションテーブルのみです。BOOT プログラムの部分は書き
  162. 換えませんので、作業に先立ち"FDISK /MBR"をかけて作業を開始してください。
  163. 本当は、この後のBPBもそうなんですが、バイナリーイメージをプログラムに抱え込んでも良かっ
  164. たんですが、著作権の問題(当然、ここに書かれているプログラムはMSが著作権者)があ
  165. るので書き換えは、パラメータのみにしてMBRは"FDISK /MBR"で対応。BPB に在るOS BOOT
  166. は、そのOSでフォーマットしたFDから読み取りという事にしました。
  167.  
  168. (かくしセクター)
  169.  正確には、MBRからBPBの直前までのセクターが、かくしセクターになります。
  170. OSからは、BPBがあるセクターをその論理ドライブの論理セクター 0とします。よって、その論理
  171. ドラブの論理セクターを、本当の論理アドレス(0CYL-0HED-1SECを論理セクター 0とした)に変換す
  172. るには、かくしセクター数を加算する必要があります。
  173.  
  174. (BPB & OS BOOT)
  175.  ここには、FATファイルシステムの基本パラメータである"BIOSパラメータブロック"と、そのOSを立ちあ
  176. げる為のプログラムが入っています。
  177. この立ち上げプログラムは、フロッピーをフォーマットした時に作成されるものと同じものです。
  178. このパッケージの"BOOT_RCV"では、BPBは新たに作成しますが、OS BOOTはフロッピーから読
  179. んで復旧します。ただし、FAT32 ではフロッピーから復旧できないので、BPBのみの修復
  180. になります。BOOTシステムにするには、">SYS C:"としてBOOTプログラムを再投入する必要が
  181. あります。
  182. BPBは以下の様な構造になっています。なお、以前のマニュアルに判りずらいとの指摘があ
  183. ったので、BPBセクターの先頭からのデータを全て書きます。
  184.  
  185. <FAT16>
  186. ・BOOT までのショート ジャンプ命令 + NOP 命令:3バイト
  187. ・OEM名(MSDOS5.0やMSWIN4.0等):8バイト
  188. ・セクター当りのバイト数(IBM-PC/ATでは512):2バイト
  189. ・クラスタ当りのセクター数(ボリュームの大きさで変化):1バイト
  190. ・予約セクター数(通常 1):2バイト
  191. ・FATの数(通常 2):1バイト
  192. ・ルートディレクトリ-エントリー数(HDDでは512):2バイト
  193. ・総セクター数(65536以上なら0):2バイト、
  194. ・メディアタイプ(HDDでは F8h):1バイト
  195. ・FATのセクター数(ボリュームの容量で変化):2バイト
  196. ・BIOS から見えるセクター数:2バイト
  197. ・BIOS から見えるヘッド数:2バイト
  198. ・かくしセクター数:4バイト
  199. ・総セクター数(65536以上):4バイト
  200. ・OSデータ(BOOT ボリュームなら 80h 00h 29h):3バイト
  201. ・ボリュームシリアル番号:4バイト
  202. ・ボリュームラベル:11バイト
  203. ・ファイルシステム名称("FAT16"か"FAT12"):8バイト
  204.  
  205. <FAT32>
  206. ・BOOT までのショート ジャンプ命令 + NOP 命令:3バイト
  207. ・OEM名(MSWIN4.1):8バイト
  208. ・セクター当りのバイト数(IBM-PC/ATでは512):2バイト
  209. ・クラスタ当りのセクター数(ボリュームの大きさで変化):1バイト
  210. ・予約セクター数(通常 20h):2バイト
  211. ・FATの数(通常 2):1バイト
  212. ・ルートディレクトリ-エントリー数(FAT32 では 0):2バイト
  213. ・総セクター数(FAT32 では 0):2バイト、
  214. ・メディアタイプ(HDDでは F8h):1バイト
  215. ・FATのセクター数(FAT32 では 0):2バイト
  216. ・BIOS から見えるセクター数:2バイト
  217. ・BIOS から見えるヘッド数:2バイト
  218. ・かくしセクター数:4バイト
  219. ・総セクター数:4バイト
  220. ・FATセクター数(FAT32専用):4バイト
  221. ・アクティブFAT/ミラーフラグ(通常 0):2バイト
  222. ・ファイルシステムバージョン(通常 0):2バイト
  223. ・ルートディレクトリー開始クラスタ(通常 00000002):4バイト
  224. ・FSINFO位置(通常 0001):2バイト
  225. ・予備 BOOT セクターアドレス(通常 0006):2バイト
  226. ・OSデータ(BOOT ボリュームなら 80h 00h 29h):3バイト
  227. ・ボリュームシリアル番号:4バイト
  228. ・ボリュームラベル:11バイト
  229. ・ファイルシステム名称("FAT32"):8バイト
  230.  
  231. ここの、かくしセクター数はMBRに書かれているパーティーションの開始論理アドレスと同じもの
  232. が、総セクター数もMBRと同じ値が入ります。もし違っていたら、、、きっと大変な事が
  233. 起こっていると思います(^^;
  234. ディスクの最初にパーティーションを作成し、DOSまたはWindows95をインストールすると、このBPB
  235. は、必ず 0CYL-1HED-1SEC に作成されます。
  236.  
  237. (ルート ディレクトリー)
  238.  ディレクトリーは、ルートに限らず32バイトで構成されています。ディレクトリー(Directory)とは
  239. 元々は、人名簿とか住所録という意味です。ここに、ファイル本体のプロフィールが書かれて
  240. いる訳です。では、どんな構造になっているのか、PC-DOS 7.0/V のルートディレクトリーの
  241. ダンプを見てみましょう。
  242.  
  243. 0000   49 42 4D 42 49 4F 20 20-43 4F 4D 27 00 00 00 00   IBMBIO  COM'....
  244. 0010   00 00 00 00 00 00 00 38-E7 1E 02 00 06 A0 00 00   .......8........
  245. 0020   49 42 4D 44 4F 53 20 20-43 4F 4D 27 00 00 00 00   IBMDOS  COM'....
  246. 0030   00 00 00 00 00 00 00 38-E7 1E 08 00 EA 96 00 00   .......8........
  247.  
  248. この、情報は下記の様なフォーマットになっています。
  249.  
  250. 0                 08h     0Bh       10h       16h  18h  1Ah   1Ch          1Fh
  251. +---------------------------------------------------------------------------+
  252. |ファイル名       |拡張子|属| 予約   | 予約    |更新|更新|スタート| ファイル サイズ   |
  253. |                 |      |性|        |         |時刻|日付|クラスタ|             |
  254. +---------------------------------------------------------------------------+
  255.  
  256. 属性:01h 読みだし専用
  257.       02h かくしファイル
  258.       04h システムファイル
  259.       08h ボリュームラベル
  260.       10h サブディレクトリー
  261.       20h アーカイブ(保存)
  262.  
  263. 更新時刻                                更新日付
  264.   時(0~23)  分(0~59)  秒(0~29)×2   年(0~99)+1980  月(1~12) 日(1~31)
  265. +-----------+----------+----------+     +-------------+--------+----------+
  266. | 5 Bit     | 6 Bit    |  5 Bit   |     | 7 Bit       | 4 Bit  |  5 Bit   |
  267. +-----------+----------+----------+     +-------------+--------+----------+
  268.  
  269.  予約の領域は、Windows95 等で採用された、VFATとFAT32 で使われています。
  270. そして、次のような情報が入っています。
  271.  
  272. 0                                   08h        0Bh 0Ch 0Dh   0Eh          0Fh
  273. +---------------------------------------------------------------------------+
  274. |ファイル名                          | 拡張子  |属 |空|作成時| 作成時刻     |
  275. |                                    |         |性 |き|刻10ms| (2秒刻み)    |
  276. +---------------------------------------------------------------------------+
  277.  
  278. 10h      12h      14h      16h      18h       1Ah       1Ch               1Fh
  279. +---------------------------------------------------------------------------+
  280. |作成日付|アクセス|スタートクラスタ |更新時刻|更新日付 |スタートクラスタ | ファイル サイズ        |
  281. |        |   日付 |上位16Bit|        |         |下位16Bit|                  |
  282. +---------------------------------------------------------------------------+
  283.  
  284.  各々の、日付と時刻のフォーマットは、旧ディレクトリー フォーマットの更新時刻/日付と同じになっ
  285. ています。ただし作成時刻だけは、10ms 刻みで時刻が設定されます。
  286. オフセット 0Dh の領域には、0 ~ 199 の値がセットされ、これに 10ms を掛けた値が2
  287. 秒刻みの作成時刻と合わされて、作成時刻となります。
  288.  また、FATのエントリー情報も32Bitになる為、オフセット 14h からの16Bitと、オフセット 1Ahから
  289. の16Bitを合わせた32Bitがスタートクラスタのアドレスとなります。
  290. 余談ですが、オフセット 0Chは Windows95 では空きになっていますが、WindowsNTでは使用
  291. されています。WindowsNT では小文字と英記号で構成されたファイル名には、ロングファイル名
  292. を作成せずに、この 0Ch にフラグを立てる事でそれを表します。
  293.  
  294. 所で、この資料を見てお気付きと思いますが、この情報の中でファイルがボリューム上の何処
  295. の位置に在るのかを示す情報は、スタートクラスタしかありません。
  296. そもそも、クラスタ(cluster)ってなんでしょうか? 元々の意味は、群とか一かたまりと
  297. いう意味です。つまり、ここではセクターのかたまりという事になります。
  298.  元々フロッピーで使う上では、クラスタの概念は無く(つまり1クラスタが1セクター)大容量のディスクを
  299. サポートする為、2つ以上のセクターをひと括りにしてクラスタとして扱う事にしたのでした。
  300. 1クラスタあたり、何セクターかはそのボリュームの大きさによって変わってきます。
  301. 実は、計算の方法が在るのですが、それはこのツールの核心部分なんで内緒です(^^;
  302. そして、このクラスタは必ず2のべき乗でなければなりません。それで、1クラスタあたり
  303. のセクター数のエントリーは1バイトですから、最大値は80hという事になります。
  304. FAT16のボリュームあたりのクラスタ最大エントリー数は約64Kですから、FAT16の最大ボリュームは
  305.  
  306. 512(バイト/SEC)  × 80h(SEC/クラスタ) × 64K(FAT Entry) = 4GB
  307.  
  308. になります。実際、WindowsNTではFATで4GBまでのボリュームを作成できます。
  309. しかし、DOS や Windows95では、クラスタあたりのセクター数が 40hに制限されている為、
  310. 最大ボリュームは2GBになっています。
  311. FAT32 では、総セクター数が 32Bit の制限の方が先にきますから、
  312.  
  313. 512(バイト/SEC) × 4G(SEC Entry) = 2TB
  314.  
  315. で、最大ボリューム容量は 2TB になります。
  316.  
  317. (File Allocation Table)
  318.  ファイル アロケーション テーブルの頭のアルファベットを略してFATと言います。ファイルシステムの名称にも
  319. なっている制御情報部です。
  320. クラスタアドレスは、ある計算によってOSから見える論理アドレスに変換されます。
  321. そのファイルが1クラスタより小さければ、それで終わりなんですが1クラスタより大きければ、次
  322. に参照すべきクラスタアドレスを取得しなければなりません。
  323. FATは、このクラスタアドレスのチェインポインターが入っている領域なのです。
  324. そして、FAT16 ファイルシステムの 16とは、このクラスタアドレスのポインターが16ビットである事を表し
  325. ている訳です。16ビットだと、16進数で 0~FFFFh ですから10進数で 65536 個のエントリー
  326. があるのですが、幾つか予約されているため実際には FFF5h個(10進数65525)しか使用
  327. できません。予約されているエントリーは
  328.  
  329. 0000h: ボリューム識別 (未使用クラスタ)
  330. 0001h: ボリューム識別
  331.  
  332. FFF7h: 不良クラスタ
  333. FFF8h: HDDボリューム識別
  334.   |  : その他ボリュームの識別で予約
  335. FFFFh: クラスタ チェィンの最終
  336.  
  337. です。FAT の最初の領域は ディスクの場合メモリーイメージでは
  338.  F8 FF FF FF .....となっています。インテル系CPUでは、メモリーイメージはレジスタにラッチされた
  339. イメージと逆転しますから、これを16ビットデータと考えると FF F8  FF FF となります。
  340. つまり、FATエントリーの最初の2エントリーはボリューム識別用として使っていて実際のクラスタに割り
  341. 当てが行われていないのです。実際にFATのポインターがクラスタに割り当てられているのは
  342. 0002hからです。さあ、そこでクラスタアドレスを論理アドレスに変換する計算を考えてみまし
  343. ょう。
  344.  (クラスタアドレス-2)×クラスタあたりのセクター数 + BPB~ルートディレクトリーまでのセクター数
  345.                                                       =OSから見える論理セクター
  346.  
  347. (サブディレクトリー)
  348.  サブディレクトリーの構造はルートディレクトリーとほとんど同じですが、サブディレクトリーにだけ在る
  349. 特殊なディレクトリー "." と ".." があります。実際には、どの様になっているか見てみ
  350. ましょう。"C:\DOS" を指す、ディレクトリーのダンプです。
  351.  
  352. 0000   44 4F 53 20 20 20 20 20-20 20 20 10 00 69 0C 80   DOS        ..i..
  353. 0010   32 24 32 24 00 00 0D 80-32 24 1E 00 00 00 00 00   2$2$....2$......
  354.  
  355. これを見ると、このサブディレクトリーの本体がクラスタアドレスの "001E"hから始まっている事が
  356. 判ります。このボリュームのFATセクター数は100h(256セクター)、クラスタあたりのセクター数は10h(16セク
  357. ター)です。計算すると、
  358.  
  359. 100h(FATセクター数)×2 + 1(予約セクター) + 20h(ルートディレクトリー) 
  360.       + (001Eh-2)×10h(クラスタあたりのセクター数) = 3E1h(OSから見える論理アドレス)
  361.  
  362. ここをダンプしたのが、以下のリストです。
  363.  
  364. 0000   2E 20 20 20 20 20 20 20-20 20 20 10 00 69 0C 80   .          ..i..
  365. 0010   32 24 32 24 00 00 0D 80-32 24 1E 00 00 00 00 00   2$2$....2$......
  366. 0020   2E 2E 20 20 20 20 20 20-20 20 20 10 00 69 0C 80   ..         ..i..
  367. 0030   32 24 32 24 00 00 0D 80-32 24 00 00 00 00 00 00   2$2$....2$......
  368. 0040   44 41 54 41 20 20 20 20-20 20 20 10 00 BB 0D 80   DATA       .....
  369. 0050   32 24 32 24 00 00 0E 80-32 24 E6 01 00 00 00 00   2$2$....2$......
  370.  
  371. "." のディレクトリーには、自分自身のクラスタアドレスが、".."には、0000h が入っている事が
  372. 判ります。実は、"."は、自分自身のポインターで、".." は親ディレクトリーへのポインターなので
  373. す。そして、親ディレクトリーへのポインターが 0000h という事は、親ディレクトリーはルートである事
  374. を表しているのです。
  375. 何かの障害で、サブディレクトリーが失われても、"."と ".." がある場所が判れば、この様
  376. にDEBUGで手打ちで直す事も可能になります。
  377. そして、"." と ".." をディスクの中から探してきて、その場所とそこに書かれている
  378. クラスタアドレスを報告してくれるのが、このツールに含まれている "SUB_SRCH" なのです。
  379. ただし、どのディレクトリーが迷子であるかを判断して、自動的に復旧する機能は付いてい
  380. ないので、直すにはDEBUGが十分に使えて、この辺の理屈を良く理解している必要が
  381. あります。そのうち、時間があればこの辺の機能も充実させたいと思っています。
  382.  
  383. ●作業の手順
  384. <起動FDの作成>
  385.  まず、復旧する為には、マシンをFDから立ちあげて使える様にしなければなりません。
  386. また、このパッケージのツールは日本語にしか対応していませんので、最低日本語表示がで
  387. きる環境は必要です。その他、FDISK, CHKDSK, SCANDISK, SYS, DEBUG, FORMAT 等
  388. のボリュームを操作する為の、DOSコマンドも必要です。 壊れた時に、慌てて別のマシンで準備
  389. するより日頃から準備して置きましょう。
  390.  
  391. ・DOSの場合
  392.  C:\>FORMAT A: /S <Enter> で DOSシステムのFDを作成。
  393.  COPY コマンドで必要なファイルをコピー
  394.  CONFIG.SYS を作成
  395.  
  396.            <ファイルリスト と CONFIG.SYS の例>
  397. PC-DOS 7.0/V                            MS-DOS 6.2/V
  398. COMMAND  COM                            COMMAND  COM
  399. $JPNHN16 FNT                            ANK16    FNT
  400. $JPNHN19 FNT                            ANK19    FNT
  401. $JPNZN16 FNT                            KANJI16  FNT
  402. $SYS1Z16 FNT                            KANJI24  FNT
  403. $SYS1Z24 FNT                            JFONT    SYS
  404. $FONT    SYS                            JDISP    SYS
  405. $DISP    SYS                            BILING   SYS
  406. COUNTRY  SYS                            FDISK    COM
  407. FDISK    COM                            FDISK    EXE
  408. FDISKUS  COM                            FDISK2   EXE
  409. FORMAT   COM                            FORMAT   COM
  410. SYS      COM                            SYS      COM
  411. DEBUG    COM                            DEBUG    EXE
  412. HIMEM    SYS                            HIMEM    SYS
  413. CHKDSK   COM                            CHKDSK   EXE
  414.                                         SCANDISK COM
  415.                                         SCANDISK EXE
  416.                                         SCANDISK INI
  417.                                         SCANDSK2 EXE
  418. KEYB     COM                            JKEYB    SYS
  419. KEYBOARD SYS                            JKEYBRD  SYS
  420. CONFIG   SYS                            CONFIG   SYS
  421.  
  422. CONFIG.SYS (PC-DOS 7.0/V)                CONFIG.SYS(MS-DOS 6.2/V)
  423. COUNTRY=081,932,A:\COUNTRY.SYS           DEVICE=HIMEM.SYS
  424. DEVICE=HIMEM.SYS                         DEVICE=BILING.SYS
  425. DEVICEHIGH=$FONT.SYS                     DEVICE=JFONT.SYS /P=A:\
  426. DEVICEHIGH=$DISP.SYS                     DEVICE=JDISP.SYS
  427. INSTALL=KEYB.COM JP,932,A:\KEYBOARD.SYS  DEVICE=JKEYB.SYS /106 A:\JKEYBRD.SYS
  428. DOS=HIGH                                 DOS=HIGH
  429.  
  430. ・Windows95 の場合
  431.  立ち上げ画面 -> スタート -> 設定 -> コントロールパネル -> アプケーションの追加と削除 
  432. 起動ディスク -> ディスクの作成
  433.  
  434. 作成された、フロッピーはDOSで作成するものと同じように、日本語DOSプロンプトで立ち上が
  435. りボリューム操作のコマンドも入っています。このパッケージのツールも、このプロンプトから使用す
  436. る事ができます。
  437.  
  438. <ボリュームの見え方>
  439.  まず、前章で作成したフロッピーを使ってマシンを立ちあげて、障害が起こったディスクが
  440. FDISKでどの様に見えるか確認します。
  441. ・FDISKで領域が確保されているのか?
  442. ・ファイルシステムは正常に見えるか?
  443.  
  444. FDISKで領域が見えないのであれば、MBRの障害の可能性が濃厚です。もし、ディスク
  445. そのものが存在しないというメッセージであれば、ディスクがハード的な障害によってレディー
  446. 状態になっていないと考えられます。
  447.  もし、FDISKでディスクが認識できなければ、これはハードの障害なのでソフト的な復旧は難
  448. しいです。申し訳ありませんが、ディスク メカの交換およびバックアップデータのリストアしか方法
  449. がありません。
  450. 最後の手段で、同形のディスクがあればディスク メカに付いている基板を交換して動く事もあ
  451. りますが、この手の作業はプロの業者にやって貰った方が良いでしょう。
  452. ハードディスクに付いている基板も、実はメカに対して微妙に調整されており、また基板に書
  453. かれているファームウェアーにもバージョンがあって、下手をすると基板・メカとも成仏させてし
  454. まいかねません。実は、プロの修理エンジニアですら、この辺の作業は滅多にやらないも
  455. のなのです。
  456.  もし、FDISKで領域が正常で、ファイルシステムが正常に見えるのなら、DIR コマンドで見てみ
  457. ましょう。中のファイルが正常に見えるのなら、結構な事でCHKDSKやSCANDISKをかけてバック
  458. アップを取るなり、このパッケージ内のHDD_COPYでイメージコピーを取っておけば良いでしょう。
  459. 「DOSで認識出来ないボリュームです」なんて出るようであれば、BPBの破壊の可能性が濃
  460. 厚です。
  461.  
  462. <メディア系エラーのチェック>
  463.  前章の操作で、「セクターが見つかりません」とか「C:ドライブの読み込み中エラー」なんて
  464. でるようであれば、メディア系エラーです。ローレベル フォーマットによって直すという事が、昔は
  465. まあできる事もありましたが、現在では難しいでしょう。
  466. ローレベルフォーマッターも最近のディスクには付いてこない方が、当たり前になっていると思いま
  467. す。ソフトフォーマットをかけても使えないディスクは、新しいディスクに交換した方が無難です。
  468.  何にせよ、おかしくなったディスクに対しては一度 HDD_TEST をかけて、ボリューム系のエラー
  469. が無い事を確認する事をお勧めします。
  470.  
  471. <ボリュームのイメージコピー>
  472.  メディア系のエラーが発生してファイルが見れなくなったディスクは、別のディスクにコピーしてボリューム
  473. の修復を行います。イメージ コピーして修復するメリットは、
  474. ・ハード的な障害は回復されており、さらにハードを壊す事がない
  475. ・修復に失敗しても、もう一度コピーをすれば何度も試行修復ができる
  476.  
  477. という事です。この辺が、プロとの違いと言っても良いくらいで、2次故障を引き起
  478. こす事を、プロは一番おそれます。HDD_COPY の操作方法は、MANUAL.TXT を読んでく
  479. ださい。
  480.  
  481. <BOOTの保存と"FDISK /MBR">
  482.  さて、ディスクにメディア系のエラーが無い事が確認できた方。または、イメージコピー(HDD_COPY)
  483. で、新しいディスクにコピーができた方。これらのボリュームをOSから認識させる作業の開始で
  484. す。
  485.  まず、障害のディスクを1台目に接続して、他のディスクを外しましょう。ディスクが1台し
  486. か付いていない人は、そのままでかまいません。
  487. まず、先に作った立ち上げフロッピーで立ち上げて、FDISKでディスクが見れる事を確認しま
  488. す。それから、
  489. ・BOOT_SAV で MBR と BPB(と、思われる領域)を保存します。
  490. ・"FDISK /MBR" とプロンプトから打って、ください。
  491.  この操作によりMBRに書かれている、BOOT プログラムだけを修復します。
  492.  
  493. <BOOT_RCV,MBR_UTILの使用>
  494. もし、このディスクが 2GB未満で全て基本パーティーションのみであったなら BOOT_RCV をかけれ
  495. ば、ほとんど MBR と BPB の領域は自動修復出来ます。
  496. FAT32 であったならば、FAT32RCV をかけて、その後 BPB2MBR をかけます。
  497. 全領域が拡張パーティーションだった場合には、MBR_UTIL で拡張DOSパーティーションを作成して下さ
  498. い。なお、拡張パーティーションのBPB修復プログラムは、まだ出来ていません。作る事は、それ
  499. 程難しくはないので次のバージョンには入れたいと思います。
  500. MBR2BPB というツールを作成する予定です。
  501.  もし、全領域が基本パーティーションでなかった場合は、BPB2MBR で BPB からの修復をか
  502. けます。もし、BPB が生きていれば、MBR のパーティーションテーブルを再生成して復旧します。
  503.  
  504.  今までの作業でうまくいかなかった場合には、最終手段で MBR を強制書き換えで元
  505. のデータに近い形で再割付けします。そして、 BOOT_RCV /MBR で復旧を試みます。
  506. この方法は、やや乱暴ですから気をつけて行ってください。また、FAT32 ではこの方法
  507. は使えません。
  508.  
  509. これまでの作業で、ボリュームが正常に見えるようになればしめたものです。しかし、ルート
  510. ディレクトリーが壊れていると、ファイルが無いように見えます。
  511. この場合には、SUB_SRCH を使ってサブディレクトリーを検索して、DEBUG で サブディレクトリーを
  512. 復旧すれば、サブディレクトリー下のファイルは復旧出来る事があります。
  513. この辺も、次のバージョンでちょっと考えてみます。自分自身が、DEBUGで直す事を
  514. 苦にしないもので、どういう作りにしたらいいのか、アイデアが浮かびません。
  515.  今までのサポートの中で、結構クイックフォーマットしてしまったというのが多くてびっくり
  516. した印象があります。これは、SUB_SRCH のログからルートディレクトリーを復旧して、S_COPY
  517. でコピーするという方法で、元々のファイルが連続していれば復旧できます。
  518. 実際には、この方法でほとんど復旧できています。迷子のディレクトリーを検出してという
  519. と結構大変なのですが、親ディレクトリーがルートディレクトリーだけを復旧するというのは、結構
  520. 簡単にできるかもしれませんが、。MBR と BPB が正しいかどうかのジャッジをプログラム
  521. にやらせるのは、ちょっと不安ですね(^^;
  522.  
  523. <最後に>
  524.  シェアウェアとして公開してみて、色々とおもしろい障害パターンにあたったり、どうし
  525. たらこんなボリュームを作成できるのか、不思議なボリュームに出会ったりして、結構忙しい
  526. 日々をすごしてきました。そんな中で、新しいツール BPB2MBR と、S_COPY が出来た
  527. 訳です。でも、サポート上で一番活躍しているのが、SUB_SRCH です。
  528. SUB_SRCH も、ログの採取機能や、HDDの選択の機能をつけてあげないとかわいそうで
  529. すね(^^;
  530. これからも、みなさんの意見を反映して、よりよいソフトにしていきたいと思いま
  531. す。ご意見などございましたら、メールにてお知らせください。
  532.  
  533. ==================================
  534. nbe01171@nifty.ne.jp
  535. matsuda-toshiaki@my.email.ne.jp
  536.  
  537. 松田 利昭
  538. ==================================
  539.