home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2003 April
/
VPR0304.ISO
/
OLS
/
SALVAG11
/
SALVAG11.LZH
/
MANUAL.TXT
< prev
next >
Wrap
Text File
|
1998-08-15
|
26KB
|
638 lines
■Disk Salvage tools - for FAT16/FAT32, Copyright(C) 1998 by Toshiaki Matsuda
Version 1.10 (1998-8-15)
本パッケージに含まれる、プログラムの機能のリファレンスマニュアルです。これらのプログラムは、
MS-DOS 5.0/V 6.2/V 、PC-DOS 6.1/V 6.3/V 7.0/V、 Windows95(DOS PROMPT)
Windows98(DOS PROMPT)で動作します。
現在、私が認識している制限事項として次の2点があります。
・修復できるHDDの最大容量は、8.3GB までです。これは、現在のツールが旧
INT 13hを用いている為であり、拡張 INT 13h を使ったツール群をただいま
開発中です。拡張 INT 13h を使ったツール群は、Ver2.0 になる予定です。
・上記の記述と関連しますが、FAT32のBPB修復において、拡張INT 13h を使って領域
が確保されていた場合(パーティーション種別 0Ch だった場合)修復されたBPBは元のBPB
よりも総セクター数が小さくなります。ファイルが、このボリュームの最後の方まで配置されて
いた場合には、切り捨てられたセクターのデータが見えなくなると考えられますが、通
常は、問題無いでしょう(^^;
その様な場合には、メールを頂ければ、こちらで修復したBPBを送付致します。
<注意>
これらのプログラムは、直接BIOS(INT 13h)を呼び出して、CYL-HED-SEC の情報で読
み書きを行います。ですから「SALVAGE.TXT」で説明する、立ち上げフロッピーから実行
してください。
また、ウイルスプロテクションの常駐ソフトや、BIOS機能等は外した状態で使用してください。
文章の中には、CYL,HED,SEC,FAT 等の略英語や、クラスター,マスターブートレコード等のDOSで使わ
れる専門用語が出てきます。ある程度は、「SALVAGE.TXT」で説明していますので、
そちらを参照してください。また、それ以上の事を知りたい方は、様々な書籍が出ま
わっていますので、そちらを参照してください。
それからコマンドの引数についてですが、大文字・小文字はどちらでもかまいません。
また、オプションスイッチは例えば "/S" でも "-S" でも、どちらでも使えます。
このマニュアルでは、DOSの標準に従って、"/"の表記で統一します。
● HDD_TEST.EXE [80,81,82...] [/S] [/C:MIN-MAX] [/L:Log-File]
ディスクの、シーケンシャルリードテストです。メディア系のエラーが、ディスクにあるかどうかをテストしま
す。もしこのテストでエラーが発生し、そのエラー箇所がデータ領域であれば、"SCANDISK" の
クラスタースキャン により、読めないセクターを不良クラスタ-として登録する事で、不良セクターをソフト的
に排除(不使用にする)する事ができます。
ただし、エラー箇所がFATや、ルートディレクトリー、またはマスターブートレコードやBIOSパラメータブロックの
領域だった場合には、別のHDDにコピーして修復する必要があります。
テストの最初に、BIOSから見えるディスクパラメータと、マスターブートレコードに書かれているパーティー
ションテーブル 情報を表示します。
テスト中は <ESC> で中止する事ができます。
<引数>
・[80,81,82...]
BIOSから見える、ディスクのユニット番号を16進数で指定します。BIOSからはハードディスクの
ユニット番号は、HDD#1 -> 80h、HDD#2 -> 81h、HDD#3 -> 82h の様に見えます。
省略すると、"80" となり HDD#1のテストが開始されます。
・[/S]
このオプションが無い場合には、エラーのアドレスは CYL- HED のみしか表示されません。
SECアドレスは 0 と表示されます。(0 SEC というアドレスは存在しない)
これは、データの読み込みはトラック単位で行われて、エラーはそのトラックのアドレスを報告するか
らです。"/S"オプションを付ける事により、エラーの発生したトラックに対して1SECずつのセクター
リードを行い、セクターまでのアドレスを表示します。ただし、エラーの無いディスクでは遅くなる事
はありませんが、エラーのあるディスクではかなり遅くなります。
・[/C:MIN-MAX]
テストする、CYLアドレスの範囲を指定します。この指定がなければ、全CYLに対して
テストが行われます。指定は、例えば "/C:0-100" の様に行って、この例では 0CYL
から 100CYL までテストを行います。
・[/L:Log-File]
ログを採取するオプションです。ログは必ず "A:"ドライブに作られますので、装置名は
指定しないでください。ファイル名は任意の "PATH名\ファイル名" で、かまいませんが同名
のファイルがあった場合には、以前のログが在るものと判断し、アペンドモードでログを
採取します。ログ採取は、日付・時刻を書きますので、それでいつのテストログか見分け
てください。
<実行例>
A:\>HDD_TEST /L: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
物理パーテーション#2:
Boot標識: 0 パーテーション種別: 5
スタートアドレス: 520CYL-0HED-1SEC エンドアドレス: 706CYL-31HED-63SEC
スタート論理アドレス: FFF00h 総セクター数: 5C0A0h
Hdd の全トラックのリードテストを実施します。
ログ採取の指定がされています。
ログを採取するフォーマット済みのFDをセットして<Enter>を押してください。
Read address: 8 cyl- 14 hed
<ログの見方>
>>HDD Read Test Ver 1.0 Copyright(C) 1998 by Toshiaki Matsuda
>>1998-02-11 11:14:45 Test Error log:
>>
>> 12cyl- 2hed- 62sec エラー (10h)
コピーライトメッセージと、日付・時刻は必ずログに残ります。以下、エラーがあった場合にはBIOS
から見える、物理アドレス(10進数)と、エラーステータス(16進数)が採取されます。
基本的には、画面に表示する内容と同じものがファイルにテキスト形式で残ります。
エラーステータスは、BIOSが返してくれる1バイトのコードで、以下の内容になります。
(00h) エラー無し,正常終了 (01h) 無効な機能またはパラメータを指定
(02h) アドレスマークが見つからない (04h) セクターが見つからない
(05h) リセットに失敗 (07h) ドライブパラメータアクティビティーが失敗
(08h) DMAオーバーラン (09h) データ境界エラー
(0Ah) 不良セクターフラグ検出 (0Bh) 不良シリンダー検出
(0Dh) フォーマットにおける無効なセクター数 (0Eh) 制御データアドレスマーク検出
(0Fh) DMAアトリビューションレベルが範囲外 (10h) 訂正不能なECCエラー,CRCエラー
(11h) 訂正可能なECCエラー (12h) コマンド処理中
(13h) ドライブの電源が入っていない (20h) 制御装置の障害
(40h) Seek操作の障害 (80h) タイムアウト
(AAh) ドライブ動作不可 (BBh) 確定できないエラー
(CCh) 書き込み障害 (E0h) 状況エラー / エラーレジスタ = 0
(FFh) Sense操作の失敗
一般に、メディア系のエラーでよく見かけるのは、(10h),(04h),(02h)あたりです。
この辺が発生しているようだと、ディスクの磁気面か、あるいは磁気ヘッドの障害と考え
てかまいません。それから、通常は(11h)は通知してきません。
もしこれ以外のエラーであれば、ディスク メカ 以外の故障も有り得えます。
エラーのステータスや、障害の状況によって判断し、原因を突き止める事が大切です。
● HDD_COPY.EXE [/C:mini-max][/R:Retry count][/L:logfile]
ディスクのイメージコピーを行います。コピーは、HDD#1(80h) -> HDD#2(81h)に対して行われ
ます。ディスクの BIOS パラメータは、HED数とSEC数が一致していればコピーができます。
ただし、ワーク側(コピー先)のCYL数がマスター側(コピー元)より小さい場合には"/C"オプション
で、コピーするシリンダーをBIOSパラメータより小さく取る必要があります。
"HDD_TEST" と同じように、コピーの最初にBIOSから見えるディスクパラメータと、マスターブート
レコードに書かれている、パーティーションテーブル情報を表示します。これは、逆コピーを防ぐ意味
もあります。
また、マスター側ではエラーがあってもプログラムは継続しますが、ワーク側はエラーが無い事を前提
にしています。ワーク側のディスクは、最初に"HDD_TEST"をかけて、エラーがない事を確認して
コピーを行ってください。ワーク側でエラーがあった場合には、プログラムは異常終了します。
ライト時には 再リードを行って データのコンペア チェック を行っています。
「コンペアエラー」のメッセージが出た場合には、ディスクだけではなく、ケーブルや M/B に
異常がないか、よく確認して作業を進めてください。
コピー中でも<ESC>キーによって、中断は可能です。
<引数>
・[/C:MIN-MAX]
コピーする、CYLアドレスの範囲を指定します。この指定がなければ、マスター側(コピー元)
の全CYLに対してコピーが行われます。ワーク側(コピー先)のシリンダー数が、マスター側より、小
さい場合には、必ずワーク側のシリンダー数以下の数値を指定する必要があります。
・[/R:Retry count]
メディア系のエラーでは、何度か読み込みを繰り返すうちに読める事があります。
このオプションでは、ソフトウェアのリトライ回数を指定します。このオプションが指定されなければ、
リトライは行われません。
・[/L:Log-File]
ログを採取するオプションです。機能は、"HDD_TEST"と同じです。
<実行例>
A:\>hdd_copy /c:520-600 /r:5
HDD Image Copy Tool Ver 1.0 Copyright(C) 1998 by Toshiaki Matsuda
--- マスターディスク(コピー元 80h)のディスク情報 ---
BIOS から認識されるHddパラメータ:706CYL-31HED-63SEC
物理パーテーション#1:
Boot標識: 80 パーテーション種別: 6
スタートアドレス: 0CYL-1HED-1SEC エンドアドレス: 519CYL-31HED-63SEC
スタート論理アドレス: 3Fh 総セクター数: FFEC1h
物理パーテーション#2:
Boot標識: 0 パーテーション種別: 5
スタートアドレス: 520CYL-0HED-1SEC エンドアドレス: 706CYL-31HED-63SEC
スタート論理アドレス: FFF00h 総セクター数: 5C0A0h
確認したら<Enter> を押してください...
--- ワークディスク(コピー先 81h)のディスク情報 ---
BIOS から認識されるHddパラメータ:825CYL-31HED-63SEC
物理パーテーション#1:
Boot標識: 0 パーテーション種別: 5
スタートアドレス: 1CYL-0HED-1SEC エンドアドレス: 825CYL-31HED-63SEC
スタート論理アドレス: 7E0h 総セクター数: 1960E0h
確認したら<Enter> を押してください...
HDDのイメージコピーを本当に開始しても良いですか?(Y / N):y
Hdd の指定されたトラックのイメージコピーを実施します。
Copy address: 522 cyl- 7 hed
<ログの見方>
ログの見方は、"HDD_TEST"と同じです。ログには、マスター側(コピー元)のリードできな
かった、BIOSから見える物理アドレスとステータスが採取されます。
● BOOT_SAV.EXE save-file [/R]
後に述べる、"MBR_UTIL"と、"BOOT_RCV"は、ディスクの マスターブートレコード0CYL-0HED-1SEC
と、BIOSパラメータブロックの領域を強制的に書き換えます。BOOT_SAV は、修復作業に先立っ
て、これらの BOOT SECTOR を"A:"フロッピーに保存します。
以前のバージョン 1.0 では、HDD#1(80h)のみに対応でしたが、本バージョンから他のHDD
にも対応しました。それに伴って、保存する情報に HDD#,CYL,HED,SEC の情報をファイル
に保存するようにしています。また、ファイルIDを以前のバージョンと変えていますが、旧バ
ージョンで保存したファイルは、このバージョンでも戻す事が可能です。
CYL,HED,SEC の情報を保存ファイルに登録できるので、現在ではサポート用の PATCH ツールとし
ても活躍しています。他のツールで、PATCHを貼る場合にはPATCHするセクターを保存しますが
その保存されたセクターを戻すツールとしても使用します。
保存した、情報を戻す場合には、"/R"オプションを付けます。また、同名ファイルが在る場
合には、上書きするか聞いてきます。
<実行例>
A:\>BOOT_SAV MBR_BPB.SAV
Boot Sector Save&Restore Ver 1.1 Copyright(C) 1998 by Toshiaki Matsuda
ディスクの BOOT 領域を保存します。
保存するHDDのドライブ番号を指定して下さい(80,81,82,...87):80
MBR & BPB を保存するフォーマット済みのFDをセットして<Enter>を押してください。
BOOT領域の保存は正常に行われました!
A:\>BOOT_SAV /R MBR_BPB.SAV
Boot Sector Save&Restore Ver 1.1 Copyright(C) 1998 by Toshiaki Matsuda
ディスクの BOOT 領域をFDDから復元します。
MBR & BPB を保存したFDをセットして<Enter>を押してください。
これは、boot_sav の新バージョン1.1で保存されたファイルです。
保存されているセクターは HDD#80, 0CYL-0HED-1SEC です。
復元しますか?(Y,y / etc):Y
セクターの復元は正常に完了しました。
保存されているセクターは HDD#80, 0CYL-1HED-1SEC です。
復元しますか?(Y,y / etc):Y
セクターの復元は正常に完了しました。
全ての保存されたセクターの復元は完了しました。
A:\>
● MBR_UTIL.EXE
ディスクの先頭には、ディスクの領域のどこからどこまでを、どんなOSで何の目的で使
っているかを書いたパーティーションテーブルといわれる情報があります。
このプログラムは、それを強制的に書き換えます。操作できるディスクは、HDD#1(80h)
のみとなります。
なお、引数はありません。書き込んだ内容を見ながら操作をすると思い、コマンド式
(1文字コマンド)にしました。
<操作の実際>
A:\>MBR_UTIL <-- DOSのプロンプトから引数無しで起動します
Master Boot Record Patch Tool 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
物理パーテーション#2:
Boot標識: 0 パーテーション種別: 5
スタートアドレス: 520CYL-0HED-1SEC エンドアドレス: 706CYL-31HED-63SEC
スタート論理アドレス: FFF00h 総セクター数: 5C0A0h
処理:>> (作業プロンプト) <Enter>キーで、使用できる1文字コマンドを表示します
P(atch)-> パーティーションの強制書き換え
M(ax) Partition-> 区画#1に最大の FAT16 パーティーションを割り付け
E(xtended)DOS Partition-> 残領域に拡張 パーティーションを割り付け
B(PB) to MBR-> BIOS パラメータブロックから MBR 区画#1を修復
<ESC> : プログラム終了
処理:>> P (強制書き換えの例、左側の括弧の中は書き換え前の情報です)
書き換えるパーティション番号を入力 (1-4 / etc):1
パーティーション種別:(6h)-> 6
ブート標識:(80h)-> 80
スタートアドレス:(0)CYL-> 0
スタートアドレス:(1)HED-> 1
エンドアドレス:(519)CYL-> 519
***** 書き換えられた物理パーテーション#1 *****
Boot標識: 80 パーテーション種別: 6
スタートアドレス: 0CYL-1HED-1SEC エンドアドレス: 519CYL-31HED-63SEC
スタート論理アドレス: 3Fh 総セクター数: FFEC1h
修正したパーティーション情報を、本当にディスクに書きますか?( Y,y / etc):Y
マスターブートテーブルは、更新されました。
書き換えるパーティション番号を入力 (1-4 / etc):(1~4以外の数字を入れると戻ります)
+++++++++++++++++++++++++++++++++ 省略 ++++++++++++++++++++++++++++++++++++++
処理:>> M (最大パーティーションの割付け例、2GB 超のHDD では、2GB 割付けられます)
最大パーティーションを区画#1に作成し、FAT16を割り当てます。
ディスクの容量が2GB以下の為、ディスクの全領域をFAT16に割り当てます。
***** 書き換えられた物理パーテーション#1 *****
Boot標識: 80 パーテーション種別: 6
スタートアドレス: 0CYL-1HED-1SEC エンドアドレス: 706CYL-31HED-63SEC
スタート論理アドレス: 3Fh 総セクター数: 15BF61h
修正したパーティーション情報を、本当にディスクに書きますか?( Y,y / etc):Y,y以外は中止
自信が無さそうなのでやめました!
<ESC>キーを押してください。
+++++++++++++++++++++++++++++++++ 省略 ++++++++++++++++++++++++++++++++++++++
処理:>> B (0CYL-1HED-1SEC にある、BPB から逆生成して作成の例)
BIOSパラメータブロックからマスターブートテーブルを逆生成して、区画#1を作成します。
***** 書き換えられた物理パーテーション#1 *****
Boot標識: 80 パーテーション種別: 6
スタートアドレス: 0CYL-1HED-1SEC エンドアドレス: 519CYL-31HED-63SEC
スタート論理アドレス: 3Fh 総セクター数: FFEC1h
修正したパーティーション情報を、本当にディスクに書きますか?( Y,y / etc):Y
マスターブートテーブルは、更新されました。
<ESC>キーを押してください。
+++++++++++++++++++++++++++++++++ 省略 ++++++++++++++++++++++++++++++++++++++
処理:>> E (ディスクの残り容量の全てを拡張DOSパーティーションに割り当て)
このディスクの残容量を全て拡張DOS領域に割り当てます。
未使用の全領域を拡張DOSに割り当て、区画#2とします。
***** 書き換えられた物理パーテーション#2 *****
Boot標識: 0 パーテーション種別: 5
スタートアドレス: 520CYL-0HED-1SEC エンドアドレス: 706CYL-31HED-63SEC
スタート論理アドレス: FFF00h 総セクター数: 5C0A0h
修正したパーティーション情報を、本当にディスクに書きますか?( Y,y / etc):Y
マスターブートテーブルは、更新されました。
<ESC>キーを押してください。
● BOOT_RCV.EXE [/NO-OS] [/MBR]
基本的には、パーティションテーブル#1に在るFAT16のBIOSパラメータブロックを修復するTOOLです。
DOS や Windows95 のOSで管理される領域の先頭には、ファイルシステムの基本パラメータが書か
れていて、これをBIOSパラメータブロック(略してBPB)といいます。
もし、修復するディスクが2GB 以下のボリュームで、FAT16のパーティーションを1つだけ作っていた
のであれば、このプログラムですぐに修復ができます。
この時は、マスターブートレコードのパーティションテーブルも同時に修復します。
ただし、FATが正常である(FATの識別子が定位置に在る)事が必要です。
また、この領域はBPBだけでは無くOSを立ちあげる為のBOOTストラップがあります。
BOOTストラップは、フロッピーをフォーマットした際にフロッピーにも作られますので、BOOTストラップはフロッ
ピーから読んで復旧します。
ただし、BOOTディスクではない場合には、BOOTストラップは不要ですから、その場合には
"/NO-OS" オプションで読まずに済ます事もできます。
もし、それらの復旧に失敗したら、マスターブートレコードのパーティションテーブルのパラメータを使って
修復を試みます。
このプログラムも、HDD#1(80h)のみで実行可能です。
<引数>
・[/NO-OS]
BPB修復の際に、OSのBOOTストラップをフロッピーから読み込みません。
・[/MBR]
BPBのパラメータを、マスターブートレコードのパーティションテーブルのパラメータを使って修復します。
このオプションが無ければ、このディスク全てが FAT16 の基本領域だったと判断し FATの位
置からBPBのパラメータを計算します。そして、もし計算が合わなければ、マスターブートレコード
からBPBの修復を試みます。
<実行例>
A:\>BOOT_RCV
Boot recover tool Ver 1.0 Copyright(C) 1998 by Toshiaki Matsuda
BIOS から認識されるHddパラメータ:706CYL-31HED-63SEC です。
このボリュームの最大パーテーションは、論理セクター数:15BF61h、隠しセクター数:3Fh です。
FATセクター数は、100h(256d)と認定されました。
クラスターあたりのセクター数が正しく計算できません。
マスターブートレコードの情報を使って、BISOパラメータブロックの修復を試みます。
物理パーテーション#1:
Boot標識: 80 パーテーション種別: 6
スタートアドレス: 0CYL-1HED-1SEC エンドアドレス: 519CYL-31HED-63SEC
スタート論理アドレス: 3Fh 総セクター数: FFEC1h
マスターブートレコード#1に、FAT16のパーティーションを検出しました!
マスターブートレコードと BIOSから見えるHDDパラメータに矛盾はありません。
このパーティーションの総セクター数は FFEC1h と認定されました。
FATセクター数は、100h(256d)と認定されました。
クラスターあたりのセクター数は、10h(16d) と、認定されました。
以上のパラメータで、BPBのパラメータを復旧してもいいですか?(Y/N): Y
MS-DOS,PC-DOS または Windows95 の BOOT ストラップを読み込みます。
復旧するOSでフォーマットしたFDをセットしてください。
準備ができたら <Enter> を押して下さい。
MBR と BPB の復旧は完了しました!
● SUB_SRCH.EXE
マスターブートレコードと、BIOSパラメータブロックが修復できれば、DEBUG等で論理セクターアクセスが可能
となり、NORTN UTILITY 等も使用できる様になります。
このTOOLは、DEBUGを使って失われたサブディレクトリーを復旧するのを、支援するものです。
実は、このツールはユーザーサポートにおいて、一番活躍しています(^^;
何をやっているかと言うと、HDD#1(80h)のセクターの全てをリードして "."と".." の在る
セクターアドレスを報告し、なおかつ"." と ".." の書かれている アドレスも報告します。
ログ採取の機能が無いので、ログを採取するには、
プロンプトから、 "A:\>SUB_SRCH.EXE >SUB_SRCH.LOG" と操作します。
間違っても、カレントドライブがHDDの時には リダイレクト ">" を使わないで下さい (^^;
具体的な修復は、"SALVAGE.TXT"のディレクトリーの構造と復旧を見てください。
<実行例>
Sub-directory Search 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
物理パーテーション#2:
Boot標識: 0 パーテーション種別: 5
スタートアドレス: 520CYL-0HED-1SEC エンドアドレス: 706CYL-31HED-63SEC
スタート論理アドレス: FFF00h 総セクター数: 5C0A0h
Hdd のサブディレクトリー検索を実施します。
0-16-49 3E1 1E 0
4-4-37 2061 1E6 1E
5-10-27 29B1 27B 0
5-12-29 2A31 283 0
5-13-14 2A61 286 0
5-28-61 2E41 2C4 0
9-26-27 4D21 4B2 1E
10-9-42 50E1 4EE 4B2
↑ ↑ ↑ ↑
物理アドレス | | |
| | |
パーティーション#1から | |
数えた論理セクター | |
| |
"."のクラスターアドレス |
|
".."のクラスターアドレス
● BPB2MBR.EXE [80,81,82...]
本来は、FDISK でパーティーションを開放した場合には MBR_UTIL でパーティーションテーブルを書き
直すつもりだったのですが、普通の人には MBR_UTIL でパーティーションテーブルを書き直す事
は、中々難しい事が判りました。そこで、簡単に修正するために、本ツールを開発し
ました。一応、FDISK で領域を開放した場合には、BPB2MBR をかけるだけで、ほとん
ど修復できると考えています。BPB2MBRは、FAT32 にも対応しています。
引き数には、BIOS から見える HDD# を指定します。HDD#1=80h HDD#2=81h になりま
す。指定がなければ、80h が指定された事になりますが、"80" を引き数として指定し
た場合には、最初のパーティーションをアクティブパーティーションにセットします。
このツールは文字通り、BPB から MBR を逆生成するツールです。アルゴリズムとしては、
2CYL分を検索して、FATのBPBを検出し残りのボリュームがあれば、さらにその次のシリンダー
を2CYL分検索。そして、全てのボリューム領域を使いきるか、物理パーティーションテーブルが4つ
になった時に修復した内容を表示して、書き換え指示を仰ぎ "Y" が入力されれば、
MBR をフロッピーに保存して、MBR を書き換えます。そして、保存されたセクター情報は、
BOOT_SAV Ver1.1 で戻す事ができます。
このプログラムの欠点として、拡張DOSパーティーションの論理ドライブが、基本DOSパーティーシ
ョンになってしまう事があります。データの修復としては、全く問題はないのですが、
私の開発環境である、PC-DOS J7.0/V の場合、復旧された 2つ目のパーティーション D: を
フォーマットしようとした所、C: を D: の BPB でフォーマットしてしまう不具合が発生しまし
た。これは、IBM 版 PC-DOS 7.0/V 特有の問題なのかどうかは、判りませんが、
(WindowsNT では、そういう形のパーティーション作成がOKなので問題無いと思います)
もし、基本DOSパーティーションが同一HDD内に2つ以上になった場合、フォーマット時には一旦削除
して、再度パーティーションを作成して行う方が無難でしょう。
<実行例>
A:\>BPB2MBR 80 (Enter)
BPB Search & MBR Generator Ver 1.0 Copyright(C) 1998 by Toshiaki Matsuda
BIOS から認識されるHddパラメータ:758CYL-7HED-39SEC
Read address: 1 cyl- 7 hed
BIOSパラメータ ブロック検出アドレス: 0CYL-1HED-1SEC
ファイルシステム: FAT16 , 総セクター数: 39CE1
スタート論理アドレス: 27 , エンド物理アドレス: 758CYL-7HED-39SEC
****** 書き換えられたパーティーションテーブル ******
物理パーテーション#1:
Boot標識: 80 パーテーション種別: 6
スタートアドレス: 0CYL-1HED-1SEC エンドアドレス: 758CYL-7HED-39SEC
スタート論理アドレス: 27h 総セクター数: 39CE1h
修正したパーティーション情報を、本当にディスクに書きますか?( Y,y / etc):Y
書き換えるMBR をFDに保存します。保存するファイル名を入力して下さい:MBR.SAV
マスターブートテーブルは、更新されました。
A:>
● FAT32RCV.EXE [80,81,82...]
FAT32のBPBを自動的に修復するプログラムです。1台のHDD全てに、FAT32 のパーティーシ
ョンが割り付けられていたボリュームしか、現在対応しておりません。
制限事項として、このマニュアルの冒頭で書いた様に、拡張INT 13h で割り付けられたパー
ティーションを復旧した場合に、ボリュームの総セクター数が小さくなる場合があります。
また、BOOT_RCVではフロッピーのBOOT ストラップを読み込んで、直ちにBOOT可能なボリュームを
作る事が出来たのですが、FAT32ではそれができません。
ですから、BOOTボリュームにするにはプロンプトから "A:\>SYS C:" を行う必要があります。
また、マスターブートレコード(パーティーションテーブル)の修復は行わないので、MBRを修復するには
"FDISK /MBR" と、BPB2MBR を行う必要があります。
引き数は、BIOSから見えるHDDのユニット番号を付けます。引き数がなければ、HDD#1
(80h)が指定されたものと判断します。PATCH を行う前に、そのセクター情報はフロッピー
に保存し、保存された情報はBOOT_SAV で戻す事ができます。
アルゴリズムについてですが、最初に 内部的に "SUB_SRCH" と同じプログラムが動いて
サブディレクトリーを2つ検出します。そして、このサブディレクトリーの情報から、クラスタあたりの
セクター数と大体のFATセクター数、BPBが在ったと思われるセクター位置を計算します。
そして、元々BPBが在ったのは、BIOSから見える物理アドレスが 1SEC であろうという
予測で計算をくり返して、正確なパラメータをはじき出します。
バージョン V1.0 -> V1.1の修正で、FAT セクター数の計算において、実際値と計算値の誤差
見込みを1から6に増やしています。が、これは計算ロジックが怪しい為ではなくて
拡張INT 13h を使って領域が確保された場合、旧INT 13h から見える総セクター数よりも
大きな領域が確保されてしまい、旧 INT 13h から見える領域を正しい値とした時に
計算値が、小さい方向へずれてしまう為です。
これは、拡張INT 13h を使った次のバージョンでは解消される予定です。FAT のファイルシステム
では、ボリュームの最初の方から使用されて、最後の方は使用される事が少ないので、デー
タの復旧という点に関しては、問題は無いでしょう。
ただし、未使用領域が小さくなるので、FSINFOと矛盾が生じます。BPB 修復後は、
SCANDISK をかけて未使用領域の FSINFO との矛盾を修正して下さい。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<実行例>
A:\>fat32rcv 80
FAT32 BPB Generator Ver 1.1 Copyright(C) 1998 by Toshiaki Matsuda
BIOS から認識されるHddパラメータ:706CYL-31HED-63SEC
FAT32 の BPB を指定されたディスクに復旧します。
指定されたディスクの全領域に FAT32 がインストールされていましたね?(Y,y/etc):y
*** サブディレクトリー の検索中です ***
Read address: 30 cyl- 29 hed
クラスタ当たりのセクター数:8h
FATセクター数:571h
BPB が在ったと推測される論理アドレス:3Fh
ボリュームの総セクター数:15BF61h
BPB が在ったと推測される物理アドレス: 0CYL-1HED-1SEC
修正したBIOS パラメータ ブロック を、本当にディスクに書きますか?( Y,y / etc):y
書き換えるBPB をFDに保存します。保存するファイル名を入力して下さい:bpb_sav.img
BIOS パラメータ ブロックは、更新されました。
マスターブートレコードを修復するには、BPB2MBR をかけてください。
A:\>bpb2mbr 80
BPB Search & MBR Generator Ver 1.0 Copyright(C) 1998 by Toshiaki Matsuda
BIOS から認識されるHddパラメータ:706CYL-31HED-63SEC
Read address: 1 cyl- 31 hed
BIOSパラメータ ブロック検出アドレス: 0CYL-1HED-1SEC
ファイルシステム: FAT32 , 総セクター数: 15BF61
スタート論理アドレス: 3F , エンド物理アドレス: 706CYL-31HED-63SEC
****** 書き換えられたパーティーションテーブル ******
物理パーテーション#1:
Boot標識: 80 パーテーション種別: B
スタートアドレス: 0CYL-1HED-1SEC エンドアドレス: 706CYL-31HED-63SEC
スタート論理アドレス: 3Fh 総セクター数: 15BF61h
修正したパーティーション情報を、本当にディスクに書きますか?( Y,y / etc):y
書き換えるMBR をFDに保存します。保存するファイル名を入力して下さい:mbr_sav.img
マスターブートテーブルは、更新されました。
A:\>
● S_COPY.EXE source-file destination-drive
FATの情報が無くなった場合、ファイルをコピーしようとしてもクラスタ以上の容量はコピーす
る事ができません。S_COPY は、FATの情報が失われた状態で、ディレクトリーの情報から
データ(クラスタ)が全て連続しているものとしてコピーするツールです。
特にクイックフォーマットを行った後に、中のデータを取り出すのに威力を発揮します。
Ver1.3 になってFAT32 にも対応し、不具合点もそこそこ無くなってきたと自負して
います。なお、FATの情報を見ないでデータが連続しているものとしてコピーをしている
ので、元々のデータが連続していなければ正しく復旧されません。
定期的に、DEFRAG をかけていたり、ボリュームの残り容量が十分に余っている場合など
には、ほとんど復旧できると思います。
(実際に、レジストして頂いたユーザーさんに使って頂いて、復旧に成功しています)
引き数の source-file は、カレント装置のカレントディレクトリーのファイルしか指定できません。
また、PATHの指定はできません。souce-file は、ピリオドを含んで最大12バイトまでしか
指定する事ができません。ですから、S_COPY.EXE は、環境変数 "PATH=" のあるディレク
トリーにコピーしておくのが良いでしょう。なお、ワイルドカード "*" "?" は使用できます。
引き数の destination-drive は、装置しか指定できません。装置は、"a:" や"d:"
の様に、2文字で指定します。その指定された装置のカレントディレクトリーに、sorce-file
と同じ名前のファイルを作成して、データをコピーします。destination 側に、同じファイル名が
在った場合には無条件に上書きします。
<実行例>
C:\SALVAGE.110>s_copy *.* a:
Stream Copy Tool Ver 1.3 Copyright(C) 1998 by Toshiaki Matsuda
ファイルシステムはFAT16/12 です。
ファイル名:HDD_TESTEXE
クラスタアドレス:1DFAh
ファイル容量:18053
ファイル論理アドレス:79CFh
ファイル名:HDD_COPYEXE
クラスタアドレス:1E11h
ファイル容量:19917
ファイル論理アドレス:7A2Bh
ファイル名:SUB_SRCHEXE
クラスタアドレス:17DFh
ファイル容量:46967
ファイル論理アドレス:6163h
ファイルが連続しているものとしてコピーしました。
C:\SALVAGE.110>fc /b *.* a:\*.*
ファイルの比較中です HDD_TEST.EXE と A:\HDD_TEST.EXE
FC: 違いは見つかりません
ファイルの比較中です HDD_COPY.EXE と A:\HDD_COPY.EXE
FC: 違いは見つかりません
ファイルの比較中です SUB_SRCH.EXE と A:\SUB_SRCH.EXE
FC: 違いは見つかりません
C:\SALVAGE.110>
==================================
nbe01171@nifty.ne.jp
matsuda-toshiaki@my.email.ne.jp
松田 利昭
==================================