web-dev-qa-db-ja.com

LinuxでのZFS RAIDおよびLUKS暗号化

LinuxでLUKS暗号化Z-RAIDプールとして3x 2TB 7200rpmドライブのセットをセットアップする予定です(NASソリューションの場合)。

当面の問題についての私の理解は、これを達成する唯一の方法は、すべての物理デバイスをluksFormatし、ロック解除されたLUKSコンテナーからzpoolをアセンブルすることであるということです。

私はこれに関して以下の懸念を持っています:

  • 書き込みパフォーマンスを大幅に低下させませんか?このセットアップでは、LUKSがZ-RAIDを「認識」していないため、冗長データが数回暗号化されます。 LUKS-on-mdadmソリューションでは、データは一度暗号化され、ディスクに複数回書き込まれるだけです。 CPUはIntel AES-NIをサポートしています。

  • ZFSは、物理デバイスではなくデバイスマッパーLUKSコンテナーで動作しているときにディスク障害を認識しますか?重複排除やその他のZFS機能はどうですか?

28
MasterM

私が管理しているサーバーの1つが、あなたが説明した種類の構成を実行しています。 LUKSで暗号化されたRAIDZプールが搭載された6台の1TBハードドライブがあります。また、LUKSで暗号化されたZFSミラーに2 TBの3 TBハードドライブがあり、毎週交換されてオフサイトに持ち出されます。サーバーはこの構成を約3年間使用しており、私はこれに問題を経験したことがありません。

Linuxで暗号化を使用したZFSが必要な場合は、このセットアップをお勧めします。 LinuxではZFSではなく、ZFS-Fuseを使用しています。ただし、Linux上のZFSが使用しているセットアップよりもパフォーマンスが優れていることを除いて、結果には影響がないと思います。

このセットアップでは、LUKSがZ-RAIDを「認識」していないため、冗長データが数回暗号化されます。 LUKS-on-mdadmソリューションでは、データは一度暗号化され、ディスクに複数回書き込まれるだけです。

LUKSはRAIDを認識しないことに注意してください。それは、それがブロックデバイスの上にあることを知っているだけです。 mdadmを使用してRAIDデバイスを作成し、それをluksformatにした場合、暗号化されたデータをLUKSではなく、基礎となるストレージデバイスに複製しているのはmdadmです。

LUKSの質問2.8 FAQ 暗号化をRAIDの上に置くか、その逆にするか について説明します。次の図を提供します。

Filesystem     <- top
|
Encryption
|
RAID
|
Raw partitions
|
Raw disks      <- bottom

ZFSはRAIDとファイルシステム機能を組み合わせているため、ソリューションは次のようにする必要があります。

RAID-Z and ZFS Filesystem  <-top
|
Encryption
|
Raw partitions (optional)
|
Raw disks                  <- bottom

ZFSはパーティションではなくrawブロックストレージを使用することを想定しているため、rawパーティションをオプションとしてリストしました。パーティションを使用してzpoolを作成することもできますが、無駄なレベルの管理が追加されるため、お勧めできません。また、パーティションブロックのアライメントで使用するオフセットを計算するときに考慮する必要があります。

書き込みパフォーマンスを大幅に低下させませんか? [...]私のCPUはIntel AES-NIをサポートしています。

AES-NIドライバーでサポートされている暗号化方式を選択する限り、パフォーマンスの問題は発生しません。 cryptsetup 1.6.0以降を使用している場合は、cryptsetup benchmarkそして、どのアルゴリズムが最高のパフォーマンスを提供するかを確認します。

LUKSの推奨オプションに関するこの質問 も有効です。

ハードウェア暗号化をサポートしている場合、パーティションの調整不良が原因でパフォーマンスの問題に直面する可能性が高くなります。

Linux上のZFSには ashiftプロパティがzfsコマンドに追加されました があり、ハードドライブのセクターサイズを指定できます。リンクされたFAQによると、ashift=12は、4Kブロックサイズのドライブを使用していることを通知します。

LUKS FAQは、LUKSパーティションが1 MBのアライメントを持っていると述べています 質問6.12および6.1 これについて詳しく説明し、LUKSパーティションの作成方法に関するアドバイスも提供しますヘッダーを大きくします。ただし、ZFSファイルシステムが4Kの境界で作成されるように、十分に大きくすることができるかどうかはわかりません。これが問題である場合は、これがどのように機能するかを知りたいと思います2TBドライブを使用しているため、この問題に直面しない場合があります。

ZFSは、物理デバイスではなくデバイスマッパーLUKSコンテナーで動作しているときにディスク障害を認識しますか?

ZFSは、問題なく読み書きできる限り、ディスク障害を認識します。 ZFSはブロックストレージを必要とし、そのストレージの詳細とそのソースを気にしません。発生した読み取り、書き込み、またはチェックサムエラーのみを追跡します。基盤となるストレージデバイスの状態を監視するのはユーザーの責任です。

ZFSのドキュメントにはトラブルシューティングに関するセクションがあります 読む価値があります。 損傷したデバイスの交換または修復 のセクションでは、障害シナリオ中に発生する可能性のあるものと、それを解決する方法について説明します。ここでは、ZFSを持たないデバイスの場合と同じことを行います。 syslogでSCSIドライバー、HBAまたはHDコントローラー、およびSMART監視ソフトウェアからのメッセージを確認してください。

重複排除やその他のZFS機能はどうですか?

基礎となるブロックストレージが暗号化されているかどうかに関係なく、すべてのZFS機能は同じように動作します。

概要

  1. LUKSで暗号化されたデバイスのZFSは適切に機能します。
  2. ハードウェア暗号化を使用している場合、ハードウェアでサポートされている暗号化方式を使用している限り、パフォーマンスに影響はありません。使用する cryptsetup benchmarkハードウェアで何が最適に機能するかを確認します。
  3. ZFSは、RAIDとファイルシステムを1つのエンティティに組み合わせたものと考えてください。ストレージスタックに適合する場所については、上記のASCII図を参照してください。
  4. ZFSファイルシステムが使用する各LUKS暗号化ブロックデバイスのロックを解除する必要があります。
  5. 現在と同じ方法で、ストレージハードウェアの状態を監視します。
  6. 4Kブロックのドライブを使用している場合は、ファイルシステムのブロック配置に注意してください。許容可能な速度を得るために必要な調整を行うには、luksformatオプションやその他の設定を試す必要がある場合があります。

2020年2月の更新

この回答を書いてから6年になります。 Linux v0.8.0のZFS ネイティブの暗号化をサポートします。LUKSを特に必​​要としない場合は、暗号化を検討する必要があります。

32
Starfish

代替の実装は、ZVOLブロックデバイス( http://zfsonlinux.org/example-zvol.html )を作成し、LUKSを使用して新しく作成されたZVOLを暗号化してから、ext4(またはその他)を作成することです暗号化されたブロックデバイスの上にあるファイルシステム。

4
Tux Racer