BAKPについて (BAKPTEC.TXT)                                    2004/11                                      Kuni ●高速バックアップツールの変遷  (BAKZ => BAKY => BAKP) ・ウインドウズ95を購入し、バックアップを試しました。  最初はウインドウズ標準のバックアップを利用するべくチャレンジしたのですが、エ  ラーが出てまともに使えませんでした。 ・そこで、MOドライブにまるごとコピーするツールを自作しました。  BAKBATと言う名称のBATプログラムです。(非公開) ・エラーも出ずに快調だったのですが、   ア.2度目以後もハードディスクの初期化からやりなおさないとならない   イ.2度目以降も一度目と同じ時間が掛かる  等不便だったため、高速パックアップツールを作成しました。  それが、「BAKZ」です。   1.元ドライブと先ドライブを比較して、異なるファイルをバックアップ     (更新されたファイルのバックアップ)   2.元ドライブに有り、先ドライブにないファィルをバックアップ     (追加されたファイルのバックアップ)   3.元ドライブに無く、先ドライブに有るファイルの削除     (元ドライブ上で削除されたファイルの先ドライブからの削除)   4.MO等のリムーバブルメディア対応   5.一時ファイル等バックアップ不用のファィルバックアップを省略して速度     アップ ・世の中はウインドウズ2000やXP等、俗に言うNT系OSとなってきました。  NT系統のOSでは、一部のファイルがロックされていてコピー出来ない事が解り  ました。  そこで作成したのが、「BAKY」です。   1.元ドライブと先ドライブを比較して、異なるファイルをバックアップ     (更新されたファイルのバックアップ)   2.元ドライブに有り、先ドライブにないファィルをバックアップ     (追加されたファイルのバックアップ)   3.元ドライブに無く、先ドライブに有るファイルの削除     (元ドライブ上で削除されたファイルの先ドライブからの削除)   4.MO等のリムーバブルメディア対応   5.OSがロックしたファイルを強制的に読み込む機能を実装   6.FAT/FAT32形式専用   7.一時ファイル等バックアップ不用のファィルバックアップを省略して速度     アップ ・その後、ハードディスクの巨大化と共にFAT32ファィルシステムからNTFS形  式に変わってきました。  そのNTFS形式形式に対応させた物が、「BAKP」となります。  このBAKPでは、MO等リムーバブルメディアへのバックアップ機能は無くなりま  した。これは、FD起動のDOSモードでは、リムーバブルメディアからNTFS形  式のハードディスクへバックアップする事が出来ないからです。   1.元ドライブと先ドライブを比較して、異なるファイルをバックアップ     (更新されたファイルのバックアップ)   2.元ドライブに有り、先ドライブにないファィルをバックアップ     (追加されたファイルのバックアップ)   3.元ドライブに無く、先ドライブに有るファイルの削除     (元ドライブ上で削除されたファイルの先ドライブからの削除)   4.OSがロックしたファイルを強制的に読み込む機能を実装   5.NTFS形式専用   6.一時ファイル等バックアップ不用のファィルバックアップを省略して速度     アップ ・NTFSでは、ファイルやフォルダのセキュリティ機能が有ります。  そのセキュリティのバックアップ機能を追加しました。   7.ファイル・フォルダのセキュリティ機能実装 ・バックアップは、「オリジナルをそのままバックアップする」と言うスタンスでい  たのですが、「バックアップ先からの起動が出来ない」と言う悲鳴が多数聞こえる  ようになりました。これは、「MBR問題の解決」を忘れたのが原因なのですが、  バックアップ時にオリジナルを多少加工してからバックアップすれば、「MBR問  題の解決」をユーザが行う必用を無くす事が可能と判断し、加工してからバック  アップする機能を追加しました。   8.MBR問題の自動解決機能 ●バックアップ機能 ・第一段階(通常読込)  ウインドウズ標準APIの CopyFile を利用してバックアップにチャレンジします。 ・第二段階(特権読込)  CopyFile でバックアップに失敗すると、「パックアップ特権」を利用してファィル  を読込にチャレンジします。 ・第三段階(強制読込)  バックアップ特権を利用すれば、殆どのファイルの読込が可能なのですが、一部の  ファイルについては、ロックされていて読込出来ない場合があります。  この様なファイルについては、OSのファイル読込機能を迂回しハードディスクのセ  クターからデータを直接読込する方法をとっています。  この機能をBAKPでは「強制読込」と表現しています。 ・問題点  強制読込ではOSがファイルを読み込んでいる事を感知しないため、読み込み途中で  ファイルの書き換えが発生する可能性が有ります。  また、データがキャッシュメモリ上に滞留し実ハードディスクに書き込みされる前で  有る可能性もあります。  ですから、BAKPは、   1.キャッシュ上のデータがハードディスクへ書き込み完了   2.BAKP以外のプログラムやOSからファイル書き込みが発生しない  安定した状態で利用する必用があります。 ●ファイル・フォルダのセキュリティ機能 ・NTFSセキュリティのバックアップ及びリストア  セキュリティ機能を先ドライブに摘要すると、バックアップ時にセキュリティで制限  されたファィルやフォルダを更新出来ない等のトラブルが発生する可能性が有りま  す。 ・そのため、本プログラムでは、セキュリティ情報ファイルを作成し、実際の復旧で先  ドライブから最初に起動した時にその情報ファィルを元にセキュリティを復旧する仕  様となっています。 ・NTFSのセキュリティを復旧するには、バックアップ先ドライブからの最初の起動  時にドライブルートディレクトリに有る _BKPREST.EXE を実行して下さい。実行後、  不用になった _BKPREST.EXE は、ゴミ箱に入れて(削除して)ください。 ●MBR問題の自動解決機能 ・この機能は、   @レジストリの修正    修正個所:HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 上の \DosDevices\x:         (x: 該当のドライブ名)を削除。   Aバックアップ   Bレジストリの戻し(削除した項目を復旧)  で実現しています。 ・「MBR問題の自動解決」の問題点  レジストリの戻しが完了する前に、BAKPが終了された場合、レジストリが変更さ  れたままになります。  この場合、書き戻しされなかったドライブは、再起動時にドライブ番号がウインドウ  ズデフォルトとなりますので、ご注意下さい。トラブル時にウインドウズデフォルト  ドライブ名になる事に問題が有る環境の方は、この「MBR問題の自動解決」機能を  切りにしてBAKPを御利用下さい。 ●拡張機能を追加しました(Vista対応) ・ウインドウズビスタになりセキュリティが強化されました。ファイルだけでなくNT  シグニチャも含めバイナリレベルで同じでないと、先ディスクからの起動に至らない  ようです。 ・更新バックアップ機能が使えないため、やむを得ずセクターレベルでのバックアップ  機能をBAKPVer3.xxで実装しました。 ・ウインドウズ2000/XP/Vistaのバックアップが可能です。  安全な環境で動作確認をしてからご利用下さい。 ・長所:セクタレベルでバックアップしますので、ファイルセキュリティその他全て元     ディスクと等価になります。     ディスク単位でバックアップします。C:D:等、一つのディスクを複数の     パーテーションに分割している場合でも、ディスク丸ごとバックアップです。  短所:NTシグニチャも一致させますので、元ディスクと先ディスクを同一のウイン     ドウズ上で利用すると「双子のハードディスクでOSが混乱」します。     元ディスクと先ディスクを同一ウインドウズ上で利用する場合は、先ディスク     のNTシグニチャを事前にクリヤしておく必要があります。 ●参考資料   ・$MFT の指定レコード取得  DeviceIoControl APIで FSCTL_GET_NTFS_FILE_RECORD を指定して取得します。  注意:このAPIは、ウインドウズNTでは利用出来ないようです。  注意:ウインドウズNTでは、セクターから$MFTのレコードを直接読込んでいます。     セクターから直接レコードを読込んだ場合、Update Sequence Array Offset、     Update Sequence Array Count を元に256バイト毎のデータを fix up する     必要があります。(上記APIを利用した場合APIがその処理を行います) ・ハードディスクドライブ(物理ドライブ)のサイズ取得  DeviceIoControl APIで IOCTL_DISK_GET_DRIVE_GEOMETRY_EX を指定して取得しま  す。  ウインドウズ2000はこの新APIに対応していません。そのため、2000では  IOCTL_DISK_GET_DRIVE_GEOMETRY でアバウトなディスクサイズを取得した後、読込み  テストにより最後のセクタを検出しています。