• 検索結果がありません。

ブロックの割り当てについて

第8章 パフォーマンスとチューニング

8.4. ストレージ

8.4.3. ブロックの割り当てについて

標準的なハードディスクのブロックサイズは 512 バイトです。Oracle Solaris および Sun Unified Storage では ZFS ファイルシステムを使用しています。ZFS ファイルシステムのデフォルトのブロックサイズは 8K バイトです。仮想 マシンのゲストオペレーティングシステムに応じて、ゲストファイルシステムの 1 つの論理ブロックでストレージの

ブロックの割り当てについて

2 つの ZFS ブロックを使用できます。図8.2「不整列ブロックと整列ブロックと例」に示すように、これはブロック の不整列と呼ばれます。ブロックの不整列を避けることをお勧めします。これは、ゲスト OS ファイルシステムのブ ロックにアクセスする場合に、ブロックの不整列によってストレージでの IO が倍になるためです (完全なランダムア クセスパターンを使用し、キャッシュを使用しないことを前提とする)。

図8.2 不整列ブロックと整列ブロックと例

Windows XP は、ブロックの不整列が発生する可能性がある特殊な例です。通常、ディスク上の 1 つのパーティショ ンはディスクセクター 63 から始まります。Windows パーティションの整列を確認するには、次のコマンドを使用し ます。

wmic partition get StartingOffset, Name, Index

このコマンドの出力例を次に示します。

Index Name StartingOffset 0 Disk #0, Partition #0 32256

開始セクターを見つけるには、StartingOffset の値を 512 で割ります。

32256 ÷ 512 = 63

NTFS クラスタのサイズは、通常 4K バイトです。最初の NTFS クラスタはディスクセクター 63 から始まり、ディ スクセクター 70 で終わります。ストレージでは、4 番目の ZFS ブロックがディスクセクター 48 ~ 63 にマップさ れ、5 番目の ZFS ブロックセクターがディスクセクター 64 ~ 79 にマップされます。図8.2「不整列ブロックと整列 ブロックと例」に示すように、1 番目の NTFS クラスタにアクセスする場合に両方の ZFS ブロックにアクセスする必 要があるため、不整列が発生します。

ブロックを正しく整列させるには、StartingOffset の値が完全に 8192 (基盤となる ZFS ストレージのデフォルトのブ ロックサイズ) で割り切れる必要があります。

次の例では、ブロックの不整列が発生します。

wmic partition get StartingOffset, Name, Index Index Name StartingOffset 0 Disk #0, Partition #0 32256

32556 ÷ 8192 = 3.97412109

次の例では、ブロックは整列されます。

ブロックの割り当てについて

wmic partition get StartingOffset, Name, Index Index Name StartingOffset 0 Disk #0, Partition #0 32768

32768 ÷ 8192 = 4

Windows 2003 SP1 以降の diskpart.exe ユーティリティには、パーティションのブ ック整列を指定するための ·align オプションがあります。Windows XP では、parted などのサードパーティ製のディスクパーティション分割ツールを 使用して、開始セクターを定義してパーティションを作成します (次の例を参照)。その他のオペレーティングシステ ムでのパーティションの整列方法の詳細については、システムドキュメントを参照してください。

Windows XP でブロックが適切に整列されたディスクを準備する方法の例

この例では、Knoppix などの起動可能なライブ Linux システムのディスクユーティリティを使用して、ブロックが正 しく整列されたディスクパーティションを作成します。

1. 新しい仮想マシンを作成します。

2. ライブ Linux システムの ISO イメージを、仮想マシンの CD/DVD-ROM ドライブに割り当てます。

3. 仮想マシンを起動します。

4. コマンドシェルを開き、root ユーザーになります。

5. ディスクの合計セクター数を取得します。

ディスクの情報を取得するには、fdisk -ul コマンドを使用します。

次の例では、ディスクのセクター数は 20971520 です。

# fdisk -ul

Disk /dev/sda doesn't contain a valid partition table Disk /dev/sda: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000

6. ディスクに MS-DOS パーティションテーブルを作成します。

パーティションテーブルを作成するには、parted <disk> mklabel msdos コマンドを使用します。

次の例では、/dev/sda ディスクにパーティションテーブルが作成されています。

# parted /dev/sda mklabel msdos

7. パーティションの開始セクターと終了セクターを指定して、新しいパーティションを作成します。

パーティションを作成するには、parted <disk> mkpartfs primary fat32 64s <end-sector>s コマンドを使用しま す。<end-sector> は、ディスクの合計セクター数から 1 を引いた数です。たとえば、ディスクに 20971520 セク ターがある場合、<end-sector> は 20971519 になります。

使用する parted のバージョンによっては、最適なパフォーマンスが得られるようにパーティションが適切に整列 されていないという警告が表示される場合があります。この警告は無視しても問題ありません。

次の例では、/dev/sda ディスクにパーティションが作成されます。

# parted /dev/sda mkpartfs primary fat32 64s 20971519s

8. パーティションが作成されたことを確認します。

パーティションを確認するには、parted <disk> print コマンドを使用します。

次の例では、/dev/sda ディスクのパーティションを確認しています。

Oracle VDI のストレージ用のグローバル設定

# parted /dev/sda print

Model: ATA VBOX HARDDISK (scsi) Disk /dev/sda: 10.7GB

Sector size (logical/physical): 512B/512B Partition Table: msdos

Number Start End Size Type File system Flags 1 32.8kB 10.7GB 10.7GB primary fat32 lba

9. 仮想マシンをシャットダウンし、ISO イメージの割り当てを解除します。

10. Windows XP のインストール ISO イメージを仮想マシンの CD/DVD-ROM ドライブに割り当てます。

11. 仮想マシンを起動し、Windows XP をインストールします。

12. プロンプトが表示されたら、新しく作成されたパーティションを選択します。

13. (省略可能) プロンプトが表示されたら、ファイルシステムを FAT32 から NTFS に変更します。

14. インストールを完了します。

15. 管理者として Windows XP ゲストにログインします。

16. StartingOffset が 32768 であることを確認します。

wmic partition get StartingOffset, Name, Index Index Name StartingOffset 0 Disk #0, Partition #0 32768