以降のセクションでは、プールの全般的なプラクティスとより具体的なプールのプラクティスについて説明します。
ディスク全体を使用して、ディスク書き込みキャッシュを有効にし、保守をより簡単にします。スライス上にプールを作成すると、ディスクの管理および回復がより複雑になります。
ZFS がデータ不整合を修復できるように、ZFS 冗長性を使用します。
冗長でないプールが作成されると、次のメッセージが表示されます。
# zpool create tank c4t1d0 c4t3d0 'tank' successfully created, but with no redundancy; failure of one device will cause loss of the pool
ミラー化プールの場合は、ミラー化ディスクペアを使用します
RAID-Z プールの場合は、VDEV ごとに 3 - 9 個のディスクをグループ化します
同じプール内に RAID-Z とミラー化コンポーネントを混在させないでください。これらのプールは管理が難しく、パフォーマンスが低下する可能性があります。
ホットスペアを使用してハードウェアの障害によるダウンタイムを短縮します
デバイス間で I/O が均衡するように、サイズが同程度のディスクを使用します
小さな LUN は大きな LUN に拡張できます
metaslab を適切なサイズに保つために、LUN のサイズを極端に異なるもの (128M バイトから 2T バイトへなど) に拡張しないでください
より高速なシステム回復をサポートするために小さなルートプールと大きなデータプールを作成することを検討してください
推奨される最小のプールサイズは 8G バイトです。最小のプールサイズは 64M バイトですが、8G バイト未満では空きプール領域の割り当てや再利用が難しくなります。
推奨される最大のプールサイズは、実際の作業負荷やデータサイズが十分収まるサイズのはずです。定期的にバックアップできる量を超えるデータを格納しようとしないでください。そうしないと、データに予期しない問題が発生する可能性があります。
ローカルまたはネットワーク接続のストレージアレイでのプール作成のプラクティスも参照してください。
SPARC (SMI (VTOC)): s* 識別子を使用して、スライスでルートプールを作成します。p* 識別子を使用しないでください。通常、システムの ZFS ルートプールは、システムがインストールされるときに作成されます。2 つ目のルートプールを作成するか、またはルートプールを再作成する場合は、SPARC システムで次のような構文を使用します。
# zpool create rpool c0t1d0s0
あるいは、ミラー化ルートプールを作成します。例:
# zpool create rpool mirror c0t1d0s0 c0t2d0s0
Solaris 11.1 x86 (EFI (GPT)): d* 識別子を使用して、ディスク全体でルートプールを作成します。p* 識別子を使用しないでください。通常、システムの ZFS ルートプールは、システムがインストールされるときに作成されます。2 つめのルートプールを作成するか、またはルートプールを再作成する場合は、次のような構文を使用します。
# zpool create rpool c0t1d0
あるいは、ミラー化ルートプールを作成します。例:
# zpool create rpool mirror c0t1d0 c0t2d0
ルートプールは、ミラー化構成または単一ディスク構成として作成する必要があります。RAID-Z もストライプ化構成もサポートされていません。zpool add コマンドを使って、追加ディスクを追加して複数のミラー化された最上位レベル仮想ディスクを作成することはできませんが、ミラー化された仮想デバイスを zpool attach コマンドを使って拡張することは可能です。
ルートプールに別個のログデバイスを使用することはできません。
プールプロパティーは、AI インストール中に設定できますが、gzip 圧縮アルゴリズムはルートプールでサポートされていません。
ルートプールを初期インストールによって作成したあとは、ルートプールの名前を変更しないでください。ルートプールの名前を変更すると、システムがブートできなくなる可能性があります。
ルートプールディスクは連続的な操作に重要であるため (特にエンタープライズ環境で)、本番システムではルートプールを USB スティック上に作成しないでください。ルートプールにシステムの内蔵ディスクを使用することを検討するか、あるいは、少なくとも非ルートデータに使用するのと同品質のディスクを使用してください。また、USB スティックは、物理メモリーの少なくとも 1/2 のサイズに等しいダンプボリュームサイズをサポートするのに十分な大きさではない可能性があります。
ルートプールにホットスペアを追加するのではなく、2 方向または 3 方向のミラールートプールを作成することを検討してください。さらに、ルートプールとデータプール間でホットスペアを共有しないでください。
VMware のシンプロビジョニングされたデバイスをルートプールデバイスに使用しないでください。
d* 識別子を使用して、ディスク全体で非ルートプールを作成します。p* 識別子を使用しないでください。
ZFS は、追加のボリューム管理ソフトウェアを一切使わないで最適に機能します。
パフォーマンスを向上させるために、個々のディスクを使用するか、または少数のディスクで構成される LUN のみを使用します。ZFS での LUN セットアップに対する視認性を高めることにより、ZFS は入出力のスケジューリングをより適切に決定できます。
複数のコントローラにまたがる冗長なプール構成を作成して、コントローラの障害によるダウンタイムを短縮します。
ミラー化ストレージプール – 多くのディスクを消費しますが、一般に、小さなランダム読み取りでパフォーマンスが向上します。
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0
RAID-Z ストレージプール – 3 つのパリティー方式を使って作成できます。この場合、パリティーは 1 (raidz)、2 (raidz2)、または 3 (raidz3) に等しくなります。RAID-Z 構成は、ディスク容量を最大化し、通常、データが大きなチャンク (128K 以上) で読み取りおよび書き込みされるときに、パフォーマンスが高くなります。
それぞれ 3 つのディスク (2+1) の 2 つの VDEV を持つシングルパリティー RAID-Z (raidz) 構成を検討してください。
# zpool create rzpool raidz1 c1t0d0 c2t0d0 c3t0d0 raidz1 c1t1d0 c2t1d0 c3t1d0
RAIDZ-2 構成では、データの可用性が向上し、RAID-Z と同様の性能が提供されます。RAIDZ-2 は、RAID-Z または双方向ミラーよりもデータ損失までの平均時間 (MTTDL) がかなり短縮されます。6 台のディスク (4+2) でダブルパリティーの RAID-Z (raidz2) 構成を作成します。
# zpool create rzpool raidz2 c0t1d0 c1t1d0 c4t1d0 c5t1d0 c6t1d0 c7t1d0 raidz2 c0t2d0 c1t2d0 c4t2d0 c5t2d0 c6t2d0 c7t2d
RAIDZ-3 構成では、ディスク容量が最大となり、3 台のディスク障害に耐えられるため、優れた可用性が提供されます。9 つのディスク (6+3) では、トリプルパリティー RAID-Z (raidz3) 構成を作成します。
# zpool create rzpool raidz3 c0t0d0 c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 c6t0d0 c7t0d0 c8t0d0
ローカルまたはリモートで接続されているストレージアレイに ZFS ストレージプールを作成するときには、次のストレージプールのプラクティスを考慮してください。
SAN デバイスにプールを作成し、ネットワーク接続の速度が低下した場合は、プールのデバイスが一定期間 UNAVAIL になる可能性があります。ネットワーク接続が連続的な方法でデータを提供するのに適しているかどうかを評価する必要があります。また、ルートプールに SAN デバイスを使用する場合は、システムがブートするとすぐにそれらが使用できなくなる可能性があり、ルートプールのデバイスも UNAVAIL になる可能性があることを考慮してください。
フラッシュ書き込みキャッシュリクエストが ZFS から発行されたあとにディスクアレイがそのキャッシュをフラッシュしていないことを、アレイベンダーに確認してください。
Oracle Solaris ZFS がローカルの小さなディスクキャッシュをアクティブ化できるように、ディスクスライスではなくディスク全体をストレージプールデバイスとして使用します。これにより、適切な時期にフラッシュされます。
最良のパフォーマンスを得るために、アレイ内の物理ディスクごとに 1 つの LUN を作成します。大きな LUN を 1 つだけ使用すると、ZFS がキューに入れる入出力読み取り操作の数が少なすぎて実際にはストレージを最適なパフォーマンスにすることができない可能性があります。反対に、小さな LUN を多数使用すると、ストレージが多数の保留中の入出力読み取り操作であふれてしまう可能性があります。
動的 (シン) プロビジョニングソフトウェアを使用して仮想領域割り当てを実装するストレージアレイは、Oracle Solaris ZFS にはお勧めしません。Oracle Solaris ZFS が変更されたデータを空き領域に書き込むと、それは LUN 全体に書き込まれます。Oracle Solaris ZFS の書き込みプロセスでは、すべての仮想領域をストレージアレイの視点から割り当てますが、これは動的プロビジョニングの利点を打ち消すものです。
ZFS の使用時は、動的プロビジョニングソフトウェアが不要になる可能性があることを考慮してください。
既存の ZFS ストレージプールで LUN を拡張できるため、新しい領域が使用されます。
小さな LUN が大きな LUN に置き換えられるときも同様の動作が行われます。
プールのストレージニーズを評価し、必要なストレージニーズに等しい小さな LUN でプールを作成した場合、より多くの領域が必要であれば、いつでもそれらの LUN を大きなサイズに拡張できます。
アレイが個々のデバイスを提供できる場合 (JBOD モード) は、このタイプのアレイに冗長な ZFS ストレージプール (ミラーまたは RAID-Z) を作成して、ZFS がデータの矛盾を報告および訂正できるようにすることを考慮してください。
Oracle データベースを作成するときには、次のストレージプールのプラクティスを考慮してください。
ミラー化プールまたはハードウェア RAID を使用します。
ランダム読み取り作業負荷には、一般的に RAID-Z プールは推奨されていません。
データベース redo ログ用の個別のログデバイスで小さな個別のプールを作成します。
アーカイブログ用の小さな個別のプールを作成します。
Oracle データベースに対する ZFS の調整の詳細については、Oracle Solaris 11.2 カーネルのチューンアップ・リファレンスマニュアル のOracle データベース用の ZFS のチューニングを参照してください。
VirtualBox は、デフォルトでベースとなるストレージからキャッシュフラッシュコマンドを無視するように構成されています。これは、システムクラッシュやハードウェア障害が発生した場合にデータが失われる可能性があることを意味します。
次のコマンドを発行して、VirtualBox でのキャッシュフラッシュを有効にします。
VBoxManage setextradata vm-name "VBoxInternal/Devices/type/0/LUN#n/Config/IgnoreFlush" 0
vm-name – 仮想マシンの名前
type – piix3ide (IDE 仮想コントローラーを使用している場合) または ahci (SATA コントローラーを使用している場合) のいずれかのコントローラータイプ。
n – ディスク番号