第4章 snapper を利用したスナップショット採取と巻き戻し

目次

4.1. 要件
4.2. Snapper による YaST や zypper が実施した変更の取り消し
4.3. Snapper による定期バックアップからのファイル復旧
4.4. スナップショットの管理
4.5. Snapper の無効化
4.6. Snapper の設定作成
4.7. 制限事項
4.8. よくある質問

概要

Linux でファイルシステムのスナップショットを採取し、後からその時点に巻き戻し (ロールバック) できるようにする機能は、以前から必要とされてきた機能でした。 現在は Snapper と Btrfs ファイルシステムを組み合わせる ことで、それを実現しています。

Btrfs は、 Linux 向けに作られた新しいコピーオンライト型の ファイルシステムで、ファイルシステムのスナップショット (特定の時点でのサブ ボリューム (物理的なパーティション内に設定された、 1 つまたは複数のマウント 可能なファイルシステム) の状態をコピーしておく機能) に対応しています。 Snapper はこれらのスナップショットを管理するための機能を提供します。 Snapper はコマンドラインから利用できるほか、 YaST のインターフェイスから 利用することもできます。

既定では、 openSUSE で Snapper と Btrfs を設定すると、 YaST や zypper を利用したシステム変更の際に 取り消しツール として機能します。具体的に言えば、 YaST モジュールや zypper を実行した場合、 その前後でそれぞれスナップショットを採取します。これにより、 2 つのスナップ ショットを比較し、システムに対して実施した変更を取り消すことができるように なります。また、このツールではシステムのサブボリュームに対して、毎時の スナップショットを作成することで、システムのバックアップとしても利用できる 機能が用意されています。

4.1. 要件

openSUSE では Btrfs がスナップショットに対応した 唯一のファイルシステムであるため、 スナップショット機能 を 利用したい全てのパーティションやサブボリュームに対して、このファイルシステムを 使用する必要があります。

4.1.1. スナップショットとディスク領域

スナップショットを作成すると、スナップショットとスナップショット元のファイルは、 いずれもファイルシステム内の同じ場所を指し示します。そのため、 スナップショットを採取してすぐの状態では、余分のディスク領域を必要とすることは ありません。ファイルシステム内の元のファイルに対して変更が行なわれると、 変更された部分のデータブロックが異なる場所にコピーされ、元のデータブロックは スナップショット用に保存されます。このような仕組みであるため、時間が経過する につれて、スナップショットの領域は大きくなっていきます。また、このような 仕組みから、スナップショットを含む Btrfs ファイルシステム でファイルを削除しても、 空き容量が増えない 場合が あります。

[Note]スナップショットの場所

スナップショットは、採取元のパーティションやサブボリュームと同じ領域内に 保存されます。異なるパーティションやサブボリュームに保存することはできません。

そのため、スナップショットを含むパーティションは、 通常の パーティションに比べ、大きく設定する必要があります。具体的に必要となる容量は、 スナップショットの保持数やデータの修正頻度によって変わります。一般的には、 通常のファイルシステムの約 2 倍程度を設定してください。

[Tip]空き容量/ディスクの使用率

スナップショットを含む Btrfs のパーティションで 空き容量を増やすには、ファイルを削除するのではなくスナップショットを 削除してください。より古いスナップショットほど、より多くの領域を 占有します。

また、 Btrfs ファイルシステムでは、 df コマンドは正しいディスク使用率を表示できません。 代わりに btrfs filesystem df マウントポイント を使用して、使用率を 確認してください。なお、 Btrfs の各種ツールでは、 スナップショットがどれだけの容量を占有しているのかを調べることは できません。

4.2. Snapper による YaST や zypper が実施した変更の取り消し

インストール時にルートパーティションを Btrfs に設定する と、 YaST や zypper の変更点を取り消すことができるツール Snapper が 自動的にインストールおよび設定されます。これにより、 YaST のモジュールや zypper のトランザクションが始まると、 事前スナップショット としてモジュールの起動前の状態を、 事後スナップショット としてモジュール完了後の状態をそれぞれ採取します。

YaST の Snapper モジュールや snapper コマンドライン ツールを使用することで、 YaST や zypper が実施した変更を取り消し、 事前スナップショット のファイル状態に戻すことができます。 また、 2 つのスナップショットを比較することで、どのファイルが変更された のかを調べることもできるほか、それらのファイルの違いを表示する (diff) こともできます。

なお、 Linux はマルチタスク型のシステムであるため、事前および事後の スナップショットに YaST や zypper が実施したもの以外の変更が混入する 場合があります。このような場合、事前のスナップショットに戻してしまうと、 他のプロセスが実施した変更点までも元に戻すことになってしまいます。 多くの場合、これは期待どおりの動作ではありません。そのため、巻き戻し (ロールバック) を実施する場合は、あらかじめ 2 つのスナップショット間での 変更をよくご確認ください。もしも予想外の変更点が存在した場合は、巻き戻す ファイルを選択して実施してください。

[Important]制限事項

ロールバックの仕組みを導入する前に、 Snapper の制限事項をご確認ください。 詳しくは 4.7項 「制限事項」 をお読みください。

[Note]スナップショットの保持数について

既定では、 YaST と zypper のスナップショットは最大 100 個までを保持する 設定になっています。この数量を超えてスナップショットが作成されると、 古いスナップショットから順に削除されます。

手順4.1 YaST Snapper モジュールによる変更点の取り消し

  1. YaST を起動し、 その他 のセクション内にある Snapper モジュールを起動するか、もしくは yast2 snapper と入力します。

  2. まずは 現在の設定root に なっていることを確認します。これは Snapper を手作業で設定した場合を 除いて、常に設定しておくべき項目です。

  3. 一覧から事前と事後の各スナップショットを選択します。 YaST と zypper のスナップショット対の両方が 事前および事後 として 表示されます。 YaST のスナップショットには 説明 内に yast モジュール名 と書かれるほか、 zypper のスナップショットは zypp (zypper) と 書かれます。

  4. 2 つのスナップショットの間で差異のあるファイルを一覧表示するには、 変更点の表示 を押します。下記の図では、ユーザ tester を追加した後の ファイル変更を示しています。

  5. ファイルの一覧を確認した後、特定のファイルについて前後の 差分 を表示するには、一覧からファイルを選択します。 下記の図では、ユーザ tester を追加した後の /etc/passwd の変更を表示しています。

  6. ファイルを復元したい場合は、まずファイルやディレクトリの左側に表示された チェックボックスにチェックを入れます。あとは 選択したものを復元 を押して確認メッセージに はい と答えると、ファイルを復元することができます。

    ファイルを 1 つだけ復元したい場合は、対象となるファイルをマウスで選択 し、差分を表示します。あとは 最初から復元する を 押して確認メッセージに はい と答えると、ファイルを 復元することができます。

手順4.2 snapper コマンドによる変更点の取り消し

  1. snapper list -t pre-post を実行する ことで、 YaST や zypper の作成したスナップショットを一覧表示することが できます。 YaST のスナップショットには Description column 内に yast モジュール名 と書かれるほか、 zypper のスナップショットは zypp (zypper) と 書かれます。

    ~ # snapper list -t pre-post
    前 # | 後 # | 前日付                      | 後日付                      | 説明
    -----+------+-----------------------------+-----------------------------+----------------------+
    4    | 5    | 2012年01月10日 14時39分14秒 | 2012年01月10日 14時39分33秒 | yast system_settings
    65   | 66   | 2012年01月12日 17時18分10秒 | 2012年01月12日 17時18分23秒 | zypp(zypper)
    68   | 69   | 2012年01月12日 17時25分46秒 | 2012年01月12日 17時27分09秒 | zypp(zypper)
    73   | 74   | 2012年01月12日 17時32分55秒 | 2012年01月12日 17時33分13秒 | yast system_settings
    75   | 76   | 2012年01月12日 17時33分56秒 | 2012年01月12日 17時34分42秒 | yast users
    77   | 92   | 2012年01月12日 17時38分36秒 | 2012年01月12日 23時13分13秒 | yast snapper
    83   | 84   | 2012年01月12日 22時10分33秒 | 2012年01月12日 22時10分39秒 | zypp(zypper)
    85   | 86   | 2012年01月12日 22時16分58秒 | 2012年01月12日 22時17分09秒 | zypp(zypper)
    88   | 89   | 2012年01月12日 23時10分42秒 | 2012年01月12日 23時10分46秒 | zypp(zypper)
    90   | 91   | 2012年01月12日 23時11分40秒 | 2012年01月12日 23時11分42秒 | zypp(zypper)
    108  | 109  | 2012年01月13日 13時01分06秒 | 2012年01月13日 13時01分10秒 | zypp(zypper)
    
  2. スナップショットの対の間で、変更されたファイルの一覧を取得するには、 snapper status 事前#..事後# を実行します。それぞれ内容が変更されたファイルには c のマークが、追加されたファイルには + のマークが、 削除されたファイルには - のマークが表示されます。 下記の例では、 ncftp パッケージをインストールした場合の、スナップショット対の例を示しています。

    ~ # snapper status 108..109
    +... /usr/bin/ncftp
    +... /usr/bin/ncftpbatch
    +... /usr/bin/ncftpget
    +... /usr/bin/ncftpls
    [...]
    +... /usr/share/man/man1/ncftpspooler.1.gz
    c... /var/cache/zypp/solv/@System/cookie
    c... /var/cache/zypp/solv/@System/solv
    c... /var/lib/rpm/Basenames
    c... /var/lib/rpm/Dirnames
    c... /var/lib/rpm/Filemd5s
    c... /var/lib/rpm/Group
    c... /var/lib/rpm/Installtid
    c... /var/lib/rpm/Name
    c... /var/lib/rpm/Packages
    c... /var/lib/rpm/Providename
    c... /var/lib/rpm/Provideversion
    c... /var/lib/rpm/Requirename
    c... /var/lib/rpm/Requireversion
    c... /var/lib/rpm/Sha1header
    c... /var/lib/rpm/Sigmd5
    c... /var/lib/zypp/SoftLocks
  3. 特定のファイルに対して差分を表示するには、 snapper diff 事前#..事後# ファイル名 を実行します。 ファイル名 を指定しない場合は、すべての ファイルに対する差分が表示されます。

    ~ # snapper diff 108..109 /var/lib/zypp/SoftLocks
    --- /.snapshots/108/snapshot/var/lib/zypp/SoftLocks	2012-01-12 23:15:22.408009164 +0100
    +++ /.snapshots/109/snapshot/var/lib/zypp/SoftLocks	2012-01-13 13:01:08.724009131 +0100
    @@ -1,4 +1,2 @@
    -# zypp::SoftLocksFile generated Thu Jan 12 23:10:46 2012
    -#
    -ncftp
    -#
    +# zypp::SoftLocksFile generated Fri Jan 13 13:01:08 2012
    +##
  4. 1 つまたは複数のファイルを復元するには、 snapper -v undochange 事前#..事後# ファイル名 (複数可) を実行します。 ファイル名 (複数可) を指定しない場合は、 変更されたすべてのファイルが復元されます。

    ~ # snapper -v undochange 108..109
    create:0 modify:16 delete:21
    undoing change...
    deleting /usr/share/man/man1/ncftpspooler.1.gz
    deleting /usr/share/man/man1/ncftpput.1.gz
    [...]
    deleting /usr/bin/ncftpls
    deleting /usr/bin/ncftpget
    deleting /usr/bin/ncftpbatch
    deleting /usr/bin/ncftp
    modifying /var/cache/zypp/solv/@System/cookie
    modifying /var/cache/zypp/solv/@System/solv
    modifying /var/lib/rpm/Basenames
    modifying /var/lib/rpm/Dirnames
    modifying /var/lib/rpm/Filemd5s
    modifying /var/lib/rpm/Group
    modifying /var/lib/rpm/Installtid
    modifying /var/lib/rpm/Name
    modifying /var/lib/rpm/Packages
    modifying /var/lib/rpm/Providename
    modifying /var/lib/rpm/Provideversion
    modifying /var/lib/rpm/Requirename
    modifying /var/lib/rpm/Requireversion
    modifying /var/lib/rpm/Sha1header
    modifying /var/lib/rpm/Sigmd5
    modifying /var/lib/zypp/SoftLocks
    undoing change done

4.3. Snapper による定期バックアップからのファイル復旧

YaST や zypper のスナップショット以外にも、 Snapper ではシステムの パーティション (/) に対して毎時スナップショットを 採取します。これらバックアップ用のスナップショットを利用することで、 不用意に削除してしまったり、書き換えてしまったりしたファイルを復元する ことができます。 Snapper の差分抽出機能を併用することで、ある時点で どのファイルが書き換えられたのかを知ることも可能です。

1 時間ごとのバックアップスナップショットは、 単一 (Single) というタイプで採取され、 timeline という説明文が 設定されます。これらのスナップショットからファイルを復元したい場合は、 手順4.1「YaST Snapper モジュールによる変更点の取り消し」手順4.2「snapper コマンドによる変更点の取り消し」 の手順に従ってください。

[Note]スナップショットの保持数について

既定では、もっとも新しい 10 個までのスナップショットが毎日保存され、 さらに 10 日、 10 ヶ月、 10 年分のスナップショットがそれぞれ最大 10 個 保存されます。詳しくは 例4.1「タイムラインの設定例」 をお読みください。

4.4. スナップショットの管理

Snapper はスナップショットの作成や削除を行なうだけのものではありません。 Snapper はメタデータの設定や修正も行なうことができます。 Snapper での すべての制御は設定ファイルを通して行ないます。設定ファイルを指定しない 場合は、既定値 (root) が使用されます。独自の設定で スナップショットを管理したい場合 (詳しくは 4.6項 「Snapper の設定作成」 をお読みください) は、 snapper のグローバルオプション -c を利用して指定します:

snapper -c myconfig list

snapper について、さらに詳しく知るには、マニュアル ページ (man 1 snapper) をお読みください。

4.4.1. スナップショットのメタデータ

それぞれのスナップショットには、スナップショット本体とメタデータが 含まれています。 Snapper を利用することで、メタデータを設定したり 修正したりすることができます。それぞれのスナップショットに対して 設定可能なメタデータは、下記のとおりです:

  • 種類 (Type): スナップショットの種類 を表す値です。詳しくは 4.4.1.1項 「スナップショットの種類」 をお読みください。なお、このデータは変更できません。

  • 番号 (#): スナップショットに対する 独自の値です。なお、このデータは変更できません。

  • 前番号 (前 #): 事後スナップショットに のみ設定される項目で、対応する事前スナップショットの番号を示します。 このデータは変更できません。

  • 説明 (Description): スナップショットに 対する説明文です。

  • ユーザデータ (Userdata): 全く独自の データを設定したり、カンマ区切りでキー=値のリスト形式を設定したりする ことができる、拡張用項目です。たとえば下記のような値を設定します: reason=testing_stuff, user=tux

  • クリーンアップアルゴリズム (Cleanup-Algorithm): スナップショットに対するクリーンアップアルゴリズムです。

4.4.1.1. スナップショットの種類

Snapper では 3 種類のスナップショットが存在します。それぞれ事前 (pre) と 事後 (post), および単一 (Single) です。これらは物理的には同じものですが、 Snapper 側では扱いが異なります。

事前 (pre)

ファイルシステムの 変更前 に採取した スナップショットです。それぞれの 事前 (pre) スナップショットには、対応する 事後 (post) スナップショットが存在します。これは例えば、 YaST や zypper を 実行した場合の自動スナップショットで利用します。

事後 (post)

ファイルシステムの 変更後 に採取した スナップショットです。それぞれの 事後 (post) スナップショットには、対応する 事前 (pre) スナップショットが存在します。これは例えば、 YaST や zypper を 実行した場合の自動スナップショットで利用します。

単一 (single)

単独で採取したスナップショットです。 1 時間ごとの定期スナップショット などで利用します。スナップショットを作成する場合、これが既定値です。

4.4.1.2. クリーンアップアルゴリズム

Snapper では、古いスナップショットを削除するクリーンアップアルゴリズム として、 3 種類のものを用意しています。このアルゴリズムはそれぞれ日次の cron ジョブとして実行します。クリーンアップの頻度そのものは、 パーティションごとまたはサブボリュームごとに、 Snapper の設定ファイルで 設定します (詳しくは 4.6.1項 「設定ファイルの調整」 を お読みください) 。

番号 (number)

ある一定のスナップショット数を超過した場合に、削除を行ないます。

タイムライン (timeline)

ある一定の時間を経過した場合に削除を行ないますが、時単位/日単位/ 月単位/年単位のスナップショットは残しておきます。

empty-pre-post

差分が何もない場合に、事前/事後のスナップショット対を削除します。

4.4.2. スナップショットの作成

スナップショットを作成するには、 snapper create コマンド を実行します。あとからスナップショットの目的を確認できるようにするため、 -d でわかりやすい説明を指定しておくことをお勧めします。

snapper create -d "Apache の設定整理前"

説明文付きの単独のスナップショット (Single タイプ) を、既定の設定 (root) で作成します。クリーンアップアルゴリズムを 指定していないため、このスナップショットは自動では削除されません。

snapper -c home create -d "~tux 内のファイル整理"

説明文付きの単独のスナップショット (Single タイプ) を、独自の設定 home で作成します。クリーンアップアルゴリズムを 指定していないため、このスナップショットは自動では削除されません。

snapper -c home create -d "日々の HOME バックアップ" -c timeline

説明文付きの単独のスナップショット (Single タイプ) を、独自の設定 home で作成します。スナップショットにはタイムライン (timeline) 型のクリーンアップアルゴリズムを設定し、条件に合致した 場合に自動で削除するようにしています。

4.4.3. スナップショットのメタデータ修正

Snapper ではスナップショットの説明文やクリーンアップアルゴリズム、そして ユーザデータをそれぞれ修正することができます。それ以外のメタデータは、 変更することはできません。

snapper modify -c "timeline" 10

既定 (root) の設定内にある番号 10 のスナップショット に対して、メタデータの修正を行ないます。クリーンアップアルゴリズムを timeline に設定する修正です。

snapper -c home modify -d "日々の バックアップ" -c "" 120

home という名称の設定内にある番号 120 の スナップショットに対して、メタデータの修正を行ないます。新しい説明文を 設定し、クリーンアップアルゴリズムを無しに設定する修正です。

4.4.4. スナップショットの削除

スナップショットを削除するには、まずその番号を知らなければなりません。 番号を調べるには、 snapper list コマンドで行ないます。 番号が判明したら、 snapper delete 番号 で削除を行ないます。なお、 事前 (pre) スナップショットを 削除する場合、対応する 事後 (post) スナップショットも あわせて削除されることに注意してください (逆も同様です)。

snapper delete 65

既定 (root) の設定内にある番号 65 のスナップショットを 削除します。

snapper -c home delete 89 90

home という名称の設定内にある番号 89, 90 の各 スナップショットを削除します。

snapper delete 65
snapper -c myconfig delete 89 90
[Tip]スナップショットによるディスク容量の圧迫について

お使いのハードディスクの空き容量を増やす目的で、スナップショットを削除する 場合 (詳しくは 4.1.1項 「スナップショットとディスク領域」 をお読み ください) 、古いスナップショットから先に削除することをお勧めします。これは、 古いスナップショットほどより大きい容量を占有するためです。

スナップショットは日々の cron ジョブでも自動的に削除されます。詳しくは 4.4.1.2項 「クリーンアップアルゴリズム」 をお読みください。

4.5. Snapper の無効化

インストール時にルートパーティションを Btrfs に設定すると、 Snapper は自動的にシステムに対する毎時スナップショットを作成するほか、 YaST や zypper の処理の前後でそれぞれ事前と事後のスナップショットを採取 します。それぞれの処理は、下記の手順で無効化することができます:

毎時スナップショットの無効化

/etc/snapper/configs/root ファイルを編集し、 TIMELINE_CREATEno に設定します:

TIMELINE_CREATE="no"
zypper でのスナップショットの無効化

snapper-zypp-plugin パッケージをアンインストールします。

YaST でのスナップショットの無効化

/etc/sysconfig/yast2 ファイルを編集し、 USE_SNAPPERno に設定します:

USE_SNAPPER="no"

4.6. Snapper の設定作成

Snapper の動作は、パーティションや Btrfs のサブボリューム 単位に、設定ファイルで設定することができます。これらの設定ファイルは、 /etc/snapper/configs/ 内に配置します。なお、 Snapper を インストールすると、 / ディレクトリに対して既定で 用意される設定が root です。これは YaST や zypper の スナップショットを作成し管理するほか、 / ディレクトリに 対する毎時のバックアップスナップショットも作成します。

Btrfs でフォーマットされた他のパーティションや、 Btrfs パーティション内の既存のサブボリュームに対して、 それぞれ独自の設定ファイルを作成することができます。下記の例では、 /srv/www にマウントされた Btrfs のファイルシステムに対して、 Web サーバデータのバックアップ用に Snapper の 設定を作成しています。

これらのスナップショットからファイルを復元する場合は、 snapper コマンドから行なうことができるほか、 YaST Snapper モジュールを利用することもできます。 YaST の場合は、 現在の設定 で設定を選択する必要がありますし、 snapper であれば -c で設定を指定する必要があります (例: snapper -c myconfig list) 。

新しい Snapper 設定を作成するには、 snapper create-config を実行します:

snapper -c www-data1 create-config
   /srv/www2

1

設定ファイルの名前を指定します。

2

スナップショットを採取する対象のパーティションのマウントポイント、 もしくは Btrfs サブボリュームを指定します。

このコマンドを実行すると、 /etc/snapper/config-templates/www-data というファイル名の 新しい設定ファイルが作成され、 /etc/snapper/config-templates/default 内に書かれた各既定値が 書き込まれます。

[Tip]既定値について

既定値は /etc/snapper/config-templates/default を参照して 利用します。既定値を修正したい場合は、同じディレクトリ内に上記のファイルの コピーを作成し、必要に応じて設定を修正してください。この新しい既定値を使用する には、 create-config コマンドで -t オプションを指定します:

snapper -c www-data create-config -t my_defaults /srv/www

4.6.1. 設定ファイルの調整

設定ファイルを調整するには、エディタを利用して行ないます。設定項目はそれぞれ キー= の形式で記述し、 のほうを修正して調整します。

SUBVOLUME

スナップショットを採取するパーティションやサブボリュームの、マウントポイントを 指定します。変更しないでください。

FSTYPE

パーティションのファイルシステムを指定します。変更しないでください。

NUMBER_CLEANUP

NUMBER_LIMIT で指定したスナップショット数を超過し、 かつ NUMBER_MIN_AGE で指定した 時間を超えた古いスナップショットを、自動的に削除するかどうかを指定します。 yes (はい) または no (いいえ) で指定します。

[Note]制限と世代

NUMBER_LIMITNUMBER_MIN_AGE の設定は、常に両方が判断基準となります。言い換えれば、 両方の 条件に合致した場合にのみ、削除されます。時間に関係なく一定の数のスナップショット を保持しておきたい場合は、 NUMBER_MIN_AGE0 に設定してください。一方、特定の時間を超えたスナップショットを必ず削除して おきたい場合は、 NUMBER_LIMIT0 に設定してください。

NUMBER_LIMIT

NUMBER_CLEANUPyes に設定されている場合、 保持するスナップショット数を指定します。

NUMBER_MIN_AGE

スナップショットを自動削除する際の時間を秒単位で指定します。この秒数を超えた スナップショットだけが、自動削除の対象となります。

TIMELINE_CREATE

yes (はい) に設定すると、 1 時間ごとの定期スナップショットを 作成します。現時点では、これがスナップショットを自動作成するための唯一の 方法があるため、 yes を設定しておくことを強くお勧めします。 yes (はい) または no (いいえ) で指定します。

TIMELINE_CLEANUP

TIMELINE_LIMIT_* で指定した 数以上であり、 かつ TIMELINE_MIN_AGE で指定した時間を超えたスナップショットを、自動的に削除するかどうかを指定します。 yes (はい) または no (いいえ) で指定します。

TIMELINE_MIN_AGE

スナップショットを自動削除する際の時間を秒単位で指定します。この秒数を超えた スナップショットだけが、自動削除の対象となります。

TIMELINE_LIMIT_HOURLY, TIMELINE_LIMIT_DAILY, TIMELINE_LIMIT_MONTHLY, TIMELINE_LIMIT_YEARLY

それぞれ時間単位、日単位、月単位、年単位に、保持しておくべきスナップショット数を 指定します。

例4.1 タイムラインの設定例

TIMELINE_CREATE="yes"
TIMELINE_CLEANUP="yes"
TIMELINE_MIN_AGE="1800"
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_DAILY="10"
TIMELINE_LIMIT_MONTHLY="10"
TIMELINE_LIMIT_YEARLY="10"
       

この例では、 1 時間ごとの定期スナップショットを自動的に削除します。 TIMELINE_MIN_AGETIMELINE_LIMIT_* は 常に両方とも評価されます。この例では、 30 分 (1800 秒) を経過したものが 自動削除の対象となるため、常に新しいものだけが残る形になっています。 また、 TIMELINE_LIMIT_DAILY をゼロに設定すると、 1 日のうち最初のスナップショットだけが保持されることになります。

スナップショットの保持期限

  • 1 時間ごと: 最新の 10 個分のスナップショットが保持されます。

  • 1 日ごと: それぞれ 1 日のうち最初のスナップショットが、最新の 10 日分 だけ保持されます。

  • 1 ヶ月ごと: それぞれ 1 ヶ月のうち最初のスナップショットが、最新の 10 ヶ月分 だけ保持されます。

  • 1 年ごと: 12 月 31 日に採取された最初のスナップショットが、最新の 10 年分 だけ保持されます。

4.7. 制限事項

Btrfs と Snapper ツールは、本番環境での使用も想定されていますが、 定期的に開発が続けられているものです。そのため、現時点では下記の制限事項が存在 することに注意してください。これらはいずれも、将来のリリースで解決される予定です。

4.7.1. データの一貫性について

スナップショットを作成する際、データの一貫性を確保するための機構が用意されていません。 スナップショットの作成時にファイルへの書き込みが発生した場合 (たとえばデータベース システムなど) 、そのファイルは壊れてしまうか、部分的に書き込みが行なわれた状態に なります。このようなファイルを復元すると、問題が発生してしまいます。そのため、 ファイルの復元にあたっては、 必ず 変更されたファイルと差分を よくご確認ください。また、巻き戻しを行ないたいファイルのみを復元するようにして ください。

4.7.2. ユーザ変更の取り消し

通常、 /home は個別のパーティション内に存在しています。 このように別途のパーティションに存在するものは、既定の設定や YaST のロールバック 機構では巻き戻すことができません。そのため、このような状況で Snapper でユーザの 追加を取り消しても、そのユーザのホームディレクトリの内容まで削除することは できません。ユーザを削除する場合は、 YaST の ユーザとグループの管理 をお使いください。

4.7.3. /boot やブートローダの設定の取り消しについて

現時点では、 openSUSEBtrfs パーティションからの起動には 対応していません。そのため、システムパーティションに Btrfs を指定 しても、 /boot 用に個別のパーティションが設定されます。 そのため、 /boot はスナップショット機能に対応できないことになる ため、 YaST/zypper での巻き戻しにあたっては下記の制限事項が存在することに注意して ください:

ブートローダに対する設定変更を巻き戻すことはできません

巻き戻すことができるファイルは、 /etc 内に存在するブートローダの 設定ファイルだけです。メインの設定ファイルは /boot 内に存在する ため、巻き戻すことはできません。

カーネルのインストールに対して、完全な巻き戻しを行なうことはできません

カーネルそれ自身と initrd は、それぞれ /boot 内にインストールされ、 カーネルモジュールやソースコードは /var/lib/usr/src にインストールされます。また、カーネルをインストールすると /boot 内にあるブートローダの設定ファイルを変更する作業もあわせて行なわれます。 そのため、カーネルのインストール作業を含む処理を取り消す場合、 /boot からインストールした カーネルと対応する initrd の削除、そしてインストールしていたカーネルに対応する ブートローダの設定を、それぞれ手作業で削除してください。

4.8. よくある質問

Snapper では /var/log, /tmp などのディレクトリの 変更を表示しませんが、なぜですか?

/var/log などの特定のディレクトリについては、スナップショットの 対象から外しています。これらのディレクトリにはログファイルなどが含まれるため、 ログを削除してしまうと問題の追跡が困難になってしまうためです。スナップショット対象から 外す目的で、これらのディレクトリにはサブボリュームを設定して対応しています。 openSUSE では、 それぞれ下記のマウントポイントが除外対象です:

  • /opt

  • /srv

  • /tmp

  • /var/crash

  • /var/log

  • /var/run

  • /var/spool

  • /var/tmp

ブートローダからスナップショットで採取したものを起動できますか?

現時点では対応していません。 openSUSE のブートローダは、現時点では Btrfs パーティションからの起動には未対応です。


openSUSE リファレンス 13.1