Linux上のZFS-それほど単純ではない

「Linux上のZFS-簡単でシンプル」という記事を読んだ後、LinuxサーバーのペアでこのFSを使用するささやかな経験を共有することにしました。



最初は-余談。 ZFSはクールです。 これは非常にクールで、イデオロギー的に異なるプラットフォームから移植されたFSのすべての欠点をカバーしています。 SolarisカーネルはLinux以外のプリミティブと連携するため、開発者はSolarisコードを使用してZFSを移行できるようにするために、Solaris Porting Layer SPL互換性レイヤーを作成しました。 このレイヤーは正常に機能するように見えますが、カーネルモードでは追加のコードであり、クラッシュの原因になる可能性があります。



ZFSはLinux VFSと完全には互換性がありません。 たとえば、アクセス制御リストをPOSIX APIおよびSambaが気に入らないgetfacl / setfaclコマンドを使用して管理することはできません。getfacl/ setfaclコマンドはACLにNTFSアクセス許可を保存します。 したがって、Sambaフォルダーおよびファイルへの通常のアクセス許可の設定は失敗します。 理論的には、SambaはZFS ACLをサポートしていますが、Linux用のこのモジュールはまだ構築する必要があります...しかし、Linux上のZFSの拡張FS属性は存在し、正常に動作します。



さらに、32ビット版のSolarisは、Linuxとは異なるメモリ割り当てメカニズムを使用します。 したがって、x86_64ではなくx86アーキテクチャ上のLinuxでZFSを試してみることにした場合は、グリッチに備えてください。 初歩的な操作のためのCPU使用率が100%になり、dmesgで何キロメートルものエラーが発生するのを待っています。 Linux開発者のZFSは次のように書いています。「64ビットカーネルを使用することを強くお勧めします。 現時点では、zfsは32ビット環境でビルドされますが、安定して実行されません。



ZFSは一種の「それ自体」であり、Linuxには一般的ではないメタデータパラメーターに格納されます。 たとえば、FSのマウントポイントの名前はその設定で設定され、FS自体はzfs mountコマンドでマウントされます。これにより、/ etc / fstabおよびLinuxでFSをマウントする他の方法と自動的に互換性がなくなります。 もちろん、mountpoint = legacyを設定してマウントを使用することもできますが、これは認めなくてはならないことです。 Ubuntuでは、ZFS固有のマウントスクリプトとパッチが適用されたマウントコマンドを含むmountallパッケージによって問題が解決されます。



次の問題は、システムのスナップショット、いわゆるスナップショットです。 一般に、ZFSには非常に効果的なスナップショットの実装が含まれており、これにより「タイムマシン」を作成できます。たとえば、1か月間のスナップショットのセットで、15分で1スナップショットの解像度です。 Ubuntuのメンテナーはもちろん、この機能をzfs-auto-snapshotパッケージに含めました。これにより、スナップショットのセットが作成されますが、より時間がかかります。 問題は、各スナップショットが/ devディレクトリにブロックデバイスとして表示されることです。 スナップショットを作成するサイクルでは、1か月でプールの各ボリュームに対して4 + 24 + 4 + 31 + 1 = 64ブロックデバイスが取得されます。 つまり、たとえば20のボリュームがある場合(仮想化にサーバーを使用する場合は完全に正常な値)、1か月あたり64 * 20 = 1280デバイスになります。 再起動したい場合、大きな驚きがあります-ダウンロードが非常に遅れます。 理由-起動時にblkidユーティリティが実行され、ファイルシステムの存在についてすべてのブロックデバイスがポーリングされます。 FS検出メカニズムが不正に実装されているか、ブロックデバイスがゆっくり開いていますが、タイムアウトによって120秒後にblkidプロセスがカーネルによって強制終了されます。 言うまでもなく、blkidとそれに基づくすべてのスクリプトは、ダウンロードが完了した後でも動作しませんか?



ホットニュース
zfs-auto-stapshotパッケージをインストールして、より完全にテストしようとしました。 結果-ローテーションが機能せず、スナップショットの古いバージョンは削除されません(エラー134)。 したがって、1か月間で、1つのボリュームに対して4 * 24 + 24 * 31 + 4 + 31 + 1 = 876のスナップショット、または20のボリュームに対して18,396のスナップショットを取得します。 スナップショットを担当するスクリプトはおそらく何らかの形で修正できます...

パッケージバージョン-1.0.8-0ubuntu1〜oneric1、OS-Debian Sid x86_64


これらの問題をすべて解決し、新しく作成したパーティションを、iSCSI、FC、またはカーネルに組み込まれたLIO-Targetシステムを介して他の方法で他のマシンに提供したいとします。 あった! zfsモジュールは、起動時に、ベース番号230を使用して/ devディレクトリにブロックデバイスを作成します。 最新のパッチが適用されていないLIO-Target(より正確には、targetcliユーティリティ)は、この番号のデバイスがエクスポートの準備ができているとは見なしません。 解決策は、/ usr / lib / python2.7 / dist-packages / rtslib / utils.pyファイルの1行を修正するか、/ etc / modprobe.d / zfs.confファイルにzfsモジュールロードオプションを追加することです。



options zfs zvol_major=240
      
      





結論として、ご存じのとおり、カーネル内のZFSとGPL v2がCDDLの非互換性により、カーネル内にzfsモジュールが含まれることが妨げられています。 したがって、カーネルが更新されるたびに、モジュールはDKMSを介して再構築されます。 モジュールがこれを行うこともあれば、カーネルがあまりにも新しい場合もあります-いいえ。 したがって、最新のカーネルからの最新のチップ(およびKVMとLIO-Targetのバグ修正)は、少し遅れて届きます。



結論は何ですか? 本番環境では注意してZFSを使用してください。 おそらく、他のFSで問題なく機能した構成は機能せず、LVMで安全に実行したコマンドはデッドロックを引き起こします。



しかし、Linuxの実稼働環境では、すべてのZFS volチップにアクセスできます。 28-重複排除、オンライン圧縮、フォールトトレランス、柔軟なボリュームマネージャー(ちなみに、個別に使用できます)など。一般に、幸運と成功をお祈りします。



All Articles