第4章 Snapperによるスナップショットとロールバック

目次

4.1. 要件
4.2. Snapperによるシステム変更の取り消し
4.3. スナップショットを手動で作成および管理する
4.4. 制限
4.5. よくある質問とその回答
4.6. シンプロビジョンLVMボリュームでのSnapper使用

概要

Linuxでファイルシステムのスナップショットを作成し、ロールバックできるようにすることは、過去に要望の多かった機能です。Snapperを、BtrfsファイルシステムまたはシンプロビジョンのLVMボリュームと併用することによって対応できます。

Btrfsは、Linux用の新しい書き込み時コピー方式のファイルシステムで、サブボリューム(各物理パーティション内の1つまたは複数の個別にマウント可能なファイルシステム)のファイルシステムスナップショット(特定時点におけるサブボリュームの状態のコピー)をサポートします。Snapperを使用してこれらのスナップショットを管理できます。Snapperには、コマンドラインおよびYaSTインタフェースがあります。

デフォルトで、SUSE Linux Enterprise ServerのSnapperおよびBtrfsは、YaSTおよびzypperによるシステム変更を元に戻すツールとして設定されます。YaSTモジュールまたはzypperの実行前と実行後にスナップショットが作成されます。Snapperを使用して、2つのスナップショットを比較し、その変更を元に戻すことができます。また、このツールは、システムのサブボリュームに対して毎時のスナップショットを作成することにより、システムのバックアップとしても機能します。

4.1. 要件

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

4.1.1. スナップショットとディスク容量

スナップショットを作成すると、スナップショットとスナップショット元のファイルは、 いずれもファイルシステム内の同じブロックを指します。そのため、最初は、スナップショットが余分にディスク容量を占めることはありません。元のファイルシステムのデータが変更されると、変更されたデータブロックがコピーされ、古いデータブロックはスナップショットのように保持されます。このため、スナップショットは、変更されたデータと同じ容量を占めます。こうして、時間が経過するにつれて、スナップショットの領域は大きくなっていきます。その結果、スナップショットを含むBtrfsファイルシステムからファイルを削除しても、ディスクの空き容量が増えないことがあります。

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

スナップショットは常に、スナップショット作成元と同じパーティションまたはサブボリュームに保存されます。別のパーティションまたはサブボリュームにスナップショットを保存することはできません。

その結果、スナップショットを含むパーティションは、通常のパーティションよりも大きくする必要があります。具体的な容量は、保持するスナップショット数やデータの変更頻度によって異なります。一般的には、通常のファイルシステムの2倍程度を検討してください。

[Tip]容量を空ける/ディスクの使用率

スナップショットを含むBtrfsパーティションの容量を空けるには、ファイルではなく、不要なスナップショットを削除する必要があります。古いスナップショットは、最近のスナップショットよりも多くの領域を使用します。

Btrfsファイルシステムではdfが正しいディスクの使用率を表示しないため、コマンドbtrfs filesystem df MOUNT_POINTを使用する必要があります。現時点では、Btrfsツールで、スナップショットが使用するディスク容量を表示できません。

あるサービスパックから別のサービスパックにアップグレードすると、多くのデータが変更される(パッケージのアップデート)ので、スナップショットにより、システムのサブボリュームで多くのディスク容量が使用されます。これらのスナップショットが不要になった場合は、手動で削除することをお勧めします。

Snapperを使用して、ext3またはXFSでフォーマットされたシンプロビジョンのLVMボリュームでもスナップショットを作成および管理できます(4.6項 「シンプロビジョンLVMボリュームでのSnapper使用」を参照)。

4.2. Snapperによるシステム変更の取り消し

SUSE Linux Enterprise ServerのSnapperは、zypperやYaSTで行った変更を取り消すことができるツールとしてあらかじめ設定されています。 このために、Snapperは、zypperおよびYaSTの実行前後に1対のスナップショットを作成します。また、Snapperを使用して、誤って削除または変更したシステムファイルを復元することもできます。このために、毎時のバックアップが作成されます。

上記の自動スナップショットは、デフォルトでルートパーティションとそのサブボリュームに対して設定されます。カスタム設定を作成すれば、/homeなど、他のパーティションに対してスナップショット機能を利用できます。

4.2.1. YaSTおよびzypperによる変更の取り消し

インストール時にルートパーティションをBtrfsで設定すると、Snapper(YaSTまたはzypperによる変更のロールバックがあらかじめ設定されている)が自動的にインストールされます。YaSTモジュールまたはzypperトランザクションを開始するたびに、2つのスナップショットが作成されます。モジュール開始前のファイルシステムの状態をキャプチャした事前スナップショットと、モジュール完了後の状態をキャプチャした事後スナップショットです。

YaSTのSnapperモジュールまたはsnapperコマンドラインツールを使用して、事前スナップショットからファイルを復元し、YaST/zypperによる変更を元に戻すことができます。また、2つのスナップショットを比較して、どのファイルが変更されているか調べることができます。2つのバージョンのファイルの違いを表示することもできます(diff)。

Linuxはマルチタスクシステムなので、事前スナップショットと事後スナップショットの間に、YaSTまたはzypper以外のプロセスがデータを変更してしまう場合があります。この場合、事前スナップショットに戻してしまうと、他のプロセスによる変更も取り消されてしまいます。多くの場合、これは望ましくありません。このため、ロールバックを開始する前に、2つのスナップショットの間の変更点をよく確認してください。他のプロセスによる変更を維持したい場合は、ロールバックするファイルを選択してください。

[Important]制限

Snapperのロールバック機能を使用する前に、Snapperの制限について理解しておいてください。詳細については、4.4項 「制限」を参照してください。

[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. ファイルのセットを復元するには、該当するチェックボックスをオンにして、ファイルまたはディレクトリを選択します。[選択したものを復元]をクリックし、[はい]をクリックして操作を確認します。

    単一のファイルを復元する場合は、ファイル名をクリックして差分を表示します。[最初から復元する]をクリックし、[はい]をクリックして操作を確認します。

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

  1. snapper list -t pre-postを実行すると、YaSTおよびzypperのスナップショットリストが表示されます。YaSTのスナップショットの場合は[説明]に「yast モジュール名と表示され、zypperのスナップショットの場合は「zypp (zypper)」と表示されます。

    
    ~ # snapper list -t pre-post
         Pre # | Post # | Pre Date                 | Post Date                | Description
         ------+--------+--------------------------+--------------------------+----------------------+
         4     | 5      | Tue Jan 10 14:39:14 2012 | Tue Jan 10 14:39:33 2012 | yast system_settings
         65    | 66     | Thu Jan 12 17:18:10 2012 | Thu Jan 12 17:18:23 2012 | zypp(zypper)
         68    | 69     | Thu Jan 12 17:25:46 2012 | Thu Jan 12 17:27:09 2012 | zypp(zypper)
         73    | 74     | Thu Jan 12 17:32:55 2012 | Thu Jan 12 17:33:13 2012 | yast system_settings
         75    | 76     | Thu Jan 12 17:33:56 2012 | Thu Jan 12 17:34:42 2012 | yast users
         77    | 92     | Thu Jan 12 17:38:36 2012 | Thu Jan 12 23:13:13 2012 | yast snapper
         83    | 84     | Thu Jan 12 22:10:33 2012 | Thu Jan 12 22:10:39 2012 | zypp(zypper)
         85    | 86     | Thu Jan 12 22:16:58 2012 | Thu Jan 12 22:17:09 2012 | zypp(zypper)
         88    | 89     | Thu Jan 12 23:10:42 2012 | Thu Jan 12 23:10:46 2012 | zypp(zypper)
         90    | 91     | Thu Jan 12 23:11:40 2012 | Thu Jan 12 23:11:42 2012 | zypp(zypper)
         108   | 109    | Fri Jan 13 13:01:06 2012 | Fri Jan 13 13:01:10 2012 | zypp(zypper)
         
  2. スナップショットのペア間で変更されたファイルのリストを取得するには、以下を実行します。snapper status PREPOST. 内容が変更されたファイルには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 PRE..POST ファイル名ファイル名を指定しない場合は、すべてのファイルの差異が表示されます。

    ~ # 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 PRE..POST ファイル名 ファイル名を指定しない場合は、変更されたすべてのファイルが復元されます。

    ~ # 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.2.2. Snapperによる定期バックアップからのファイル復元

YaSTおよびzypperのスナップショット以外に、Snapperは、システムパーティション(/)の毎時スナップショットを作成します。このバックアップ用スナップショットを使用して、誤って削除または変更したファイルを復元できます。Snapperの差分抽出機能を使用して、ある時点でどのファイルが変更されたのか調べることもできます。

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

[Note]スナップショットの保存期間

デフォルトで、最近10日間、10カ月間、10年間の最初のスナップショットが保持されます。詳細については、例4.1「タイムラインの設定例」を参照してください。

4.2.3. 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.2.3.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に設定されている場合、毎時のスナップショットが作成されます。現時点では、これがスナップショットを自動的に作成する唯一の方法なので、yesに設定することを強くお勧めします。有効な値:yes(はい)no(いいえ)

TIMELINE_CLEANUP

スナップショット数がTIMELINE_LIMIT_*オプションで指定した数を超え、かつTIMELINE_MIN_AGEで指定した保存期間を超えた場合に、古いスナップショットを自動的に削除するかどうか定義します。 有効な値:yes(はい)no(いいえ)

TIMELINE_MIN_AGE

スナップショットが自動削除の対象となるまでの最短期間を秒単位で定義します。

TIMELINE_LIMIT_HOURLYTIMELINE_LIMIT_DAILYTIMELINE_LIMIT_MONTHLYTIMELINE_LIMIT_YEARLY

1時間、1日、1カ月間、1年間に保持するスナップショット数です。

例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"
        

この設定例では、毎時スナップショットが自動的に削除されます。TIMELINE_MIN_AGETIMELINE_LIMIT_*は常に両方が評価されます。この例では、スナップショットが削除対象となるまでの最短期間が30分(180秒)に設定されています。毎時のスナップショットを作成するので、最新のスナップショットだけが保持されることになります。TIMELINE_LIMIT_DAILYをゼロ以外に設定すると、1日の最初のスナップショットが保持されることになります。

保持されるスナップショット

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

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

  • 1カ月ごと:それぞれの月の最後の日に作成された最初のスナップショットが、直近の10カ月分保持されます。

  • 1年ごと:それぞれの年の最後の日に作成された最初のスナップショットが、直近の10年分保持されます。

4.2.3.2. 通常ユーザとしてSnapperを使用する

デフォルトでは、rootしかSnapperを使用できません。しかし、以下のような場合、特定のグループまたはユーザがスナップショットを作成したり、スナップショットを使って変更を取り消したりできる必要があります。

  • Webサイトの管理者が/srv/wwwのスナップショットを作成する

  • データベース管理者がデータベースのスナップショットを作成する

  • ユーザが自分のホームディレクトリのスナップショットを作成する

このような場合、ユーザやグループにパーミッションを与えるSnapper設定を作成できます。この設定変更だけでなく、指定されたユーザが、対応する.snapshotsディレクトリを読み取ることができ、このディレクトリにアクセスできる必要があります。

手順4.3 通常ユーザによるSnapper使用の有効化

以下のすべての手順をrootとして実行してください。

  1. ユーザがSnapperを使用するパーティションまたはサブボリュームにSnapper設定がない場合は、作成します。手順については、4.2.3項 「Snapper設定の作成と変更」を参照してください。例:

    snapper --config web_data create /srv/www
  2. /etc/snapper/configs/NAMEに設定ファイルを作成します。NAMEは、上記の手順で-c/--configを使用して指定される値です(/etc/snapper/configs/web_dataなど)。 必要に応じて設定ファイルを調整します。詳細は4.2.3.1項 「設定ファイルの調整」を参照してください。

  3. ALLOW_USERSALLOW_GROUPS、またはその一方の値を設定し、ユーザやグループにパーミッションを与えます。複数のエントリはSpaceで区切ってください。たとえば、ユーザwww_adminにパーミッションを与えるには、次のように入力します。

    ALLOW_USERS="www_admin"
  4. スナップショットディレクトリPATH/.snapshotsの読み取りおよびアクセスパーミッションを与えます。PATHは、この手順の最初のステップで指定したサブボリュームに置き換えてください。例:

    chmod a+rx /srv/www/.snapshots

    これで、指定されたユーザやグループが特定のSnapper設定を使用できます。以下のようにlistコマンドを使ってテストできます。

    www_admin:~ > snapper -c web_data list

4.2.4. 自動スナップショットの無効化

インストール時に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.3. スナップショットを手動で作成および管理する

Snapperは設定によって自動的にスナップショットを作成および管理するだけのものではありません。コマンドラインツールまたはYaSTモジュールを使用して、手動でスナップショットのペア(事前および事後)や単一のスナップショットを作成することもできます。

Snapperのすべての操作は既存の設定に対して実行されます(詳細は4.2.3項 「Snapper設定の作成と変更」を参照)。スナップショットを作成するには、対象のパーティションまたはボリュームに対して設定が存在する必要があります。デフォルトで、システム設定(root)が使用されます。独自の設定に対してスナップショットを作成または管理する場合は、明示的にその設定を選択する必要があります。YaSTの[現在の設定]ドロップダウンメニューを使用するか、コマンドラインで-cを指定します(snapper -c MYCONFIG COMMAND)。

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

各スナップショットには、スナップショット自体とメタデータが含まれています。スナップショットを作成する場合は、メタデータも指定する必要があります。スナップショットを修正すると、メタデータが変更されます。コンテンツを修正することはできません。各スナップショットについて、以下のメタデータを利用できます。

  • Type(種類):スナップショットの種類です。詳細は4.3.1.1項 「スナップショットの種類」を参照してください。このデータは変更できません。

  • Number(番号):スナップショットの一意の番号。このデータは変更できません。

  • Pre Number(前番号):対応する事前スナップショットの番号を指定します。事後スナップショットにのみ適用されます。このデータは変更できません。

  • Description(説明):スナップショットの説明です。

  • Userdata(ユーザデータ):カンマ区切りの「キー=値」のリスト形式でカスタムデータを指定できる、拡張用の項目です。(例:reason=testing_stuff, user=tux)。

  • Cleanup-Algorithm(クリーンアップアルゴリズム):スナップショットのクリーンアップアルゴリズムです。詳細は4.3.1.2項 「クリーンアップアルゴリズム」を参照してください。

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

Snapperには、事前(pre)、事後(post)、および単一(single)の3種類のスナップショットがあります。これらは物理的には同じものですが、Snapperでは別のものとして扱われます。

pre(事前)

変更のファイルシステムのスナップショットです。各pre(事前)スナップショットには、対応するpost(事後)スナップショットがあります。自動YaST/zypperスナップショットなどに使用されます。

post(事後)

変更のファイルシステムのスナップショットです。各post(事後)スナップショットには、対応するpre(事前)スナップショットがあります。自動YaST/zypperスナップショットなどに使用されます。

single(単一)

スタンドアロンのスナップショットです。自動毎時スナップショットなどに使用されます。これは、スナップショットを作成する際のデフォルトの種類です。

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

Snapperには、古いスナップショットのクリーンアップアルゴリズムが3種類あります。このアルゴリズムは、日次のcronジョブとして実行されます。クリーンアップの頻度は、パーティションまたはサブボリュームのSnapper設定で定義されます(詳細は4.2.3.1項 「設定ファイルの調整」を参照)。

number(番号)

スナップショットが特定の数に達すると、古いスナップショットを削除します。

time line(タイムライン)

特定の期間が経過したスナップショットを削除しますが、毎時、毎日、毎月、および毎年のスナップショットを一定数保持します。

empty-pre-post(事前事後の差分なし)

事前と事後のスナップショットに差分がない場合、そのペアを削除します。

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

スナップショットを作成するには、snapper createを実行するか、YaSTモジュールのSnapper[Create]をクリックします。以下は、コマンドラインを使ってスナップショットを作成する場合の例です。YaSTインタフェースを使用する場合、簡単に採用できるはずです。

[Tip]Snapshot Description

後で識別しやすくするため、わかりやすい説明を指定しておいてください。ユーザデータオプションを使って、さらに情報を指定することもできます。

snapper create --description "Snapshot for week 2 2013"

説明付きのスタンドアロンのスナップショット(種類はsingle)を、デフォルト(root)設定で作成します。クリーンアップアルゴリズムは指定されていないので、自動的にスナップショットが削除されることはありません。

snapper --config home create --description "Cleanup in ~tux"

説明付きのスタンドアロンのスナップショット(種類はsingle)を、カスタム設定homeで作成します。クリーンアップアルゴリズムは指定されていないので、自動的にスナップショットが削除されることはありません。

snapper --config home create --description "Daily data backup" --cleanup-algorithm timeline

説明付きのスタンドアロンのスナップショット(種類はsingle)を、カスタム設定home設定で作成します。設定のタイムライン(time line)クリーンアップアルゴリズムで指定された条件が満たされると、ファイルが自動的に削除されます。

snapper create --type pre--print-number--description "Before the Apache config cleanup"

種類がpreのスナップショットを作成し、スナップショット番号を出力します。事前事後の状態を保存するために使用されるスナップショットペアを作成するために必要な、最初のコマンドです。

snapper create --type post--pre-number 30--description "After the Apache config cleanup"

番号30preスナップショットとペアになるpostスナップショットを作成します。事前事後の状態を保存するために使用されるスナップショットペアを作成するために必要な、2番目のコマンドです。

snapper create --command COMMAND--description "Before and after COMMAND"

COMMANDの実行前後に自動的にスナップショットを作成します。このオプションを使用できるのは、コマンドラインでsnapperを使用する場合のみです。

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

Snapperでは、説明、クリーンアップアルゴリズム、およびスナップショットのユーザデータを修正できます。それ以外のメタデータは変更できません。以下は、コマンドラインを使ってスナップショットを修正する場合の例です。YaSTインタフェースを使用する場合、簡単に採用できるはずです。

コマンドラインでスナップショットを修正するには、スナップショットの番号がわかっている必要があります。snapperlistを実行すると、すべてのスナップショットとその番号が表示されます。

YaSTのSnapperモジュールでは、すでにすべてのスナップショットがリスト表示されています。リストからスナップショットを選択し、[Modify]をクリックします。

snapper modify --cleanup-algorithm "timeline" 10

デフォルト(root)設定のスナップショット10番のメタデータを修正します。クリーンアップアルゴリズムがtimelineに設定されます。

snapper --config home modify --description "daily backup" -cleanup-algorithm "timeline"120

カスタム設定homeのスナップショット120番のメタデータを修正します。新しい説明が設定され、クリーンアップアルゴリズムを無しに設定します。

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

YaSTのSnapperモジュールを使用してスナップショットを削除するには、リストからスナップショットを選択して[Delete]をクリックします。

コマンドラインツールを使ってスナップショットを削除するには、スナップショットの番号が分かっている必要があります。snapper listを実行して番号を調べます。スナップショットを削除するには、snapper delete NUMBERを実行します。

[Tip]スナップショットペアの削除

preスナップショットを削除する場合は、必ず、対応するpostスナップショットを削除する必要があります(逆も同様です)。

snapper delete 65

デフォルト(root)設定のスナップショット65番を削除します。

snapper -c home delete 89 90

カスタム設定homeのスナップショット89番および90番を削除します。

[Tip]古いスナップショットほどディスク容量を使用

ハードディスクの容量を空けるためにスナップショットを削除する場合(詳細は4.1.1項 「スナップショットとディスク容量」を参照)は、古いスナップショットから削除します。古いスナップショットほど、多くの容量を使用します。

スナップショットは、日次のcronジョブでも自動的に削除されます。詳細については、4.3.1.2項 「クリーンアップアルゴリズム」を参照してください。

4.4. 制限

BtrfsおよびSnapperは本番環境で使用可能な製品ですが、引き続き開発が行われています。現時点で以下の制限があります。これらの問題は、将来のリリースで解決される予定です。

4.4.1. データの整合性

スナップショットを作成する際に、データの整合性を確保するメカニズムがありません。スナップショットを作成するのと同時にファイルが書き込まれると(データベースなど)、ファイルが破損したり、ファイルへの書き込みが部分的になります。このようなファイルを復元すると、問題が発生することがあります。このため、必ず変更されたファイルとその差分をよく確認してください。どうしてもロールバックが必要なファイルのみ復元してください。

4.4.2. ユーザ追加の取り消し

通常、/homeは別のパーティションにあります。このような別のパーティションは、YaSTのロールバックのデフォルト設定に含まれません。このため、Snapperを使用してユーザの追加を取り消しても、ユーザのホームパーティションは削除されません。YaSTのユーザとグループの管理ツールを使用してユーザを削除することを強くお勧めします。

4.4.3. /bootやブートローダの変更をロールバックできない

現時点で、SUSE Linux Enterprise ServerBtrfsパーティションからブートできません。このため、システムパーティションにBtrfsを使用してインストールすると、/boot用に個別のパーティションが作成されます。/bootはスナップショットに対応していないため、YaST/zypperのロールバックについて以下の制限が適用されます。

ブートローダに対する設定変更はロールバックできない

ロールバックできるファイルは、/etc内のブートローダ設定ファイルのみです。メインの設定ファイルは/bootの下に保存され、ロールバックできません。

カーネルのインストールについて完全なロールバックはできない

カーネル自体とinitrdは、/bootパーティションにインストールされますが、カーネルモジュールとソースコードはそれぞれ/var/libおよび/usr/srcにインストールされます。 また、カーネルをインストールすると/bootのブートローダ設定も変更されます。このため、カーネルのインストールを元に戻す作業を含むロールバックを行う場合は、/bootからカーネルとそのinitrdを手動で削除し、カーネルのブートエントリを削除してブートローダ設定を調整する必要があります。

4.5. よくある質問とその回答

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

一部のディレクトリについては、スナップショットを無効にしています(/var/logなど)。これは、ログを削除してしまうと問題の調査が難しくなるためです。スナップショットからパスを除外するため、これらのパス用にサブボリュームを作成しています。SUSE Linux Enterprise Serverでは、以下のマウントポイントがスナップショットの対象外です。

  • /opt

  • /srv

  • /tmp

  • /var/crash

  • /var/log

  • /var/run

  • /var/spool

  • /var/tmp

ブートローダからスナップショットをブートできますか?

現時点ではできません。SUSE Linux Enterprise Serverのブートローダは、現時点で、Btrfsパーティションからのブートに対応していません。

4.6. シンプロビジョンLVMボリュームでのSnapper使用

Snapperは、Btrfsファイルシステムのスナップショット作成だけでなく、ext3またはXFSでフォーマットされたシンプロビジョンLVMボリュームのスナップショット作成にも対応しています(通常のLVMボリュームのスナップショットには対応していません)。詳細および設定の手順については、項 「LVMの設定」 (第15章 高度なディスクセットアップ, ↑導入ガイド)を参照してください。

シンプロビジョンLVMボリュームでSnapperを使用するには、そのようにSnapper設定を作成する必要があります。LVMで、--fstype=lvm(FILESYSTEM)を使用してファイルシステムを指定する必要があります。現在ext3およびXFSがサポートされているので、ext3またはxfsFILESYSTEMの有効な値です。例:

snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm

4.2.3.1項 「設定ファイルの調整」で説明したように、必要に応じてこの設定を調整できます。これで、Snapperを使用して、スナップショットの作成と管理、ファイルの復元、変更の取り消しができるようになりました。


SUSE Linux Enterprise Server 管理ガイド 11 SP3