NTFS/FATパーティション単位でイメージコピーするプログラム

NTFSCOPY Version 1.30

  Copyright(C) 2010-2015 まりも(DOSsoft)

バージョン 1.30での変更点  exFATパーティションのコピーに対応

1.このプログラムの目的

 本プログラムは、ハードディスクのNTFS/exFAT/FAT32~12のパーティションを丸ごとコピーするプログラムです。パーティションの先頭セクタから最終セクタまで、ファイルでの使用の有無にかかわらず全てコピーします。ファイルシステムとしては、NTFSやFATはリロケータブルな構造であるので、コピーや移動をしても認識されなくなることはありません。しかし、そのパーティションにあるOSとくにWindowsのブートプログラムは、移動したパーティションからは起動できなくなります。これは、移動したパーティションのブートセクタの一部の情報(hidden sectors数)が正しくなくなるためです。これを移動先の位置と整合するように書き換えることで、起動の問題は解決できます。

 パーティションの位置(セクタ番地)は、空いている限り自由に設定できます。したがってAFTドライブやSSDのように、特定の倍数セクタ境界に合わせてパーティション境界を置く必要があるストレージに対して、現在のハードディスク環境をそのまま移行させる際に、本プログラムは役立つでしょう。

  さらに、直接のコピーの他に、パーティション全体をバックアップファイルに 保存したり、ファイルからリストアする機能も追加されています。

 本プログラムでコピー可能なハードディスクドライブは、ブートBIOSのあるインターフェイスで認識できているものです。マザーボードオンボード、BOOT ROMを持つストレージインターフェイスボード接続のものは基本的にOKです。USB接続のハードディスクも可能ですが、適用は推奨しません。MS-DOSではUSBの転送速度が非常に遅いことや、MBR形式でフォーマットされていないUSBストレージ(本プログラムの適用対象外)も存在するためです。

2.【基本的使い方】

 MS-DOS(DOS/V)またはWindows95/98のMS-DOSモードのコマンドラインから

 NTFSCOPY 

 と打つと実行が開始されます。まずSTEP1では、コピー元のハードディスク一覧が表示選択メニューが出るので、どれかを↑↓キーで選び、enterキーを押してください。

 ディスクドライブはシステムのDISK BIOSで認識されているものに限られ、デバイス・ベンダー名などは表示されません(BIOS情報から拾えません)ので、普通には総容量値で判断するしかありません。対象とするつもりでないものを選ばないよう充分注意してください。ディスクドライブの選択後は、装置番号80~87のような番号で識別することになります。通常は、起動できるシステムがあるのは装置番号80のディスクドライブです。

 次に、コピーしたいパーティションを選択するためのメニューが下に表示されます。ここで表示されるのは、パーティションの順序とファイルシステムID、パーティションの存在するセクタ番地の範囲です。具体的な内容は示されませんので注意してください。コピー元となるパーティションを選んだら、ENTERキーを押してください。

 ここからはSTEP2の、コピー先のディスクドライブを選ぶ画面となります。先ほどと同様にコピー先のディスクドライブを選んでください。なお、コピー元のディスクドライブはコピー先としては選択できません。

 コピー先ディスクドライブが決定したら、どのような規則でパーティション境界を割り付けるかの選択メニューが出ます。既にパーティションが存在している場合は「自動検出」を選択するのが無難です。これから作る場合は、HDDでなくSSDであれば必ず

"先頭パーティション 800h, 境界 1MB (Windows Vista/7/8やSSDのデフォルト)."

を選択するようにしてください。HDDの場合でも、Windows Vista/7/8, server 2008などの新しいWindows、その時代のLinux (Ubuntuなど)を主に使う場合にはこれを選んでください。これを選んだ場合は、Windows XPを使うのであれば必ずSP3にしておいてください。またWindows 2000やそれ以前のWindows ではディスク管理を行わないようにしてください。MS-DOSは使用できますがやはりディスクフォーマッタ「FDISK」は絶対に使用しないようにしてください。(そのために本プログラムがあるわけです)

 いっぽうWindows XP SP2以前のOSを主に使うならば、

" 先頭パーティション位置も境界も、BIOSに従う(旧来システムのデフォルト)."

を選ぶのが無難です。これは昔からのデフォルトであり、IBM-PCの基本ルールに則ったものです。なお自動検出した場合に限り "Origin=*** , Head=***, Sector=** "  というように、パーティション先頭セクタ番地、ヘッド数、セクタ数の確認表示が出ますので、よければENTERキーを押してください。

 これ以外の選択肢もありますが、パーティション境界についての理解がある上級者以外は選ばないようにしてください。 "パーティション境界規則を適用しない"を選択すると、後述のパーティション位置指定が自由に設定できるようになりますが、それでよいかは各自で判断してください(基本的には Windows XP3以降のOSではどこにでもパーティションを置くことができますが、ディスク管理ツールがそれに対応せずパーティションテーブルを破壊する場合も考えられます)。

 次に、選択したディスクドライブのパーティション情報が検索され、コピー可能な大きさの空き領域を選ぶ画面が表示されます。「区画」と表示されているのは、既存のパーティションです。それらの間に「空き領域」があります。既存の区画がなければ空き領域は1個だけ存在しますのでそのままENTERキーを押します。既存の区画が3個あると空き領域は最大4箇所に分散する場合があります。既存の区画との順序関係を考えて↑↓キーでどれかを選び、ENTERを押してください。

 なお「空き領域」となっている所でも、コピー先としての大きさを満たしていないものについては、選択できないようになっています。したがって、誤った操作でパーティションが重複するようなことは起こりえません。

 各空き領域が、コピー元のパーティションサイズより広いときは、そのどの位置にパーティションを置くかを指定することができます。「新しいパーティションの先頭番地を入力してください」と表示されますここで数値を入力せずENTERキーを押すと、既に指定したパーティション境界規則で空き領域の先頭に割り付けられます。とくに必要性がない限りENTERキーのみで応答するようにしてください。

 コピー先のパーティションを自分で指定したい場合は、セクタ番地か、それに相当する、ディスクドライブ先頭からの容量値(メガバイト、ギガバイト)を入力してください。容量値の場合は十進数のあとにMBまたはGBという単位もつけます。単位がない場合は、セクタ番地と解釈され、数値も十六進数とみなされます (末尾のhはつけなくてもよい)。

 入力した値が適切でない場合、例えば空き領域の範囲外となる場合や、パーティションの最終セクタが空き領域から外れるような場合には、"Out of range"という表示が出でて入力は受け付けられず、再度入力することになります。数字を入力しなかった場合はその空き領域の先頭からと解釈されて実行を継続します。

 入力が済むと、上の図のように先頭アドレス値の確認メッセージが表示され、次いで本当にコピーを開始してよいかの確認メッセージが表示されます(次の図)。

 ここでNを押せば、何も行われずに終了します。Yを押せばコピー開始となります。これからコピーするパーティションは、パーティションの順序にかかわらずパーティションリストの最後に現れます。コピー中は "Copying..." と表示され、右上には現在のコピー先のセクタ番地や現在までにコピーしたデータ量(MB)が表示されます。残り作業量はこれらの値から推測してください。コピーが完了すると、パーティションリストはアドレス昇順の正しい順序に並び替えられて再表示されます。パーティションの存在位置によっては、FAT12,16のファイルシステムIDは変更になる場合があります。

 もし途中でコピーを止めたいときは、ESCキーを押してください。作りかけのパーティションは消され、中断後に残ることはありません。

3.【応用的使い方】

 本プログラムには、パーティションコピー機能の他に、パーティション簡易編集の機能があります。起動時に以下のコマンドラインオプションをつけて起動してください。なおスイッチ文字は / でも - でも同様です。

 コマンドラインオプション /A 

 アクティブなパーティションを切り替えます。コピー後のパーティションからOSを起動するためには、必ずアクディブにしておいてください。

 コマンドラインオプション /MBR または /IPL

 マスタブートレコードのIPL(IBM/Microsoft DOS/Windows用)を書き込みます。コピー後にブート可能なディスクにする必要がある場合に使います。既になんらかのIPLがある場合には適用しないでください。Linuxの入っていたディスクではGRUBが入っているはずですが、このコマンドを適用すると置き換わってしまってLinuxが起動できなくなります。

 コマンドラインオプション /D 

 1個のパーティションを削除します。コピー前に空き領域を作っておきたいときや、コピーを中断させて不正なパーティションが残った場合に使用してください。

 コマンドラインオプション /SIG

 ディスク署名の消去や再設定をします。コピーしたパーティションのOSは、ディスク署名がコピー元のディスクドライブに残っていると、そのパーティションのほうにドライブレターを割り当ててしまい、コピー後のパーティションからの起動が正常にできなくなってしまいます。その場合、ディスク署名を一旦初期化してから起動します(Vista以降は修復も必要)。詳しくは【注意点】を読んでください。

 コマンドラインオプション /F  

 このオプションがない場合は、同一物理ディスク内でのパーティションのコピーはできません。異なる物理ディスク間でのコピーしか許されません。同一物理ディスク間でのコピーは、非常に速度が遅くなり能率も悪いですし、ハードディスクを痛めることにもなるので、通常は行わないようにしてください。

 コマンドラインオプション /3F または /legacy または /8 または /NOA

 これらがあるとパーティション境界規則の設定画面がバイパスされます。/3Fのときは、「先頭パーティション3Fh、BIOSシリンダ境界」を選んだのと等価の動作になります。/legacyでは、「先頭パーティション位置も境界も、BIOSに従う」に、/8では、「先頭パーティション800h、境界1MB」を選択したのと等価になります。/NOA (no alignの意味)をつけると、パーティション境界を一定の規則に合わせることをせず、1セクタ単位でどこにでも置けるようになります。

 コマンドラインオプション /backup 

 バージョン1.25で新設された機能です。このオプションを与えると、コピー先のハードディスクの代わりに、ファイル名入力プロンプトが現れます。バックアップファイル名を入力してください。バックアップファイルは、非圧縮で、パーティションサイズと等しいものとなります。したがって巨大化するわけですが、2GB以上になるとFATファイルシステムでは扱えなくなりますので、2GB以内で分割して保存します。拡張子は.000から.999まで自動的に付与されます。番号の拡張子のないファイル(プロンプトで指定したとおり)が先頭になります。またリストア時に指定するのもこのファイルです。バックアップファイルの作成先は、バックアップ対象のハードディスクとは異なるものにしてください。同一ディスクドライブに保存すると速度が著しく低下します。

 コマンドラインオプション /restore 

 バージョン1.25で新設された機能です。このオプションを与えると、既存のバックアップファイルをパーティションにリストアします。次の図は起動時画面の例です。まず既存のバックアップファイルの名前を尋ねてきま。ここで与えるのは、バックアップしたときの先頭ファイル(512バイトのもの)です。すなわち000~999の番号拡張子でないファイルです。先頭のファイルには分割状況が記録されていますので、番号の付いたファイルがそれと一致しない場合はエラーとなります。ファイルの解釈に成功すると図のように、作成日付、元のパーティション位置、ファイルシステムID、セクタ数(容量)などが表示されます。

 このあとリストア先のドライブ/パーティション位置の選択に移ります。以降の動作や画面はコピー時における、コピー先の選択と基本的に同じですので、説明は省略します。コピー時とレストア時の画面表示の違いは、ソースがファイルであることと、画面右上のほうにある進捗状況を示すところに、ファイル名と「レストア中...」という表示がなされる点です。この部分はファイルの番号が変わる毎に色が変化します。

 結局どのように使うのか

 まず新品のハードディスクに、これまで使っていたハードディスクのパーティションをコピーし、起動もできるようにしたいときは、次の手順を踏めばよいことになります。

4.【注意点】

 コピー可能なパーティションは、拡張DOS区画以外の全てとなっていますが、コピー後のOSに認識や起動の確認が取れているのは、NTFS(内部的にはNTFSのほかにexFATやFAT32/16/12のこともある)とFAT(FAT16,FAT32)のファイルシステムとなっています。これら以外(例えばLinuxのext3,ext4など)ではコピーしても一般に起動ができません。

 例えば、パーティションの順序を変更すると、Windows NT,2000,XPでは起動 ドライブのルートディレクトリにある BOOT.INIの「ARC path」の記述も変更する 必要があります。本プログラムではその内容の変更まではしませんから、各自で、 本プログラム適用前か、コピー後にそれとは別のOSを起動するなどして、 BOOT.INIを適切に編集しておいてください。

 Windows VISTA, Windows 7, Windows Server 2008 R2など最近のWindows では、パーティション位置を移動すると(というかNTシグネチャ=ディスク 署名が変わると)起動ができなくなります。WindowsインストールCD-ROMか 修復ディスクを使って修復してください。

 【重要】コピー元とコピー先の両方を繋いだ状態でコピー先のWindowsを起動しないでください。コピー先のWindowsは元のディスクドライブのディスク署名があるほう、つまりコピー元があるとそこをC:ドライブとし、起動している自分自身のドライブレターをC:以外としてしまうため、正常に起動できなくなります。しかもこれはレジストリに記録されるため、二度と起動できなくなります。ですのでパーティションコピー後は、必ずコピー元ディスクドライブを切り離した状態で、コピー先のWindowsを起動してください。このことは、どのようなコピーツールを使った場合でも言えることです。もしそうなってしまったら、ディスク署名を一旦初期化するとデフォルトドライブレターで起動できるようになります。

 コピー中にセクタへのread/writeでエラーが発生した場合には、
"DISK I/Oエラーが発生しています. COPY_ERR.LOGファイルで確認してください."
というメッセージが出ます。カレントディレクトリにCOPY_ERR.LOGというテキストファイルが作成されるので、エラーがどこでどのように起こったかを確認してください。エラーがあった場合は、コピーは完全には行われていないと考えるべきです。

 コピーは61440バイト(120セクタ)単位で処理しており、書き込み側ドライブには120の倍数のセクタ番地境界単位で書き込みを行っています。したがって物理セクタサイズが4096バイト(8論理セクタ)のAdvancedFormat Technology(AFT) ドライブへの書き込みでも遅くなることはありません。

 2テラバイト(2TiBytes、セクタ番地数が32bit)を超える容量のディスクドライブについては、64bit(正確には48bitぶんが有効)のディスクアドレスのうち32bitだけを本プログラムでは扱います。この扱いはWindowsXPやそれ以前のOSに準じます。この場合にはシステムから取得できる容量は、真の容量を2TiBで割った余りとなります。例えば3TBと明記されたドライブ(2793GiB)は約746GiBに なります。2TB以内の上限まで使えるようにも設計できるのですが、下位32bit部分の剰余容量(例えば3TBの場合約746GiB)を超えるパーティションがあると、Windows XPから全く認識されなくなる(パーティションがない状態になる)という問題があるため、本プログラムでは仕様をXPに合わせてあります。 なお2テラバイトオーバーのディスクドライブは、デバイスリスト中で赤文字で示されます。 Windows7でもWindowsXPでもアクセスする環境においては、XPで中途半端な扱いをされないように注意する必要があります。ディスク管理でのパーティション操作は常に Windows 7を使用するべきです。あるいはXPで触れることがないようにGPT形式でフォーマットしておくことをおすすめします。(その場合本プログラムでも対象外のディスクドライブとなります)

 DOSが英語モードのときは、メッセージは全て英文となります。しかし内容の正確さや日本語からの翻訳の品質については全く保証できません。またDOSの種類によっては(DR-DOSやFree DOSなど)、日本語/英語モードの判定を誤る可能性があり、英語モードなのに半角8bit文字のバケ文字が 現れたり、日本語モードで枠線などがおかしなカナ文字で表示される場合があります。英文の誤りや言語モード判定の誤りが認められた場合はご一報くださると幸いです。

 このプログラムはフリーソフトウェアです。自由に使用してよい代わりにサポートのようなものはありません。直接・間接的に、このプログラムの運用の結果に何があっても、作者は一切責任をとることはないものとします。著作権は保持します。他のサイトへの無断転載も認めません。著作権侵害のないようにお使いください。連絡メールアドレスは、 ホームページ上に記載されています。

5.改版・掲載履歴

2011年01月01日 1.00  新規掲載
2013年02月12日 1.01  拡張DOS区画しかないときに続行してしまうバグを修正
2013年02月17日 1.02  同一ドライブにコピーできないようにする制限が機能していなかったのを修正
2013年02月20日 1.03  フォーマット誤認識の修正、MBRフォーマット済み以外を扱わないよう仕様変更
2013年03月03日 1.04  OS起動のためのパーティションブートレコードの編集で誤りが起こる場合があるのを修正
2013年03月04日 1.05  パーティションテーブルにおける従来システム用のCHSフィールドが正しく設定されない問題を修正、
            ESCキーでコピー中断してもコピー先に作りかけのパーティション情報が残らないようにした
2013年03月17日 1.06  コピー後のパーティションからWindowsXPの起動ができなくなる問題(1.05で発生)の修正
2013年03月25日 1.10  オプション /3Fまたは/legacyがないデフォルトでは第一パーティション開始
                位置を800h番地にするルールに変更(Windows 7,SSD,AFTの使用に合わせるため)、
            オプション /legacyでは先頭以外のパーティションをBIOSシリンダ境界に
            配置するルールに変更
2013年04月01日 1.20  基本パーティション作成時に、パーティション開始セクタ番地とパーティション
            境界を選択できるようにした。
2014年04月01日 1.25  ファイルへのバックアップ/ファイルからのリストアの機能が追加された。
            パーティション境界ルールの選択を増やした。      
            -mbrオプションで作られるMBRのブートコードを刷新(fdskのバージョンアップに合わせ)。
2015年04月01日 1.30  exFATパーティションに対応した(従来はNTFSとしてコピーされてもWindowsから認識できない状態だった)。
            パーティションテーブルがいっぱいのディスクドライブにコピーしようとしたときに、そのテーブル内容を表示してからエラーを表示するようにした。
            コピー先ディスクドライブにコピー中のパーティションを明示するようにした。
            コマンドラインオプションでのディスク署名の設定機能を追加。
            無駄なコードやデータを省いて実行ファイルのサイズを縮小。

[戻る]