Windowsのアップデートの繰り返しなどで生じる、ストレージを浪費している不要な回復パーティションを削除する方法を解説しているが(1回目、2回目)、3回目となる今回は具体的にパーティションを調査していく。
その前に、まずWindows10の標準的なパーティション構造を解説しておこう。Windows 10がプリインストールされているPCの場合、以下のような4つのパーティションが作られていることが多い。
パーティション1:ESP(EFI System Partition。System)
パーティション2:MSR(Microsoft Reserved。予約)
パーティション3:Primary(Cドライブ)
パーティション4:Recovery(回復パーティション)
ESPパーティションは、UEFIが利用するファイルなどを保存する場所で、FAT32形式でファイルシステムが作られている。MSRは、Windowsが自身のメンテンナンスやアップグレードなどに利用する領域で、一定サイズ以上のすべてのディスクに作られる。必要サイズはWindowsのバージョンにより違い、Windows 10では、16MBが必要とされている。
Primaryとなっているのは、Windowsの起動ドライブで、通常はこれがCドライブとなる。これらのパーティションの配置条件としてはESPを先頭パーティションに配置し、MSRはESPとPrimaryの間に置かれなければならないとされている。
実際のシステムでパーティションを調べる場合、最初に、パーティションとボリュームの対応表を作ると混乱が少ない。しかし、Diskpartコマンドには、ボリュームとパーティションの関係を直接表示するコマンドはないので、パーティションを選択して、detail partitionコマンドで対応するボリュームを表示させるか、パーティションを選択してList volumeコマンドで選択されているボリューム(アスタリスクが先頭に付く)を探す。
こうして調べたところ、今回のテストPCは以下のようなパーティション-ボリューム構造を持っていた。
パーティション1:ボリューム1(ESP、EFI System Partition)
パーティション2:なし(OEM)
パーティション3:なし(予約)
パーティション4:ボリューム2(WINTOOLS)
パーティション5:ボリューム0(Primary、Cドライブ、Windows)
パーティション6:ボリューム3(現在の回復パーティション)
パーティション7:ボリューム4(PBR Image)
全部でパーティションが7つ。このうち、調査する必要があるのは、ボリューム2、3、4(パーティション4、6、7)で、逆にボリューム0、1(パーティション5、1)は、Windowsの必須パーティションであり、削除することもできないので使用中かどうかを調べる必要がない。
OEMパーティションの中身を調べる
パーティション2はOEMと表示されるが、これはパーティションのIDがメーカーに割り当てられたものになっているからだ。GPTでは、64bitのGUIDをパーティションIDに使うため、メーカーは固有のパーティションIDを使うことができる。
このパーティションで、ボリュームが確認できないのは、Diskpartが自分の管理外のIDを持つOEMパーティションなどについてはボリュームの存在を調べないからだ。つまり、ここには、何もファイルシステムがないのではなく、Diskpartが調べないだけなのである。
こうしたパーティションを調べるには、Setコマンドを使い、パーティションIDを「ベーシックデータパーティション」(ebd0a0a2-b9e5-4433-87c0-68b6b72699c7)に書き換える。ただし、元に戻すことを考え、現在のパーティションIDを記録しておく必要がある。まずは、現在のパーティションを調べ、追加されるパーティションを見つけるために、書き換え前のボリュームを列挙しておく。
select partition 2
detail partition
List volume
コマンド実行結果の「Type」がパーティションIDであり、これを記録しておく。ターゲットPCでは、「796badd3-6bbf-4d9f-b631-466eb71a4965」だった。また、この時点では、ボリューム5までが表示されていた。
次に、パーティションIDを書き換える。それには、
set id=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
List volume
とする。その後、List Volumeコマンドの結果では、パーティション2に相当するボリュームとして6が追加されていた。これにドライブ文字を付ければ、パーティション内容を表示できる。
select volume 6 assign letter=Z
しかし、ボリューム内には何もファイルがなかった。そもそもOEMパーティションは、プリインストール時に作られたものであり、Windows 8での回復イメージ関連で使われるものだ。
確認が終わったら、パーティションIDを元に戻しておく。戻すには、
select volume 6
remove letter=z
select partition 2
set id=記録したパーティションID
とする。
パーティションIDを書き換えて、中身を調べる方法は、他のパーティションIDでも利用できるが、MSR形式に対してはDiskpartがエラーとなり適用することができない。また、Linuxなど他のOSの場合、Windowsではファイルシステムを表示させることができない。
なお、MSRパーティションに関しては、Windowsが利用するとされていて、従来の隠しセクタの代用としたり、ダイナミックディスクへ変換する場合に必要なパーティションをここから切り出して作る(このためにPrimaryパーティションの前に置かれる必要がある)などの使い方があるが、完全な使い方は公開されておらず、中身を調べる方法がない。稼働中のWindowsの場合、手をつけないほうが無難である。
Windowsが認識している回復パーティションを調べる
次にコマンドを使って、システムが認識している回復パーティションなどを確認する。Windowsが現在利用している回復イメージを調べるには、「REAgentC.exe」コマンドが利用できる。
ただし、注意するのは、アップグレードを繰り返した場合、Windows10で使う「Windows RE」イメージだけでなく、Windows 8.1以前で利用していた「回復」イメージもこのコマンドではリストアップされることだ。コマンドは、以下のように/infoオプションを付けて起動する。
reagentc /info
ターゲットPCで利用すると、「Windows REの場所」(Windows RE Location)と「回復イメージの場所」(Recovery image location)の2つのパスが表示される。しかし、Windows 10で利用されているのは、「Windows RE」の場所だけだ。
コマンドの実行結果をみると現在の回復イメージ(Windows RE location)は「\\?\GLOBALROOT\device\harddisk0\partition6\Recovery\WindowsRE」となっていて、これは、パーティション6(ボリューム3)の\\Recovery\WindowsREフォルダを表す。
また、Windows 8.1のときに使われていた「回復イメージ」(Recovery image location)は、「\\?\GLOBALROOT\device\harddisk0\partition7\Dell\Image」となっており、これは、パーティション7(ボリューム4)の\Dell\Imageフォルダとなっていた。
不要なパーティションを確認して削除
ここまでの調査から、不要と考えられるのは、ボリューム2(パーティション4)になりそうだ。ボリューム4(パーティション7)も購入時の状態に戻さないのであれば不要と言える。ただし、中身を見た限り、完全な状態で残っており、メーカー提供のツールを使えば利用可能になる可能性がある。
ここで前回解説した方法を使い、ボリューム2(パーティション4)を調べる。Windows 10のリリースが2016年7月なので、それ以前のタイムスタンプしかないファイル、フォルダであれば、現在使われていないと判断できる。ボリューム2の最新ファイルは2015年のもの。このため、ここは、Windows 8.1が動作していた頃に回復パーティションとして使われたものの、現在では使われていないと判断できる。
状態をまとめたのが以下の表である。いくつかのパーティションは削除可能ではある。しかし、パーティションコマンドの制限により、このままでは、空き領域ができたとしても、Cドライブのパーティションサイズを大きくすることができない。というのは、Diskpartコマンドによる、パーティションの拡大縮小は、パーティションの後方にあるファイルシステムの空き領域を操作するもので、対象パーティションよりも後方に空き領域を作らねばならないからである。
とりあえず、不要なパーティションの削除方法を示す。パーティションを削除するには、selectコマンドでパーティションを選択し、deleteコマンドを使う。このとき、overrideオプションを付けないと削除が行えない場合がある。具体的には(Xをパーティション番号とする)、
select partition X
delete partition override
これでパーティションが削除され、そこに空の領域(ディスクエクステントと呼ばれる)ができる。このあと、createコマンドを使うことで、新規にパーティションが作成できる。diskpartでは、パラメーターを省略した場合、適当に情報が補われる。
createコマンドでは、サイズやオフセットを省略すると、最も前方にあるエクステントにパーティションを作成する。以下のdiskpartコマンドで最初のエクステントに新規にベーシックデータパーティション(Windowsでディスクドライブとして扱えるパーティション)を作成可能だ。
create partition primary
他の方法として、パーティションのIDをSETコマンドでベーシックデータパーティションに書き換える方法もある。しかし、ファイルシステムの状態がどうなっているかといった問題もあるので、一回削除してフォーマットするほうが安全だと思われる。
新規にパーティションを作成したら、フォーマットしてファイルシステムを作り、ドライブ文字などを割り当てる。この作業は、「コントロールパネル」→「管理ツール」→「コンピュータの管理」の「ディスクの管理」を使うほうが簡単だ。
どうしても、不要なパーティションを削除してCドライブの容量を増やしたい場合には、パーティションの移動が可能なサードパーティのユーティリティを使うか、外部メディアからWindows 10のインストーラーを起動し、パーティションを再作成してからクリーンインストールを行なう必要がある。
この連載の記事
-
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に - この連載の一覧へ