2015/12/23

【Windows10】コンパクトOSでディスク占有量を削減する

Macbook Air(2012)を業務に利用しているが、3年前の機種とはいえ性能的には全く不満はない。ただ、ディスク容量が 256GB しかないため、仮想マシンを沢山作っていると容量が足りないことがままある。そこで、普段使いの Windows10 についてはできるだけ小さくインストールすることを試してみた。


● コンパクトOSとは

Windows10 では、コンパクトOSという、主に小容量ディスクのマシン向けにシステムを圧縮して占有ディスク領域を削減する機能が用意されている。詳細は、以下ページを参照して欲しい。
https://blogs.windows.com/japan/2015/04/01/how-windows-10-achieves-its-compact-footprint/
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn940129(v=vs.85).aspx


以前の Windows8.1 では、同様の目的で wimboot という機能が存在した。wimboot はシステムファイルそのものをインストールせず、リカバリパーティションにある再インストール用イメージの中のファイルをつど参照することで、システムの占有するディスク容量を節約することができた。ディスク容量の少ないネットブックやタブレットなどで便利だっだのだが、一方で様々な問題が存在した。

たとえば、WindowsUpdate で更新されたシステムファイルは通常のディスク領域に配置され、かつ圧縮されていないため、時間がたつにつれシステム領域が肥大していくという難点があった。wimboot が参照しているイメージファイルを書き換えられないことからくる制限だ。
wimboot は SSD/eMMC といったソリッドステートドライブ向けで、HDD はサポートされない、ファームウェアに EFI が必須で PC-BIOS をサポートしないなどの制限もあった。


そこで、Windows10 では wimboot ではなく、コンパクトOSという方式に切り替えられた。

コンパクトOSでは、通常と同じくシステムファイルはインストールされる。ただし、ファイルごと個別に圧縮がかかった状態になっている。WindowsUpdate がかかったときにはシステムファイルが置き換えられるが、更新されたファイルも圧縮されているので容量の肥大は緩やかにとどまる。
また、wimboot とは逆に、リカバリパーティションにはファイルそのものが配置されず、通常のシステム側のファイルを参照するだけとなっている。

これにより、システムファイルを圧縮、リカバリ用イメージとの重複を避けることでディスク領域を削減するという wimboot と同じ特徴を持ちつつ、アップデートによる肥大を避けることができるようになった。

ハードウェアについても、SSD向けであるのは変わらないとしても、PC-BIOSでもブートできるよう制限が緩和された。


● 圧縮がかかってるかの確認

圧縮がかかっているかは、compact コマンドで確認ができる。

管理者権限のコマンドプロンプトで compact コマンドを実行、引数に /compactos を
指定、query オプションをつけることで現在の状態を確認できる

wimboot も windows10 のシステムの圧縮もどちらかというとタブレットなど、ディスク容量に制約がある機器向けのもので、通常のパソコンに Windows10 をインストールするとシステムの圧縮はまず使用されていないはずだ。

圧縮してインストールするかどうかは、システムをインストールするディスクの容量と、そのマシンのCPUスペックを見るとある。システムを圧縮、展開するのはそれなりに負荷がかかるため、非力なマシンの場合はかからないことがあるようだ。

物理ハードウェアにインストールする際は、それでもいいだろう。

タダ今回は仮想マシンにインストール、さらにクローンでディスク容量を取らないようにするのが目的だ。CPUパワーは充分にあるし、ディスク容量はクローンするごとに差がでてくるので、強制的に圧縮したインストールを行った。



● 仮想マシン上での、システムの圧縮されたままでインストールする

まずは VMware Fusion などで普通にWindows10 のインストールメディアから仮想マシンを作成する。
通常のインストール手順を使わないので簡単インストールはオフにしておくこと。

仮想マシンを起動したら、最初の画面でSHIFT-F10 を押し、コマンドプロンプトウィンドウを呼び出す。

コマンドが使えるようになったら、以下コマンドを実行してインストール先となるパーティションを作成、NTFSでフォーマットしておく。

X:\Sources> diskpart
DISKPART> elect disk 0
DISKPART> create partition primary
DISKPART> select partition 1
DISKPART> format quick
DISKPART> assign letter=e
DISKPART> active
DISKPART> list partition
DISKPART> list volume
DISKPART> exit

diskpart コマンドを起動、最初のディスク(disk 0)を選択、プライマリパーティションを一つ作成する。容量を指定していないのでディスクの空き全てをそのパーティションに、つまり全領域で一つのパーティションが作成される。

select partiton 1 で作成したその最初のパーティションを指定する。なお、ディスクやボリュームと異なり、パーティションだけは1から始まるので要注意。

format quick でNTFSでのNTFSでのクイックフォーマットをかけ、仮に Eドライブと設定しておく。アクティブパーティションとサインすることで、終了だ。

list partiton ではパーティション一覧が、list volume では Windowsが最終的に認識するドライブ一覧が表示される。パーティションの先頭に * があってアクティブである事、ボリューム一覧で DドライブとEドライブがあることを確認しておこう。また、Dドライブはブートした isoイメージだ。



確認が終わったら終了をし、こんどは OS イメージの書き込みを行う。
X:\Sources> dism /apply-image:D:\source\install.wim /index:1 /applydir:e:\ /compact
最後にある /compact がシステム圧縮されたままのインストールの指定となる。忘れないように。

dismコマンドの実行が終わりイメージのインストールが終わったら、以下コマンドでブートローダをセットアップする
X:\Sources> bcdboot e:\Windows /s e:
セットアップが終わったら、一旦シャットダウンする。
再起動でなくてリブートでもいいと思うだろうが、再起動だとなぜか直後のブートに失敗することが頻発した。リセットして起動しなおすと次のフェイズに行くのだが、ここは確実性を取っていったん仮想マシンごと停止している。
X:\Sources> wpeutil shutdown
再び仮想マシンを起動し直すと、初期設定のフェイズに入る。

初期アカウントの作成、WindowsUpdate の適用などが行われ、デスクトップが表示されてインストールが完了する。

この時点での VMDK サイズだが、おおむね 5〜6 GB 程度になる。通常のインストールだと 9GB 程度になるので、3-4GB 程度、4割ぐらいが削減できたようだ。


● すでにインストールされた Windows10 をコンパクトOSにする

通常のインストールを行ったWindows10でも、後からコンパクトOSに圧縮し直すことは可能だ。管理者権限で compact /compactos:always を実行すると、システムファイルに圧縮がかけられ、コンパクトOS化される。

既存の Windows10 をコンパクトOSに変更。
それなりに時間がかかり、CPUやディスクに負荷がかかるので注意
この処理は CPUとディスクIOをかなり使う処理なので、時間と電源に余裕がある場合に実行すべきだ。上記手順でコンパクトOSとしてインストールしたものと、インストール後にコンパクトOS化では容量差はない模様。CPUと時間を節約したければ最初からコンパクトOSを、手軽さを考えるなら通常インストールからの compact /compactos:always を入れる、という感じだろう。