適用先 SUSE Linux Enterprise Desktop 12

4 Snapperを使用したシステムの回復とスナップショット管理

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

Btrfsは、Linux用の新しい書き込み時コピー方式のファイルシステムで、サブボリューム(各物理パーティション内の1つまたは複数の個別にマウント可能なファイルシステム)のファイルシステムスナップショット(特定時点におけるサブボリュームの状態のコピー)をサポートします。スナップショットは、XFS、Ext4、またはExt3でフォーマットされたシンプロビジョンLVMボリュームでもサポートされています。Snapperを使用してこれらのスナップショットを作成および管理できます。Snapperには、コマンドラインおよびYaSTインタフェースがあります。SUSE Linux Enterprise Serverバージョン12から、Btrfsスナップショットからブートすることもできるようになりました。詳細については、4.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。

Snapperを使用して、次のタスクを実行できます。

4.1 デフォルト設定

SUSE Linux Enterprise Desktop上のSnapperは、システム変更の「取り消しおよび回復ツール」として機能するように設定されています。デフォルトでは、SUSE Linux Enterprise Desktopのルートパーティション(/)はBtrfsでフォーマットされています。ルートパーティション(/)に十分な容量(約8GB以上)がある場合、スナップショットの作成が自動的に有効になります。デフォルトでは、/以外のパーティション上でスナップショットを作成することはできません。

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

注記
注記: スナップショットの場所

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

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

スナップショット自体は技術的な意味では同じですが、作成された状況に基づいて、次の3種類のスナップショットを区別しています。

スナップショットの種類
タイムラインスナップショット

1時間ごとに1つのスナップショットが作成されます。古いスナップショットは自動的に削除されます。デフォルトで、最近10日間、10カ月間、10年間の最初のスナップショットが保持されます。タイムラインスナップショットは、ルートパーティションを除きデフォルトで有効になっています。

インストールスナップショット

YaSTまたはZypperで1つ以上のパッケージをインストールする場合、常にスナップショットのペアが作成されます。インストール開始前のスナップショット(「事前」)と、インストール完了後のスナップショット(「事後」)です。カーネルなどの重要なコンポーネントがインストールされた場合、スナップショットのペアは重要とマークされます(important=yes)。古いスナップショットは自動的に削除されます。デフォルトでは、最新の10個の重要なスナップショット、および最新の10個の「通常」のスナップショット(管理スナップショットを含む)が保持されます。インストールスナップショットはデフォルトで有効になっています。

管理スナップショット

システムをYaSTで管理する場合、常にスナップショットのペアが作成されます。YaSTモジュール開始時のスナップショット(「事前」)と、モジュール終了時のスナップショット(「事後」)です。古いスナップショットは自動的に削除されます。デフォルトでは、最新の10個の重要なスナップショットと最新の10個の「通常」のスナップショット(インストールスナップショットを含む)が保持されます。管理スナップショットはデフォルトで有効になっています。

一部のディレクトリは、さまざまな理由により、スナップショットから除外する必要があります。次のリストは、除外されるすべてのディレクトリを示しています。

スナップショットから除外されるディレクトリ
/boot/grub2/x86_64-efi、

ブートローダ設定のロールバックはサポートされていません。

/home

/homeが独立したパーティションに存在していない場合、ロールバック時にデータが失われのを避けるために除外されます。

/opt/var/opt

サードパーティ製品およびアドオンは通常、/optにインストールされます。ロールバック時にこれらのアプリケーションがアンインストールされるのを避けるために除外されます。

/srv

WebおよびFTPサーバ用のデータが含まれています。ロールバック時にデータが失われるのを避けるために除外されます。

/tmp/var/tmp/var/crash

スナップショットから除外される一時ファイルを含むすべてのディレクトリ。

/var/lib/named

DNSサーバ用のゾーンデータが含まれます。ネームサーバがロールバック後に確実に動作できるように、スナップショットから除外されます。

/var/lib/mailman/var/spool

電子メールまたは電子メールキューを含むディレクトリは、ロールバック後に電子メールが失われるのを避けるために除外されます。

/var/lib/pgqsl

PostgreSQLデータが含まれます。

/var/log

ログファイルの場所。壊れたシステムのロールバック後にログファイルを分析できるようにスナップショットから除外されます。

4.1.1 設定のカスタマイズ

SUSE Linux Enterprise Desktopには、適切なデフォルト設定が用意されていて、ほとんどの使用事例ではこのままで十分です。ただし、スナップショットの自動作成およびスナップショットの維持管理のあらゆる側面をニーズに合わせて設定できます。

4.1.1.1 スナップショットの無効化/有効化

3つのスナップショットの種類(タイムライン、インストール、および管理)はそれぞれ独立して有効化または無効化することができます。

タイムラインスナップショットの有効化/無効化

有効化.  snapper -c root set-config "TIMELINE_CREATE=yes"

無効化.  snapper -c root set-config "TIMELINE_CREATE=no"

タイムラインスナップショットは、ルートパーティションを除きデフォルトで有効になっています。

インストールスナップショットの有効化/無効化

有効化.  snapper-zypp-pluginパッケージをインストールします。

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

インストールスナップショットはデフォルトで有効になっています。

管理スナップショットの有効化/無効化

有効化.  /etc/sysconfig/yast2USE_SNAPPERyes (はい)に設定します。

無効化.  /etc/sysconfig/yast2USE_SNAPPERno (いいえ)に設定します。

管理スナップショットはデフォルトで有効になっています。

4.1.1.2 インストールスナップショットの制御

YaSTまたはZypperでパッケージをインストールする際にスナップショットペアを作成する処理は、snapper-zypp-pluginが扱います。XML環境設定ファイル/etc/snapper/zypp-plugin.confで、スナップショットを作成するタイミングを定義します。デフォルトでは、ファイルは次のようになっています。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <snapper-zypp-plugin-conf>
 3  <solvables>
 4   <solvable match="w"1 important="true"2>kernel-*3</solvable>
 5   <solvable match="w" important="true">dracut</solvable>
 6   <solvable match="w" important="true">glibc</solvable>
 7   <solvable match="w" important="true">systemd*</solvable>
 8   <solvable match="w" important="true">udev</solvable>
 9   <solvable match="w">*</solvable>4
10  </solvables>
11 </snapper-zypp-plugin-conf>

1

match属性は、パターンがUnixシェルと同様のワイルドカードであるか(w)、それともPython正規表現であるか(re)を定義します。

2

指定されたパターンが一致し、対応するパッケージに重要のマークが付いている場合(カーネルパッケージなど)、そのスナップショットにも重要のマークが付きます。

3

パッケージ名に一致するパターン。特殊文字は、match属性の設定に基づいて、シェル風のワイルドカードまたは正規表現のいずれかとして解釈されます。このパターンは、kernel-で始まるすべてのパッケージ名に一致します。

4

この行は、無条件にすべてのパッケージに一致します。

この設定スナップショットでは、パッケージのインストール時に常にペアが作成されます(9行目)。重要のマークが付いたKernel、dracut、glibc、systemd、またはudevパッケージがインストールされると、そのスナップショットペアにも重要のマークが付きます(4~8行目)。すべてのルールが評価されます。

ルールを無効にするには、削除するか、XMLコメントを使用して無効にします。パッケージがインストールされるたびにスナップショットペアが作成されないようにするには、次のようにします。たとえば、9行目のコメント行のように指定します。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <snapper-zypp-plugin-conf>
 3  <solvables>
 4   <solvable match="w" important="true">kernel-*</solvable>
 5   <solvable match="w" important="true">dracut</solvable>
 6   <solvable match="w" important="true">glibc</solvable>
 7   <solvable match="w" important="true">systemd*</solvable>
 8   <solvable match="w" important="true">udev</solvable>
 9   <!-- <solvable match="w">*</solvable> -->
10  </solvables>
11 </snapper-zypp-plugin-conf>

4.1.1.3 スナップショットのアーカイブの制御

スナップショットはディスク容量を占有します。ディスク容量不足によるシステム停止が発生しないようにするために、古いスナップショットは自動的に削除されます。デフォルトでは、次のスナップショットが保持されます。

  • 最近10日間、10カ月間、および10年間の最初のスナップショット

  • 重要のマークが付いている最近の10個のインストールスナップショットペア

  • 最近の10個のインストール/管理スナップショット

これらの値の変更方法については、4.4.1項 「既存の設定の管理」を参照してください。

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

Snapperは、Btrfsファイルシステムのスナップショット作成だけでなく、XFS、Ext4、またはExt3でフォーマットされたシンプロビジョンLVMボリュームのスナップショット作成にも対応しています(通常のLVMボリュームのスナップショットには「対応していません」)。LVMボリュームに関する詳細および設定の手順については、Section “LVM Configuration”, Chapter 12, Advanced Disk Setup, Deployment Guideを参照してください。

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

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

4.4.1項 「既存の設定の管理」で説明したように、必要に応じてこの設定を調整できます。

4.2 Snapperを使用した変更の取り消し

SUSE Linux Enterprise DesktopのSnapperは、zypperやYaSTで行った変更を取り消すことができるツールとしてあらかじめ設定されています。このために、Snapperは、zypperおよびYaSTの実行前後にスナップショットのペアを作成します。また、Snapperを使用して、誤って削除または変更したシステムファイルを復元することもできます。このためには、ルートパーティションのタイムラインスナップショットを有効にする必要があります。詳細については、4.1.1.1項 「スナップショットの無効化/有効化」を参照してください。

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

重要
重要: 変更の取り消しとロールバック

スナップショットを操作してデータを復元する場合、Snapperが処理可能なシナリオとして、根本的に異なる次の2つのシナリオがあることを理解することが重要です。

変更の取り消し

次に説明されているように、変更を取り消す際には、2つのスナップショットが比較され、これらの2つのスナップショット間の変更が取り消されます。この方法を使用して、復元する必要があるファイルを明示的に選択できます。

ロールバック

4.3項 「スナップショットからのブートによるシステムロールバック」で説明されているように、ロールバックを実行すると、システムはスナップショットが作成された状態にリセットされます。

変更を取り消す場合は、現在のシステムとスナップショットを比較することもできます。このような比較から「すべての」ファイルを復元すると、ロールバックを実行した場合と同じ結果になります。ただし、ロールバックについては、4.3項 「スナップショットからのブートによるシステムロールバック」で説明されている方法を使用することをお勧めします。この方法はより高速で、ロールバック実行前にシステムを確認できるためです。

警告
警告: データの整合性

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

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

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

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

手順 4.1 YaSTのSnapperモジュールによる変更の取り消し
  1. YaSTのその他セクションにあるSnapperモジュールを起動するか、「yast2 snapper」と入力します。

  2. 現在の設定rootになっていることを確認します。 独自のSnapper設定を手動で追加していない限り、常にそのようになっています。

  3. リストから事前スナップショットと事後スナップショットのペアを選択します。YaSTのスナップショットペアもZypperのスナップショットペアも、種類は事前および事後です。YaSTのスナップショットの場合は説明に「zypp(y2base)」と表示され、Zypperのスナップショットの場合は「zypp(zypper)」と表示されます。

  4. 変更点の表示をクリックすると、2つのスナップショット間のファイルの差異がリストに表示されます。

  5. ファイルのリストを確認します。事前および事後のファイル間の「差異」を表示するには、リストからファイルを選択します。

  6. 1つまたは複数のファイルを復元するには、該当するチェックボックスをオンにして、関連するファイルまたはディレクトリを選択します。選択したものを復元をクリックし、はいをクリックして操作を確認します。

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

手順 4.2 snapperコマンドによる変更の取り消し
  1. snapper list -t pre-postを実行すると、YaSTおよびZypperのスナップショットリストが表示されます。YaSTのスナップショットの場合は説明に「yastモジュール名」と表示され、Zypperのスナップショットの場合は「zypp(zypper)」と表示されます。

    
    
    
    root # snapper list -t pre-post
    Pre # | Post # | Pre Date                      | Post Date                     | Description  
    ------+--------+-------------------------------+-------------------------------+--------------
    311   | 312    | Tue 06 May 2014 14:05:46 CEST | Tue 06 May 2014 14:05:52 CEST | zypp(y2base) 
    340   | 341    | Wed 07 May 2014 16:15:10 CEST | Wed 07 May 2014 16:15:16 CEST | zypp(zypper) 
    342   | 343    | Wed 07 May 2014 16:20:38 CEST | Wed 07 May 2014 16:20:42 CEST | zypp(y2base) 
    344   | 345    | Wed 07 May 2014 16:21:23 CEST | Wed 07 May 2014 16:21:24 CEST | zypp(zypper) 
    346   | 347    | Wed 07 May 2014 16:41:06 CEST | Wed 07 May 2014 16:41:10 CEST | zypp(y2base) 
    348   | 349    | Wed 07 May 2014 16:44:50 CEST | Wed 07 May 2014 16:44:53 CEST | zypp(y2base) 
    350   | 351    | Wed 07 May 2014 16:46:27 CEST | Wed 07 May 2014 16:46:38 CEST | zypp(y2base) 
  2. スナップショットのペア間で変更されたファイルのリストを取得するには、以下を実行します。snapper status PREPOST. 内容が変更されたファイルにはcのマーク、追加されたファイルには+のマーク、削除されたファイルには-のマークが付いています。

    root # snapper status 350..351
    +..... /usr/share/doc/packages/mikachan-fonts
    +..... /usr/share/doc/packages/mikachan-fonts/COPYING
    +..... /usr/share/doc/packages/mikachan-fonts/dl.html
    c..... /usr/share/fonts/truetype/fonts.dir
    c..... /usr/share/fonts/truetype/fonts.scale
    +..... /usr/share/fonts/truetype/みかちゃん-p.ttf
    +..... /usr/share/fonts/truetype/みかちゃん-pb.ttf
    +..... /usr/share/fonts/truetype/みかちゃん-ps.ttf
    +..... /usr/share/fonts/truetype/みかちゃん.ttf
    c..... /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4
    c..... /var/lib/rpm/Basenames
    c..... /var/lib/rpm/Dirnames
    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/Requirename
    c..... /var/lib/rpm/Sha1header
    c..... /var/lib/rpm/Sigmd5
  3. 特定のファイルの差異を表示するには、以下を実行します。snapper diff PRE..POST ファイル名ファイル名を指定しない場合は、すべてのファイルの差異が表示されます。

    root # snapper diff 350..351 /usr/share/fonts/truetype/fonts.scale
    --- /.snapshots/350/snapshot/usr/share/fonts/truetype/fonts.scale	2014-04-23 15:58:57.000000000 +0200
    +++ /.snapshots/351/snapshot/usr/share/fonts/truetype/fonts.scale	2014-05-07 16:46:31.000000000 +0200
    @@ -1,4 +1,4 @@
    -1174
    +1486
     ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso10646-1
     ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso8859-1
    [...]
  4. 1つまたは複数のファイルを復元するには、以下を実行します。snapper -v undochange PRE..POST ファイル名 ファイル名を指定しない場合は、変更されたすべてのファイルが復元されます。

    root # snapper -v undochange 350..351
         create:0 modify:13 delete:7
         undoing change...
         deleting /usr/share/doc/packages/mikachan-fonts
         deleting /usr/share/doc/packages/mikachan-fonts/COPYING
         deleting /usr/share/doc/packages/mikachan-fonts/dl.html
         deleting /usr/share/fonts/truetype/みかちゃん-p.ttf
         deleting /usr/share/fonts/truetype/みかちゃん-pb.ttf
         deleting /usr/share/fonts/truetype/みかちゃん-ps.ttf
         deleting /usr/share/fonts/truetype/みかちゃん.ttf
         modifying /usr/share/fonts/truetype/fonts.dir
         modifying /usr/share/fonts/truetype/fonts.scale
         modifying /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4
         modifying /var/lib/rpm/Basenames
         modifying /var/lib/rpm/Dirnames
         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/Requirename
         modifying /var/lib/rpm/Sha1header
         modifying /var/lib/rpm/Sigmd5
         undoing change done
警告
警告: ユーザ追加の取り消し

ユーザの追加を取り消す場合、Snapperで変更を取り消す方法はお勧めしません。特定のディレクトリはスナップショットから除外されているため、これらのユーザに属するファイルはファイルシステムに残ったままになります。削除済みユーザと同じユーザIDを持つユーザを作成した場合、このユーザはこれらのファイルを継承します。したがって、YaSTのユーザおよびグループ管理ツールを使用して、ユーザを削除することを強くお勧めします。

4.2.2 Snapperを使用したファイルの復元

インストールスナップショットおよび管理スナップショットとは別に、Snapperはタイムラインスナップショットを作成します。このバックアップ用スナップショットを使用して、誤って削除したファイルを復元したり、ファイルの以前のバージョンを復元したりできます。Snapperの差分抽出機能を使用して、ある時点でどのファイルが変更されたのか調べることもできます。

ファイルの復元機能は、特に、デフォルトではスナップショットが作成されないサブボリュームまたはパーティションに存在するデータにとって重要です。ホームディレクトリからファイルを復元できるようにするには、たとえば、/home用に、自動的にタイムラインスナップショットを作成する別個のSnapper設定を作成します。手順については、4.4項 「Snapper設定の作成と変更」を参照してください。

警告
警告: ファイルの復元とロールバック

ルートファイルシステムから作成されたスナップショット(Snapperのルート設定で定義されています)を使用して、システムロールバックを実行できます。このようなロールバックを実行する場合にお勧めする方法は、そのスナップショットからブートしてからロールバックを実行する方法です。詳細については、4.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。

次に説明するように、ルートファイルシステムスナップショットからすべてのファイルを復元することによってロールバックを実行することもできます。ただし、これはお勧めできません。たとえば、/etcディレクトリから環境設定ファイルなど単一のファイルを復元できますが、スナップショットからファイルの完全なリストを復元することはできません。

この制限は、ルートファイルシステムから作成されたスナップショットにのみ影響します。

手順 4.3 YaST Snapperモジュールを使用したファイルの復元
  1. YaSTのその他セクションにあるSnapperモジュールを起動するか、「yast2 snapper」と入力します。

  2. スナップショットの選択肢から現在の設定を選択します。

  3. ファイルの復元元からタイムラインスナップショットを選択し、変更点の表示を選択します。タイムラインスナップショットは、タイプが単一で、説明の値がtimeline (タイムライン)であるスナップショットです。

  4. ファイル名をクリックしてテキストボックスからファイルを選択します。スナップショットバージョンと現在のシステムとの差分が表示されます。復元対象ファイルを選択するチェックボックスをオンにします。復元するすべてのファイルに対してこれを行います。

  5. 選択したものを復元をクリックし、はいをクリックして操作を確認します。

手順 4.4 snapperコマンドを使用したファイルの復元
  1. 次のコマンドを実行して、特定の設定のタイムラインスナップショットのリストを取得します。

    snapper -c CONFIG list -t single | grep timeline

    CONFIGは、既存のSnapper設定に置き換える必要があります。snapper list-configsを使用してリストを表示します。

  2. 次のコマンドを実行して、指定のスナップショットの変更ファイルのリストを取得します。

    snapper -c CONFIG status SNAPSHOT_ID>..0

    SNAPSHOT_IDをファイルの復元元のスナップショットIDで置き換えます。

  3. オプションで、次のコマンドを実行して、現在のファイルバージョンとスナップショットからのバージョンとの差分を一覧にします。

    snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME

    <FILE NAME>を指定しない場合は、すべてのファイルの差分が表示されます。

  4. 1つ以上のファイルを復元するには、以下を実行します

    snapper -c CONFIG -v undochange
          SNAPSHOT_ID..0 FILENAME1 FILENAME2

    ファイル名を指定しない場合は、変更されたすべてのファイルが復元されます。

4.3 スナップショットからのブートによるシステムロールバック

SUSE Linux Enterprise Desktopに含まれているGRUB 2バージョンは、Btrfsスナップショットからブートできます。Snapperのロールバック機能と併用することで、誤設定されたシステムを回復できます。Snapperによって作成されたすべてのスナップショットはブートに使用することができ、ブートメニューから選択できます。

重要
重要: ブート可能なスナップショット

ブート可能なスナップショットは、ルートファイルシステムからのスナップショット(Snapperのルート設定によって定義されます)のみです。

スナップショットをブートする場合、スナップショットに含まれているファイルシステムの該当部分が読み込み専用でマウントされます。スナップショットから除外されている他のすべてのファイルシステムと該当部分は読み書き可能でマウントされ、変更できます。

重要
重要: 変更の取り消しとロールバック

スナップショットを操作してデータを復元する場合、Snapperが処理可能なシナリオとして、根本的に異なる次の2つのシナリオがあることを理解することが重要です。

変更の取り消し

4.2項 「Snapperを使用した変更の取り消し」で説明されているように、変更を取り消す場合は、2つのスナップショットが比較され、これらの2つのスナップショット間の変更が元に戻されます。この方法を使用すると、選択したファイルを復元から明示的に除外することもできます。

ロールバック

次に説明する方法でロールバックを実行すると、システムはスナップショットが作成された状態にリセットされます。

ブート可能なスナップショットからロールバックを行うには、次の要件を満たす必要があります。デフォルトインストールを行った場合、システムはそのように設定されます。

ブート可能なスナップショットからのロールバックの要件
  • ルートファイルシステムは、Btrfsである必要があります。LVMボリュームスナップショットからのブートはサポートされていません。

  • ルートファイルシステムは、単一のデバイス、単一のパーティション、および単一のサブボリューム上にある必要があります。/srvなどスナップショットから除外されるディレクトリ(完全なリストについては、スナップショットから除外されるディレクトリを参照)は、別のパーティション上に存在していても構いません。

  • システムは、インストールされたブートローダを介してブート可能である必要があります。

ブート可能なスナップショットからのロールバックを実行するには、次の手順に従います。

  1. システムをブートします。ブートメニューから、Bootable snapshots (ブート可能なスナップショット)を選択して、ブートするスナップショットを選択します。スナップショットのリストが日別に一覧にされます。最新のスナップショットが先頭に表示されます。

  2. システムにログインします。すべてが予期したとおりに動作しているかどうかを注意深く確認します。スナップショットの一部であるディレクトリには書き込むことができないことに注意してください。他のディレクトリに書き込むデータは、次に行う操作にかかわらず、失われることは「ありません」

  3. ロールバックを実行するかどうかに応じて、次のステップを選択します。

    1. システムがロールバックが不要な状態である場合、再起動して現在のシステム状態でブートするか、再起動して別のスナップショットを選択するか、または再起動してレスキューシステムを起動します。

    2. ロールバックを実行する場合は、次のコマンドを実行します。

      sudo snapper rollback

      その後、再起動します。ブート画面で、デフォルトのブートエントリを選択して、復元されたシステムで再起動します。

4.3.1 制限

システム全体をスナップショット作成時点とまったく同じ状態に復元する、システムの「完全な」ロールバックは不可能です。

4.3.1.1 スナップショットから除外されるディレクトリ

ルートファイルシステムのスナップショットには、すべてのディレクトリが含まれるわけではありません。詳細および理由については、スナップショットから除外されるディレクトリを参照してください。そのため、一般的にこれらのディレクトリのデータは復元されないため、次の制限が生じます。

ロールバック後、アドオンおよびサードバーティソフトウェアを使用できない場合がある

スナップショットから除外されるサブボリューム(/optなど)にデータをインストールするアプリケーションやアドオンは、アプリケーションデータの他の部分がスナップショットに含まれるサブボリュームにもインストールされている場合、ロールバック後に動作しない場合があります。この問題を解決するには、アプリケーションまたはアドオンを再インストールします。

ファイルアクセスの問題

スナップショットと現在のシステムでファイルのパーミッションまたは所有権、あるいはその両方がアプリケーションによって変更されている場合、そのアプリケーションは該当するファイルにアクセスできない場合があります。ロールバック後、影響を受けるファイルのパーミッションまたは所有権、あるいはその両方をリセットします。

互換性のないデータ形式

サービスまたはアプリケーションがスナップショットと現在のシステムとの間に新しいデータ形式を設定した場合、ロールバック後、そのアプリケーションは影響を受けたデータファイルを読み込めない場合があります。

コードとデータが混在するサブボリューム

/srvのようなサブボリュームには、コードとデータが混在する場合があります。ロールバックの結果、コードが機能しなくなる場合があります。たとえば、PHPのバージョンがダウングレードされ、WebサーバのPHPスクリプトが壊れる場合があります。

ユーザデータ

ロールバックによりシステムからユーザが削除された場合、これらのユーザが、スナップショットから除外されているディレクトリ内で所有していたデータは削除されません。同じユーザIDを持つユーザが作成された場合、そのユーザは該当ファイルを継承します。findのようなツールを使用して、孤立したファイルを検索して削除します。

4.3.1.2 ブートローダのデータはロールバックできない

ブートローダはロールバックできません。これは、ブートローダのすべての「ステージ」が整合している必要があるためです。これは、ロールバックを実行する際には保証できません。

4.4 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/configs/www-dataが作成され、/etc/snapper/config-templates/defaultから取得されたデフォルト値が使用されます。これらのデフォルトの調整方法については、4.4.1項 「既存の設定の管理」を参照してください。

ヒント
ヒント: 設定のデフォルト値

新しい設定ファイルのデフォルト値は/etc/snapper/config-templates/defaultから取得されます。独自のデフォルトセットを使用する場合は、同じディレクトリ内にこのファイルのコピーを作成し、必要に応じて調整してください。作成したファイルを使用するには、create-configコマンドで-tオプションを指定します。

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

4.4.1 既存の設定の管理

snapperは、既存の設定を管理するためのサブコマンドを備えています。これらの設定を一覧、表示、削除、および変更することができます。

設定の一覧

既存の設定をすべて取得するには、snapper list-configsコマンドを使用します。

root # snapper list-configs
Config | Subvolume
-------+----------
root   | /        
usr    | /usr     
local  | /local
設定の削除

設定を削除するには、snapper -c CONFIG delete-configサブコマンドを使用します。Configは、snapper list-configsで表示される設定名に置き換える必要があります。

設定の表示

指定した設定を表示するには、snapper -c CONFIG get-configサブコマンドを使用します。Configは、snapper list-configsで表示される設定名に置き換える必要があります。設定オプションの詳細については、4.4.1.1項 「設定データ」を参照してください。

指定した設定のオプションを変更するには、snapper -c CONFIG set-config OPTION=VALUEサブコマンドを使用します。Configは、snapper list-configsで表示される設定名に置き換える必要があります。OPTIONおよびVALUEに指定可能な値は、4.4.1.1項 「設定データ」に一覧にされています。

4.4.1.1 設定データ

各設定には、コマンドラインから変更可能なオプションのリストが含まれています。次のリストは、各オプションの詳細を示しています。

ALLOW_GROUPSALLOW_USERS

通常のユーザにスナップショットを使用するパーミッションを付与します。詳細については、4.4.1.2項 「通常ユーザとしてのSnapperの使用」を参照してください。

デフォルト値は""です。

BACKGROUND_COMPARISON

事前および事後スナップショットを作成後にバックグラウンドで比較するかどうかを定義します。

デフォルト値はyes (はい)です。

EMPTY_PRE_POST_CLEANUP

yes (はい)に設定した場合、違いがない事前および事後スナップショットのペアは削除されます。

デフォルト値はno (いいえ)です。

EMPTY_PRE_POST_MIN_AGE

違いがない事前および事後スナップショットのペアが自動削除の対象となるまでの最短期間を秒単位で定義します。

デフォルト値は1800です。

FSTYPE

パーティションのファイルシステムタイプ。変更しません。

デフォルト値はbtrfsです。

NUMBER_CLEANUP

合計スナップショット数がNUMBER_LIMITで指定した数を超え、かつNUMBER_MIN_AGEで指定した保存期間を超えた場合に、古いインストールスナップショットおよび管理スナップショットを自動的に削除するかどうかを定義します。有効な値: yes (はい)no (いいえ)

デフォルト値はno (いいえ)です。

注記
注記: 制限と保存期間

NUMBER_LIMITNUMBER_LIMIT_IMPORTANT、およびNUMBER_MIN_AGEは常に評価されます。スナップショットが削除されるのは、「すべての」条件を満たしている場合のみです。保存期間に関係なく一定数のスナップショットを常に保持したい場合は、NUMBER_MIN_AGE0に設定します。一方、一定の保存期間を超えたスナップショットをすべて削除したい場合は、NUMBER_LIMITおよびNUMBER_LIMIT_IMPORTANT0に設定します。

NUMBER_LIMIT

NUMBER_CLEANUPyesに設定されている場合に保持する、重要とマークされていないインストールスナップショットおよび管理スナップショットのペア数を定義します。最も新しいスナップショットのみが保持されます。

デフォルト値は50です。

NUMBER_LIMIT_IMPORTANT

NUMBER_CLEANUPyesに設定されている場合に保持する、重要とマークされたスナップショットペアの数を定義します。最も新しいスナップショットのみが保持されます。

デフォルト値は10です。

NUMBER_MIN_AGE

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

デフォルト値は1800です。

SUBVOLUME

スナップショットを作成するパーティションまたはサブボリュームのマウントポイント。変更しません。

SYNC_ACL

Snapperが通常ユーザによって使用される場合(4.4.1.2項 「通常ユーザとしてのSnapperの使用」を参照)、ユーザは.snapshotディレクトリにアクセスして、そのディレクトリ内のファイルを読み取ることができる必要があります。SYNC_ACLをyes (はい)に設定した場合、Snapperは自動的に、ALLOW_USERSまたはALLOW_GROUPSエントリからACLを使用してユーザとグループがファイルにアクセスできるようにします。

デフォルト値はno (いいえ)です。

TIMELINE_CLEANUP

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

デフォルト値はno (いいえ)です。

TIMELINE_CREATE

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

デフォルト値はno (いいえ)です。

TIMELINE_LIMIT_DAILYTIMELINE_LIMIT_HOURLYTIMELINE_LIMIT_MONTHLYTIMELINE_LIMIT_YEARLY

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

各エントリのデフォルト値は10です。

例 4.1 タイムライン設定の例
TIMELINE_CLEANUP="yes"
TIMELINE_CREATE="yes"
TIMELINE_LIMIT_DAILY="10"
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_MONTHLY="10"
TIMELINE_LIMIT_YEARLY="10"
TIMELINE_MIN_AGE="1800"

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

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

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

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

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

TIMELINE_MIN_AGE

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

デフォルト値は1800です。

4.4.1.2 通常ユーザとしてのSnapperの使用

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

  • Webサイト管理者が/srv/wwwのスナップショットを作成したい場合

  • ユーザが自身のホームディレクトリのスナップショットを作成したい場合

このような場合、ユーザやグループにパーミッションを与えるSnapper設定を作成できます。対応する.snapshotsディレクトリは、指定されたユーザによって読み込みおよびアクセス可能である必要があります。このための最も簡単な方法は、SYNC_ACLオプションをyes (はい)に設定することです。

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

次のすべての手順はrootとして実行する必要があります。

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

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

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

    snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"
  4. これで、指定されたユーザやグループが特定のSnapper設定を使用できます。以下のようにlistコマンドを使ってテストできます。

    www_admin:~ > snapper -c web_data list

4.5 スナップショットの手動での作成と管理

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

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

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

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

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

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

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

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

  • Userdata (ユーザデータ): カンマ区切りの「キー=値」のリスト形式でカスタムデータを指定できる、拡張用の項目です。(例:reason=testing, project=foo)。このフィールドは、スナップショットに重要のマークを付ける場合(important=yes)や、スナップショットを作成したユーザを一覧にする場合(user=tux)にも使用されます。

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

4.5.1.1 スナップショットの種類

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

pre(事前)

変更のファイルシステムのスナップショットです。各pre(事前)スナップショットには、対応するpost(事後)スナップショットがあります。たとえば、YaST/Zypperの自動スナップショットに対して使用します。

post(事後)

変更のファイルシステムのスナップショットです。各post(事後)スナップショットには、対応するpre(事前)スナップショットがあります。たとえば、YaST/Zypperの自動スナップショットに対して使用します。

single(単一)

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

4.5.1.2 クリーンアップアルゴリズム

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

number(番号)

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

timeline (タイムライン)

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

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

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

4.5.2 スナップショットの作成

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

ヒント
ヒント: Snapshot Description

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

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

説明付きのスタンドアロンのスナップショット(種類は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設定で作成します。設定のタイムライン(timeline)クリーンアップアルゴリズムで指定された条件が満たされると、ファイルが自動的に削除されます。

snapper create --type pre--print-number--description "Before the Apache config cleanup"--userdata "important=yes"

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

snapper create --type post--pre-number 30--description "After the Apache config cleanup"--userdata "important=yes"

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

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

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

4.5.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.5.4 スナップショットの削除

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

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

ヒント
ヒント: スナップショットペアの削除

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

snapper delete 65

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

snapper -c home delete 89 90

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

ヒント
ヒント: 参照されていないスナップショットの削除

Btrfsスナップショットが存在していても、メタデータを持つsnapperのXMLファイルではない場合があります。したがって、snapperに対しては、スナップショットは存在しません。SNAPSHOT_NUMBERディレクトリを削除できるようにするには、まずBtrfsサブボリュームを削除する必要があります。

btrfs subvolume delete /.snapshots/SNAPSHOTNUMBER/snapshot
    rm -rf /.snapshots/SNAPSHOTNUMBER
    
ヒント
ヒント: 古いスナップショットほどディスク容量を使用

ハードディスクの容量を空けるためにスナップショットを削除する場合は、古いスナップショットから削除します。古いスナップショットほど、多くの容量を使用します。

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

4.6 よくある質問とその回答

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

一部のディレクトリについては、スナップショットから除外することに決定しました。リストと理由については、スナップショットから除外されるディレクトリを参照してください。スナップショットからパスを除外するため、これらのパス用にサブボリュームを作成しています。

スナップショットはどのくらいのディスク容量を使用しますか? また、どうすればディスク容量を解放できますか?

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

スナップショットを含むBtrfsパーティションの容量を空けるには、ファイルではなく、不要なスナップショットを削除する必要があります。古いスナップショットは、最近のスナップショットよりも多くの領域を使用します。詳細については、4.1.1.3項 「スナップショットのアーカイブの制御」を参照してください。

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

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

はい。詳細については、4.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。

Snapperに関する詳細情報はどこで入手できますか?

Snapperのホームページ(http://snapper.io/)を参照してください。

このページを印刷