web-dev-qa-db-ja.com

ZFS-重複排除されたzvolまたはデータセットを破棄すると、サーバーが停止します。回復する方法は?

HP ProLiant DL180G6と12Midline(7200 RPM)SASドライブで実行されているセカンダリストレージサーバーでNexentastorを使用しています。システムにはE5620CPUと8GBRAMがあります。ZILはありません。またはL2ARCデバイス。

先週、重複排除と圧縮を有効にして、iSCSI経由でVMWareESXホストと共有できる750GBのスパースzvolを作成しました。次に、Windows 2008ファイルサーバーイメージを作成し、最大300GBのユーザーデータをVMにコピーしました。システムに満足したら、仮想マシンを同じプールのNFSストアに移動しました。

NFSデータストアのVMで起動して実行したら、元の750GBzvolを削除することにしました。これを行うと、システムが停止しました。 NexentaWebインターフェイスとNMCへのアクセスが停止しました。私は最終的に生のシェルにたどり着くことができました。ほとんどのOS操作は問題ありませんでしたが、システムはzfs destroy -r vol1/filesystemコマンドでハングしていました。醜い。次の2つのOpenSolarisbugzillaエントリを見つけましたが、マシンが不明な期間ブリックされることを理解しました。 14時間経ちましたので、サーバーへのアクセスを回復できるようにするための計画が必要です。

http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=692439

そして

http://bugs.opensolaris.org/bugdatabase/view_bug.do;jsessionid=593704962bcbe0743d82aa339988?bug_id=6924824

将来的には、buzillaの回避策の1つで与えられたアドバイスをおそらく受けるでしょう:

Workaround
    Do not use dedupe, and do not attempt to destroy zvols that had dedupe enabled.

更新:システムの電源を強制的にオフにする必要がありました。再起動すると、システムはImporting zfs filesystemsで停止します。それは今2時間そのようになっています。

11
ewwhite

これは解決されました。重要なのは、重複排除されたボリュームでは、削除する前に重複排除フラグをオフにする必要があるということです。これは、プールレベルだけでなく、zvolまたはファイルシステムレベルでも実行する必要があります。それ以外の場合、削除は基本的に重複排除されます。 ZFS重複排除テーブルが参照されているため、このプロセスには時間がかかります。この場合、RAMが役立ちます。一時的に16ギガバイトのRAMをシステムに追加し、サーバーをオンラインに戻しました。zpoolは4時間以内に完全にインポートされました。 。

おそらく、重複排除はそれほど洗練されておらず、そのパフォーマンスにはRAMが不可欠です。環境にもよりますが、24 GB以上をお勧めします。それ以外の場合は、ZFS重複排除をオフのままにしておきます。ホームユーザーや小規模なシステムには絶対に合理的ではありません。

15
ewwhite

Sun/Oracle ZFS 7000シリーズアプライアンスの長年のユーザーとして、重複排除は洗練されていないことは間違いありません。販売と配達を混同しないでください!営業担当者は「ああ、修正されました」と言うでしょう。実生活では、私の実生活では、24GBでは「DDTテーブル」を処理するのに十分ではないと言えます。つまり、重複排除テーブルを格納するバックエンドインデックスです。そのテーブルは、ディスクに書き込む必要があるかどうかを判断するために、各I/Oが実行中にインターセプトされるように、システムメモリに存在する必要があります。ストレージプールが大きいほど、データの変更が多くなり、このテーブルが大きくなり、システムメモリへの需要が大きくなります。そのメモリは、ARC(キャッシュ)と、場合によってはOS自体を犠牲にして発生します。そのため、特定のコマンドがフォアグラウンドで発生し、一部はバックグラウンドで発生するため、ハングが発生します。 CLIで特に指示しない限り、プールの削除はフォアグラウンドで行われるようです。 GUIウィザードはこれを行いません。

重複排除されたボリュームで定義された共有内のNFSデータを一括削除しても、データを削除するように指示するZFSへの「書き込み」を処理するのに十分なメモリがない場合は、システムが半分になります。

全体として、メモリを最大限に活用し、それでも、ARCとDDTを制限してOS用にメモリを予約する方法を見つけない限り(DDTの性質上、制限できるとは思いませんが、正確に関連付けられたインデックスにすぎません)あなたのI/Oに)-それからあなたは大規模な削除または破壊的なzvol/poolsの間にうんざりしています。

5
John Berisford