ZFS:圧縮アルゴリズムの変更後に既存のファイルを再圧縮します


14

私は2011年にを使用して作成されたプールを使用していますがlzjb compression、数年後、アップグレードによって圧縮をに設定できるようになりましたlz4。配列上のコンテンツの少なくとも20%(スペース)が2013年以前に作成されたと推定しlzjbます。つまり、を使用して圧縮されたままです。

これを修正し、(一部の)スペースを取り戻すためのいくつかのオプションを考えることができます。

  1. 新しいプールにバックアップして復元します。一時的なコピーを保持するのに十分な冗長ストレージがないため、実際には実用的ではありません。復元には、プールを数時間オフラインにする必要もあります。

  2. タイムスタンプが2013年より古いファイルを再コピーするスクリプトを作成します。特にスペースや他の特殊文字をチョークして元の名前をマングルする場合は、潜在的に危険です。

現在の圧縮アルゴリズムを使用して、ZFSにレガシーブロックを再圧縮させる方法はありますか?スクラブのようなものですが、圧迫を癒します。

関連する質問:各タイプの圧縮アルゴリズムの使用状況を確認する方法はありますか?zdbは、個々のアルゴリズムに分解するのではなく、全体的な圧縮統計のみを表示します。


2
私はあなたがたった2つのオプションに名前を付けたと確信しています。この機能が存在しない理由については、問題3013の説明も参照してください。この機能をまったく使用したくない場合があります。
マイケルハンプトン

2
LZ4はおそらくあり、最大で lzjbよりも圧縮に優れた10%。データの20%を10%圧縮できる場合、最大で2%の空き容量が得られます。その価値はありますか?
パイプ

1
シェルスクリプトを作成してコピーを行う場合export LC_ALL=C、スクリプトの先頭に追加すると、ファイル名に含まれるすべての非ASCII特殊文字はそのまま残ります。そのまま空白やダッシュを維持することはトリッキーです、二重引用符を使用し、--例えば、cp -- "$SOURCE" "$TARGET"
pts

4
@pipe Spaceは1つ(非常に)小さな利点ですが、解凍速度にもっと興味があります。FreeBSDのzpool-featuresのマンページから:「通常、lz4圧縮は、圧縮可能なデータでlzjbより約50%、非圧縮データで200%高速です。また、圧縮解除で約80%高速で、圧縮率は約10%向上します。 」
rowan194

@pts基本的なシェルプログラミングルール(変数を二重引用符で囲む、またはを使用--)に従うことを "trickier"とは呼びません。たとえば、SQLインジェクションを回避することと同じくらい重要です。
glglgl

回答:


14

データを(完全または部分的に)再コピーするか、zfsがデータを新しいプールまたはZFSファイルシステムに送信/受信する必要があります。

他のオプションはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.