BOOK Preview インサイドMicrosoft Windows 第4版 下 第10章 ストレージ管理 10.3.3 マルチパーティションボリューム管理 マイクロソフトプレスの書籍紹介ページ書籍情報のページ 2005/11/08 |
|
10.3.3 マルチパーティションボリューム管理
FtDiskとDMIOは、ファイルシステムドライバが管理するボリュームを提供し、ボリュームへのI/Oを目的のパーティションに対応付けます。単純なボリュームの場合、この作業は簡単です。ボリュームマネージャは、ボリュームの開始ディスクオフセットにボリューム相対オフセットを加算し、ボリューム相対オフセットをディスク相対オフセットに変換しています。
マルチパーティションボリュームは、ボリュームを構成するパーティションが非連続していたり、異なるディスク上に存在するため、単純なボリューム構成とは異なります。いくつかのタイプのマルチパーティションボリュームは、データ冗長性を採用するため、ボリュームからディスクオフセットへの変換過程はより複雑になります。DMIOは、最終的に影響を受けるパーティションを決定しながら、マルチパーティションボリュームへのすべてのI/O要求を処理する必要があります。
Windowsで利用できるマルチパーティションボリュームタイプは、次のとおりです。
- スパンボリューム
- ミラーボリューム
- ストライプボリューム
- RAID5ボリューム
まず、マルチパーティションボリュームパーティション構成とそれぞれのマルチパーティションボリュームタイプの動作を説明します。その後、FtDiskとDMIOドライバとファイルシステムドライバが送信してくるIRPの処理を取り上げます。以降の節では、DMIOを意味する「ボリュームマネージャ」という用語が頻繁に登場します。既に触れたように、FtDiskは、NT4から移植されたマルチパーティションボリュームタイプをサポートしているにすぎません。
■スパンボリューム
「スパンボリューム」は、1つ以上のディスクで最大32個の空きパーティションで構成される、単一論理ボリュームを指しています。WindowsディスクマネージャMMCスナップインは、パーティションを連結し、1つのスパンボリュームを構成します。スパンボリュームは、その後、Windowsがサポートするファイルシステム用にフォーマットされます。図10-9は、ドライブ文字Dを持つ100MBのスパンボリュームを示しています。このスパンボリュームは、最初のディスクの最後の1/3と第2ディスクの最初の1/3を使って作成されています。スパンボリュームは、Windows NT4では「ボリュームセット」と呼ばれていました。
図10-9 スパンボリューム |
スパンボリュームは、空きディスク内の小さな部分を連結して大きなボリュームを作り上げたり、複数の小さなディスクから1個の大きなボリュームを作り上げたりする場合に便利です。スパンボリュームがNTFS用にフォーマットされている場合には、それをさらに拡張し、既に格納されているデータに影響を与えることなく、空き領域やディスクを追加できます。この拡張性は、NTFSボリューム上のすべてのデータを1つのファイルとして表現するうえでの利点の1つです。NTFSは、ボリュームの割り当て状態を記録するビットマップが独立したビットマップファイルであるため、論理ボリュームの大きさを動的に増やすことができます。ビットマップファイルは拡張できるため、ボリュームに追加された任意の空間を含めることができます。一方、FATボリュームの動的拡張は、FAT自体の拡張が必要になります(この結果、ディスク上の他のすべての位置がずれてしまいます)。
ボリュームマネージャは、ディスクの物理的な構成をWindowsにインストールされているファイルシステムから隠します。たとえば、NTFSは、図10-9のボリュームD:を通常の100MBボリュームと認識します。NTFSは、ビットマップを参照し、ボリューム内のどの空間を割り当てることができるのかを決定します。その後、ボリュームマネージャを呼び出し、ボリューム上の特定のバイトオフセットから始まるデータを読み書きします。ボリュームマネージャは、スパンボリューム内の物理セクタを、第1ディスクの最初の空き空間から最後のディスクの最後の空き空間までを順序よく(シーケンシャルに)認識していきます。最終的に、ボリュームマネージャは、提供されたバイトオフセットに対応するディスク上の物理セクタを決定します。
■ストライプボリューム
「ストライプボリューム」というのは、個々のディスクの1つのパーティションを、最大32個まで連結してできあがった単一論理ボリュームです。ストライプボリュームはまた、RAIDレベル0(RAID0)ボリュームと呼ばれています。図10-10は、3つのディスクの3つのパーティションで構成されるストライプボリュームを示しています(ストライプボリューム内の1つのパーティションは、ディスク全体をカバーする必要はありません。ただし、それぞれのディスクのパーティションは、同一の大きさでなければなりません)。
図10-10 ストライプボリューム |
このストライプボリュームは、ファイルシステムには1個の450MBボリュームのように見えます。しかし、ボリュームマネージャは、ボリュームデータを複数の物理ディスクに分散させ、データ格納と取得時間を最適化します。ボリュームマネージャは、ディスクの物理セクタに図10-11のようにシーケンシャルにアクセスします。この図が示しているように、アクセスはストライプ単位で順序よく行われます。
図10-11 ストライプボリューム上の物理セクタへのシーケンシャルアクセス |
それぞれのストライプの幅は64KB程度の狭さ(個々の読み書き動作が、2つのディスクにアクセスすることを防止するために選択された値)ですから、データはディスク間に均一に分散されることになります。このため、ストライプの導入により、複数のペンディング中の読み書き要求が異なるディスクに向かうことになります。また、3つのすべてのディスク上のデータは、同時にアクセスできるため、ディスクI/Oの遅れは短縮されます。特に、この時間短縮効果は、高負荷システムではっきり現れることになります。
スパンボリュームは、ディスクボリュームの管理を便利にしていましたが、このストライプボリュームはI/O負荷を複数のディスクに分散させます。しかし、これら2つのボリューム管理機能は、ディスク損傷時のデータ回復機能をサポートしているわけではありません。ボリュームマネージャは、データ回復面では、ミラーボリューム、RAID5、ならびにセクタスペアという3つの冗長格納スキームを採用しています(セクタスペアとNTFSの関係については、第12章で取り上げています)。これらの機能を使用するときには、Windowsのディスク管理ツールを使用します。
■ミラーボリューム
「ミラーボリューム」では、1つのディスク上のパーティションの内容が別のディスク上に同じ大きさのパーティションとして複製されます。ミラーボリュームは、時には、RAIDレベル1(RAID1)と呼ばれることがあります。ミラーボリュームの概要を図10-12に示します。
図10-12 ミラーボリューム |
プログラムからデータをドライブC:に書き込むと、ボリュームマネージャは同じデータをミラーパーティションの同一位置にも書き込みます。ハードウェアやソフトウェア障害が発生し、第1ディスクやC:パーティションのいずれかのデータが読み取れなくなると、ボリュームマネージャは自動的にミラーパーティション内のデータにアクセスします。ミラーボリュームは、Windowsがサポートする任意のファイルシステム用にフォーマットできます。ファイルシステムドライバは、独立した存在ですから、ボリュームマネージャのミラー処理に影響されることはありません。
ミラーボリュームは、高負荷システム上のI/Oスループットを改善する場合もあります。I/O処理が増えた場合、ボリュームマネージャはプライマリパーティションとミラーパーティション間の読み取り動作のバランスを調整します(この調整は、それぞれのディスクでペンディングしている未完I/O要求数を考慮します)。2つの読み取り処理は、同時進行が可能であるため、理論上、半分の時間で処理が完了します。ファイルが修正されると、2つのパーティションへの書き込みが行われる必要があります。この書き込みは、非同期に行われますから、ユーザーモードプログラムのパフォーマンスは、基本的には低下するようなことはありません。
ミラーボリュームは、システムとブートボリュームに適応できる唯一のマルチパーティションボリュームタイプです。つまり、MBRとNtldrを含むWindowsブートコードは、マルチパーティションボリュームを理解するための高度なロジックは実装していないということです。ブートコードは、ミラーボリュームのみを理解し、単純なボリュームとして扱います。ブートコードは、MBRスタイルパーティションテーブル内でブートあるいはシステムドライブとして印されたミラーの半分の内容を読み取ることができます。ブートコードは、ディスク内容を修正するようなことはしませんから、ミラーの半分を無視します。
■RAID5ボリューム
「RAID5」ボリュームは、通常のストライプボリュームに、より高度な耐障害性を付加し、RAIDレベル5を実装しています。RAID5ボリュームはまた、ストライプボリュームをベースにしていることもあり、「パリティ付きストライプボリューム」と呼ばれることもあります。高耐障害性は、個々のストライプ用のパリティを格納する1つのディスクを用意して実現されています。図10-13はRAID5ボリュームを図解したものです。
図10-13 RAID5ボリューム |
図10-13では、ストライプ1用のパリティはディスク1に格納されています。格納されているパリティは、ディスク2と3の第1ストライプ間でバイト単位での論理和(XOR)の結果です。ストライプ2用のパリティはディスク2に置かれ、ストライプ3用のパリティはディスク3に置かれています。このようにパリティの格納位置を順々に回転することは、I/O最適化技法の1つです。データがディスクに書き込まれるとその都度、修正バイトに対応するパリティバイトは再計算され、書き戻されることになります。パリティが常に同一ディスクに書き込まれた場合、そのディスクは継続的にビジー状態に入り、I/O全体のボトルネックになってしまうでしょう。
RAID5の障害ディスク対策は、n個の変数を持つ方程式で表現できる単純な算術演算を基に実装されています。n個の変数の内の、n-1個の値がわかっている場合、簡単な引き算をすれば、残りの変数の値は簡単に計算できます。たとえば、x+y=zという方程式があれば(zがパリティとします)、z-yを計算するだけで、xの値を求めることができます。yの値を求めたければ、z-xを計算することになります。ボリュームマネージャは、これと同じような考え方を採用し、喪失データを回復しています。RAID5ボリューム内のディスクが故障したり、データの一部が読み出し不能になった場合、ボリュームマネージャはXOR演算(ビットレベルの論理加算)を行うことにより、失われたデータを回復します。
図10-13のディスク1に障害が発生した場合、ストライプ2と5の内容は、ディスク3の対応するストライプとディスク2のパリティストライプを論理加算(XOR)により、算出されます。ディスク1のストライプ3と6の内容は、同様に、ディスク2の対応するストライプとディスク3のパリティストライプの論理加算により回復します。RAID5ボリュームを作成するには、少なくとも3つのディスク(より正確には、3つのディスク上の同一サイズの3つのパーティション)が必要になります。
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」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|