ハードディスクLBAデータバックアップツール

KONLBA2F ver0.1 - 2007.06.09


作成者 Takaharu Konno - konlba2f.zip

拡張INT13を使った、ちょっとしたDOSプログラムですが、DOS(DOS-LANMAN)、
Win9xMEのMS-DOSコマンドプロンプト(全画面)上で、ネットワークを通して
丸ごとデータをバックアップ、復元することができます。



1、ソフトウェアについて

1.1 KONLBA2F.COM

ハードディスクのLBAデータをファイルに保存します。
拡張INT13を使ったDOSプログラム(16ビットモード)の動作ですので、MS-DOS、
または、Windows9X、MEのMS-DOSコマンドプロンプト(全画面)上で動作します。
コマンドプロンプトは、フルスクリーン上で動作させてください。
このソフトは、ハードディスクからのデータ読み取り専用です。
このソフトを実行すると、データファイルとログファイルを作成します。
ログファイルには、拡張子をバッチファイルに置き換えると、復元用とマージ用のバッチファイルになります。

指定オプション
"-t:8 -d:[ドライブ番号]"                        ハードディスク情報を取得します。
"-t:2 -d:[ドライブ番号] -a:[LBAアドレス] -s:[セクターサイズ]"  LBAデータをファイルに保存します。

"-d:[ドライブ番号(hex)]"        番号は、"80" ~ "83" を指定します。
"-a:[LBA開始アドレス(hex)]"     0 ~ FFFFFFFFの32ビットアドレスを指定します。
"-s:[セクターサイズ(hex)]"       デフォルトは、ハードディスク情報から取得した物理総セクタ数を使います。
"-u:[ユニットサイズ(hex)]"       保存するファイルの分割サイズ。デフォルトは1G("200000")単位です。
"-z:[ファイルを保存するドライブ]"  主にリンクしたネットワークドライブ使います。(D - Z)


1.2 KWRF2LBA.COM

イメージファイルからハードディスクへLBAデータを書き込みます。
このソフトは、書き込み専用です。操作手順やドライブ番号を正しく指定する必要があります。
もし、それらを間違えると異なるハードディスクのデータを上書き破損してしまいます。注意して使用してください。
使用環境としてお勧めするのは、

 (a)DOS-LANMAN(Netbeuiプロトコル)のフロッピーブートで、書き込み対象ハードディスクが
   一台のみ(ドライブ番号 0x80)の構成にします。
   そしてネットワーク上のデータを KWRF2LBA で書き込みします。

 (b)Win9xMEの起動ドライブを専用に用意します。操作ミスして上書きされてしまってもよいものを使います。
   書き込み対象ハードディスクがさらに一台(ドライブ番号 0x81)の構成にします。
   Windows上からネットワークドライブを接続し、MS-DOSコマンドプロンプト上で、
   ネットワーク上にあるデータファイルから対象ハードディスクへ書き込みます。

 (c)起動ドライブに、CFメモリ(コンパクトフラッシュメモリ)を使ったIDE接続のメモリHDDを使い、
   それにWin9xMEなどインストールしたものを使います。
   書き込みプロテクトをした状態でのOSを使う方法もあります。

データを書き込む場合は、くれぐれも、十分に操作に注意してください。

指定オプション
"-t:8 -d:[ドライブ番号]"                         ハードディスク情報を取得します
"-t:3 -d:[ドライブ番号] -a:[アドレス] -s:[サイズ] -f:[ファイル名]"  ファイルからハードディスクへデータを書き込む。

"-d:[ドライブ番号(hex)]"       番号は、"80" ~ "83" を指定します"
"-a:[LBA開始アドレス(hex)]"    0 ~ FFFFFFFFの32ビットアドレスを指定します"
"-s:[セクターサイズ(hex)]"      書き込むセクター数。デフォルトは、対象ドライブの総セクタ数
"-v:[べりファイ付き書き込み]"    0(無し)デフォルト, 2(有り)。HDD情報 support-verify-write-bit3=1の時有効
"-f:[ファイル名]"            書き込むデータファイルを指定します。

1.3 その他(KBINCAT.EXE、KDUMP.EXE)

KBINCAT.EXE は、KONLBA2F で分割保存されたファイルをマージして、一つにすることができます。
MARGE.BAT(MARGE.000)ファイルがありますので、それを参照してください。
KDUMP.EXE は、バイナリデータをダンプ表示します。MBRブートブロックのデータを表示して、
情報を取得するときに使います。
VisualC++2005express で作成したので、ランタイムコンポーネントがインストールされている必要があります。
vcredist_x86.exe、または vcredist_x64.exe をインストールして利用してください。



2、使い方

2.1 ハードディスク丸ごとバックアップと復元。

保存する側のフォルダには、読み取り対象HDD以上のディスク容量があること。

2.1.1 DOS-LANMANフロッピーブート。
PCにハードディスクは、1台のみ接続します。このドライブ番号は、80(hex) になります。
フロッピーで起動し、ネットワークに接続します。サーバは、Netbeuiプロトコルを用いたXP(またはW2K)を利用します。
データバックアップ用に新たに共有フォルダを作成し、ネットワーク接続できるようにしておきます。
DOS-LANMANの場合、TCP/IPの動作は遅く、Netbeuiプロトコルを利用した方がベストです。
ネットワークドライブ "Z" にXPサーバの共有フォルダをリンクします。

"konlba2f -t:8 -d:80"

まず、ハードディスク情報を取得します。バックアップするサイズは、sector に表示されている総セクタ数に
bytes_in_sector を掛けた値が総バイト数になります。例:0xA000000(167772160) × 0x200(512) ≒ 84G

"konlba2f -t:2 -d:80 -a:0 -z:z"

これを実行すると、Zドライブにハードディスクデータがファイルで保存されます。
容量が80Gの場合は、1G単位のファイルで、80個が作られます。("00000000.000" ~ "09800000.000")
ファイル名は、LBA開始アドレスを示しています。
3つのログファイルも作られます。LBA2F.000、LBAWRITE.000、MARGE.000。

ハードディクスデータの読み取り時、エラーで読めなかった場合は、正常に読み取れたところまでで、ファイル作ります。
そして、次に正常に読めるところから新たに保存ファイルを作ります。LBA2F.000 のログに記されますので、
作られたファイル名が一定間隔になっていない場合は、ログを確認してください。

次にPC電源を完全にオフにして、対象ハードディスクドライブを新しい物に交換します。
再度、DOS-LANMANフロッピーブートします。
ネットワークドライブ "Z" にXPサーバの共有フォルダをリンクします。

ネットワーク上の LBAWRITE.000 ファイルを、フロッピー側に LBAWRITE.BAT としてコピーします。
"TYPE LBAWRITE.BAT" でファイルの中身を確認します。 "kwrf2lba -d:" オプションのドライブ番号が
対象ハードディスク 80(hex) であることを確認します。

"LBAWRITE.BAT" を実行すると、ネットワーク上のファイルから、ハードディスクにデータが書き込まれます。

2.1.2 Win9xME。
PCにハードディスクは、起動ハードディスク1台と、読み取り対象の1台を接続します。
対象ドライブ番号は、81(hex) になります。
OSが起動したら、XP(または、W2K)サーバにネットワーク接続します。
ネットワークドライブ "Z" にサーバの共有フォルダをリンクします。

利用する通信プロトコルは、Windowsの場合は、TCP/IPでも問題ありません。
読み取り速度を確認しましたが、特に遅くなることはありませんでした。

MS-DOSコマンドプロンプトを起動して、フルスクリーンで利用します。

"konlba2f -t:8 -d:81"

ハードディスク情報を取得して、総セクターを確認します。読み取り対象のサイズであることをチェックします。

"konlba2f -t:2 -d:81 -a:0 -z:z"

これで、ハードディスクデータを読み取り、ネットワーク上にファイル保存します。

次にPC電源を完全にオフにして、対象ハードディスクドライブを新しい物に交換します。
再度、Win9xMEを起動します。
ネットワークドライブ "Z" にXPサーバの共有フォルダをリンクします。

ネットワーク上の LBAWRITE.000 ファイルを、ローカルディスク側に LBAWRITE.BAT としてコピーします。
"LBAWRITE.BAT" ファイルの中身を確認します。 "kwrf2lba -d:" オプションのドライブ番号が 81(hex) で
あることを確認します。

MS-DOSコマンドプロンプトを起動して、フルスクリーンにします。
"LBAWRITE.BAT" を実行すると、ネットワーク上のファイルから、対象のハードディスクにデータが書き込まれます。

2.2 MBRのみ。1セクターの取得と保存。

これは、ネットワーク無しのDOSフロッピーブートでOKです。

"konlba2f -t:2 -d:80 -a:0 -s:1"

ドライブ番号 0x80 のMBRセクターをファイルに保存します。サイズは、1セクターの512バイトです。
"kdump" 等でバイナリダンプ表示できます。
(MBR情報の内容、修正等の扱いは、他を参照してください。)

変更したMBRファイル、または、他のMBRファイルで、ハードディスクMBR情報を上書きする場合は、

"kwrf2lba -t:3 -d:80 -a:0 -s:1 -f:new_mbr_file.bin"

でMBRが上書きされます。
"kwrf2lba.com" プログラムは、ハードディスクを書き換えますので、扱いには十分注意してください。

2.3 ハードディスクから 仮想PC等へ。

実際のハードディスクの総容量を保存しなくても、記録された部分のみバックアップすることもできます。
OSがWin9xMEの場合、総容量40Gで確保されていても、実際は、1G、2G程度しか利用していない場合があります。
そのときは、まず、ディスクツールのデフラグで配置を詰め、後半の空白領域を確認します。
そして、実際の量より多めにしたセクター数でバックアップを行います。

"konlba2f -t:2 -d:80 -a:0 -s:3D0900 -z:z"

セクター数 0x3D0900(4000000) のファイル2Gサイズまで、ハードディスクデータをバックアップします。
MARGE.BAT で一つのファイルにまとめます。
バイナリエディタ等で、MBR情報の総セクタ数を2Gサイズに変えておきます。

仮想86エミュレータ bochs で起動するか、イメージファイルをvhd に変換して、VirtualPC で起動します。
バックアップしたOSが起動したあと、ディスクツールのスキャンディスクで、ファイルチェックを行います。
デバイス等の更新要求はありますが、その後は、仮想86エミュレータで利用できると思います。

ハードディスクディスクが復元対象の場合は、実際のハードディスクのデータを加工する必要がなく、
保存したファイルで復元加工作業が行えます。いろいろ試してみてください。


3、考察、感想

このソフトは、自分がハードディスクの容量をより大きい物に移行するときに、RAID0 のディスクを
うっかり開放して、どのようにデータを復元しようかと試しながら作ったソフトです。
結果的には、LBA=0 の MBRレコードだけ復元しただけでしたが、せっかくなんで、いろいろ試して見た次第です。

仮想エミュレータ VirtualPC、bochs などと実ハードディスクをOSが行ったり来たりします。
80G、160G を復元バックアップしようものなら、それ以上のディクスが必要になり、
それなりに時間がかかりますが、なんとか使えます。

ちょっと動画を扱うようになって、一度、ディスク容量の感覚が変わってしまいましたが、
ハードディスク丸ごとバックアップするようものなら、さらに高容量のディスクが必要で、
また、ディスク容量の感覚が変わってしまいました。
他の人で、動画でテラの領域に移行したのを聞きますが、そのうち私もその領域に入りそうです。
でも、扱うソフトは、DOSだったりするのです。



tkon@ap.wakwak.com
http://park2.wakwak.com/~tkon/
Copyright(C) 2007 Takaharu Konno