冗長性のために複数の異なるハードドライブから単一ボリュームを作成するオプションは何ですか(たとえば、異機種間RAID)

冗長性のために複数の異なるハードドライブから単一ボリュームを作成するオプションは何ですか(たとえば、異機種間RAID)

私は約8台のハードドライブを持っており、私のメインPC(openSUSE Tumbleweedを実行)にはすべて接続するのに十分なSATAポートがあります。一部のドライブは5年を超えており、サイズは384GBから2TBまで異なります。

保存空間をすべてアイドル状態にしておくのは残念に思えるので、マウントして使いたいのですが、当然別々のボリュームで使用しないようです。過去に古いディスクを使用してmdadm RAID 5およびRAID 6アレイを実行しましたが、この場合は退屈です(ディスクあたり384 GBの8ドライブアレイ、7ドライブアレイ、次のような大きな違い...)。そしてすぐに)。それで代替案を探しました。

私はまた、しばらく4つの同じドライブでBTRFS RAID5アレイを実行してきました。開発者でさえ、ユーザーが注意を払わずに安定して動作するようにすることができるという希望を持っていないようです。このような異機種配列にBTRFSが賢明な選択であるかどうか疑問に思います。

ZFSとRAIDZ機能、3つのパリティブロックでさまざまなサイズのドライブを収容する能力について良いニュースを聞きました。しかし、これまで私が見つけることができるほとんどのアドバイスは、同じドライブに固有のもの、または少なくとも同じRAIDパーティションに関するものです。サイズ。

私の優先順位は速度やアクセス時間ではありません。コンピュータは自分だけのもので、ハードドライブのスループットはほとんど問題ありません。私の意図は、時々起こるドライブエラーのためにデータが失われたり、かなりの時間がかかることを心配することなく、残りの人生の間に比較的快適にこのハードドライブのスペースを使用することです。いずれかのドライブに障害が発生した場合は、いずれかのドライブに障害が発生した場合は、それらを削除して続行できます(またはスペースが必要な場合は新しいドライブを追加できます)。

ドライブが損傷しない限り、個人的に注意を払う必要はなく、ドライブが損傷している場合は私に知らせることを確認できる限り、追加の事前設定を実行してもかまいません。 2〜3つのドライブエラーを処理することをお勧めしますが、容量の半分(RAID 10など)が利用可能な場合は、すべてのドライブとドライブのほとんどのスペースを使用できる限り、そうすることもできます。

  1. そんなことがありますか?
  2. オプションは何ですか?
  3. 設定方法を説明する方法はありますか?

ベストアンサー1

目的を達成するための鍵は、ドライブを総ストレージ量が同じまたはほぼ同じグループにグループ化し、各物理ドライブグループをストレージ合計を表す仮想ドライブに接続することです。このグループのドライブに使用できるストレージ容量。

私はFreeBSDでこれを行う予定ですが、Linuxにも同様のツールがあると思います。ここにある主なツールは次のとおりです。gconcat(8)

シナリオを考えてみましょう。

  • 384Gドライブ5台(例/dev/md0-md4:)
  • 2Tドライブ4個(例/dev/md5-md8:)
  • 1Tドライブ2個(例/dev/md9-md10:)

これにより、gconcatこれらのドライブを5つのグループに接続できます。

  • 4グループ2T+384G
  • 1T+1T+384Gセット

その後、プールを構築するための5つの類似したサイズの仮想接続ディスクがあります。スペースを節約するために、実際にはサイズを2^10倍に減らしますが、概念は同じままです。そのため、384Mドライブ5個、2Gドライブ4個、1Gドライブ2個を使用します。

まず/dev/md*、上記のデバイス(Linuxの物理ディスクに似ている可能性があります)を考慮して、これらの物理ディスクを5つの仮想ディスクに接続できます。/dev/sd*名前は次のとおりです。vdisk0-vdisk4

# gconcat create -v vdisk0 md0 md5
# gconcat create -v vdisk1 md1 md6
# gconcat create -v vdisk2 md2 md7
# gconcat create -v vdisk3 md3 md8
# gconcat create -v vdisk4 md4 md9 md10

FreeBSDでは、接続されているディスクはデバイスとして表示されます/dev/concat/vdisk0-vdisk4。ディスクデバイス操作を中心に構築された多くのFreeBSDコマンドと同様に、理解して使用すること/dev/ができますgconcat status。同様にGEOM、項目を参照する --based コマンドは、便宜上/dev/先行を省略できます/dev/

# gconcat status
         Name  Status  Components
concat/vdisk0      UP  md0
                       md5
concat/vdisk1      UP  md1
                       md6
concat/vdisk2      UP  md2
                       md7
concat/vdisk3      UP  md3
                       md8
concat/vdisk4      UP  md4
                       md9
                       md10

また、接続されている各ディスクのメディアサイズが類似している(またはこの場合は同じである)ことを確認できます。

# gconcat list | grep -A2 ^Prov
Providers:
1. Name: concat/vdisk0
   Mediasize: 2550136832 (2.4G)
--
Providers:
1. Name: concat/vdisk1
   Mediasize: 2550136832 (2.4G)
--
Providers:
1. Name: concat/vdisk2
   Mediasize: 2550136832 (2.4G)
--
Providers:
1. Name: concat/vdisk3
   Mediasize: 2550136832 (2.4G)
--
Providers:
1. Name: concat/vdisk4
   Mediasize: 2550136832 (2.4G)

だから!これで、ZFSプールを作成できる5つの2.4Gデバイスが作成されました。デュアルパリティRAIDZ2プールを作成し、マウントポイントを次のように設定しますnone

# zpool create -m none tank raidz2 concat/vdisk{0..4}
# zpool status tank
  pool: tank
 state: ONLINE
config:

    NAME               STATE     READ WRITE CKSUM
    tank               ONLINE       0     0     0
      raidz2-0         ONLINE       0     0     0
        concat/vdisk0  ONLINE       0     0     0
        concat/vdisk1  ONLINE       0     0     0
        concat/vdisk2  ONLINE       0     0     0
        concat/vdisk3  ONLINE       0     0     0
        concat/vdisk4  ONLINE       0     0     0

errors: No known data errors
# zfs list tank
NAME   USED  AVAIL     REFER  MOUNTPOINT
tank   179K  6.64G     39.3K  none

クォンタムED。

要約すると、最小のドライブグループがプールのVDEVサイズを制限するため、重要な概念はドライブをできるだけ同じ総ストレージ容量に近いグループにグループ化することです。物理ドライブを最適にグループ化したら、各ドライブグループをグループの結合ストレージを表す仮想ディスクに接続します。最後に、仮想シリアルドライブにZPOOLを構築します。

ドライブに障害が発生した場合はどうなりますか?

ドライブ障害が発生した場合(/dev/concat/vdisk2例として使用)、障害が発生した物理ドライブに関連付けられている仮想ディスクを削除し、障害が発生したドライブを交換して仮想ディスクを再作成し、プールを仮想ディスクに再同期します。接続ディスク。

# zpool status tank
  pool: tank
 state: DEGRADED
status: One or more devices has been removed by the administrator.
    Sufficient replicas exist for the pool to continue functioning in a
    degraded state.
action: Online the device using zpool online' or replace the device with
    'zpool replace'.
config:

    NAME               STATE     READ WRITE CKSUM
    tank               DEGRADED     0     0     0
      raidz2-0         DEGRADED     0     0     0
        concat/vdisk0  ONLINE       0     0     0
        concat/vdisk1  ONLINE       0     0     0
        concat/vdisk2  REMOVED      0     0     0
        concat/vdisk3  ONLINE       0     0     0
        concat/vdisk4  ONLINE       0     0     0

errors: No known data errors

vdisk2失敗したので、私たちはそれを破壊します:

# gconcat destroy vdisk2

次に、付属の故障したドライブを交換しますconcat/vdisk2。代替ドライブサイズを使用する必要がある場合は、新しいドライブがプールvdisk2内の最小仮想ディスクよりも小さくないことを確認してください。それ以外の場合、ZFS はプールでディスクを使用できません。

故障したドライブを適切な交換用ドライブと交換し、物理ドライブを再接続して新しいドライブを作成しますvdisk2

# gconcat create vdisk2 md2 md7
# zpool online tank concat/vdisk2
# zpool status tank
  pool: tank
 state: ONLINE
  scan: resilvered 7.50K in 00:00:01 with 0 errors on Wed Sep 22 11:26:55 2021
config:

    NAME               STATE     READ WRITE CKSUM
    tank               ONLINE       0     0     0
      raidz2-0         ONLINE       0     0     0
        concat/vdisk0  ONLINE       0     0     0
        concat/vdisk1  ONLINE       0     0     0
        concat/vdisk2  ONLINE       0     0     0
        concat/vdisk3  ONLINE       0     0     0
        concat/vdisk4  ONLINE       0     0     0

errors: No known data errors

おすすめ記事