2016-09-21 Wed

ZFS の capacity について はてぶ

メモ。

Current ZFS Pool Capacity Recommendations (Life in the ZFS Lane)
https://blogs.oracle.com/zfs/entry/current_zfs_pool_capacity_recommendationse

使い方にもよるけど、ZFS filesystem version 5 以降は 90% が目安という話。

どういう使い方にしろ、ちゃんとモニタリングして遅くなっていないか確認が必要。

kstat -p unix:0:vopstats_zfs なんかがそれっぽい統計。

0 の部分は zone id なので、0 は global zone。

2015-03-23 Mon

Serverspec で zfs allow のテストをしたい はてぶ

ということで、いろいろと考えている。

まずは、どうテストを書けるといいのかが決まらない。

すでにある Serverspec の resource type を参考にすると、
こんな感じに書けるのがよさそう。

describe zfs('rpool/export/home/foo') do
  it { should be_allowed('create,mount,snapshot').to_user('foo') }
  it { should be_allowed('create,mount,snapshot').to_group('staff') }
  it { should be_allowed_at_create_time('destroy') }
end


または its 形式にして、こんな感じ。

its(:user_permission) { should include('foo' => 'create,mount,snapshot' ) }
its(:group_permission) { should include('staff' => 'create,mount,snapshot' ) }
its(:create_time_permission) { should eq 'destroy' }


'create,mount,snapshot' などの permission 部分を文字列にしてしまうと、

describe zfs('rpool/export/home/foo') do
  it { should_not be_allowed('rollback,hold').to_user('foo') }
end


のようなテストができないし、permission の順番も問題になるので、
配列にした方がいいかもしれない。
完全一致のテストでよければ文字列でよい。

次に、zfs allow の出力の問題。

手元で適当に zfs allow で permission を設定してみた後の zfs allow の出力は以下。

tonaka@x230% zfs allow tank/test20150321/test_01/a
---- Permissions on tank/test20150321/test_01/a ----------------------
Local permissions:
        user tonaka destroy,rollback,snapshot
---- Permissions on tank/test20150321/test_01 ------------------------
Create time permissions:
        rollback
Local permissions:
        user tonaka destroy
Local+Descendent permissions:
        user tonaka snapshot
---- Permissions on tank/test20150321 --------------------------------
Create time permissions:
        destroy,snapshot
Local+Descendent permissions:
        user tonaka create,mount
        group staff create,mount


各 zfs の path に対して何が allow されたかが出力されて、
上からの継承分を含めて何が allow されているかは出力されない。

そのため、ある zfs の path の上からの継承分を含めた allow をテストしたい場合は
parse してごにょごにょして求める必要がある。

ある zfs の path の上からの継承分を含めた allow をテストするのではなく、
ある zfs の path に対して zfs allow が実行されているかをテストするなら、
その path の 'Create time permissions' と 'Local+Descendent permissions' を
確認すればよい。

どっちにするか?って話になると、両方できた方がよいということになってしまうが、
『ある zfs の path に対して zfs allow が実行されているかをテストする』の方が、
テストに失敗した時に何をすればいいのかわかりやすい分よい気がする。

別にまとめた方がいいけど、zfs allow で表示される permission の種類は以下。

- Create time permissions:
  zfs allow -c で許可された permission。
  その zfs の下位の zfs を create すると、この permission がつく。
- Local+Descendent permissions:
  zfs allow で許可された permission。
- Local permissions:
  zfs が create された際に Create time permissions でついた permission

2015-03-23 Mon

Serverspec で zfs の property のテストに its(:property) が使えるようになった はてぶ

pull request が merge されて Serverspec 2.11.0 から
zfs の property のテストが以下のように書けるようになった。

describe zfs('rpool') do
  its(:property) { should include( 'mountpoint' => '/rpool', 'atime' => 'on' ) }
end


この場合、テスト対象の zfs である rpool に対して

zfs get -Hp -o property,value all rpool


を実行して、その結果を { 'property' => 'value' } な hash に詰めるので、

- have_property のように property の数だけ zfs command を叩かなくてよい
- rspec の hash 用 matcher が使える

といったあたりがメリット。

Referrer (Inside):
[2015-03-24-1] Serverspec で service の property のテストに its(:property) が使えるようになった

2014-08-04 Mon

ARC のサイズを動的に変更する はてぶ

Control the size of the ZFS ARC cache dynamically | @mzachh's Weblog
http://blog.zach.st/2014/08/02/control-the-size-of-the-zfs-arc-cache-dynamically.html

からメモ。あとで試す。

ZFS の ARC は未使用のメモリを使ってキャッシュをするが、
ARC が未使用のメモリを使い過ぎるとアプリケーションがメモリを要求した時に
ARC がメモリを開放するのを待たなくてはならない状況になり、
パフォーマンスが落ちる。

カーネルパラメータの zfs_arc_max で ARC が使うメモリの最大値を設定できていたが、
Oracle Solaris 11.2 で zfs_arc_max がなくなり user_reserve_hint_pct が用意された。

これを使って、ユーザが使うメモリを予約することで、
ARC が使うメモリの最大値を制御することが可能になるってことらしい。

My Oracle Support の
“Memory Management Between ZFS and Applications in Oracle Solaris 11.2 (Doc ID 1663862.1)”で
set_user_reserve.sh という名前のスクリプトが提供されていて、
これを使うと動的に ARC のサイズを変更することができるらしい。

Kernel zone を使うためには、このスクリプトで ARC のサイズを小さく
(メモリの予約を大きく)してもだめで、
結局、/etc/system か /etc/system.d 以下に適当なファイル(/etc/system.d/zfs_arc_max とか)を作って
以下のような内容を書く必要がある。

set zfs:zfs_arc_max = 8589934592


右辺の単位は bytes

(追記)

Kernel zone は連続したメモリ領域を必要とするらしく、
スクリプトで動的に user_reserve_hint_pct を変更しても、
連続したメモリ領域を確保できるとは限らないことが原因?

2014-08-03 Sun

ZnapZend はてぶ

ZnapZend - Multilevel Backup Tool for ZFS
http://www.znapzend.org/


ということで、ZnapZend という ZFS の backup tool があるらしいので、
時間ができたら試してみる。
Perl で書かれているので、コードを読むのもいいかもしれない。

作者の Tobi Oetiker さんは MRTG や RRDtool の人。

- oetiker/znapzend
  https://github.com/oetiker/znapzend/

ChangeLog 最新ページ