今回は ZFS の大きな特徴の一つである,重複排除にフォーカスしたいと思います.
ZFS はファイルシステム (ZVOLも) の重複排除が利用できます.
これによってストレージ利用量の削減が見込めます.
- ZFS に関するお話
- FreeBSD で ZFS を利用する – ZFS 概要
- FreeBSD で ZFS を利用する – ZFS プールの作成 (パーティション切らない編)
- FreeBSD で ZFS を利用する – ZFS プールの機能について理解する
- FreeBSD で ZFS を利用する – ファイルシステムを管理する
- FreeBSD で ZFS を利用する – send/recv を使い倒す
- FreeBSD で ZFS を利用する – RAWボリュームを切り出す & iSCSI として提供する
- FreeBSD で ZFS を利用する – ファイルシステムの圧縮を利用する・比較する
- FreeBSD で ZFS を利用する – ZFS のキャッシュの仕組みを理解する
- FreeBSD で ZFS を利用する – キャッシュを構成・設定する
- FreeBSD で ZFS を利用する – 重複排除を利用する・確認する
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (1)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (2)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (3)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (4)
重複排除とは
重複排除は,同一のデータが複数あった場合,ストレージ上には一つのデータのみを保持し,各データへのポインターを持つことでストレージ容量の節約をはかる技術です.
以下の図としては同じファイルが複数のフォルダーにあるイメージですが,実際としてはファイルの比較ではなく,ファイル内のデータを比較して重複排除の対象となります.
重複排除の有効化
ZFS の重複排除の有効化はファイルシステム/ZVOL 単位で zfs set で実施可能です.
以下は新規のファイルシステムを作成,そのファイルシステムに重複排除を有効化させる手順となります.
# zfs create pool0/dedup # zfs set dedup=on pool0/dedup # zfs get dedup pool0/dedup NAME PROPERTY VALUE SOURCE pool0/dedup dedup on local
重複排除の効果
重複排除の効果を測定するため,圧縮の際と同様に FreeBSD のソースコードを展開して状況を見てみたいと思います.
/pool0/dedup が作成されましたのでサブディレクトリーを作成して,その中にソースコードを展開し,使用量や重複排除の結果を確認してみます.
# mkdir /pool0/dedup/src1 # cd /pool0/dedup/src1 # tar jxf /root/src_stable_13.tar.xz # df -H /pool0/dedup Filesystem Size Used Avail Capacity Mounted on pool0/dedup 412G 1.4G 410G 0% /pool0/dedup
df の結果は本来の使用量が表示されます.重複排除の状態を確認するには zpool list コマンドを用いて確認となります.
# zpool list pool0 NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool0 596G 2.02G 594G - - 0% 0% 1.01x ONLINE -
1.01x が現状の効果となり,ソースコードを1回展開した場合は 1% 程重複排除が効いている状態となります.
もう一度ソースコードを展開して,再度状況を確認してみます.
# mkdir /pool0/dedup/src2 # cd /pool0/dedup/src2 # tar jxf /root/src_stable_13.tar.xz # df -H /pool0/dedup Filesystem Size Used Avail Capacity Mounted on pool0/dedup 413G 2.9G 410G 1% /pool0/dedup # zpool list pool0 NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool0 596G 2.08G 594G - - 0% 0% 2.02x ONLINE -
いかがでしょうか.2.02x となり,まるっと重複排除対象として扱われている事が判ります.1.4GB 程展開してデータは増えていますが,FREE の値に変化がないためしっかりと効いている事が確認できます.
重複排除と圧縮の両方を有効にする
重複排除と圧縮は排他ではなく,両方を有効にすることができます.
ZSTD も有効にした形でどのような効果があるかを確認してみます.
# zfs create pool0/dedup-zstd # zfs set dedup=on pool0/dedup-zstd # zfs set compression=zstd pool0/dedup-zstd # zfs get dedup pool0/dedup-zstd NAME PROPERTY VALUE SOURCE pool0/dedup-zstd dedup on local # zfs get compression pool0/dedup-zstd NAME PROPERTY VALUE SOURCE pool0/dedup-zstd compression zstd local
重複排除と圧縮の効果
重複排除と圧縮の効果を測定するため,先ほどと同様に FreeBSD のソースコードを展開して状況を見てみたいと思います.
/pool0/dedup-zstd が作成されましたのでサブディレクトリーを作成して,その中にソースコードを展開し,使用量や重複排除の結果を確認してみます.
# mkdir /pool0/dedup-zstd/src1 # cd /pool0/dedup-zstd/src1 # tar jxf /root/src_stable_13.tar.xz # df -H /pool0/dedup-zstd/src1 Filesystem Size Used Avail Capacity Mounted on pool0/dedup-zstd 410G 444M 410G 0% /pool0/dedup-zstd
Used が 先が 1.4G で今回が 444M ですので,まず圧縮が効いている事が確認できます.
zfs get と zpool list で ZFS としてどのように見えているのかを確認します.
# zfs get compressratio pool0/dedup-zstd NAME PROPERTY VALUE SOURCE pool0/dedup-zstd compressratio 3.44x - # zpool list pool0 NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool0 596G 2.79G 593G - - 0% 0% 1.01x ONLINE -
圧縮が行われつつ,重複排除も効いている事が確認できました.
追加でソースコードを展開して変化を見てみます.
# mkdir /pool0/dedup-zstd/src2 # cd /pool0/dedup-zstd/src2 # tar jxf /root/src_stable_13.tar.xz # df -H /pool0/dedup-zstd/src1 Filesystem Size Used Avail Capacity Mounted on pool0/dedup-zstd 412G 889M 411G 0% /pool0/dedup-zstd # zpool list pool0 NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool0 596G 758M 595G - - 0% 0% 2.03x ONLINE -
圧縮が効いているため,444M が二つ分となっています.
DEDUP が 2.03x ですのでまるっと重複排除対象になっています.また,圧縮が効いている効果で FREE の値が2回目が増えている状況です.
このように,両方を有効にすることでよりストレージの使用量を節約する事が可能です.
大事な注意点
このように非常に効果が見込まれる重複排除ですが,メモリーを大量に必要とする点を注意する必要があります.
大まかにですが,1TB の領域あたり,1GB のメモリーを使用します.これが不足する状況だとパフォーマンスが大きく劣化する事や重複排除自体の障害を引き起こす可能性があります.
したがって,4TB の領域がある場合,ARC の容量も含めてで ZFS に対して 8GB 程のメモリーを搭載している事が望ましいと考えられます.
実利用にあたっては,よくテストを行ったうえで利用する事をお勧めします.
実際に筆者環境においてはメモリー不足でトラブルとなった為頑張って無効のファイルシステムにデータを移行した経緯があります…
今はメモリーも十分なファイルサーバーとなったので改めて利用チャレンジを考えている所です.
以上,ZFS の重複排除の紹介でした.
コメント