しばらくの間実行されているZFSファイルシステムがあり、最近、それを(ついに!)最新のZFSバージョンにアップグレードする機会がありました。私たちのデータは重複排除を叫ぶものではありませんが、小さなテストに基づいて、それを利用することでスペースの5〜10%を無料で取り戻すことができると確信しています。ファイルシステムで重複排除を有効にしましたが、新しいファイルは徐々に重複排除されていますが、データの大部分(95%以上)はすでにファイルシステムに存在しています。
データをプール外に移動してから再コピーする以外に、既存のデータの重複排除スキャンをトリガーする方法はありますか?非同期またはライブである必要はありません。
(そして参考までに、ファイルシステム全体を別のファイルシステムにコピーしてからマウントを切り替えるだけの十分なスペースがプールにありません。)
いいえ、既存のデータをコピーせずに重複排除することはできません。 Rember、Dedup-Table全体がRAM/L2ARCに収まる場合にのみ、フォームdedupのメリットがあります。
重複排除をオンにしなくても、zds -Spoolnameを使用して重複排除のメリットを見積もることができます。
pfexec zdb -S rpoolシミュレートされたDDTヒストグラム:
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
1 313K 13.4G 13.4G 13.4G 313K 13.4G 13.4G 13.4G
2 111K 5.27G 5.27G 5.27G 233K 10.7G 10.7G 10.7G
4 5.15K 96.2M 96.2M 96.2M 22.4K 403M 403M 403M
8 1.03K 12.2M 12.2M 12.2M 10.3K 111M 111M 111M
16 384 16.3M 16.3M 16.3M 8.10K 350M 350M 350M
32 157 6.17M 6.17M 6.17M 6.47K 250M 250M 250M
64 83 6.52M 6.52M 6.52M 6.37K 511M 511M 511M
128 17 395K 395K 395K 2.61K 62.5M 62.5M 62.5M
256 2 5K 5K 5K 802 2.24M 2.24M 2.24M
2K 1 512 512 512 2.66K 1.33M 1.33M 1.33M
8K 1 128K 128K 128K 8.21K 1.03G 1.03G 1.03G
Total 431K 18.8G 18.8G 18.8G 613K 26.8G 26.8G 26.8G
dedup = 1.43, compress = 1.00, copies = 1.00, dedup * compress / copies = 1.43
現在の重複排除実装(ビルド134)はRAM要求が厳しく)であることに注意してください大量のデータが削除されると、ZFSプールをかなりの期間ブリックするという未解決の問題があります。 http://bugs.opensolaris.org/bugdatabase /view_bug.do;jsessionid=a24a5761748eedbb50cd39d3530e?bug_id=692439
既存のデータの重複排除については、同じプールにとどまりながらファイルを1つずつコピー/移動することでうまくいくはずです。
Blasaferによるすばらしい答えですが、追加します Block Pointer rewrite は、すでに保存されているデータの再圧縮を可能にする計画された機能であり、おそらく再重複排除にも使用できます。しかし、それは将来のことであり、とにかく推測しているだけです。