2014年 12月 01日
SLES12 の Snapper のチューニング
本家
http://snapper.io/manpages/snapper-configs.html
snapper の設定ファイルは
~# snapper -c MyConfig-file create-config /My-Mount-Point
で /etc/snapper/configs/ に My-Config-file として作られます。この内容を snapper の本家マニュアルを参考に SLES12 でどの様にチューニングされているか、あるいはチューニングするかを見てみましょう。
sles12:/etc/snapper/configs # cat myconfig
# subvolume to snapshot
SUBVOLUME="/btrfs"
※SnapShot を取るサブボリューム名、
ここでは /btrfs というディレクトリ(パーティション)を指定しています。btrfs では、パーティション内に subvolume という擬似的なパーティションを作成する事ができます。
例えば / (ルート)を btrfs にした場合、yast > Partitioner の中に btrfs の Subvolume Handling という項目があり、ここで擬似的なパーティションとして、 / (root) 全体のスナップショットを取らないように設定されています。

仮に / に含まれる /srv をリストアターゲットとして選ぶ場合でも、擬似的なパーティションなので、/srv/ftp や /srv/www を個別に選択して特定できるということです。
# filesystem type
FSTYPE="btrfs"
※ ファイルシステムの定義ですね
# users and groups allowed to work with config
ALLOW_USERS=""
ALLOW_GROUPS=""
※ Snapper を利用許可するユーザ名/グループ名、スペースで区切りを入れます。root は常時許可されています。あまり使う事はないのでしょうが、 root ユーザと、あるスキルレベル以上のユーザに snap shot を使わせる場合に設定する事になるでしょう。
# sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots
# directory
SYNC_ACL="no"
※ ACL で.snapper にアクセス許可するかどうか。つまりデフォルトでは root 以外は snapper が利用できません。
# start comparing pre- and post-snapshot in background after creating
# post-snapshot
BACKGROUND_COMPARISON="yes"
※ SnapShot を作った後、圧縮するかどうか、デフォルトで Yes
# run daily number cleanup
NUMBER_CLEANUP="yes"
※ Cleanup アルゴリズムを動かすかどうかの指定、本家 snapper では "no" だが SLES12 では "yes" が指定されています。
# limit for number cleanup
NUMBER_MIN_AGE="1800"
NUMBER_LIMIT="50"
NUMBER_LIMIT_IMPORTANT="10"
※クリーンアップを行う間隔 1800 分(30時間ごと)に最低50までの若いスナップショットをとる。User Data が "yes" に指定されている重要なスナップショットは10個まで保存します。
SLES12 では yast > Snapper > "Select Snapshot" > Modify の中にこのパラメータ(らしき?)ものがありました。
http://doc.opensuse.org/products/draft/SLES/SLES-admin_sd_draft/cha.snapper.html#sec.snapper.manage
によると User data のフィールドに(,)カンマで複数のパラメータを設定できるようです。本家のドキュメントによると important=yes を指定するとこのフラグの付いた一番若いスナップショットが維持されます。

# create hourly snapshots
TIMELINE_CREATE="yes"
※ 一時間置きの定時スナップショットを取るかの指定、本家では"no" SLES12 では Yes に設定。
# cleanup hourly snapshots after some time
TIMELINE_CLEANUP="yes"
# limits for timeline cleanup
TIMELINE_MIN_AGE="1800"
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_DAILY="10"
TIMELINE_LIMIT_MONTHLY="10"
TIMELINE_LIMIT_YEARLY="10"
※ Time Line Clean up を行うかどうか、本家では "no", SLES12 では Yes, 最小時間は 1800 分(30時間)、1時間、一日、1か月、1年で最小でも取るべきスナップショットの数を10としています。
# cleanup empty pre-post-pairs
EMPTY_PRE_POST_CLEANUP="yes"
※ 何も変更がなかったスナップショットの善後をクリーンアップするかどうか、本家での設定は "no", SLES12 では "yes"
# limits for empty pre-post-pair cleanup
EMPTY_PRE_POST_MIN_AGE="1800"
sles12:/etc/snapper/configs #
ということで、本家で使用している snapper のデフォルト設定は積極的に「使わない」方向で設定されています。 SLES12 では積極的に「使って」クリーンアップを自動で行うというチューニングがおこなわれているようです。
デフォルトで利用しても SLES12 では、snpapper で create-config を行った後、あえて変更すべき点もなさそうです。勿論、btrfs で snapper を使った場合、ディスク容量がパンパンになるまでスナップショットを取りますし、ファイルを削除しても snapper で簡単にロールバックできるという点も、運用ポリシーで管理しなければならないでしょう。
特に snapper の様々なドキュメントを見る限り、ファイルを削除せず「古いスナップショットを消してディスクを空ける」というのが定説のようです。
誤訳や誤解している部分がありましたら、コメントください。
islandcenter.jp
-Keyword-
SUSE Linux Enterprise Server 12 SLES12 btrfs snapper スナップショット チューニング