シンプルメタデバイスは、スライスのみから構成されるメタデバイスで、そのまま使用するか、ミラーやトランスメタデバイスの基本構築ブロックとして使用します。シンプルメタデバイスには、連結方式メタデバイス、ストライプ方式メタデバイス、およびストライプ方式で連結したメタデバイスの 3 種類があります。
多くの場合は、連結方式メタデバイスとストライプ方式メタデバイスが初めに採用されます (ストライプ方式で連結したメタデバイスは、スライスを連結することによって最初の構成から拡張されたストライプ方式メタデバイスと考えることができます) 。
シンプルメタデバイスを使用すると、ディスクの記憶容量をすばやく簡単に拡張することができます。短所は、シンプルメタデバイスではデータの冗長性が提供されないという点です。ミラーや RAID5 メタデバイスでは、データの冗長性を保証します。 (シンプルメタデバイスで特定のスライスに障害が発生すると、そのスライスのデータは失われます。)
シンプルメタデバイスは、以下を除くファイルシステム用のスライスで構成することができます。
ルート (/)
/usr
swap
/var
/opt
オペレーティングシステムのアップグレードやインストール時にアクセスされるファイルシステム
ルート (/) 、/usr、swap、/var、または /opt をミラー化すると、1 面のサブミラーとして機能する単純連結 (1 つのスライスで構成される単純連結) にファイルシステムが配置されます。この単純連結は、単純連結される他のサブミラーによってミラー化されます。
連結方式メタデバイス (または単に単純連結) は、ディスクスライス上でデータを直列に配置させて編成したメタデバイスで、1 つの論理記憶ユニットを構成します。
連結方式メタデバイスは、複数のスライスの容量を論理的に結合させてディスク領域を増やすために使用します。領域が不足してきたら、スライスを追加することができます。
連結方式メタデバイスを使用すれば、オンラインの状態で、記憶容量やファイルシステムサイズを増やすことができます。連結方式メタデバイスでは、メタデバイスのスライスが使用中であっても、新しいスライスを追加することができます。
ストライプ方式メタデバイスの領域を増やすためには、ストライプ方式の連結を構築しなければなりません (「ストライプ方式の連結」を参照) 。
連結方式メタデバイスでは、システムを動作させたままで、動作中の、マウントされている UFS ファイルシステムを拡張することができます。一般に、連結方式メタデバイスの容量は、構成するすべてのスライスの合計サイズに等しくなります。単純連結に状態データベースの複製が含まれる場合には、複製用のスライスの領域を除いたすべてのスライスの合計サイズが、単純連結の容量となります。
連結方式メタデバイスは、1 つのスライスだけでも構築できます。1 つのスライスだけで連結方式メタデバイスを作成しておき、後で領域が不足してきたら、新たにスライスを追加することができます。
連結方式メタデバイスには、他のメタデバイスと同じような名前 (d0、d1 など) が付けられます。メタデバイス名についての説明は、表 1-4 を参照してください。
連結方式メタデバイスが必要な状況
連結方式メタデバイスは、既存のデータセット (ファイルシステムなど) の容量を増やしたいときに構築します。
連結方式は、小規模のランダム入出力や入出力を均等に分散させる場合に適しています。
現実的には、連結方式メタデバイスには制限はありません。ルート (/) 、 swap、/usr、/opt、または /var をミラー化する場合には、単純連結を使用して、これらのファイルシステムをカプセル化しなければなりません。
連結方式メタデバイスの最大サイズは、1 テラバイトです。
図 2-1 に、3 つのスライス (ディスク) から構成される連結方式メタデバイスの例を示します。
データブロック (チャンク) は、ディスク A のスライスからすべてのスライスに渡って直列に書き込まれます。ディスク A には、論理チャンク 1 〜 4 が書き込まれます。ディスク B には論理チャンク 5 〜 8、ディスク C には論理チャンク 9 〜 12 が書き込まれます。メタデバイス d1 の合計容量は、3 つのドライブの合計容量となります。各ドライブの容量が 2 G バイトであれば、メタデバイス d1 の容量は 6 G バイトになります。
ストライプ方式メタデバイス (または単にストライプ) は、2 つ以上のスライスに渡ってデータを分散させるメタデバイスです。ストライプ方式では、2 つ以上のスライス上に同じサイズのセグメントを分散させて配置し、1 つの論理記憶ユニットを構成します。これらのセグメントはラウンドロビン (巡回的な) 方式でインタリーブされ、各スライスから交互に領域がメタデバイスに割り当てられます。
ストライプ方式メタデバイスを単にストライプと呼ぶこともありますが、ストライプ方式で連結されたメタデバイスの構成ブロックをストライプと呼ぶこともあります。「ストライプ化する」といった場合には、ディスクをチャンクに分割して、これらのチャンクを仮想デバイス (メタデバイス) に割り当てることによって、入出力要求を複数のディスクに分散させることを意味します。ストライプ化は、単純連結と同じように、RAID レベル 0 として分類されています。
ストライプ化も単純連結も複数のディスクスライスにデータを分散する方法ですが、ストライプ化の場合は、各ディスクスライスのチャンクに交互にデータを格納します。単純連結の場合は、1 つのディスクスライスが満杯になってから、次のディスクスライスに次のデータを格納します。
連結方式メタデバイスに対して順次入出力操作を行うと、DiskSuite は先頭スライスからすべてのブロックを読み取り、次のスライスからすべてのブロックを読み取り、という処理を繰り返します。
ストライプ方式メタデバイスに対して順次的な入出力操作を行うと、DiskSuite は先頭スライスからブロックセグメント単位 (飛び越しと呼ばれます) ですべてのブロックを読み取り、次のスライスのブロックセグメントからすべてのブロックを読み取り、という処理を繰り返します。
連結方式メタデバイスもストライプ方式メタデバイスも、すべての入出力は並列的に実行されます。
ストライプ方式メタデバイスでは、データを並列的にアクセスすることによって入出力の効率が向上し、入出力の能力が高くなります。新しいファイルシステムやデータセットに対しては、常にストライプ方式メタデバイスを使用してください。
ストライプは、複数のコントローラが同時にデータをアクセスできます。入出力要求処理にかかる時間のうち、メタデバイスを構成しているディスクではほとんどがビジー状態となっているため、並列的なアクセスによって入出力スループットを向上させることができます。
ストライプは、大規模な順次的入出力や入出力が均一にならない場合に適しています。
既存のファイルシステムをストライプ方式メタデバイスに直接変換することはできません。ファイルシステムをストライプ方式メタデバイス上に配置したいときは、ファイルシステムのバックアップをとって、ストライプ方式メタデバイスを作成してから、そのメタデバイスにファイルシステムを復元します。
ストライプを作成する際には、必ず等しいサイズのスライスを使用してください。スライスのサイズにばらつきがあると、ディスク領域の一部が使用されなくなります。
飛び越しの値は、ストライプ方式メタデバイスの論理データチャンクのサイズに等しく、K バイト、M バイト、またはブロック数で表わされます。メタデバイスのパフォーマンスを向上させるのに最適な飛び越し値は、使用するアプリケーションによって異なります。このパフォーマンスの向上は、入出力に参加するディスクの数が増えることによります。入出力要求が飛び越しサイズより大きければ、入出力パフォーマンスが向上します。
デフォルトの飛び越し値は 16 K バイトです。
新しいストライプ方式メタデバイスを (DiskSuite ツールまたはコマンド行インタフェースを使用して) 作成する際には、飛び越し値を設定することができます。ただし、ストライプ方式メタデバイスを作成した後で飛び越し値を変更することはできません。
既存のストライプ方式メタデバイスに対して飛び越し値を設定することはできません。既存のストライプ方式メタデバイスの飛び越し値を変更したい場合には、メタデバイス上のデータのバックアップを取り、メタデバイスを削除して、希望する飛び越し値で新しいストライプ方式メタデバイスを作成してから、そのメタデバイスにデータを復元します。
RAID5 メタデバイスも飛び越し値を使用します。詳しい説明は、「RAID5 メタデバイス」を参照してください。
図 2-2 に、3 つのスライス (ディスク) から構成されるストライプ方式メタデバイスの例を示します。
DiskSuite がストライプ方式メタデバイスのデータを物理ディスクに書き込む場合には、チャンク 1 のデータをディスク A、チャンク 2 のデータをディスク B、チャンク 3 のデータをディスク C に書き込みます。次に、チャンク 4 のデータをディスク A、チャンク 5 のデータをディスク B、チャンク 6 のデータをディスク C に書き込み、同じ処理を繰り返します。
飛び越し値は各チャンクのサイズと同じ値に設定されています。ストライプ方式メタデバイス d2 の合計容量は、最小スライスのサイズにスライス数を掛けた値になります (図 2-2 の各スライスのサイズが 2G バイトであれば、メタデバイス d2 の容量は 6G バイトになります) 。
ストライプ方式の連結は、ストライプ方式メタデバイスに追加のスライス (ストライプ) を単純連結して拡張したメタデバイスです。
DiskSuite ツールを使用して、複数のスライスを既存のストライプ方式メタデバイスまでドラッグすると、それらのスライスを単純連結にするか、ストライプにするかを尋ねられます。metattach(1M) コマンドを使用して複数のスライスを既存のストライプ方式メタデバイスに追加する場合には、ストライプとして追加しなければなりません。
ストライプ方式の連結に対して飛び越し値を設定するには、DiskSuite ツールの 「ストライプ情報」 ウィンドウを使用するか、metattach(1M) コマンドで -i オプションを使用します。ストライプ方式の連結に含まれる各ストライプに対しては、別々の飛び越し値を指定することができます。ストライプ方式の連結を最初から作成する場合に、特定のストライプに対して飛び越し値を指定しないと、その直前のストライプの飛び越し値が使用されます。
図 2-3 に、3 つのストライプを連結したメタデバイス d10 を示します。
ストライプ 1 は、3 つのディスク (A 〜 C) から構成されており、飛び越し値は 16 K バイトです。ストライプ 2 は、2 つのディスク (D と E) から構成されており、飛び越し値は 32 K バイトです。ストライプ 3 は、2 つのディスク (F と G) から構成されています。ストライプ 3 に対しては飛び越し値が指定されていないため、ストライプ 2 から飛び越し値 (この場合は 32 K バイト) を継承しています。まず、ストライプ 1 に、チャンク 1 〜 12 がストライプ方式で割り当てられます。ストライプ 1 が満杯になると、今度はストライプ 2 にチャンク 13 〜 20 が割り当てられます。最後に、ストライプ 3 にチャンク 21 〜 28 が割り当てられます。各ストライプでは、指定された飛び越し値にしたがって、データチャンクがインタリーブされます。
複数のスライスで構成されるシンプルメタデバイスを作成すると、先頭以外のスライスでは、スライスがシリンダ 0 から開始されている場合には、先頭のディスクシリンダは無視されます。たとえば、metastat(1M) コマンドで次のようなリストが出力されたとします。
# metastat d0 d0: Concat/Stripe Size: 3546160 blocks Stripe 0: (interface: 32 blocks) Device Start Block Dbase c1t0d0s0 0 No c1t0d1s0 1520 No c1t0d2s0 1520 No c1t0d2s0 1520 No c1t1d0s0 1520 No c1t1d1s0 1520 No c1t1d2s0 1520 No |
このリストを見ると、最初のスライス以外は、すべてブロック 1520 から開始されていることがわかります。これは、最初のスライス以外のすべてのスライスでは、ディスクセクターの先頭にディスクラベルを保存するためです。メタデバイスドライバは、ストライプ境界を越えてアクセスをマッピングする場合には、最初のディスク以外の少なくとも先頭セクターをスキップしなければなりません。先頭セクターのみをスキップすると、ディスクのジオメトリ (幾何学的配置) が不規則になるため、これらのディスクでは先頭シリンダ全体をスキップしています。こうすることで、上位レベルのファイルシステムソフトウェア (UFS) が、ブロック割り当てを正しく最適化できるようになります。このため、DiskSuite ではディスクラベルの上書きを禁止しており、先頭シリンダを意図的にスキップしています。
単純連結またはストライプにおいて、先頭シリンダをスキップしないスライスが存在しますが、この理由は UFS 側にあります。既存のファイルシステムから連結方式メタデバイスを作成して、後から領域を追加すると、データが失われます。これは、先頭シリンダがデータの開始位置として認識されているためです。