web-dev-qa-db-ja.com

Linuxで高度な機能を備えたZFS / Btrfs / LVM2のようなストレージ?

Linuxマシンに3つの同一の内蔵7200RPMSATAハードディスクドライブがあります。私はこれらすべてを私に与えるストレージセットアップを探しています:

  • 異なるデータセット(ファイルシステムまたはサブツリー)は異なるRAIDレベルを持つことができるため、物理ディスクの数が少ない場合でも、パフォーマンス、スペースオーバーヘッド、およびリスクのトレードオフをデータセットごとに異なる方法で選択できます(非常に重要なデータは3xRAID1、重要なデータです) 3xRAID5の場合もあれば、重要でない再現可能なデータの場合は3xRAID0の場合もあります。
  • 各データセットに明示的なサイズまたはサイズ制限がある場合、サイズ制限を拡大および縮小する機能(必要に応じてオフライン)
  • カーネル外モジュールを避ける
  • R/Wまたは読み取り専用のCOWスナップショット。ブロックレベルのスナップショットの場合は、スナップショット中にファイルシステムを同期して静止する必要があります。
  • 物理ディスクを追加してから、RAID1、RAID5、およびRAID0ボリュームを拡張/再配布して、新しいスピンドルを利用し、他のスピンドルよりも高温になっているスピンドルがないことを確認する機能(たとえば、NetAppでは、RAID-DP RAIDグループを数個増やす)ディスクは、明示的な再配布なしでは、ディスク間でI/Oのバランスを取りません)

必須ではありませんが、便利です。

  • 透過的な圧縮、ファイルごと、またはサブツリー。 NetAppsのように、最初にデータを圧縮性について分析し、圧縮性データのみを圧縮する場合はさらに優れています
  • パフォーマンスに大きなペナルティがない、またはわいせつな量のメモリを必要としない重複排除(NetAppは週末にスケジュールされた重複排除を実行します。これは良いことです)
  • ZFSのようなサイレントデータ破損に対する耐性(ZFSがこれらの特定のディスク上のデータ破損を報告するのを見たことがないため、これは必要ありません)
  • 自動(キャッシュルールに基づく)またはユーザー定義ルールのいずれかのストレージ階層化(はい、現在はすべて同一のディスクがありますが、これにより、将来的に読み取り/書き込みSSDキャッシュを追加できるようになります)。ユーザー定義のルールの場合、これらのルールには、ブロックレベルではなくファイルレベルでSSDにプロモートする機能が必要です。
  • 小さなファイルのスペース効率の良いパッキング

LinuxでZFSを試しましたが、制限は次のとおりです。

  • パッケージは外部リポジトリにあり、特定のカーネルバージョンに関連付けられているため、アップグレードは追加の作業です。パッケージマネージャーと統合されていません
  • 書き込みIOPSは、raidzvdev内のデバイスの数に比例しません。
  • Raidzvdevsにディスクを追加できません
  • 物理ディスクを追加したり、ZFSにディスクの単一パーティションを提供したりせずに、オーバーヘッドを削減してパフォーマンスを向上させるためにRAID0でデータを選択することはできません。

lVM2のext4はオプションのように見えますが、縮小、拡張、および新しいスピンドルRAIDタイプの論理ボリュームに再配布できるかどうかがわかりません(もちろん、多数のファイルでLVMを試すことができます)。私の知る限り、そこには便利なものがないので、もっと良いものがあるかどうか疑問に思いました。 LVMの危険性と警告 を見ましたが、繰り返しになりますが、完璧なシステムはありません。

2
Easter Sunshine

あなたはあまりにも多くを求めています。これらは非現実的な要件です。特に、低速のコンシューマーディスクのトリオについて話している場合はそうです。何を計画していますか?

  • Linux上のZFS および4つのディスクを使用します。拡張について話している場合は、おそらく4つのデータディスク用のスペースがあります。 Linuxディストリビューションについては言及していませんが、CentOS6.xではアップグレードは問題になりませんでした。ミラーは拡張可能です。 RAID-Z1/2/3セットは単にそうではありません。ファイルシステムごとに圧縮を設定し、それで完了します。コピーすることでデータのバランスを取り直すことができます。しかし、より良い計画を立てれば、拡張の問題は制限にはなりません。これにより、圧縮、スナップショット、階層化、およびデータの整合性が得られます。 ZFSでの重複排除を忘れてください。あなたはおそらくそれを必要としないでしょう。その場合は、必要なリソース要件を計画する必要があります。

  • LinuxでのZFSの制限については、 ZFSストレージセットアップの計画の基本 を理解する必要があります。 ZILデバイスを使用して、書き込みIOPSを増やします。

  • HP Smart Arrayコントローラー ラインのようなハードウェアRAIDソリューションがあり、ドライブの単一グループでさまざまなRAID保護を可能にします...拡張中にデータを自動的に再バランス/再配布します。削減はできません。 HP論理ドライブをZFSのブロックデバイスとしてエクスポートできるため、ファイルシステムのメリットが得られますが、基盤となるハードウェアデバイスも賢く使用できます。以下の例では、zpoolsvol1およびvol2は、に対応する単一のデバイスで構成されています。 )logicaldrive 2およびlogicaldrive 3HP RAIDコントローラー出力から:

ZFSプール情報:

[root@ZFS-on-Linux ~]# zpool list
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
vol1   119G  48.2G  70.8G    40%  1.00x  ONLINE  -
vol2  99.5G  42.6G  56.9G    42%  1.00x  ONLINE  -

HP RAIDコントローラー出力:

Smart Array P400 in Slot 8                (sn: P61630G9SVN702)

   array A (SAS, Unused Space: 609621  MB)


      logicaldrive 1 (72.0 GB, RAID 1+0, OK)
      logicaldrive 2 (120.0 GB, RAID 1+0, OK)
      logicaldrive 3 (100.0 GB, RAID 5, OK)

      physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS, 146 GB, OK)
      physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS, 146 GB, OK)
      physicaldrive 1I:1:3 (port 1I:box 1:bay 3, SAS, 146 GB, OK)
      physicaldrive 1I:1:4 (port 1I:box 1:bay 4, SAS, 146 GB, OK)
      physicaldrive 2I:1:5 (port 2I:box 1:bay 5, SAS, 146 GB, OK)
      physicaldrive 2I:1:6 (port 2I:box 1:bay 6, SAS, 146 GB, OK)
      physicaldrive 2I:1:7 (port 2I:box 1:bay 7, SAS, 146 GB, OK)
      physicaldrive 2I:1:8 (port 2I:box 1:bay 8, SAS, 146 GB, OK)

上記の2つを組み合わせると、要件のほとんどが得られます。

4
ewwhite

それはあなたが持っているかなりのウィッシュリストです。

Linux md RAID( mdadm )+ LVMは、ほとんどの要件を満たしますが、便利なものはほとんどありません。

ディスクをパーティションに分割できます。異なるパーティション間で異なるレベルでmdRAIDを実行します。 md RAIDボリュームをLVMボリュームグループに配置し、VGから論理ボリュームを作成します。 LVにファイルシステム(ext4など)を配置します。 LVMがない場合は、mdRAID1を起動できます。したがって、/ bootにはLVMなしのRAID1を使用します。 md RAIDボリュームは縮小し、 grow ディスクの追加を購入します。 [〜#〜] lvm [〜#〜] および ext4 も同様です。

LVMはスナップショットを作成できます。ただし、これらはネイティブCOWではないため、スナップショットが同じ物理ディスクを使用している場合は パフォーマンスペナルティ が発生します。これらは、ZFSのような無制限のスナップショットではなく、バックアップへの特定の時点の一時キャプチャに最適です。

次のようになります。

sda1 + sdb1 + sdc1 = md0 RAID1
sda2 + sdb2 + sdc2 = md1 RAID10 (yes, you can do odd numbered RAID10)
sda3 + sdb3 + sdc3 = md2 RAID5
sda4 + sdb4 + sdc4 = md3 RAID0

md0 = no LVM, format as ext4, mount as /boot
md1 = LVM, divide into two LVs
      Format one LV as ext4, mount as / (root)
      Use other LV for swap
md2 = LVM, create one LV
      make the LV is smaller than the VG, to leave space for snapshots
      Format the LV as ext4, mount as /data
md3 = LVM, one LV taking the whole VG
      Format as ext4, mounts as /stuff_i_want_to_lose
2
Anton Cohen