■Disk Salvage tools - for FAT16/FAT32, Copyright(C) 1998 by Toshiaki Matsuda Version 1.10 (1998-8-15) ●ディスク サルベージの手引き ・サルベージ(Salvage)とは、手元の辞書では「救助(救済)する」という意味だそうで  ここでは、読めなくなったディスクのデータを回収する事を指します。 ●基礎知識  ここでは、サルベージに必要な基本的なハードウェアーと、FAT16/FAT32ファイルシステムについて解 説します。もう、知っていると言われる方は、次の章の「作業の手順」を読んでくだ さい。 <ディスクの基礎知識>  ハードディスクドライブは密閉されていますが、中ではフロッピーの様な磁気円盤が回転して います。この磁気円盤の上を、磁気ヘッドが動作(seek(シーク)といいます)して、この 磁気円盤の磁気の変化を読み取り、あるいは磁気変化を磁気円盤に書き込んで、それ を0-1のデジタル信号に変換してコンピュータの外部記憶装置として使っている訳です。 データがビット単位では、効率が悪いのでディスクでは、データ アクセスの最少単位をセクター (Sector)として扱います。このセクター(Sector)は、元々は「扇形」という意味です。 IBM互換機では、この1セクターは 512バイトになっています。 以下、このマニュアルで "SEC" の省略英語は、このセクターを指すものとします。 「扇形」の言葉からも判る通り、このセクターは幾つか集まると円になります。 この円の1つを、トラック(Track)といいます。元々の意味は「通った跡、運動場のトラック レコードの溝」という意味だそうです。このマニュアルではトラックの省略英語は使っていません が、通常は"TRK" 等が使われています。 このマニュアルではトラックではなくシリンダー(Cylinder)の方を使っています。 シリンダーの元々の意味は「円筒形、円柱」という意味だそうです。トラックは、単一の円だ けを指すのに対し、シリンダーは同位置に在る別の磁気面の円の全て指す意味がありま す。以下、"CYL" の省略英語はシリンダーを指すものとします。 磁気円盤が1枚しかなければ、裏と表で磁気ヘッドは2つで足りますが、磁気円盤が増 えれば、磁気ヘッドは磁気面の分だけ必要になります。 このヘッド(Head)は、元々は「頭」という意味ですが、カセットの磁気ヘッドと同じように、 ハードディスクでも使われています。 以下、"HED" の省略英語は、この磁気ヘッドを指すものとします。  さて、ディスクのデータを参照するには、どんな方法が一番良いでしょうか? ディスクは、効率良くデータを転送する為になるべくSeek動作を少なくして動作します。 ですから、まず、セクターのアドレスが更新されて、セクターのアドレスがいっぱいになったら、 ヘッドのアドレスが更新されて、最後にシリンダーのアドレスが更新されるといった動作になりま す。  さて、私のマシンで "HDD_TEST"をかけると以下のように表示をします。 >>HDD Read Test Ver 1.0 Copyright(C) 1998 by Toshiaki Matsuda >>BIOS から認識されるHddパラメータ:706CYL-31HED-63SEC >>物理パーテーション#1: >> Boot標識: 80  パーテーション種別: 6 >> スタートアドレス: 0CYL-1HED-1SEC  エンドアドレス: 519CYL-31HED-63SEC >> スタート論理アドレス: 3Fh  総セクター数: FFEC1h  ここで注意しなければならない事は、CYL と HED のアドレスは 0 から始まりますが、 セクターのアドレスは 1 から始まるという事です。これは、元々MS-DOSがフロッピーのファイルシステム として作られた事に起因しています。普通の、大型のコンピュータはセクターも 0 から始まり ます。 ですから、「BIOS から認識されるHddパラメータ:706CYL-31HED-63SEC」という事は CYL は 0〜706 で 707本、HED は 0〜31 で 32個、SEC は 1〜63 で 63個という事に なります。このディスクの物理的な容量は何 MBでしょか? 707CYL × 32HED × 63SEC × 512 Byte = 729759744 Byte という事で、約720MB という事になります。 ところで、今のいわゆるEnhanced IDEと言われるディスクは、実はこの CYL-HED-SEC は 物理的には、余り意味をもちません。私の720MBのディスクは、HEDが32個在ると BIOSは 申告していますが、あの小さな3.5"のディスクに、本当に磁気円盤が16枚も入るもので しょうか? 結論から言えばナンセンスで、私のディスクは型番からは磁気円盤は2枚しか入っていないはず です。ですから、磁気ヘッドも当然、裏と表で4個という事になります。 では、なぜBIOSは、この様なディスクパラメータを返してくるのでしょうか? これは、HDD BIOS インターフェースの仕様の問題で、CYL 0〜1023 HED 0〜255 SEC 1〜63 までしかアクセスできない為です。その為、新しいPC98規格では INT 13h BIOS が拡張さ れています。とりあえず、旧 BIOS INT13h規格では上記のパラメータしか扱えないと考え てください。 Enhanced IDEでは、本当の物理パラメータをLBA(Logical Brock Address)に変換後、INT 13h のBIOS インターフェースに都合の良いパラメータに変換したものを、OSに提供しています。 ですから、物理的な CYL-HED-SEC はどうあれ、BIOSから見えるパラメータを真のディスクパラ メータとして扱わなければなりません。  なお、Winodws95 OSR2、Windows98 では拡張 INT 13h を使ってFDISK で領域確保 が可能です。拡張 INT 13h をサポートした修復ツールは、次のバージョン (2.0) で 実現します。本バージョンの制限事項として、 ・ボリュームの最大容量は 約 8.3GB まで ・LBA 変換されたボリュームと、拡張 INT 13h から見える ボリューム容量とで若干容量が  違って見える場合があります。LBA 変換された方が少し小さくみえます。本ツール  では、LBA 変換された方を正しい値として扱います。  もしかして、ボリュームの最後の最後までデータが入っていれば、そのデータが見えなく  なる事も考えられます。  (これはFATファイルシステムの性格上、データの修復には問題無いと考えていますが) <物理アドレスと論理アドレス>  OSのインターフェースとして、CYL-HED-SEC といった物理的なアドレスを使ってデータを書く事 は、普通は行いません。(やろうと思えば、AX=440Dh INT21h で可能) この手の操作は、BIOSコールを使うのが一般的です。 通常のファイルへの参照は、システムコールを使用し、それ以外の直接ディスクを参照する方法は、 INT 25hとINT 26hが用意されています。ただし、FAT32では INT 25h、INT 26hを使う 事ができません。FAT32 では、AX=7305h INT 21hを使う必要があります。  INT 25hとINT 26h、または AX=7305h INT 21h は、OSから見える論理アドレス (または、論理セクタ-とも言います)に対して、読み書きを行う機能です。 ここで、あえて「OSから見える論理アドレス」と書いたのは、OSで見えないセクターがある からです。このOSから見えないセクターが、隠しセクターと言われるもので、ファイルシステムの基本 パラメータにそのセクター数が書かれています。 そしてこのセクター数は、ディスクの先頭に書かれているマスターブートレコードの、パーティーションテーブ ルの「パーティーション開始 論理アドレス」と同じ値になります。計算方法を教えますので、 どうしてそうなるか、考えてみてください。 0CYL-0HED-1SEC を論理セクター 0とした時の 論理アドレス = CYL×(HED数×SEC数)+HED×(SEC数)+SEC−1 OSから見える論理アドレス = 上論理アドレス − 隠しセクター数  このOSから見える論理アドレスは、ファイルシステムの基本パラメータである"BIOSパラメータブロック"が 正常でなければ、OSから使う事はできません。 それから、この論理アドレスはDEBUGからも使用できますが、ほとんどの場合この論理アド レスと、後に述べるクラスタ(cluster)は、16進数で使用します。 自分でディスクをサルベージする時には、16進数が計算できる電卓を使うのが良いでしょう。 <FAT16 ファイルシステム>  ハードディスクに、DOSまたはWindows95をインストールすると次のような制御情報がディスクに 作成されます。 +---+-----+---+--------+--------+---------------+---------------------------+ |MBR|隠し |BPB| FAT(1) | FAT(2) |ルートディレクトリ- | データ領域 | | |セクタ- |&OS| | | | | | | |BOO| | | | | | | | T| | | | | +---+-----+---+--------+--------+---------------+---------------------------+ ↑ ↑ 0CYL-0HED | -1SEC | 0CYL-1HED-1SEC (MBR マスターブートレコード)  ディスクの先頭に在る、"FDISK"によって作成される制御セクターです。 この領域には、OSのBOOTセクターを読み込むプログラムと、パーティーションテーブルがあります。 パーティーションテーブルは、1エントリー16バイトで最大4つまで作成可能です。 パーティーションテーブルには、 ・ブート標識(1バイト) ・開始物理アドレス(3バイト) ・パーティーション種別(1バイト) ・終了物理アドレス(3バイト) ・開始論理アドレス(4バイト) ・総セクター数(4バイト) の情報が書かれています。 ブート標識: 80hでアクティブパーティーション(BOOT可能),00hで非BOOT パーティション種別: 0C FAT32 ,拡張 INT 13hの最大領域で確保されたパーティーション 0B FAT32 ,従来の INT13hで確保されたパーティーション 06 32MB超の FAT16パーティーション 05 拡張DOSパーティーション 04 32MB以下の FAT16パーティーション 01 FAT12パーティーション  このパッケージに含まれている"MBR_UTIL"は、これらの情報を強制的に書き換えます。 変更できるパラメータは、  ブート標識、パーティーション種別、開始物理アドレス(CYLとHEDのみ、SECは1に固定)  終了物理アドレス(CYLのみ、HED,SECは最大パラメータに固定) になっています。開始論理アドレスと、総セクター数はプログラムで計算します。 後述しますが、書き換えるのはパーティーションテーブルのみです。BOOT プログラムの部分は書き 換えませんので、作業に先立ち"FDISK /MBR"をかけて作業を開始してください。 本当は、この後のBPBもそうなんですが、バイナリーイメージをプログラムに抱え込んでも良かっ たんですが、著作権の問題(当然、ここに書かれているプログラムはMSが著作権者)があ るので書き換えは、パラメータのみにしてMBRは"FDISK /MBR"で対応。BPB に在るOS BOOT は、そのOSでフォーマットしたFDから読み取りという事にしました。 (かくしセクター)  正確には、MBRからBPBの直前までのセクターが、かくしセクターになります。 OSからは、BPBがあるセクターをその論理ドライブの論理セクター 0とします。よって、その論理 ドラブの論理セクターを、本当の論理アドレス(0CYL-0HED-1SECを論理セクター 0とした)に変換す るには、かくしセクター数を加算する必要があります。 (BPB & OS BOOT)  ここには、FATファイルシステムの基本パラメータである"BIOSパラメータブロック"と、そのOSを立ちあ げる為のプログラムが入っています。 この立ち上げプログラムは、フロッピーをフォーマットした時に作成されるものと同じものです。 このパッケージの"BOOT_RCV"では、BPBは新たに作成しますが、OS BOOTはフロッピーから読 んで復旧します。ただし、FAT32 ではフロッピーから復旧できないので、BPBのみの修復 になります。BOOTシステムにするには、">SYS C:"としてBOOTプログラムを再投入する必要が あります。 BPBは以下の様な構造になっています。なお、以前のマニュアルに判りずらいとの指摘があ ったので、BPBセクターの先頭からのデータを全て書きます。 ・BOOT までのショート ジャンプ命令 + NOP 命令:3バイト ・OEM名(MSDOS5.0やMSWIN4.0等):8バイト ・セクター当りのバイト数(IBM-PC/ATでは512):2バイト ・クラスタ当りのセクター数(ボリュームの大きさで変化):1バイト ・予約セクター数(通常 1):2バイト ・FATの数(通常 2):1バイト ・ルートディレクトリ-エントリー数(HDDでは512):2バイト ・総セクター数(65536以上なら0):2バイト、 ・メディアタイプ(HDDでは F8h):1バイト ・FATのセクター数(ボリュームの容量で変化):2バイト ・BIOS から見えるセクター数:2バイト ・BIOS から見えるヘッド数:2バイト ・かくしセクター数:4バイト ・総セクター数(65536以上):4バイト ・OSデータ(BOOT ボリュームなら 80h 00h 29h):3バイト ・ボリュームシリアル番号:4バイト ・ボリュームラベル:11バイト ・ファイルシステム名称("FAT16"か"FAT12"):8バイト ・BOOT までのショート ジャンプ命令 + NOP 命令:3バイト ・OEM名(MSWIN4.1):8バイト ・セクター当りのバイト数(IBM-PC/ATでは512):2バイト ・クラスタ当りのセクター数(ボリュームの大きさで変化):1バイト ・予約セクター数(通常 20h):2バイト ・FATの数(通常 2):1バイト ・ルートディレクトリ-エントリー数(FAT32 では 0):2バイト ・総セクター数(FAT32 では 0):2バイト、 ・メディアタイプ(HDDでは F8h):1バイト ・FATのセクター数(FAT32 では 0):2バイト ・BIOS から見えるセクター数:2バイト ・BIOS から見えるヘッド数:2バイト ・かくしセクター数:4バイト ・総セクター数:4バイト ・FATセクター数(FAT32専用):4バイト ・アクティブFAT/ミラーフラグ(通常 0):2バイト ・ファイルシステムバージョン(通常 0):2バイト ・ルートディレクトリー開始クラスタ(通常 00000002):4バイト ・FSINFO位置(通常 0001):2バイト ・予備 BOOT セクターアドレス(通常 0006):2バイト ・OSデータ(BOOT ボリュームなら 80h 00h 29h):3バイト ・ボリュームシリアル番号:4バイト ・ボリュームラベル:11バイト ・ファイルシステム名称("FAT32"):8バイト ここの、かくしセクター数はMBRに書かれているパーティーションの開始論理アドレスと同じもの が、総セクター数もMBRと同じ値が入ります。もし違っていたら、、、きっと大変な事が 起こっていると思います(^^; ディスクの最初にパーティーションを作成し、DOSまたはWindows95をインストールすると、このBPB は、必ず 0CYL-1HED-1SEC に作成されます。 (ルート ディレクトリー)  ディレクトリーは、ルートに限らず32バイトで構成されています。ディレクトリー(Directory)とは 元々は、人名簿とか住所録という意味です。ここに、ファイル本体のプロフィールが書かれて いる訳です。では、どんな構造になっているのか、PC-DOS 7.0/V のルートディレクトリーの ダンプを見てみましょう。 0000 49 42 4D 42 49 4F 20 20-43 4F 4D 27 00 00 00 00 IBMBIO COM'.... 0010 00 00 00 00 00 00 00 38-E7 1E 02 00 06 A0 00 00 .......8........ 0020 49 42 4D 44 4F 53 20 20-43 4F 4D 27 00 00 00 00 IBMDOS COM'.... 0030 00 00 00 00 00 00 00 38-E7 1E 08 00 EA 96 00 00 .......8........ この、情報は下記の様なフォーマットになっています。 0 08h 0Bh 10h 16h 18h 1Ah 1Ch 1Fh +---------------------------------------------------------------------------+ |ファイル名 |拡張子|属| 予約 | 予約 |更新|更新|スタート| ファイル サイズ | | | |性| | |時刻|日付|クラスタ| | +---------------------------------------------------------------------------+ 属性:01h 読みだし専用 02h かくしファイル 04h システムファイル 08h ボリュームラベル 10h サブディレクトリー 20h アーカイブ(保存) 更新時刻 更新日付 時(0〜23) 分(0〜59) 秒(0〜29)×2 年(0〜99)+1980 月(1〜12) 日(1〜31) +-----------+----------+----------+ +-------------+--------+----------+ | 5 Bit | 6 Bit | 5 Bit | | 7 Bit | 4 Bit | 5 Bit | +-----------+----------+----------+ +-------------+--------+----------+  予約の領域は、Windows95 等で採用された、VFATとFAT32 で使われています。 そして、次のような情報が入っています。 0 08h 0Bh 0Ch 0Dh 0Eh 0Fh +---------------------------------------------------------------------------+ |ファイル名 | 拡張子 |属 |空|作成時| 作成時刻 | | | |性 |き|刻10ms| (2秒刻み) | +---------------------------------------------------------------------------+ 10h 12h 14h 16h 18h 1Ah 1Ch 1Fh +---------------------------------------------------------------------------+ |作成日付|アクセス|スタートクラスタ |更新時刻|更新日付 |スタートクラスタ | ファイル サイズ | | | 日付 |上位16Bit| | |下位16Bit| | +---------------------------------------------------------------------------+  各々の、日付と時刻のフォーマットは、旧ディレクトリー フォーマットの更新時刻/日付と同じになっ ています。ただし作成時刻だけは、10ms 刻みで時刻が設定されます。 オフセット 0Dh の領域には、0 〜 199 の値がセットされ、これに 10ms を掛けた値が2 秒刻みの作成時刻と合わされて、作成時刻となります。  また、FATのエントリー情報も32Bitになる為、オフセット 14h からの16Bitと、オフセット 1Ahから の16Bitを合わせた32Bitがスタートクラスタのアドレスとなります。 余談ですが、オフセット 0Chは Windows95 では空きになっていますが、WindowsNTでは使用 されています。WindowsNT では小文字と英記号で構成されたファイル名には、ロングファイル名 を作成せずに、この 0Ch にフラグを立てる事でそれを表します。 所で、この資料を見てお気付きと思いますが、この情報の中でファイルがボリューム上の何処 の位置に在るのかを示す情報は、スタートクラスタしかありません。 そもそも、クラスタ(cluster)ってなんでしょうか? 元々の意味は、群とか一かたまりと いう意味です。つまり、ここではセクターのかたまりという事になります。  元々フロッピーで使う上では、クラスタの概念は無く(つまり1クラスタが1セクター)大容量のディスクを サポートする為、2つ以上のセクターをひと括りにしてクラスタとして扱う事にしたのでした。 1クラスタあたり、何セクターかはそのボリュームの大きさによって変わってきます。 実は、計算の方法が在るのですが、それはこのツールの核心部分なんで内緒です(^^; そして、このクラスタは必ず2のべき乗でなければなりません。それで、1クラスタあたり のセクター数のエントリーは1バイトですから、最大値は80hという事になります。 FAT16のボリュームあたりのクラスタ最大エントリー数は約64Kですから、FAT16の最大ボリュームは 512(バイト/SEC) × 80h(SEC/クラスタ) × 64K(FAT Entry) = 4GB になります。実際、WindowsNTではFATで4GBまでのボリュームを作成できます。 しかし、DOS や Windows95では、クラスタあたりのセクター数が 40hに制限されている為、 最大ボリュームは2GBになっています。 FAT32 では、総セクター数が 32Bit の制限の方が先にきますから、 512(バイト/SEC) × 4G(SEC Entry) = 2TB で、最大ボリューム容量は 2TB になります。 (File Allocation Table)  ファイル アロケーション テーブルの頭のアルファベットを略してFATと言います。ファイルシステムの名称にも なっている制御情報部です。 クラスタアドレスは、ある計算によってOSから見える論理アドレスに変換されます。 そのファイルが1クラスタより小さければ、それで終わりなんですが1クラスタより大きければ、次 に参照すべきクラスタアドレスを取得しなければなりません。 FATは、このクラスタアドレスのチェインポインターが入っている領域なのです。 そして、FAT16 ファイルシステムの 16とは、このクラスタアドレスのポインターが16ビットである事を表し ている訳です。16ビットだと、16進数で 0〜FFFFh ですから10進数で 65536 個のエントリー があるのですが、幾つか予約されているため実際には FFF5h個(10進数65525)しか使用 できません。予約されているエントリーは 0000h: ボリューム識別 (未使用クラスタ) 0001h: ボリューム識別 FFF7h: 不良クラスタ FFF8h: HDDボリューム識別 | : その他ボリュームの識別で予約 FFFFh: クラスタ チェィンの最終 です。FAT の最初の領域は ディスクの場合メモリーイメージでは F8 FF FF FF .....となっています。インテル系CPUでは、メモリーイメージはレジスタにラッチされた イメージと逆転しますから、これを16ビットデータと考えると FF F8 FF FF となります。 つまり、FATエントリーの最初の2エントリーはボリューム識別用として使っていて実際のクラスタに割り 当てが行われていないのです。実際にFATのポインターがクラスタに割り当てられているのは 0002hからです。さあ、そこでクラスタアドレスを論理アドレスに変換する計算を考えてみまし ょう。 (クラスタアドレス-2)×クラスタあたりのセクター数 + BPB〜ルートディレクトリーまでのセクター数 =OSから見える論理セクター (サブディレクトリー)  サブディレクトリーの構造はルートディレクトリーとほとんど同じですが、サブディレクトリーにだけ在る 特殊なディレクトリー "." と ".." があります。実際には、どの様になっているか見てみ ましょう。"C:\DOS" を指す、ディレクトリーのダンプです。 0000 44 4F 53 20 20 20 20 20-20 20 20 10 00 69 0C 80 DOS ..i.. 0010 32 24 32 24 00 00 0D 80-32 24 1E 00 00 00 00 00 2$2$....2$...... これを見ると、このサブディレクトリーの本体がクラスタアドレスの "001E"hから始まっている事が 判ります。このボリュームのFATセクター数は100h(256セクター)、クラスタあたりのセクター数は10h(16セク ター)です。計算すると、 100h(FATセクター数)×2 + 1(予約セクター) + 20h(ルートディレクトリー) + (001Eh-2)×10h(クラスタあたりのセクター数) = 3E1h(OSから見える論理アドレス) ここをダンプしたのが、以下のリストです。 0000 2E 20 20 20 20 20 20 20-20 20 20 10 00 69 0C 80 . ..i.. 0010 32 24 32 24 00 00 0D 80-32 24 1E 00 00 00 00 00 2$2$....2$...... 0020 2E 2E 20 20 20 20 20 20-20 20 20 10 00 69 0C 80 .. ..i.. 0030 32 24 32 24 00 00 0D 80-32 24 00 00 00 00 00 00 2$2$....2$...... 0040 44 41 54 41 20 20 20 20-20 20 20 10 00 BB 0D 80 DATA ..... 0050 32 24 32 24 00 00 0E 80-32 24 E6 01 00 00 00 00 2$2$....2$...... "." のディレクトリーには、自分自身のクラスタアドレスが、".."には、0000h が入っている事が 判ります。実は、"."は、自分自身のポインターで、".." は親ディレクトリーへのポインターなので す。そして、親ディレクトリーへのポインターが 0000h という事は、親ディレクトリーはルートである事 を表しているのです。 何かの障害で、サブディレクトリーが失われても、"."と ".." がある場所が判れば、この様 にDEBUGで手打ちで直す事も可能になります。 そして、"." と ".." をディスクの中から探してきて、その場所とそこに書かれている クラスタアドレスを報告してくれるのが、このツールに含まれている "SUB_SRCH" なのです。 ただし、どのディレクトリーが迷子であるかを判断して、自動的に復旧する機能は付いてい ないので、直すにはDEBUGが十分に使えて、この辺の理屈を良く理解している必要が あります。そのうち、時間があればこの辺の機能も充実させたいと思っています。 ●作業の手順 <起動FDの作成>  まず、復旧する為には、マシンをFDから立ちあげて使える様にしなければなりません。 また、このパッケージのツールは日本語にしか対応していませんので、最低日本語表示がで きる環境は必要です。その他、FDISK, CHKDSK, SCANDISK, SYS, DEBUG, FORMAT 等 のボリュームを操作する為の、DOSコマンドも必要です。 壊れた時に、慌てて別のマシンで準備 するより日頃から準備して置きましょう。 ・DOSの場合  C:\>FORMAT A: /S で DOSシステムのFDを作成。  COPY コマンドで必要なファイルをコピー  CONFIG.SYS を作成 <ファイルリスト と CONFIG.SYS の例> PC-DOS 7.0/V MS-DOS 6.2/V COMMAND COM COMMAND COM $JPNHN16 FNT ANK16 FNT $JPNHN19 FNT ANK19 FNT $JPNZN16 FNT KANJI16 FNT $SYS1Z16 FNT KANJI24 FNT $SYS1Z24 FNT JFONT SYS $FONT SYS JDISP SYS $DISP SYS BILING SYS COUNTRY SYS FDISK COM FDISK COM FDISK EXE FDISKUS COM FDISK2 EXE FORMAT COM FORMAT COM SYS COM SYS COM DEBUG COM DEBUG EXE HIMEM SYS HIMEM SYS CHKDSK COM CHKDSK EXE SCANDISK COM SCANDISK EXE SCANDISK INI SCANDSK2 EXE KEYB COM JKEYB SYS KEYBOARD SYS JKEYBRD SYS CONFIG SYS CONFIG SYS CONFIG.SYS (PC-DOS 7.0/V) CONFIG.SYS(MS-DOS 6.2/V) COUNTRY=081,932,A:\COUNTRY.SYS DEVICE=HIMEM.SYS DEVICE=HIMEM.SYS DEVICE=BILING.SYS DEVICEHIGH=$FONT.SYS DEVICE=JFONT.SYS /P=A:\ DEVICEHIGH=$DISP.SYS DEVICE=JDISP.SYS INSTALL=KEYB.COM JP,932,A:\KEYBOARD.SYS DEVICE=JKEYB.SYS /106 A:\JKEYBRD.SYS DOS=HIGH DOS=HIGH ・Windows95 の場合  立ち上げ画面 -> スタート -> 設定 -> コントロールパネル -> アプケーションの追加と削除 起動ディスク -> ディスクの作成 作成された、フロッピーはDOSで作成するものと同じように、日本語DOSプロンプトで立ち上が りボリューム操作のコマンドも入っています。このパッケージのツールも、このプロンプトから使用す る事ができます。 <ボリュームの見え方>  まず、前章で作成したフロッピーを使ってマシンを立ちあげて、障害が起こったディスクが FDISKでどの様に見えるか確認します。 ・FDISKで領域が確保されているのか? ・ファイルシステムは正常に見えるか? FDISKで領域が見えないのであれば、MBRの障害の可能性が濃厚です。もし、ディスク そのものが存在しないというメッセージであれば、ディスクがハード的な障害によってレディー 状態になっていないと考えられます。  もし、FDISKでディスクが認識できなければ、これはハードの障害なのでソフト的な復旧は難 しいです。申し訳ありませんが、ディスク メカの交換およびバックアップデータのリストアしか方法 がありません。 最後の手段で、同形のディスクがあればディスク メカに付いている基板を交換して動く事もあ りますが、この手の作業はプロの業者にやって貰った方が良いでしょう。 ハードディスクに付いている基板も、実はメカに対して微妙に調整されており、また基板に書 かれているファームウェアーにもバージョンがあって、下手をすると基板・メカとも成仏させてし まいかねません。実は、プロの修理エンジニアですら、この辺の作業は滅多にやらないも のなのです。  もし、FDISKで領域が正常で、ファイルシステムが正常に見えるのなら、DIR コマンドで見てみ ましょう。中のファイルが正常に見えるのなら、結構な事でCHKDSKやSCANDISKをかけてバック アップを取るなり、このパッケージ内のHDD_COPYでイメージコピーを取っておけば良いでしょう。 「DOSで認識出来ないボリュームです」なんて出るようであれば、BPBの破壊の可能性が濃 厚です。 <メディア系エラーのチェック>  前章の操作で、「セクターが見つかりません」とか「C:ドライブの読み込み中エラー」なんて でるようであれば、メディア系エラーです。ローレベル フォーマットによって直すという事が、昔は まあできる事もありましたが、現在では難しいでしょう。 ローレベルフォーマッターも最近のディスクには付いてこない方が、当たり前になっていると思いま す。ソフトフォーマットをかけても使えないディスクは、新しいディスクに交換した方が無難です。  何にせよ、おかしくなったディスクに対しては一度 HDD_TEST をかけて、ボリューム系のエラー が無い事を確認する事をお勧めします。 <ボリュームのイメージコピー>  メディア系のエラーが発生してファイルが見れなくなったディスクは、別のディスクにコピーしてボリューム の修復を行います。イメージ コピーして修復するメリットは、 ・ハード的な障害は回復されており、さらにハードを壊す事がない ・修復に失敗しても、もう一度コピーをすれば何度も試行修復ができる という事です。この辺が、プロとの違いと言っても良いくらいで、2次故障を引き起 こす事を、プロは一番おそれます。HDD_COPY の操作方法は、MANUAL.TXT を読んでく ださい。 <BOOTの保存と"FDISK /MBR">  さて、ディスクにメディア系のエラーが無い事が確認できた方。または、イメージコピー(HDD_COPY) で、新しいディスクにコピーができた方。これらのボリュームをOSから認識させる作業の開始で す。  まず、障害のディスクを1台目に接続して、他のディスクを外しましょう。ディスクが1台し か付いていない人は、そのままでかまいません。 まず、先に作った立ち上げフロッピーで立ち上げて、FDISKでディスクが見れる事を確認しま す。それから、 ・BOOT_SAV で MBR と BPB(と、思われる領域)を保存します。 ・"FDISK /MBR" とプロンプトから打って、ください。  この操作によりMBRに書かれている、BOOT プログラムだけを修復します。 <BOOT_RCV,MBR_UTILの使用> もし、このディスクが 2GB未満で全て基本パーティーションのみであったなら BOOT_RCV をかけれ ば、ほとんど MBR と BPB の領域は自動修復出来ます。 FAT32 であったならば、FAT32RCV をかけて、その後 BPB2MBR をかけます。 全領域が拡張パーティーションだった場合には、MBR_UTIL で拡張DOSパーティーションを作成して下さ い。なお、拡張パーティーションのBPB修復プログラムは、まだ出来ていません。作る事は、それ 程難しくはないので次のバージョンには入れたいと思います。 MBR2BPB というツールを作成する予定です。  もし、全領域が基本パーティーションでなかった場合は、BPB2MBR で BPB からの修復をか けます。もし、BPB が生きていれば、MBR のパーティーションテーブルを再生成して復旧します。  今までの作業でうまくいかなかった場合には、最終手段で MBR を強制書き換えで元 のデータに近い形で再割付けします。そして、 BOOT_RCV /MBR で復旧を試みます。 この方法は、やや乱暴ですから気をつけて行ってください。また、FAT32 ではこの方法 は使えません。 これまでの作業で、ボリュームが正常に見えるようになればしめたものです。しかし、ルート ディレクトリーが壊れていると、ファイルが無いように見えます。 この場合には、SUB_SRCH を使ってサブディレクトリーを検索して、DEBUG で サブディレクトリーを 復旧すれば、サブディレクトリー下のファイルは復旧出来る事があります。 この辺も、次のバージョンでちょっと考えてみます。自分自身が、DEBUGで直す事を 苦にしないもので、どういう作りにしたらいいのか、アイデアが浮かびません。  今までのサポートの中で、結構クイックフォーマットしてしまったというのが多くてびっくり した印象があります。これは、SUB_SRCH のログからルートディレクトリーを復旧して、S_COPY でコピーするという方法で、元々のファイルが連続していれば復旧できます。 実際には、この方法でほとんど復旧できています。迷子のディレクトリーを検出してという と結構大変なのですが、親ディレクトリーがルートディレクトリーだけを復旧するというのは、結構 簡単にできるかもしれませんが、。MBR と BPB が正しいかどうかのジャッジをプログラム にやらせるのは、ちょっと不安ですね(^^; <最後に>  シェアウェアとして公開してみて、色々とおもしろい障害パターンにあたったり、どうし たらこんなボリュームを作成できるのか、不思議なボリュームに出会ったりして、結構忙しい 日々をすごしてきました。そんな中で、新しいツール BPB2MBR と、S_COPY が出来た 訳です。でも、サポート上で一番活躍しているのが、SUB_SRCH です。 SUB_SRCH も、ログの採取機能や、HDDの選択の機能をつけてあげないとかわいそうで すね(^^; これからも、みなさんの意見を反映して、よりよいソフトにしていきたいと思いま す。ご意見などございましたら、メールにてお知らせください。 ================================== nbe01171@nifty.ne.jp matsuda-toshiaki@my.email.ne.jp 松田 利昭 ==================================