BOOK Preview

インサイドMicrosoft Windows 第4版 下

第10章 ストレージ管理

10.3 ボリューム管理
10.3.1 基本ディスク

マイクロソフトプレスの書籍紹介ページ
書籍情報のページ
2005/11/08

 本コーナーは、Windowsシステム管理者向けの書籍から、主要なチャプターをそのまま転載し、その内容を紹介するものです。

 今回ご紹介する『インサイドWindows 第4版』は、Windowsオペレーティング・システムの内部を詳細に解説した決定版です。Windowsカーネルの内部について、ここまで詳しく解説した情報はほかにありません。

 著者の1人であるデビット・ソロモン氏は、Windows NTの開発リーダーだったデビット・カトラー氏とは旧知の仲で、本書の前々版(『インサイドWindows NT 第2版』)を執筆するにあたり、Windowsカーネルのソースコードにアクセスする許可をカトラー氏から与えられました。それだけでなく、デビッド・カトラー氏は、本書の一部(プロセス管理の部分)について、技術校閲も担当しています。

 またもう1人の筆者であるマーク・ルシノビッチ氏は、Windowsオペレーティング・システムの機能を縦横に駆使したツール開発者として著名で、前出のカトラー氏も一目置く存在です。「かゆいところに手が届く」彼のツールは、多くのWindowsエンジニアにとって不可欠な存在となっています(フリー・ツールの入手先はこちら:SysInternals)。

 つまり本書は、Windowsコア・システムの開発責任者と、OS解説のエキスパートが、二人三脚で執筆し、Windowsの歴史とともに改版を重ねてきた希有な書籍なのです。今回の第4版では、Windows XPとWindows Server 2003に加えられたカーネルの変更点や、Windowsの64bitサポートなどについて加筆されています。情報システムの設計者やシステム管理者など、作り手や管理者としてWindowsシステムに接する必要があるなら、本書にまとめられた情報が仕事の随所で役立つはずです。

 本稿は、Windowsの内部構造や仕組みを解説した名著で最新の第4版です。Windows 2000、Windows XP、そしてWindows Server 2003に対応し、マルチプロセッサ、64ビットWindowsまで網羅しています。下巻は、Windowsのセキュリティ構造、I/Oシステムのコンポーネント、ストレージ管理、キャッシュマネージャの主な特徴について、さらにWindowsのファイルシステムとネットワーク構造、クラッシュダンプ解析について詳細に解説しています。

 なお、書籍の詳細については書籍情報のページをご覧ください。

ご注意:本記事は、書籍の内容を改訂することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

10.3 ボリューム管理

 Windowsは、「基本」と「ダイナミック」というディスクの概念を導入しています。MBRやGPTスタイルのパーティショニングスキームを「基本ディスク」と言います。一方、「ダイナミックディスク」という概念はWindows 2000から導入され、パーティショニングの柔軟性の点で基本ディスクより優れています。2つのディスクの間の相違は、ダイナミックディスクがマルチパーティションボリュームをサポートしていることです。マルチパーティションボリュームは、単純なボリュームにはないパフォーマンス、サイジング、および信頼性を向上させる機能を提供しています。Windowsは、すべてのディスクを基本ディスクとして管理しています。このため、ダイナミックディスクの利点を活用したい場合には、手動で作成するか、(十分な空きスペースを持つ)既存基本ディスクをダイナミックディスクに変換する必要があります。Microsoftは、マルチパーティション機能を使用する必要がある場合を除き、基本ディスクの使用を推奨しています。

   

 基本ディスクは、Windows NT 4のアップグレード環境から引き継がれたマルチパーティションボリュームのみをサポートします。ただし、Windows Server 2003は、基本ディスク上のマルチパーティションボリュームをサポートしません。ラップトップは1つのディスクを持ち、基本的には、コンピュータ間でディスクを移動するようなことはありません。こうした事実などをいろいろ考慮し、Windowsはラップトップ上では基本ディスクのみをサポートします。さらに、ダイナミックディスクとして利用できるのは、固定ディスクのみとなっています。また、IEEE 1394やUSBバス上のディスクと共有クラスタサーバーディスクは、常に基本ディスクとなっています。

 
Windowsボリューム管理の歴史

 Windowsにおけるストレージ管理の歴史は、Microsoftの最初のオペレーティングシステムである、MS-DOSから始まります。ハードディスクの容量が巨大化し、MS-DOSはそのような時代の流れに対処する必要がありました。Microsoftが最初にとった対策は、物理ディスク上に複数のパーティション(つまり、論理ディスク)を作成できるようにすることでした。MS-DOSは、それぞれのパーティションを異なるファイルシステムタイプ(FAT12やFAT16)でフォーマットし、それぞれのパーティションに個別のドライバ文字を割り当てるようにしました。MS-DOS Version 3と4では、パーティションの大きさと数が限られていましたが、Version 5になり、パーティショニング機能は完成の域に達しました。MS-DOS Version 5は、任意の大きさを持つパーティションを任意の数だけ作成する機能を実装していたのです。

 Windows NTは、MS-DOSで進化してきたパーティショニングスキームを継承し、MS-DOSとWindows 3.xとのディスク互換性を保障すると共に、Windows NT開発チームが実績のあるディスク管理ツールを再利用できるようにしました。Microsoftは、Windows NTでMS-DOSのディスクパーティショニング概念を拡張し、企業レベルのオペレーティングシステムが備えるべきストレージ管理機能(ディスクスパニングと高度な耐障害性)を提供しました。Windows NT Version 3.1以降、システム管理者は、複数のパーティションで構成されるボリュームを作成できるようになりました。つまり、システム管理者は、複数の物理ディスクのパーティションを組み合わせ、ソフトウェアベースのデータ冗長性を活かしながら、高度な耐障害性を確保できるようになったわけです。

 Windows 2000以前の各Windows NTバージョンで採用されていたMS-DOSスタイルのパーティショニングサポートは、ほとんどのストレージ管理機能を実装していましたが、いくつかの弱点を抱えていました。たとえば、ディスク構成を変更したときには、ほとんどの場合、システムの再起動が必要でした。今日のサーバーは、数か月あるいは数年の間、連続稼動することが常識になっています。この現実を直視した場合、システムの再起動は、そのタイプに関係なく、不便なことと言わざるを得ません。また、Windows NT 4レジストリは、MS-DOSスタイルのパーティション用のディスク構成情報を記憶していました。このため、システム間でディスクを移動すると、構成情報も移動する必要があり、かなり負担となっていました。オペレーティングシステムの再インストール時には、構成情報の喪失の危険があったのです。さらに、それぞれのボリュームは、AからZまでの範囲のドライブ文字を持つことができましたが、これは、Windows 2000以前のすべてのMicrosoftオペレーティングシステムユーザーは、作成できるローカルとリモートボリュームの総数に上限値を設定されていたことになります。

 Windowsは、3つのタイプのパーティショニングをサポートし、各種制限を克服しています。3つのタイプはそれぞれ、マスタブートレコード(MBR)スタイル、GUIDパーティションテーブル(GPT)、および論理ディスクマネージャ(LDM)と呼ばれています。

10.3.1 基本ディスク

 この節では、MBRスタイルとGPTという2つのタイプのパーティショニングと、FtDiskというボリュームマネージャを取り上げます。Windowsは、内部で2つのパーティショニングタイプを使用し、基本ディスク上のボリュームを定義しています。FtDiskボリュームドライバは、ボリュームをファイルシステムドライバに提示します。Windows 2000ディスクマネージャは、パーティションのないディスクをダイナミックディスクにするように推奨していますが、Windows XPやWindows 2000 Professionalと同じように、Windows Server 2003はすべてのディスクを基本ディスクとして暗黙のうちに定義しています。

■MBRスタイルパーティショニング

 x86ハードウェアが使用する標準BIOSは、Windowsでは1つのパーティショニングフォーマットを使用することを前提として実装されています。そのフォーマット条件は、プライマリディスクの第1セクタにマスタブートレコード(MBR)を含めるようになっています。x86プロセッサがブートするときに、コンピュータのBIOSはMBRを読み込み、MBR内容の一部を実行コードとして扱いします。BIOSは、コンピュータハードウェアの基本的な構成値を設定後、MBRコードを呼び出し、オペレーティングシステムのブートプロセスを開始します。Windowsを含むMicrosoftのオペレーティングシステムでは、MBRは「パーティションテーブル」というものも含んでいます。1つのパーティションテーブルには、ディスク上の4つのプライマリパーティションを定義する、4個のエントリが含まれています。パーティションテーブルはまた、パーティションのタイプも記録しています。多くのパーティションタイプが事前定義されています。それぞれのパーティションタイプは、パーティションに含まれるファイルシステムを指定しています。たとえば、FAT32やNTFS用のパーティションタイプなどがあります。「拡張パーティション」と呼ばれる特殊なパーティションタイプは、独自のパーティションテーブルを持つ、もう1つのMBRを持っています。拡張パーティション内で、プライマリパーティションに相当するのは、「論理ドライブ」です。Microsoftのオペレーティングシステムは、拡張パーティションを採用することにより、ディスクあたり最大4個のパーティションを持てるという制限を克服しています。一般論としては、拡張パーティションは再帰的に際限なく作成できます。つまり、ディスク上のパーティション数に制限がなくなったわけです。Windowsブートプロセスは、プライマリドライブと論理ドライブを明確に区別しています。システムは、プライマリディスクのプライマリパーティションをアクティブとみなします。MBR内のWindowsコードは、アクティブパーティション内の第1セクタに格納されているコードをメモリにロードし、そのコードに制御を渡します。プライマリパーティション内の第1セクタは、ブートプロセスで重要な役割を果たしているため、Windowsはすべてのパーティションの第1セクタをブートセクタとみなします。第4章で触れたように、何らかのファイルシステムでフォーマットされたすべてのパーティションは、ブートセクタを持っています。それぞれのブートセクタは、パーティションのファイルシステム構造に関する情報を保持しています。

■GUIDパーティションテーブルパーティショニング(GPT)

 オペレーティングシステムがブートプロセス時に使用するファームウェアは標準化され、拡張性に富んでいることが望まれています。この目標を実現するため、IntelはEFI(Extensible Firmware Interface:拡張ファームウェアインターフェイス)仕様を作成し、一般公開しました。EFIは、ファームウェア内(通常はROM)にミニオペレーティングシステム環境を実装しています。オペレーティングシステムは、システムブートプロセスの初期の段階でそのコードを呼び出し、診断コードとブートコードをメモリにロードします。EFIの最初のターゲットの1つは、IA64であるため、IA64版WindowsはEFIを採用します(ただし、従来のMBRパーティショニングを持つディスクを作成するオプションは用意されます)。EFIの詳細については、developer.intel.com/technology/efiを参照してください。

 EFIは、GUIDパーティションテーブル(GPT)を呼ばれるパーティショニングスキームを定義しています。このスキームは、MBRスタイルパーティショニングのいくつかの欠点を解決しています。たとえば、GPTパーティション構造が使用するセクタアドレスは、32ビットではなく、64ビットとなっています。32ビットのセクタアドレスは、2テラバイト(TB)の記憶域をアクセスだけでしたら十分ですが、GPTはそれ以上の記憶域へのアクセスを可能としています(将来必要と予想される大きさの記憶域)。GPTはさらに、CRCを使ってパーティションテーブルの健全性を保障し、パーティションテーブルのバックアップコピーを作成管理しています。GPTという名前は、36バイトのUnicodeパーティション名を使えることに加え、個々のパーティションにGUIDを割り当てることに由来しています。

 図10-4は、GPTパーティションレイアウトの1つの例を示しています。MBRパーティションと同じように、GPTディスクの第1セクタは、MBRとなっています。これは、GPT未対応オペレーティングシステムからのディスクアクセスに備えるための処置です。しかし、ディスクの第2と最終セクタは、第2セクタから最終セクタまでの実際のパーティションテーブルへのアクセス情報を持つ、GPTパーティションテーブルヘッダーを記憶しています。GPTパーティショニングは、拡張パーティションリストを使用するため、MBRパーティショニングのようなパーティションのネストを必要としません。

図10-4 GPTパーティションレイアウトサンプル
 
   

 Windowsは、基本ディスク上にマルチパーティションボリュームを作成する機能をサポートしていませんから、新規基本ディスクパーティションはボリューム1個に相当します。このため、ディスク管理MMCスナップインは、基本ディスク上にボリュームを作成するときには、「パーティション」という用語を使用しています。

■基本ディスクボリュームマネージャ

 FtDiskドライバ(\Windows\System32\Drivers\Ftdisk.sys)は、基本ディスク上のボリュームを表現するディスクデバイスオブジェクトを作成し、シンプルボリュームを含む、すべての基本ディスクボリュームの管理を担当します。FtDiskは、すべてのボリュームに対して、\Device\HarddiskVolumeX形式のデバイスオブジェクトを作成します(Xの部分には、ボリュームを識別する1から始まる数値が入ります)。

 FtDiskは、基本ディスクを列挙し、基本ボリュームの存在を検出しています。検出した基本ボリュームは、Windows PnPマネージャに報告されます。この事実は、FtDiskが実際にはバスドライバであることを示しています。この列挙機能を実装するために、FtDiskはパーティションマネージャ(Partmgr.sys)とPnPマネージャの機能を活用し、どのような基本ディスクパーティションが存在するのかを判断しています。パーティションマネージャは、PnPマネージャに自分自身を登録し、ディスククラスドライバがパーティションデバイスオブジェクトを作成したときに、その旨の通知をWindowsから受け取っています。パーティションマネージャは、プライベートインターフェイス経由で新規パーティションオブジェクトに関する情報をFtDiskに通知し、フィルタデバイスオブジェクトを作成します。作成されたフィルタデバイスオブジェクトは、パーティションオブジェクトにアタッチされます。Windowsは、フィルタオブジェクトを参照しながら、パーティションデバイスオブジェクトの削除タイミングを検出し、パーティションマネージャにその旨を通知します。通知を受けたパーティションマネージャは、FtDiskを更新します。ディスククラスドライバは、ディスク管理Microsoft管理コンソール(MMC)スナップインからパーティションが削除されると、パーティションデバイスオブジェクトを削除します。FtDiskがパーティションを認識すると、基本ディスク構成情報を頼りに、パーティションとボリュームの対応関係を決定し、ボリュームの説明情報内のすべてのパーティションの存在が通知された時点で、ボリュームデバイスオブジェクトを作成します。

 この後に説明するWindowsボリュームドライブ文字の割り当て時には、\Global??(Windows 2000では\??)オブジェクト名前空間ディレクトリ内にドライブ文字シンボルリンクが作成されます。そのリンクは、FtDiskが作成するボリュームデバイスオブジェクトを指しています。システムやアプリケーションが最初にボリュームにアクセスすると、Windowsはマウント処理を行います。このマウント処理により、ファイルシステムドライバは自分が管理できるフォーマットを持つボリュームを認識し、そのボリュームの所有者となることができます(マウント処理の詳細については、「10.3.4 ボリューム名前空間」の「ボリュームのマウント」を参照してください)。


 INDEX
  インサイドMicrosoft Windows 第4版 下
  第10章 ストレージ管理
    10.1 ストレージ関連用語/10.2 ディスクドライバ/10.2.1 Ntldr
    10.2.2 ディスククラス、ポート、およびミニポートドライバ/10.2.3 ディスクデバイスオブジェクト/10.2.4 パーティションマネージャ
  10.3 ボリューム管理/10.3.1 基本ディスク
    10.3.2 ダイナミックディスク
    10.3.3 マルチパーティションボリューム管理
    10.3.4 ボリューム名前空間NEW!
    10.3.5 ボリュームI/O処理/10.3.6 仮想ディスクサービス(VDS)/10.3.7 ボリュームシャドウコピーサービス/まとめNEW!
 
インデックス・ページヘ  「BOOK Preview」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間