設定 - Snapper
概要
SUSE Linuxでは、SnapperとBtrfs(ファイルシステム)を組み合わせることで、スナップショットを作成できる。
- スナップショットとは、任意の時点でのサブボリューム(パーティション内に設定されたマウント可能なファイルシステム)の状態をコピーする機能である。
- Btrfsとは、Linux向けに作られた新しいコピーオンライト型のファイルシステムで、スナップショットに対応している。
- Snapperは、これらのスナップショットを管理するための機能を提供する。
SnapperはターミナルやYaSTから利用できる。
標準では、openSUSEでSnapperとBtrfsを設定すると、YaSTやzypperコマンドを利用したシステム変更の際に 取り消しツールとして機能する。
具体的に言うと、YaSTやzypperコマンドを実行する時、その前後でそれぞれスナップショットを作成する。
これにより、2つのスナップショットを比較して、システムに対して実施した変更を取り消すことができる。
また、このツールでは、システムのサブボリュームに対してスナップショットを作成することで、
システムのバックアップとしても利用できる機能が用意されている。
スナップショットの場所とディスク容量
スナップショットの保存場所
スナップショットは、採取元のパーティションやサブボリュームと同じ領域内に保存される。
異なるパーティションやサブボリュームに保存することはできない。
そのため、スナップショットを含むパーティションは、通常のパーティションに比べて大きく設定する必要がある。
具体的に必要となる容量は、 スナップショットの保持数やデータの修正頻度によって変わるが、通常のファイルシステムの2倍程度がよい。
空き容量 / ディスクの使用率
スナップショットを含むBtrfsのパーティションで空き容量を増やすには、ファイルを削除するのではなくスナップショットを削除する。
より古いスナップショットほど、より多くの領域を占有する。
また、Btrfsでは、dfコマンドは正しいディスク使用率を表示できないので、"btrfs filesystem df [マウントポイント]"を使用する。
スナップショットの管理
スナップショットの種類
Snapperでは、3種類のスナップショットが存在する。
それぞれ、事前(pre)と事後(post)、単一(Single)である。これらは物理的には同じものであるが、Snapper側では扱いが異なる。
事前(Pre)
ファイルシステムの変更前に作成したスナップショットで、事前スナップショットには、対応する事後スナップショットが存在する。
例 : YaSTやzypperを実行した場合の自動スナップショットで利用する。
事後(Post)
ファイルシステムの変更後に作成したスナップショットで、事後(post)スナップショットには、対応する事前スナップショットが存在する。
例 : YaSTやzypperを実行した場合の自動スナップショットで利用する。
単一(Single)
単独で作成したスナップショットで、スナップショットを作成する場合は、これが既定値である。
例 : 1時間ごとの定期スナップショット等で利用する。
スナップショットのメタデータ
スナップショットには、スナップショット本体とメタデータが含まれる。
Snapperを利用することで、メタデータを設定および修正することができる。
それぞれのスナップショットに対して設定可能なメタデータは、下記の通りである。
種類(Type)
スナップショットの種類を表す値である。(上記のスナップショットの種類を参照すること)
なお、このデータは変更できない。
番号(#)
スナップショットに対する独自の値である。
なお、このデータは変更できない。
前番号(前 #)
事後スナップショットにのみ設定される項目で、対応する事前スナップショットの番号を示す。
なお、このデータは変更できない。
説明(Description)
スナップショットに対する説明文である。
ユーザデータ(Userdata)
独自のデータを設定したり、カンマ区切りでキー=値のリスト形式を設定することができる拡張用項目である。
例 : reason=Reason_for_SanpShot, user=User_Name
クリーンアップアルゴリズム(Cleanup-Algorithm)
スナップショットに対するクリーンアップアルゴリズムである。
スナップショットの作成
スナップショットを作成するには、snapper createコマンドを実行する。
後からスナップショットの目的を確認できるようにするため、 -dオプションでわかりやすい説明を指定しておく。
# 説明付きの単一のスナップショット(Single)を作成する # スナップショットには任意のコメントを付加する snapper create -t single -d "<任意のコメント>"
# 説明付きの単一のスナップショット(Single)を、既定の設定(root)で作成する # クリーンアップアルゴリズムを指定していないため、このスナップショットは自動では削除されない snapper create -d [スナップショットの説明]
# 説明付きの単一のスナップショット(Single)を、独自の設定(home)で作成する # クリーンアップアルゴリズムを指定していないため、このスナップショットは自動では削除されない snapper -c home create -d [~スナップショットの説明]
# 説明付きの単一のスナップショット(Single)を、独自の設定(home)で作成する # スナップショットにはタイムライン(timeline)型のクリーンアップアルゴリズムを設定し、条件に合致した場合に自動で削除する snapper -c home create -d [スナップショットの説明] -c timeline
スナップショットの削除
スナップショットを削除するには、まずその番号を調べる。
番号を調べるには、snapper listコマンドで行う。番号が判明したら、snapper delete [番号]で削除を行う。
なお、事前スナップショットを削除する場合は、対応する事後スナップショットも併せて削除されることに注意する。
# 既定(root)の設定内にある番号65のスナップショットを削除する snapper delete 65
# homeという名前の設定内にある番号89、90の各スナップショットを削除する snapper -c home delete 89 90
スナップショットの作成と復元の例
- スナップショットの作成
- 事前スナップショットを作成する。
sudo snapper create --type pre --description "Before Install Application-Name"
- ソフトウェアをインストールする。
- 事後スナップショットを作成する。
sudo snapper create --type post --pre-number <事後スナップショットの番号> --description "After Install Apllication-Name"
- 事前スナップショットを作成する。
- スナップショットの復元
- 復元する事前および事後スナップショットの番号を表示する。
この例では、事前スナップショット番号を100、事後スナップショット番号を101とする。sudo snapper list -t pre-post
- または
sudo snapper list
- スナップショットで変更されたファイルのリストを取得するには、以下のコマンドを実行する。
内容が変更されたファイルはc、追加されたファイルは+、削除されたファイルは-が付加される。sudo snapper status 100..101
- 特定のファイルの差異を表示するには、以下のコマンドを実行する。
ディレクトリ名またはファイル名を指定しない場合は、全てのファイルの差異が表示される。sudo snapper diff 100..101 <ディレクトリ名またはファイル名>
- スナップショットを復元する。
ディレクトリ名またはファイル名を指定しない場合は、全てのファイルが復元される。sudo snapper -v undochange 100..101 <ディレクトリ名またはファイル名>
- 復元する事前および事後スナップショットの番号を表示する。
Snapperの無効化
インストール時にルートパーティションをBtrfsに設定すると、Snapperは自動的にシステムに対する毎時スナップショットを作成するほか、
YaSTやzypperの処理の前後でそれぞれ事前と事後のスナップショットを作成する。
それぞれの処理は、下記の手順で無効化することができる。
# 毎時スナップショットの無効化 sudo vi /etc/snapper/configs/root TIMELINE_CREATE="no"
# zypper でのスナップショットの無効化 sudo zypper remove snapper-zypp-plugin
# YaSTでのスナップショットの無効化 sudo vi /etc/sysconfig/yast2 USE_SNAPPER="no"