web-dev-qa-db-ja.com

Ubuntuで冗長性を備えた複数のドライブ用にzfsを設定する

現在、RAID 1にext4を備えた2つの4TBディスクを備えたUbuntuサーバーをセットアップしています(zfsを使用していません)。ドライブに障害が発生した場合に備えて、完全な冗長性が必要です。

マシンにさらに2台の4TBドライブを追加しています。おそらく将来またこれを行うので、これをサポートするためにzfsに切り替える必要があると考えています。

いくつかのガイドで、zfsを使用してストライピングとミラーリングの両方を実行できることを読みました。これが私が行きたい方法だと思います。

通常、ドライブを2つのペアにストライプ化し、次に2つのペアをRAID 1して、高速で冗長な「8TB」ドライブを取得します。

Zfsでこれをどのように達成しますか?そして、それにより、ドライブを簡単に追加できるようになりますか?

1
sharf

それを構成するのは非常に簡単です(構造を見やすくするための行分割):

# zpool create <poolname> \
    mirror <disk1> <disk2> \
    mirror <disk3> <disk4>

これにより、それぞれが2つのディスク間のミラーである2つのストライプを持つプールが作成されます。これは優れた柔軟なセットアップです(新しいドライブの追加が簡単で、理解しやすい)。将来、別のミラーを追加するには、次のようにします。

# zpool add -n <poolname> \
    mirror <disk5> <disk6>
would update '<poolname>' to the following configuration:
  <poolname>
    mirror
        <disk1>
        <disk2>
    mirror
        <disk3>
        <disk4>
    mirror
        <disk5>
        <disk6>

(オプション-nを使用すると、最初にドライランが実行され、検査できるようにプール構成が出力されます。これは、事後に元に戻すのが難しい/不可能な構成ミスを避けるために常にお勧めします!)

ただし、この設定は「非効率的」であることに注意してください保証 1つのディスク障害に対するデータの安全性:異なるストライプで発生した場合、2つの障害に対してのみ安全です。これは約67%で発生します。 2ディスク障害シナリオの。また、冗長データは引き続きプールの50%を使用します。

RAID-Zと呼ばれる柔軟性の低いZFS固有のRAID形式があり、すべてのディスクをプールして効率的なデータ保護を実現できます。 (この機能は現在作業中ですが、将来的にプールにディスクを追加するのは難しいため、柔軟性が低くなります。)raidz1およびraidz2のバリアントがあり、これらを失う可能性があります。どのディスクに障害が発生しても、それぞれ最大1つまたは最大2つのディスク。 4つの同じサイズのディスクの場合、raidz2バリアントは引き続きストレージの50%を冗長性のために使用しますが、2つのディスク障害に耐えることを保証します。 raidz1バリアントは、冗長性のオーバーヘッドを50%からわずか25%に削減しますが、1つのディスク障害に耐えることを保証するだけです。

1
Dan