解決策 1:
私が管理しているサーバーの 1 つで、あなたが説明したタイプの構成が実行されています。 LUKS で暗号化された RAIDZ プールを備えた 1 TB のハード ドライブが 6 台あります。また、LUKS で暗号化された ZFS ミラーに 2 台の 3TB ハード ドライブがあり、オフサイトに持ち出すために毎週交換されます。サーバーはこの構成を約 3 年間使用していますが、問題が発生したことはありません。
Linux で暗号化を使用した ZFS が必要な場合は、このセットアップをお勧めします。 Linux上のZFSではなく、ZFS-Fuseを使用しています。ただし、Linux 上の ZFS は、おそらく私が使用しているセットアップよりも優れたパフォーマンスを発揮すること以外、結果には関係ないと思います。
<ブロック引用>このセットアップでは、LUKS が Z-RAID を「認識」していないため、冗長データが数回暗号化されます。 LUKS-on-mdadm ソリューションでは、データは一度暗号化され、ディスクに複数回書き込まれます。
LUKS は RAID を認識しないことに注意してください。ブロックデバイスの上にあることだけを知っています。 mdadm を使用して RAID デバイスを作成し、次に luksformat
を使用する場合 つまり、暗号化されたデータを基盤となるストレージ デバイスにレプリケートしているのは mdadm であり、LUKS ではありません。
LUKS FAQ の質問 2.8 では、暗号化を 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 は、パーティションではなく未加工のブロック ストレージを使用することを想定しているため、未加工のパーティションをオプションとしてリストしました。パーティションを使用して zpool を作成することもできますが、無用なレベルの管理が追加されるためお勧めしません。また、パーティション ブロックのアライメントのオフセットを計算する際に考慮する必要があります。
<ブロック引用>書き込みパフォーマンスを大幅に妨げませんか? [...] 私の CPU は Intel AES-NI をサポートしています。
AES-NI ドライバーでサポートされている暗号化方法を選択している限り、パフォーマンスの問題は発生しません。 cryptsetup 1.6.0 以降を使用している場合は、cryptsetup benchmark
を実行できます どのアルゴリズムが最高のパフォーマンスを提供するかを確認してください。
LUKS の推奨オプションに関するこの質問も役立つ場合があります。
ハードウェア暗号化がサポートされている場合、パーティションのミスアライメントによるパフォーマンスの問題に直面する可能性が高くなります.
Linux 上の ZFS は ashift
を追加しました プロパティを zfs
に コマンドを使用して、ハード ドライブのセクター サイズを指定できるようにします。リンクされた FAQ によると、ashift=12
LUKS FAQ には、LUKS パーティションには 1 MB のアライメントがあると記載されています。質問 6.12 と 6.13 でこれについて詳しく説明し、LUKS パーティション ヘッダーを大きくする方法についてのアドバイスも提供します。ただし、ZFS ファイルシステムが 4K 境界で作成されることを保証するのに十分な大きさにすることが可能かどうかはわかりません。これが解決する必要がある問題である場合、これがどのように機能するかをお聞きしたいと思います。 2 TB のドライブを使用しているため、この問題に直面することはないかもしれません。
<ブロック引用>ZFS は、物理デバイスではなくデバイスマッパー LUKS コンテナで動作している場合、ディスク障害を認識しますか?
ZFS は、問題なく読み書きできる限り、ディスク障害を認識します。 ZFS はブロック ストレージを必要とし、そのストレージの詳細とそれがどこから来るかを気にしたり認識したりしません。発生した読み取り、書き込み、またはチェックサム エラーのみを追跡します。基盤となるストレージ デバイスの正常性を監視するのはあなた次第です。
ZFS のドキュメントには、読む価値のあるトラブルシューティングに関するセクションがあります。損傷したデバイスの交換または修復に関するセクションでは、障害シナリオ中に発生する可能性があることと、その解決方法について説明します。ここでは、ZFS を持たないデバイスの場合と同じことを行います。 syslog で SCSI ドライバー、HBA または HD コントローラー、SMART 監視ソフトウェアからのメッセージを確認し、それに応じて対処してください。
<ブロック引用>重複排除やその他の ZFS 機能はどうですか?
基礎となるブロックストレージが暗号化されているかどうかに関係なく、すべての ZFS 機能は同じように機能します。
まとめ
<オール>cryptsetup benchmark
を使用 お使いのハードウェアに最適なものを確認してください。2020 年 2 月の更新
この回答を書いてから 6 年が経ちました。 ZFS on Linux v0.8.0 はネイティブ暗号化をサポートしています。これは、LUKS が特に必要ない場合に考慮する必要があります。
解決策 2:
別の実装は、ZVOL ブロック デバイス (http://zfsonlinux.org/example-zvol.html) を作成し、LUKS を使用して新しく作成された ZVOL を暗号化し、暗号化されたブロックの上に ext4 (または他の) ファイルシステムを作成することです。