ZFS の圧縮形式を変更する2009年03月23日 13時25分25秒

ZFS の圧縮形式は、後からでも変更できる。lzjb は速度に対して最適化された圧縮アルゴリズム。そして、gzip と同等の圧縮アルゴリズムが使える。gzip-N として、N の部分を数字でわたすと、レベルを指定することも出来る。

現在、デフォルトの lzjb を使っていたが、gzip-9 に変えてみた。


$ zfs get compression scratch
NAME     PROPERTY     VALUE     SOURCE
scratch  compression  on        local
$ zfs set compression=gzip-9 scratch
$ zfs get compression scratch
NAME     PROPERTY     VALUE     SOURCE
scratch  compression  gzip-9    local

まさか、こんなに時間が掛かるとは思わずに time で計らなかった。五分ぐらいかかったと思う。ただし、5 MB/s の性能のディスクで、buildworld と buildkernel が二つずつ動いていたことを追記しておく。svnversion が走っていた。

ZFS は圧縮形式などの属性を変えたとしても、既に存在するファイルの書き換えることはしない。しかし、新しく書き込まれる、更新されるファイルに適応していくので、順次置き換えられていく。

実際に、今回の実験では buildworld/buildkernel が進む毎にディスクの空き容量が大きくなっていった。lzjb よりも gzip-9 の方が圧縮率が高いために、置き換わる毎に少しずつディスクが開放されていく。

圧縮率は高くなったが、若干 ZFS の反応が遅くなり、時折システムの応答が数秒にわたり休止するような現象も見られるようになった。しかし、システムが panic を起こすなどの問題には遭遇していない。