Hatena::ブログ(Diary)

富士山は世界遺産 このページをアンテナに追加 RSSフィード Twitter

2009-10-08

ZFSのスナップショットの領域(削除時の解放領域の見積)

メーローが上空を通過しておりますが。(関係ない

ZFSスナップショットはLVMとは違い、事実上無制限に取得することができます。

ZFSスナップショットの概要 - http://docs.sun.com/app/docs/doc/819-6260/gbciq?l=Ja&a=view

しかし、空き領域の消費のされ方がイマイチ不明で、それによって現在の消費済みの領域や、スナップショット削除時に解放される領域の見積がわからず、意外にコントロールしづらいです。

操作テストも兼ねていろいろ試してみました。

結論

現在の消費済み領域は、スナップショットでない行のUSED列です = スナップショットで無い行のAVAIL列の値が、残りサイズになります。これはスナップショット有無は関係ありません。監視するなら、この値を監視しましょう。

また、スナップショット削除時に解放されるサイズは、スナップショット行のUSED列です。(のようです。)

ちなみにスナップショットか否かを判断する簡単な方法は、NAME列に"@"が入っていればスナップショットです。

のようです = REFER列がどのように影響しているのかわからないので、もしかすると違うかも。たぶん読み方/計算方法はあるのだと思いますが、、、わからん orz

論より実行

テスト用のデータを用意
sol10# mkdir /tmp/split_file
sol10# cd /tmp/split_file
sol10# cat /dev/urandom | split -b 100m -a 1 - ""
### 30秒ほど待ってから Ctrl+C
sol10# ls -lFh
total 400M
-rw-r--r-- 1 root root 100M 2009-07-02 16:40 a
-rw-r--r-- 1 root root 100M 2009-07-02 16:40 b
-rw-r--r-- 1 root root 100M 2009-07-02 16:40 c
-rw-r--r-- 1 root root 100M 2009-07-02 16:40 d

(余分なファイルは削除したよ)

ZFSボリューム作成
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.3G   846G     9%  ONLINE  -
sol10# zfs create rpool/sn_test
sol10# zfs list -r rpool/sn_test
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test    18K   827G    18K  /rpool/sn_test
新規ファイルを追加
sol10# cd /rpool/sn_test/
sol10# cp /tmp/split_file/a ./
sol10# ls -lFh
total 101M
-rw-r--r-- 1 root root 100M 2009-07-02 16:43 a
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.4G   846G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test   100M   827G   100M  /rpool/sn_test
snapshotを作成
sol10# zfs snapshot rpool/sn_test@0
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.4G   846G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     100M   827G   100M  /rpool/sn_test
rpool/sn_test@0      0      -   100M  -
新規ファイルを追加
sol10# cp /tmp/split_file/b ./
sol10# ls -lFh
total 201M
-rw-r--r-- 1 root root 100M 2009-07-02 16:43 a
-rw-r--r-- 1 root root 100M 2009-07-02 16:47 b
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.5G   845G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     200M   827G   200M  /rpool/sn_test
rpool/sn_test@0    17K      -   100M  -
snapshotを作成
sol10# zfs snapshot rpool/sn_test@1
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.5G   845G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     200M   827G   200M  /rpool/sn_test
rpool/sn_test@0    17K      -   100M  -
rpool/sn_test@1      0      -   200M  -
aをまるまる更新
sol10# cp /tmp/split_file/c ./a
sol10# ls -lFh
total 201M
-rw-r--r-- 1 root root 100M 2009-07-02 16:50 a
-rw-r--r-- 1 root root 100M 2009-07-02 16:47 b
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.6G   845G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     300M   827G   200M  /rpool/sn_test
rpool/sn_test@0    17K      -   100M  -
rpool/sn_test@1    16K      -   200M  -
snapshotを作成
sol10# zfs snapshot rpool/sn_test@2
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.6G   845G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     300M   827G   200M  /rpool/sn_test
rpool/sn_test@0    17K      -   100M  -
rpool/sn_test@1    16K      -   200M  -
rpool/sn_test@2      0      -   200M  -
aをもう一回まるまる更新
sol10# cp /tmp/split_file/d ./a
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.7G   845G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     400M   827G   200M  /rpool/sn_test
rpool/sn_test@0    17K      -   100M  -
rpool/sn_test@1    16K      -   200M  -
rpool/sn_test@2   100M      -   200M  -
snapshotを作成
sol10# zfs snapshot rpool/sn_test@3
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.7G   845G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     400M   827G   200M  /rpool/sn_test
rpool/sn_test@0    17K      -   100M  -
rpool/sn_test@1    16K      -   200M  -
rpool/sn_test@2   100M      -   200M  -
rpool/sn_test@3      0      -   200M  -
a、bを削除
sol10# rm a b
sol10# ls -lFh
total 0
sol10# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool   931G  85.7G   845G     9%  ONLINE  -
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     400M   827G    18K  /rpool/sn_test
rpool/sn_test@0    17K      -   100M  -
rpool/sn_test@1    16K      -   200M  -
rpool/sn_test@2   100M      -   200M  -
rpool/sn_test@3   100M      -   200M  -
snapshotを削除していってみる
sol10# zfs destroy rpool/sn_test@2
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     300M   827G    18K  /rpool/sn_test
rpool/sn_test@0    17K      -   100M  -
rpool/sn_test@1    16K      -   200M  -
rpool/sn_test@3   100M      -   200M  -
sol10# zfs destroy rpool/sn_test@1
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     300M   827G    18K  /rpool/sn_test
rpool/sn_test@0   100M      -   100M  -
rpool/sn_test@3   200M      -   200M  -
sol10# zfs destroy rpool/sn_test@0
sol10# zfs list -r rpool/sn_test
NAME              USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test     200M   827G    18K  /rpool/sn_test
rpool/sn_test@3   200M      -   200M  -
sol10# zfs list -r rpool/sn_test
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool/sn_test    18K   827G    18K  /rpool/sn_test

途中のスナップショット(例だと@2)から削除できるんですね。これは便利かもしれません。たとえば、毎日取得していたが、月が変わったので月初のデータだけで良い、なんて時には、使える機能です。

以上、試してみましたが、REFER列の意味がやっぱりわかりません。

REFERの読み方、知っている方、教えてください。ノシ

blattblatt 2009/10/09 00:46 通りすがりのものです。気になったのでマニュアル(ZFS管理ガイド)見ていました。P.221あたりにちょろっと載っているみたいです。スナップショット作成時にはファイルシステムと領域を共有する、でファイル変更したりすると当然共有できない部分が増えていくので、参照量(REFERenced)は減っていくということだと思います。つまりファイルシステムから参照されているデータ量かと。
※適当に斜め読みしかしていないですし、中身に詳しいわけでもないのでご自身で再度確認していただいた方がいいですよ。

fujisan3776fujisan3776 2009/10/09 13:12 > blattさん
ありがとうございます! http://docs.sun.com/app/docs/doc/819-6260/gbciq?a=view の「スナップショットの領域の計上」のところですね。言われてみると、確かにそのような増減をしています。REFERを中心とした実験をやってみようと思います。

blattblatt 2009/10/12 01:05 もしご負担でなければまた公開して下さいませ。Google Readerでwatchしております。
それにしてもChromeパーティー楽しそうだ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/fujisan3776/20091008/1254968406