ディスク領域

この投稿はディスク領域と Windows 7 によって「消費される」ディスク領域についてです。ディスク領域は誰も節約したいと思っているものですが、一般的に費用対効果が大きいものでもありました。けれども、容量が回転式のドライブよりずっと小さいソリッドステートドライブ (SSD) の出現により、最近、状況が変わってきました。伝統的に、 Windows を含むほとんどのソフトウェアは、 60GB ( あるいは 1,500GB) のディスクで、特定の ( 正当な理由の ) 必要性のために 100MB を消費するのをためらうことはしませんでした。しかし、 16GB SSD を搭載したようなマシンでは、 Windows が使用するディスク領域を、セットアップ時と PC 「時代」 の両方において、慎重に検討しています。 WinHEC でも SSD に関する特定のセッション を提供したので、興味があればご覧ください。この投稿の著者は、コア OS 開発チームのプログラムマネージャーである Michael Beck です。 --Steven

「専有面積」 - "footprint" についてお話しましょう。この投稿の目的として、「専有面積」と言ったとき、それは Windows によって使用される物理的なディスク領域のことを意味しています。これは、Windows のバイナリ ファイルだけでなく、システムが動作するために消費または予約されるディスク領域も含みます。ディスクの専有面積がさまざまな Windows の技術によってどのように消費されるかについて、詳細に述べたいと思います。

多くのコメントの中で、ディスクの専有面積と Windows 7 のディスク使用量がどのくらいになりそうかについて尋ねられました。これまでにお話した設計に関する議題と同様、ディスク領域にもトレードオフがつきものなので、この投稿ではトレードオフのいくつかについて詳細に見ていくのと同時に、これまでに寄せられたフィードバックについてもご紹介していきたいと思います。なお、Windows 7 のシステム要件について、まだお約束できる段階ではないことにご注意願います。したがって、これは背景および技術的焦点としてお考えください。

この投稿を構成するにあたり、これまでに寄せられた 2つの重要なフィードバックおよび質問について考えたいと思います。

  • WinSxS ディレクトリには何が入っていて、なぜこんなに大きいのでしょうか? 削除してもかまいませんか?
  • Windows コンポーネント用にディスク領域はどこに行ってしまったのでしょうか?

そして、Windows 7 の焦点とエンジニアリングについてお話したいと思います。

WinSxS ディレクトリ

(Vista からの) 新しいディレクトリである Windows SxS ディレクトリ (%System Root%\winsxs) について、大変多くの質問をいただいています。新しくインストールされたシステムのプロパティが、ファイル数が3,000 以上で 3.5 GB 以上消費していると表示するのを見て、多くの人々はものすごいディスクの消費だと思われることでしょう。時間が経つにつれて、この数字はさらに大きくなります。なんと! 以下は Steven の自宅の PC からの例です。

Example properties sheet for WinSxS directory.

オペレーティング システムの「モジュラー化」は Windows Vista での工学的な目標でした。それ以前の古い Windows でのインストール、サービス、および信頼性に関する問題への解決策だったのです。Windows SxS ディレクトリは、すべてのシステム コンポーネントの「インストールとサービスの状態」を示すものです。しかし、組み込みツール (DIR コマンドやエクスプローラ) で計測して表示される数字ほど、実際にはディスク領域を消費しているわけではありません。ただし、実際のディレクトリにおけるディスク消費量を分かりにくくしているという事実は、もっともなご指摘です!

実際のところ、WinSxS ディレクトリ内のほとんどのファイルは、システム上の物理的なファイルへの「ハード リンク」です。つまり、ファイルは実際にはディレクトリ内には存在しないのです。たとえば、WinSxS の中には advapi32.dll という 700 KB ほどのサイズのファイルがあるかと思いますが、実際には Windows\System32 内にあるファイルへのハード リンクがここに表示されているのです。つまり、Windows エクスプローラでそれぞれのディレクトリを見ると、そのファイルは 2 回 (もしくはそれ以上) カウントされていることになります。

これは、Windows のサービス プラットフォーム (パッチやサービス パックを配布するツール) が、何がインストールされているか、インストールできるもの (オプション コンポーネント、詳細は後述します) は何か、バージョン、システムにインストールされているアップデートといったシステムの状態について数々の主要な判断をし、個別のシステムに対して適用できる Windows パッチを特定するのに、WinSxS ディレクトリを検索するという有用性があります。この機能により、サービスの信頼性やパフォーマンスが向上し、今後の追加のシステム階層化やすぐれた設定可能性を提供するための技術的な取り組みを支援します。

WinSxS ディレクトリは、オフライン サービスも可能にし、その結果 Windows Vista は「イメージングに対して安全」となりました。Windows Vista より前は、OS に標準で含まれる機能の展開は「セットアップ」によってのみ提供されていました。IT 技術者はまず 1つのシステムをインストールし、インストール状態を一般的なイメージとして収集するための他社製ツールを活用し、そしてそれを複数のシステムに展開していました。つまり、Windows は「イメージ対応」としては構築されていませんでした。システムの 80% 以上は Windows そのものでサポートされていない技術を使って展開および使用され、IT 部門は Windows を効率的に管理するため個別仕様のソリューションを考える必要がありました。さらに、WinSxS ディレクトリに保存された状態はオフラインで検索できるので、パッチを適用するのにイメージは起動および実行されている必要はありません。この WinSxS の 2つの機能により、Windows Vista を展開する IT 部門に対して高柔軟性とコスト削減を提供し、オフラインで標準の会社用イメージを作成そして使用するのが簡単になります。

WinSxS は単に存在するだけでディスク領域をいくらか消費し、またその中にはたくさんのメタデータ ファイル、フォルダ、マニフェスト、カタログが存在するというのは事実ですが、そのサイズは表示される数字よりずっと小さいです。実際のサイズには幅がありますが、一般的なシステムでは 400MB 程度です。この数字は小さくないかもしれませんが、その結果生まれるサービスの安定性を考えると、妥当なトレードオフだと思います。

では、なぜシェルはハード リンクをこのように表示するのでしょう? ハード リンクはシステム全体の重複したファイルのディスク専有面積を最適化する働きをします。アプリケーションの開発者も、アプリケーションのディスク消費を最適化するのにこの機能を使用することができます。アプリケーションが期待するパスがファイル システムの物理的なファイルとして見えることは、実際のファイルの適切な読み込みをサポートするのに非常に重要です。このケースでは、シェルはファイルについてその情報を表示するアプリケーションに過ぎません。この混乱とディスク専有面積削減の欲求の結果、多くの人々はディスク領域を節約するためにこのディレクトリの削除を試みました。

WinSxS ディレクトリを削除しても大丈夫とするブログや「アンダーグランドの」ツールがありました。インストール後、システムから削除してもシステムはちゃんと起動し動作する*みたい*だ、というのも確かに事実です。しかし、これまで説明したように、安全なサービスを提供する能力やすべての OS コンポーネント、システムのオプション コンポーネントをアップデートまたは設定する能力を削除することになるので、これはとても悪いやり方です。Windows Vista は、物理ドライブ上の最初にインストールされた場所にある WinSxS ディレクトリのみサポートします。上記で説明したことからもわかるように、WinSxS ディレクトリを削除したりシステムから場所を移動したりすることによるリスクは、それによって得られるものをはるかに上回ります。

ディスク領域はどこに行ってしまったのか ?

私たちは皆、Windows をはじめあらゆるソフトウェアは新しく機能を追加すると、それだけ新しくディスク領域が必要になることを知っています。実際には、「コード」が占めるのは、Windows 全体の専有面積の比較的小さい割合です。Windows Vista Ultimate をインストールするのに必要な実際のコードは 2 GB 超で、残りの専有面積は広い意味での「データ」に行きます。Windows Vista のインストールでのストレージ利用と「データ」とは何かについて、もう少し深く掘り下げてみましょう。

信頼性と安全は Windows Vista を構築する技術プロセス時の核となる検討項目でした。増加した専有面積の多くは、システムの復旧やパフォーマンス、データ保護、トラブルシューティングといったユーザーが頼りにする中心的な信頼性機能によるものです。システムの復元、ハイバネーション、ページ ファイル、レジストリのバックアップ、ログ記録も含まれます。これらはそれぞれ、想定内・想定外を問わずあらゆる状況からシステムを復旧させるための「バックアップ状態」に相当します。ユーザーの皆さまは復旧に関係するディスク容量についてそれぞれ異なったトレードオフに対する要求をお持ちだと思うので (特に小さい専有面積を持つデバイスの場合)、Windows 7 ではこれらのメカニズムにどの程度のディスク領域を割り当てるかを前もって決めるのに、ユーザーの皆さまがこれまで以上にコントロールできるようにしたいと思っています。そして、変化するストレージの本質にあわせ、デフォルトの値を全体の消費量に対してもっと敏感に調整する予定です。

システムの復元とハイバネーションは、バッテリーの残量不足 (ハイバネーション)、不良アプリケーションのインストールやその他マシンの破損 (システムの復元) といったあらゆる状況下において、システムをより確実に復元しデータの損失を防ぐのを助ける機能です。これらの機能は合わせて、専有面積の大きい割合を占めます。使用する容量サイズのため、識別してこれらに関する決断をするのは簡単です。

システムの復元は、変更を加える前や定期的にシステムのスナップショットを撮ることにより、ユーザーを守ります。Windows Vista では、システムの復元は最低 300 MB、物理ディスクの最大 15% 消費するように設定されています。ディスクが復元ポイントでいっぱいになってくると、システムの復元は古い復元ポイントを削除して、新しい復元ポイント用に場所を空けます。容量が大きければ大きいほど、たくさんの「後戻り」するための復元ポイントを保存することができます。私たちは Windows Vista ユーザーからシステムの復元について多くのフィードバックを得て、システムの復元はかなりのディスク領域を使用し、その上簡単には調整ができないことを悟りました。すでにプリ ベータでご覧になった方もいらっしゃるかもしれませんが、Windows 7 ではより効率的に領域を管理できるようなインターフェースになっています。

ハイバネーションは主にモバイル PC で使われるもので、作業中のデータをハードディスクに保存し、コンピュータを低電源モードにします。ハイバネーションはバッテリーの寿命をできるだけ伸ばすために、バッテリーの残量がある基準点を下回ったときや、シャットダウン コマンドを使用せずにコンピュータを休止状態にする際に使用されます。Windows Vista では、ハイバネーションはデスクトップ PC でも、起動中のプログラムや作業中のデータのバックアップを取っておくために休止モードとして自動的に使用されます。この機能はハイブリッド スリープと呼ばれ、万が一コンピュータが休止中に電源が落ちたときに備えて状態を保存します。ハイバネーションはメモリ (RAM) 内のすべての内容をハードディスク上のHiberfil.sys というファイルに書き込みます。つまり、Hiberfil.sys ファイルに予約されたサイズは、マシンに搭載されている RAM の容量と同じとなります。Windows Vista のときにはコンピュータに搭載されている RAM の容量は非常に増加し、そのためハイバネーション用のディスク専有面積も以前より顕著になってきました。危機的にバッテリー残量が少ない状況でシステムがメモリの内容を容易にディスクへ書き込めるように、この領域は最優先で予約されていなければなりません。バッテリー残量が危機的に少なくなった際にコンピュータが自動的にハイバネーション モードになったことを体験したことのあるモバイル PC ユーザーは、この専有面積の増加によってもたらされる安心感がどんなものかご理解いただけていることでしょう。RAM とディスクの専有面積について同じ段落内でお話しましたが、Mark Russinovich が virtual memory (仮想メモリ) について投稿しており、その中でスワップファイルのサイズはどうあるべきか・どうできるかについて触れているので、興味があればそちらもご覧ください。

さて、これまでの説明の中で、Windows Vista が必要とする専有面積全体についての説明はしていません。たとえば、サンプル ファイル、ビデオ、高解像度の背景画像など、ユーザーが簡単にカスタマイズしたり新しい機能を試したりできるよう、たくさんのものが含まれています。しかし、ここでは 2つのより一般的な質問を取り上げました。

いったんシステムを導入すると、システムのサイズだけを考慮するのではなく、サービスがログを記録したり、アップデートやサービスパックがインストールされたり、システムのスナップショットが保存されたりと、時間が経過するにつれてどのくらいシステムが大きくなる (成長する) かについても注目する必要があります。多くの人にとって、インストールから時間が経つにつれての「成長」は、最も困惑させるものです。そして、これについてよくご意見を聞きますし、(a) よりスマートな選択をする (b) どの領域が使用中でどれが再生できるかについてより明白にする ために、何とかしなければなりません。

下記の表はWindows Vista Premium/Ultimate のインストール時の専有面積について表しています。これは完全インストールですが、わかりやすいようにいくつかの論理的なカテゴリに分類し、特定の機能を強調しています。特定の機能を強調しているのは、質問として挙げられていた (または疑わしい) 項目の「コスト」を明らかにするためです。

Table of disk space utilization of Windows Vists SP1.

次は注目すべき項目です:

  • ドライバ サポート (1GB 程度)。Windows Vista は何千何万もの異なるデバイスと一緒に動いています。古いプリンタをはじめ、ほとんどすべてのデバイスを接続でき、認識して自動的にインストールされる能力は、ユーザーが Windows に期待しているものです。これらのドライバのいくつかまたはすべてを削除して欲しいというフィードバックは多く寄せられるものなので、リリースごとにデバイスの使用状況について遠隔測定して、「OS が標準でサポートする」 デバイスに関して注意深く吟味しています。プリンタや USB デバイスをオフラインでもインストールできる能力は、特に PC 販売数の半分以上を占めるノート型パソコンでは重要な価値です。将来的には「いつも Windows Update へ行く」ことになるかもしれませんが、現時点ではまだ世界中のほとんどの地域ではまだそうなっていません。
  • 重要なセキュリティや機能の更新をインストール後に、堅牢なロールバックや復旧をサポートするための、サービス中および置き換えられたコンポーネントによるシステムの成長 (1GB 程度)。サービスの堅牢性について多くの肯定的なフィードバックをいただいていますが、同時に、さまざまな理由により特定の修正までロールバックしたいという要望も、堅牢性や信頼性の物差しとして残っています。また、RTM 版の上に SP1 をインストールする際に必要となるディスク容量についてもフィードバックをいただいており、その内容を理解しています。System32 ディレクトリにある vsp1cln.exe は、ディスクの空き容量が必要な方に注目していただきたいユーティリティです。
  • ハイバネーション サポート (1GB 程度) は、マシンが何時間もスタンバイ モードになったときにデータの損失を防ぐために必要です。ディスク クリーンアップ ウィザードまたは管理者権限のコマンド プロンプト (powercfg /h off) により削除可能です。
  • フォント (315MB)。Windows のユーザーは、しばしば 1台の PC 上で、さまざまな言語を使用しています。そして、Windows が自分に「話」してくれることを望んでいます。Windows Vista にはネイティブのフォント サポートがあり、ドキュメントやウェブ サイトなどを読めるように 1つの言語をデフォルトとして設定できるようになっています。しかし、フォントは望めば簡単に削除できるものです。
  • ログ ファイル (52MB)。イベント ログ、サービス ログ、デバイスのインストール ログなどあり、いくらかのディスクを使用しますが、問題を解析しようとする際に大変重要となります。これらのログは、しばしばサポート担当者や企業のヘルプデスク担当者が特定の不具合について解析するのに使用されます。

Windows 7 の設計

Windows のディスク消費量は時間とともに大きくなる傾向にありました。望ましいことではありませんが、これはハードディスク容量の劇的な増加によるところが大きいです。また、ユーザーの要求や設計のフォーカスが、復旧やデータ保護、幅広デバイスのサポート、革新的な機能への要望に対して重点的に向けられたことも要因に挙げられます。しかし、SSD の台頭によりこの傾向に変化が現れ、ディスクの専有面積についていっそう熟考し、Windows 7 でも配慮せざるを得なくなりました。

ただし、これは素晴らしい機能の追加をやめたり、Windows の信頼性や回復性を低くしたりするという意味ではありません。未来に目を向けるとき、革新する際に、私たちの作業によるディスクの消費を価値あるリソースとして扱うことは非常に重要で、Windows によるディスクの使用方法についてより明快な設計を考えています。われわれは、大多数のユーザーの皆さまのために賢明な選択をし、もっと自分で管理したいと思っている方が適切に調整できるようにしなければならないと考えています。この設計の目的は、マシンの種類や特定の設計についてではなく、全体的な専有面積を削減することに焦点を当てた取り組みによってすべての Windows のエディションがその恩恵を受けることです。

たとえば、前述のドライバのサポートを考慮する際、Windows Vista SP1 ではプラグ アンド プレイ デバイスをサポートするために、システムに 1GB のドライバをインストールします。しかし、このローカルにあるキャッシュはデバイス メーカーが更新ドライバをリリースすると時代遅れとなり、その結果、ユーザーはデバイスのインストール時に Windows Update へアクセスして最新バージョンを入手することになります。

では、なぜ Windows Update のドライバをプラグ アンド プレイのユーザー エクスペリエンスの対象にして、ディスク領域を節約しないのでしょうか? これには以下のような利点があります:

  1. モバイル PC がネットワークに接続できないことはめったにないので、いつでも新しいドライバを Web から入手できる。
  2. どっちみち Web へ行くことになるので、更新されたデバイス用のドライバを 2回インストールする必要がない。

この例が示すように、最低限の専有面積に対する技術は実際、システムに新しいデバイスを接続するときによりよいエクスペリエンスをもたらすことがおわかりだと思います。しかし同時に、短期間に行き過ぎないように注意をしています。「プラグ アンド プレイ」 エクスペリエンスや (そもそもダウンロードが可能なら) コストのかかるダウンロード時間に関して、非常にたくさんのフィードバックをいただいています。Windows 7 では、私たちは現実世界の遠隔測定に基づいて何を入れるべきか慎重に検討し続け、世界中の最も出回っているデバイスはカバーしますが OS に標準で含めるドライバを減らしていく予定です。それと同時に、サポート可能なすべてのデバイスのドライバを Windows Update で提供できるよう尽力し続けます。

デフォルトでインストールされる Windows の機能は、たくさんのシナリオをサポートする上で、ほとんどは理にかなっています。(たとえば Media Center など) 必須ではない機能やコンポーネントについて、どれをすべてのシステムにデフォルトでインストールして、どれをオプションとするか、慎重に考えなければなりません。私たちは、Windows の機能をもっとオプションとしてインストールできるようにするとお約束をしました。お気づきかと思いますが、最近の Windows では、インストールされていない機能を追加しようとした際、ソース (DVD やネットワークの場所) は必要ありません。これは、その機能が完全な Windows インストールの一部として秘蔵されているからです (これ自身も機能のひとつです)。私たちは、たとえコンポーネントがインストールされていなくても、いつでも機能が利用可能で使用できる状態にします。そうすれば、後からコンポーネントを追加しても、これまでに悪用されたことがあるかもしれないようなコードを追加するリスクを避けられます。これは、オプション機能であっても、Windows を最新にかつ安全に保つための重要な方法です。

時間の経過に伴うシステムの成長は、「透明性」を高めていかなければならない分野です。たとえば、Windows は堅牢なロールバックができるように、システム更新コンポーネントの過去のバージョンを保存します。新しいシステムは、設計の意図どおり、Windows Update にパッチが用意されるとインストールします。これまでのパッチを含んだり置き換えたりするようなサービス パックや大きな更新プログラムがインストールされる際は、更新のインストールの成功後、古い更新プログラムによって占められていたスペースを元に戻します。

Windows は、トラブルシューティングの助けとなるようにさまざまな場所にログを記録しますが、これらのログは巨大になりがちです。たとえば、アプリケーションが異常終了したとき、Windows は問題の解析をサポートできるように非常に大きなダンプ ファイルを保存します。この動作にはいくつもの妥当な理由がありますが、専有面積に対する考え方が変化するのに伴い、どのように成長を管理してできるだけディスク領域を節約できるか討議したシナリオを考えていく必要があります。システムの復元やハイバネーション用にデフォルトで予約されたディスク領域も検討している分野です。ディスクに制約のあるシステムでは、ハイバネーション用に 1GB またはそれ以上予約しておくのはコストがかかりますし、hiberfil.sys のサイズを縮小する方法があるかもしれません。システムの復元は設定可能であるべきで、デフォルトはすべてのケースにおいて、最小限実用的なスナップショットの数かシステム ディスク全体の 15% かになります。

WinHEC ではドライブ/パーティションが 16GB のマシンを展示しましたが、それらのディスクの空き容量がたくさんあるのをご覧になれたかと思います。ただし、すべてのベンチマークに言えることですが、今のプリ ベータの段階でディスク容量について計測するのはお勧めできません。

最後に、Windows 7 を開発中ですが、開発チーム全体の技術的な取り組みにより、Windows Vista よりもシステムの専有面積が少なくなりそうです。その結果、PC メーカーはより柔軟にシステムの設計ができるようになるはずです。私たちはデフォルト値に対してもっと注目し、PC メーカーやエンド ユーザー、IT 技術者の方々がもっと思い通りにコントロールできるようにすることで、これを実現しようとしています。また、実現のために、Windows 全体の信頼性や堅牢性について譲歩することはありません。

-Michael Beck