QTPartedでNTFSパーティションサイズを変更したときの不具合と修復方法

●注意●
 ここで示す操作は上級者向けのものです。初心者向けではありません。ここで書かれた内容を理解できない場合は、絶対に操作しないでください。間違えると取り返しのつかない結果になる恐れがあります。



●QTPartedでNTFSパーティションを拡張 (拡大) すると
 QTPartedは、Linux上で動作するフリーのパーティション操作ツールとして人気がありますが、このQTPartedでWindowsのNTFSパーティションのサイズを変更したときに不具合が起きることがあります。実際にNTFSパーティションサイズの変更を行っているのは、QTPartedではなくntfsresizeというプログラムですので、この不具合はQTPartedの不具合というより、ntfsresizeの不具合というべきですが、直接ntfsresizeでパーティション操作を行う人は少なく、ほとんどがQTParted経由で操作していると思われます。
 注:ここでテストしたQTPartedのバージョンは0.4.5 (最新版) ですが、これ以前のバージョンでも同様な不具合を確認しています。ただし、将来のバージョンではこの不具合が解消される可能性がありますので、ご使用のQTPartedのバージョンを確認してください。また、QTPartedの他に、PartedやGPartedもntfsresizeを使ってNTFSパーティションのサイズ変更を行っていますので、同様の問題が起きると思われます (未確認)。

 実際の不具合の例を次に示します。
1) まず画面1のようにFAT16、FAT32、NTFSの3つのパーティションを作成しておきます。

画面1:FAT16、FAT32、NTFSの3つのパーティションを作成する (ディスク0)

2) この3つのパーティションを、QTPartedを使って、それぞれの後ろの空き領域いっぱいにパーティションを拡張します。その結果を画面2に示します。

画面2:QTPartedで、FAT16、FAT32、NTFSの3つのパーティションを拡張する

3) QTPartedでパーティションを拡張した結果をWindowsのディスクの管理画面で確認すると、画面3のようになります。

画面3:QTPartedで拡張した結果をディスクの管理画面で見ると...

 ディスクの管理画面の右下ペインでは、FAT16、FAT32、NTFSのそれぞれのパーティションが、1.95GB、24.41GB、29.53GBのサイズとなっており、拡張が成功したように見えます。しかし、右上のペインで、容量を見ると、FAT16、FAT32、NTFSのそれぞれのパーティションが、1.95GB、24.39GB、16.33GBとなっています。FAT16、FAT32の場合は誤差の範囲内の差しかないのでこれで問題はありませんが、NTFSパーティションの16.33GBというのは拡張前のパーティションサイズであり (画面1参照)、右下ペインとはまったく違っています。これは異常な状態です。念のためにエクスプローラでNTFSパーティションのプロパティを表示したものが画面4です。ここでも拡張前のサイズが表示されています。

画面4:エクスプローラでNTFSパーティションのプロパティを表示した

 なぜこのような異常状態になっているのかを調べるために、Disk ProbeでこのHDDのMBRを開き、「View」→「Partition table」から「Partition 3」を見た画面を画面5に、Disk ProbeでこのNTFSパーティションのパーティションブートセクタ (PBS) を開き、「View」→「NTFS BootSector」を見た画面を画面6に示します。

画面5:Disk ProbeでMBRを開き、「View」→「Partition table」から「Partition 3」を見る


画面6:Disk ProbeでPBSを開き、「View」→「NTFS BootSector」を見る

 画面5ではTotal Sectors (パーティションサイズ) が61929441セクタになっていますので、バイトに換算すれば29.53GBとなり、画面3の右下ペインのサイズに一致します。一方、画面6ではTotal sectorsが34250012セクタになっていますので、バイトに換算すれば16.33GBになります。この値は画面3の右上ペインや画面4のサイズに一致します。ついでにQTPartedで拡張前のPBSを保存していたものを画面7に示します。これは画面6とまったく同じです。

画面7:QTPartedで拡張前のPBSをDisk Probeで開き、「View」→「NTFS BootSector」を見る

 これからわかるように、QTPartedではNTFSパーティションのサイズ拡張に際して、パーティションテーブル (MBR) のパーティションサイズパラメータを書き換えているものの、PBSを書き換えることを忘れているために、PBS中のパーティションサイズパラメータが拡張前のままに残り、このような異常な状態に陥っていることになります。
 なお、FAT16およびFAT32パーティションに関しては、PBSのサイズパラメータも正しく書き換えられており、問題はありませんでした。

●QTPartedでNTFSパーティションを縮小すると
 次にパーティションサイズを縮小した場合をテストしました。
 画面8が操作前のWindowsで作成したパーティションです (ディスク 0)。これをQTPartedでパーティションサイズの縮小を行った結果が画面9です。右上のペインでも、右下のペインでもパーティションサイズは一致しており、何も問題がないように見えます。本当に問題がないかを確認するために、MBRとPBSを見ることにします。

画面8:QTPartedで縮小前のパーティション構成


画面9:QTPartedで縮小後のパーティション構成

 画面10はMBR中のNTFSパーティションパラメータ、画面11は同じNTFSパーティションのPBSパラメータです。ここで注目するのはTotal Sectorsの値です。MBRの方は34250013セクタになっていますが、PBSの方では34241808セクタになっています。MBRの34250013セクタが正しければ、PBSのパラメータは34250012セクタにならなければなりません。その差は8204セクタあります。これは約4MBの差に相当します。16.33GBに比べれば、4MBは小さすぎてパーティションサイズの表示に影響していないだけですが、実際にパーティションサイズに矛盾が生じている状態は、やはり異常といわざるをえません。
 なお、FAT16およびFAT32のパーティションに関しては、拡張の場合と同様に、問題は見つかりませんでした。

画面10:MBR中のNTFSパーティションパラメータ


画面11:同じNTFSパーティションのPBSパラメータ

●不具合の修正方法
 このように原因がわかれば、解決策もおのずと出てきます。つまりPBS (パーティションブートセクタ) のパラメータを手動で書き換えてやればよいことになります。ここでは、問題のパーティションがプライマリ (基本) パーティションの場合を説明します。問題のパーティションが論理パーティションの場合は、操作が複雑になりますので、ここでは説明できません。
 具体的な手順は次のとおりです。
1) Disk Probeを起動して、「Drives」メニューから「Physical Drive」をクリックします。
2) 「Available Physical Drive」欄の修復したいPhysical Driveをダブルクリックします。
3) 「Handle 0」の「Read Only」のチェックを外し、「Set Active」ボタンをクリックし、「OK」をクリックします。
4) 「Sectors」メニューから「Read」をクリックします。
5) 「Starting Sector」が "0"、「Number of Sectors」が "1" になっていることを確認して、「Read」ボタンをクリックします。
6) 「View」メニューから「Partition table」をクリックします。
7) 「Partition table index」欄で修復したいパーティションをダブルクリックします。
8) 「Total Sectors」の値および「Relative Sector」の値をメモしておきます。
9) 「Relative Sector」の右にある「Go」ボタンをクリックします。
10) 「View」メニューから「NTFS BootSector」をクリックします。
11) 「Total sectors」欄に、7)でメモした「Total Sectors」の値マイナス1の値を入力して、書き換えます。
12) 「Sectors」メニューから「Write」をクリックします。
13) 「Starting sector to write data」の欄に7)でメモした「Relative Sector」の値が入っていることを確認して、「Write it」ボタンをクリックします。
14) 確認のメッセージ「Are you sure......」が表示されたら、「はい」をクリックします。
15) Disk Probeを終了し、Windowsを再起動します。
16) 起動時にCheckDiskが起動するかもしれませんが、キャンセルすることなく最後まで実行させます。Windowsが起動したら、ディスクの管理画面、エクスプローラのプロパティ画面でパーティションサイズが正しくなっていることを確認してください。起動時にChekDiskが起動しなかった場合は、念のためにコマンドプロンプトで "chkdsk X: /f" (Xは対象のドライブ名) を実行します。

●結論●
 このようにQTPartedによるNTFSパーティションのサイズ変更では不具合が起きますので、QTPartedの新しいバージョンで不具合が修正されるまでは、NTFSパーティションのサイズ変更は行わないことをお勧めします。すでにサイズ変更を行ってしまったという場合は、上記の方法で修正しておくと良いでしょう。