データを残したまま、ダイナミックディスクをベーシックディスクに変換する方法
●注意●
ここで示す操作は上級者向けのものです。初心者向けではありません。ここで書かれた内容を理解できない場合は、絶対に操作しないでください。間違えると取り返しのつかない結果になる恐れがあります。
ダイナミックディスクは、Windows 2000から標準で使えるようになったHDD用のディスク管理システムで、元々はベリタスソフトウェアが開発した「Volume Manager」のサブセットとしてWindowsに提供されたものです。ただし、Windows XP Home Edition、Windows Vista Home Basic/Home Premium、Windows 7 Home Premiumはダイナミックディスクをサポートしません。またWindows 9xやWindows NTもダイナミックディスクを認識できません。
ダイナミックディスクには、ダイナミックMBRディスクとダイナミックGPT (GUID Partition Table) ディスクがあります。ただし、ダイナミックGPTディスクにアクセスできるのは、Windows Server 2003 SP1以降およびx64版Windows XP/2003/Vista/2008/7だけです。ここでは最初にダイナミックMBRディスク (以下単にダイナミックディスクと呼ぶのはダイナミックMBRディスクのことです) について説明します。ダイナミックGPTディスクについては、本稿の最後で説明します。
ダイナミックディスクには、データを残したままのドライブサイズの動的な変更、RAIDの利用などの優れた特徴があるものの、以下で述べるような問題もあります。
従来のベーシックディスクでは、パーティションテーブルおよび拡張パーティションテーブルで各パーティションの情報を管理していますが、ダイナミックディスクでは、独自のデータベースに各ボリューム (ダイナミックディスクではパーティションの代わりにボリュームと呼びます) の情報を格納・管理します。この管理情報はHDDのほぼ最後の1MB領域に置かれます (正確には管理領域の後ろに未使用の領域が残る場合もありますので、常に最後とは限りません)。
問題は、このダイナミックディスクの管理情報についての詳細な仕様が公開されていないため、トラブル時の対処が困難であることです。ダイナミックディスクの管理情報が壊れると、特定のボリュームだけがアクセス不能になるだけでなく、HDD全体がアクセス不能になるのが普通です。しかもその修復方法がないとなると、安心してダイナミックディスクを使うことは躊躇われます。少なくとも、簡単にダイナミックディスクの管理情報を修復するためのツールが、MSあるいはベリタスから提供されないうちは、ダイナミックディスクを使わない方が賢明と考えます。
もう1つの問題は、ベーシックディスクからダイナミックディスクへの変換では、中のデータをそのまま保持した状態で変換できますが、その逆に、ダイナミックディスクからベーシックディスクへの変換は、いったんボリュームを削除する必要があるため、データが失われるという点です。
しかし、本当にデータを保持したままダイナミックディスクからベーシックディスクへの変換ができないかと言うと、実はできます。ただ、それを簡単に行うためのツールが提供されていないというだけです。そのため、ダイナミックディスクからベーシックディスクへの変換にはパーティションテーブルの手動での編集が必要になります。
ダイナミックディスクの管理情報が壊れるとダイナミックディスクにアクセス不能になります。しかし、この状態でも、壊れたのがダイナミックディスクの管理情報だけであり、ボリューム自体が壊れていなければ、ダイナミックディスクをベーシックディスクに変換することで、データにアクセスできるようになります。このような場合のために、ここでは、データを残したままダイナミックディスクからベーシックディスクに変換する方法について解説します。
実際の手順を解説する前に、ベーシックディスクとダイナミックディスクの構造について見てみましょう。ベーシックディスクとダイナミックディスクの構造の違いを説明するために、次のパーティション構成のベーシックディスクの場合を例にとります (画面1)。これにMBR (パーティションテーブル)、パーティションブートセクタ (PBS)、それに拡張パーティションテーブルを加えたものが図1です。
画面1 ベーシックディスクの例
図1 上記ベーシックディスクの構造
これをダイナミックディスクに変換したものが画面2、および図2です。
画面2 上記ベーシックディスクをダイナミックディスクに変換した後
図2 上記ダイナミックディスクの構造
この2つを比べると、異なっている部分は、MBRの部分とダイナミックディスク管理データベースの2ヵ所だけです。その他は一切変わっていません。つまり、ベーシックディスクからダイナミックディスクに変換した場合、MBR中のパーティションテーブルが書き換わり、ダイナミックディスク管理データベースが追加されるということになります。
元のベーシックディスク (画面1、図1) の時のMBRが画面3です。そしてこれをダイナミックディスクに変換した後 (画面2、図2) のMBRが画面4です。これを見ると、ベーシックディスクでは3つあったパーティションテーテーブルのエントリが1つになり、HDD全体が巨大な単一パーティションとなったことがわかります。個々のパーティションの情報はここにはありません。個々のパーティション (ボリューム) の情報を格納しているのはダイナミックディスク管理データベースになります。
画面3 上記ベーシックディスクのMBR
画面4 上記ダイナミックディスクのMBR
そしてもう1つの違いがシステムIDです。ベーシックディスクでは「07」(NTFS)、「0C」(FAT32)、「0F」(拡張パーティション) であった (画面3) システムIDが「42」(ダイナミックディスク) に変わっています (画面4)。
これらのことから、ダイナミックディスクをベーシックディスクに戻すためには、MBR中のパーティションテーブルを元と同じにしてやればよいことがわかります。この際、ボリューム (パーティション) 自体には一切触る必要はありませんので、中のデータはそのまま残ります。また、ダイナミックディスク管理データベースについてはそのまま放っておけばよいので、手を加える必要はありません。これは空き領域になります。
ベーシックディスクからダイナミックディスクに変換する前に、MBRのバックアップを取っておけば、そのMBRをリストアすることで、ダイナミックディスクから元のベーシックディスクに戻すことができます。もしこれからベーシックディスクをダイナミックディスクに変換することを考えているのであれば、MBRのバックアップを取っておくことをお勧めします。
ただし、この方法では、ダイナミックディスクに変換後に変更・作成されたボリュームについては対応できませんので、ダイナミックディスクに変換後に、ボリューム自体を変更・作成していないことが条件です。
MBRのバックアップを取っておけばよい、とは言っても、実際はバックアップを取っていなくて、HDDにアクセスできなくなって、さあ大変というのが普通でしょう。この場合、パーティションテーブルを編集してやればよいわけですが、パーティションのパラメータを全部設定するのは非常に面倒です。そこでまず、簡単にダイナミックディスクをベーシックディスクに変換する簡易法を紹介します。ただし、この方法は正しい変換方法ではありませんので、いくつかの制限があります。
制限1:この方法で変換できるのは1つのボリュームだけです。ダイナミックディスク中に複数のボリュームがある場合は、その先頭のボリュームだけが変換されます。2番目以降のボリュームは変換されません。
制限2:変換可能なボリュームは次のいずれかの場合です。
(1) 元のベーシックディスクが基本パーティションであり、それをダイナミックディスクに変換した場合 (論理パーティションのベーシックディスクをダイナミックディスクに変換した場合は、この方法は使えません)。
(2) 変換される先頭のボリュームが、ダイナミックディスクに変換後に作成された場合 (ただしダイナミックGPTディスクの場合を除きます)。
制限3:変換後のパーティションはディスクパラメータが正常ではありませんので、そのままで使い続けるのは危険です。速やかに中のデータをバックアップして、パーティションを削除・再作成してください。
制限4:ダイナミックディスク中に複数のボリュームがあり、2番目以降のボリュームからもデータを回復したいときは、この方法は避けてください。2番目以降のボリュームのデータが壊れる危険があります。
前置きが長くなりましたが、実際の方法は、MBR (パーティションテーブル) 中のシステムIDをDisk Probeを使って書き換えるだけです。現在はこれが「42」になっているはずですので、これを「07」(NTFSの場合)、「0C」(FAT32の場合)、「06」(FAT16の場合) に書き換えます。Disk Probeの使い方およびシステムIDの書き換え方は、「Disk Probeの使い方」、「マルチブート/デュアルブートのすべて−その2 実践編−Part1 Windows MeとWindows 2000のデュアルブートシステム−すでにWindows 2000がインストールされている場合−Windows 2000のパーティションがFATの場合 その1」を参照してください。
システムIDの書き換えは、直接上記の「07」等の数値を入力してもかまいませんが、「View」メニューの「Partition table」画面で、「System ID」欄の該当ファイルシステムをダブルクリックすることでも変更できます (画面5)。システムIDを書き換えた後、変更を保存し、PCを再起動すれば、変換されたパーティションにアクセスできるようになるはずです。画面2、図2のダイナミックディスクを、この方法でベーシックディスクに変換した例を画面6に示します。これでわかるようにダイナミックディスク全体が1つのベーシックディスクに変換されています。変換されたパーティションにドライブ名が付いていない場合は、ドライブ名を付けることでアクセスできます。
画面5 「View」メニューの「Partition table」画面で、「System ID」欄の該当ファイルシステムをダブルクリック
画面6 ダイナミックディスクを簡易変換法でベーシックディスクに変換
さて、次にパーティションテーブルを編集することで完全にベーシックディスクに変換する方法を説明します。変換前のダイナミックディスクとしては、画面1、図1のベーシックディスクをダイナミックディスクに変換した画面2、図2に、さらにダイナミックディスク上で2つのボリュームを作成したものを例とします (画面7)。これを図で表示すると図3になります。この図3を見るとわかるように、ダイナミックディスク上で作成されたボリュームは基本パーティションをダイナミックディスクに変換したものと同じ構造です。
画面7 変換前のダイナミックディスク
図3 上記ダイナミックディスクの構造
このようなダイナミックディスクをベーシックディスクに変換する場合、1つだけ制限があります。それはベーシックディスクではパーティションテーブルのエントリが4つしかないということです。そのため、ベーシックディスクに変換できるボリュームは、基本パーティションが最大4つ、または基本パーティションが最大3つと1つの拡張パーティションに制限されます。図3をそのままベーシックディスクに変換するとなると、基本パーティションが4つと拡張パーティションが1つになってしまうため、このすべてを変換することはできません。
したがって、いったん基本パーティション4つをベーシックディスクに変換して、残りの拡張パーティションは、変換したパーティションのデータをバックアップしてから削除し、再度拡張パーティションを変換するか、あるいは基本パーティション3つと拡張パーティションをいったんベーシックディスクに変換して、残りの基本パーティションは変換したパーティションのデータをバックアップしてから削除し、再度基本パーティションを変換するといった2段階の変換が必要になります。ダイナミックディスク上で作成したボリュームがもっと多ければ、さらに3段階、4段階の変換が必要になるでしょう。いずれにしても手間はかかりますが、すべてのデータを回復することはできます。
なお、基本パーティションと論理パーティションとで、パーティションブートセクタを含めて、パーティション構造に違いはありません。違いは、そのパーティションがMBR中のパーティションテーブルで管理されるか、拡張パーティションテーブルで管理されるかという点だけです。
したがって、元の論理パーティションをダイナミックディスクに変換したものを、そのまま再度ベーシックディスクの論理パーティションとして変換することもできる他に、ベーシックディスクの基本パーティションとして変換することもできます。ただそうなると、4つの基本パーティションという制限がよりきつくなります。しかし論理パーティションとして変換するよりも基本パーティションとして変換するほうがより簡単なので、安全を優先するならば、基本パーティションとして変換する方をお勧めします。
この例の場合は、元の拡張パーティションの空き領域であったところに、ダイナミックディスク上で新規にボリュームを作成しているため、変換する拡張パーティションのサイズは元と同じにできません。縮小して変換する必要があります。
逆に基本パーティションを論理パーティションに変換するという方法も考えられます。例えば画面7、図3の例でPart2またはPart5を論理パーティションとして変換できれば、3つの基本パーティションと1つの拡張パーティションという制限内に収まりますので、すべてを一度にベーシックディスクに変換できることになります。しかし、Part2またはPart5を論理パーティションに変換するためには、そのパーティションの前に拡張パーティションテーブルを作成する必要がありますが、現実には拡張パーティションテーブルを作成するスペースがありません。どうしても拡張パーティションテーブルを作ろうとすると、その前のパーティション (Part1またはPart4) のサイズを縮小して拡張パーティションテーブルのためのスペースを空ける必要があります。パーティションのサイズ変更ということ自体は不可能ではありませんが、ここでのテーマ (ダイナミックディスクからベーシックディスクへの変換) とは別の話になります。
1) Part1 (NTFS基本パーティションの場合) のパーティションテーブルを作成するために、Disk Probeを起動して、「Drives」メニューから「Physical Drive」をクリック。対象となるHDDをダブルクリックして、「Handle 0」の「Read Only」のチェックを外し、「Set Active」をクリック、「OK」をクリック (画面8)。
画面8 Open Physical Drives画面
2) 「Sectors」メニューから「Read」をクリック。「Starting Sector」に「0」、「Number of Sectors」に「1」が入っていることを確認して「Read」をクリック (画面9)。
画面9 Read Sectors画面
3) MBRが表示されますので、「View」メニューから「Partition table」をクリック。パーティションテーブルデータが表示されますので、「Partition table index」が「Partition 1」、「Relative Sector」が「63」になっていることを確認して「Go」をクリック (画面10)。
画面10 パーティションテーブルデータ画面
4) 「View」メニューから「Bytes」に切り替えてPBSが表示されていることを確認して、「View」メニューから「NTFS BootSector」をクリック。PBSデータが表示されますので、「Total sectors」の値をメモします (画面11)。
画面11 NTFS PBSデータ画面
5) 「View」メニューから「Bytes」に切り替えて、再度「Sectors」メニューから「Read」をクリック。「Starting Sector」に「0」、「Number of Sectors」に「1」を入力して「Read」をクリック (画面9と同じ)。
6) 「Drives」メニューから「Volume Information」をクリック。表示された「Sectors / Track」の値と、「Tracks / Cylinder」の値をメモします (画面12)。「OK」をクリック。
画面12 Current Volume Information画面
7) 「View」メニューから「Partition table」をクリック。「Partition table index」が「Partition 1」になっていることを確認して、「System ID」の欄からPart1のファイルシステム (この例ではNTFS) をダブルクリック。「Relative Sector」に「63」、「Total Sectors」に 4) でメモした「Total sectors」の値+1 (この例では「30716217」) を入力します。
さらに「Starting Head」に「1」、「Ending Head」に 6) でメモした「Tracks / Cylinder」の値−1 (この例では「254」) を入力します。「Starting Sector」に「1」、「Ending Sector」に 6) でメモした「Sectors / Track」の値 (この例では「63」) を入力。「Starting Cylinder」に「0」、「Ending Cylinder」には次の式で計算した値を入力します。
Ending Cylinderの計算式:({Relative Sector]+{Total Sectors})/{Sectors / Track}/{Tracks / Cylinder]−1
ただし、この計算結果が1023を超える場合は一律に「1023」と入力します。
この例では (63+30716217)/63/255−1=1911となりますので、「1023」を入力します。
これでPart1のパーティションテーブルが作成できました。以上の入力結果に (画面13) 間違いがないことをしっかり確認します。
ここでのパラメータについて、いくつか補足しておきます。
まず「Boot Indicator」ですが、これはそのパーティションがアクティブかどうかを意味しています (「SYSTEM」の場合はアクティブ、「NO SYSTEM」の場合は非アクティブ)。
「Relative Sector」はそのパーティションの先頭セクタを指します。例では先頭の基本パーティションなので「63」となりますが、他のパーティションの場合は、当然異なる値になります。
「Total Sectors」が 4) でメモした「Total sectors」の値プラス1になるのは、Windows NT 4.0以降のNTFSパーティションの場合で、最終セクタにあるPBSのバックアップが「Total sectors」に含まれていないため、真の総セクタ数としてはプラス1になります。
「Starting Head」は先頭の基本パーティションが「1」で、2番目以降の基本パーティションの場合は「0」になります。また論理パーティションは常に「1」になります。
「Starting Sector」は常に「1」となります。
「Starting Cylinder」は先頭の基本パーティションの場合のみ「0」で、その他の場合は上記の計算式で計算した前パーティションの「Ending Cylinder」+1になります。ただし、計算結果が1023を超える場合は一律に「1023」と入力します。
画面13 パーティションテーブルデータ画面の編集結果
8) 編集結果を保存するために、「Sectors」メニューから「Write」をクリックし、「Starting sector to write data」が「0」になっていることを確認して、「Write it」をクリック、次に「はい」をクリックします (画面14)。
画面14 編集したパーティションテーブルデータを書き込む
9) 次にPart2 (FAT32基本パーティションの場合) のパーティションテーブルを作成するために、Partition table画面で「Partition table index」が「Partition 1」になっていることを確認して、「Next Partition」をクリック。「View」メニューから「Bytes」に切り替えてPart2のPBSが表示されていることを確認して、「View」メニューから「FAT-16 BootSector」をクリック。
画面右下の「Sec」の数字 (現在のセクタ値) と「Large sectors」の値をメモします (画面15)。
画面15 現在のセクタ値と「Large sectors」の値をメモする
10) 「View」メニューから「Bytes」に切り替え、、再度「Sectors」メニューから「Read」をクリック。「Starting Sector」に「0」、「Number of Sectors」に「1」を入力して「Read」をクリック (画面9と同じ)。
11) 「View」メニューから「Partition table」をクリック。
「Partition table index」の「Partition 2」をダブルクリックします。「System ID」の欄からPart2のファイルシステム (この例では「FAT32 - LBA」) をダブルクリックします。
「Relative Sector」に 9) でメモしたセクタ値を、「Total Sectors」に「Large sectors」の値を入力します (この例では「30716280」と「16386300」) 。
さらに「Starting Head」に「0」、「Ending Head」に 6) でメモした「Tracks / Cylinder」の値−1 (この例では「254」) を入力します。「Starting Sector」に「1」、「Ending Sector」に 6) でメモした「Sectors / Track」の値 (この例では「63」) を入力。「Starting Cylinder」にPart1の「Ending Cylinder」+1または「1023」を入力。「Ending Cylinder」にはPart1と同様に計算した値または「1023」を入力します。
これでPart2のパーティションテーブルが作成できました。以上の入力結果に (画面16) 間違いがないことをしっかり確認します。
画面16 パーティションテーブルデータ画面の編集結果
12) ここまでを保存するために、「Sectors」メニューから「Write」をクリックし、「Starting sector to write data」が「0」になっていることを確認して、「Write it」をクリック、次に「はい」をクリックします (画面14と同じ)。
その他のボリューム (パーティション) を変換する操作は省略しますが、基本的に上記の方法と同じです。要はそのパーティションの先頭セクタを見つけ、PBSからトータルセクタ数を取得して、それをパーティションテーブルに書き込むという操作です。元の論理パーティションを基本パーティションとして変換する場合も同じです。
元の拡張パーティションを拡張パーティションとして変換する場合は、トータルセクタ数が取得できませんので、拡張パーティションの先頭セクタと最終セクタを見つけ、最終セクタ−先頭セクタ+1でトータルセクタを計算します。
Part1からPart5までをベーシックディスクに変換した結果が画面17です。このように完全にベーシックディスクに変換されています。なお、このパーティションテーブルの編集方法は、削除したパーティションの復活方法としても使うことができます。
画面17 Part1からPart5までをベーシックディスクに変換した結果
ダイナミックGPTディスク (以下GPTディスクと略) は、Windows Server 2003 SP1以降、およびx64版Windows XP/2003/Vista/2008/7でのみ利用でき、ベーシックディスクをダイナミックMBRディスクに変換後、まったくボリュームがない状態でのみGPTディスクに変換できるものです (画面18)。つまりデータを保持したままGPTディスクには変換できないことになります。
画面18 ボリュームがない状態でのみGPTディスクに変換できる
画面19はGPTディスクの例ですが、このHDDのセクタ0を見てみると、画面20のようになっています。セクタ0はベーシックディスクではMBRとなる部分ですが、GPTディスクにはMBRにあるはずのマスターブートプログラムが存在しません。存在するのは、署名フィールドと1つのパーティションテーブルフィールドだけです。これはもはやMBRとは呼べないものです。当然このHDDから従来のOSは起動できません。将来的にはEFI (Extensible Firmware Interface) で起動可能になるかもしれませんが、現在EFIをサポートするマシンがintel Macを除いて存在しないため何ともいえません。
画面19 GPTディスクの例
画面20 GPTディスクのセクタ0を表示
また、このパーティションテーブルではシステムIDが「EE」となっていることも特徴です。もっとも、このパーティションテーブルはMBRディスクとはパラメータが違っているようですので、パーティションテーブルと呼ぶのは間違いかもしれませんし、システムIDフィールドではないのかもしれません。詳細は公開されていないため不明です。
このGPTディスクの構造は図4のようになっています。GPTディスクでは、ダイナミックMBRディスクと違ってHDDの先頭128MB領域にダイナミック管理データベースが置かれます。そのためにボリュームがある状態ではGPTディスクに変換できないわけです。実際のボリューム領域およびPBSについてはベーシックディスク、ダイナミックMBRディスクと変わりありません。したがって、このボリュームをベーシックディスクに変換することも可能です。変換方法は、最初のボリュームの先頭セクタがセクタ262178になることだけを注意すれば、ダイナミックMBRディスクとまったく同じ方法でできます (変換方法−その1およびその2は使えませんのでその3を使います)。具体的な方法は省略しますが、ベーシックディスクへの変換結果は画面21です。
図4 GPTディスクの構造
画面21 GPTディスクをベーシックディスクに変換した結果