Linuxでファイルシステムのスナップショットを作成し、ロールバックできるようにすることは、過去に要望の多かった機能です。Snapperを、BtrfsファイルシステムまたはシンプロビジョンのLVMボリュームと併用することによって対応できます。
Btrfsは、Linux用の新しい書き込み時コピー方式のファイルシステムで、サブボリューム(各物理パーティション内の1つまたは複数の個別にマウント可能なファイルシステム)のファイルシステムスナップショット(特定時点におけるサブボリュームの状態のコピー)をサポートします。スナップショットは、XFS、Ext4、またはExt3でフォーマットされたシンプロビジョンLVMボリュームでもサポートされています。Snapperを使用してこれらのスナップショットを作成および管理できます。Snapperには、コマンドラインおよびYaSTインタフェースがあります。SUSE Linux Enterprise Serverバージョン12から、Btrfsスナップショットからブートすることもできるようになりました。詳細については、4.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
Snapperを使用して、次のタスクを実行できます。
zypperやYaSTで行ったシステムの変更を元に戻す。詳細については、4.2項 「Snapperを使用した変更の取り消し」を参照してください。
古いスナップショットからファイルを復元する。詳細については、4.2.2項 「Snapperを使用したファイルの復元」を参照してください。
スナップショットからブートすることによってシステムをロールバックする。詳細については、4.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
オンザフライでスナップショットを手動作成し、既存のスナップショットを管理する。詳細については、4.5項 「スナップショットの手動での作成と管理」を参照してください。
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
ログファイルの場所。壊れたシステムのロールバック後にログファイルを分析できるようにスナップショットから除外されます。
SUSE Linux Enterprise Desktopには、適切なデフォルト設定が用意されていて、ほとんどの使用事例ではこのままで十分です。ただし、スナップショットの自動作成およびスナップショットの維持管理のあらゆる側面をニーズに合わせて設定できます。
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/yast2でUSE_SNAPPERをyes (はい)に設定します。
無効化.
/etc/sysconfig/yast2でUSE_SNAPPERをno (いいえ)に設定します。
管理スナップショットはデフォルトで有効になっています。
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>
match属性は、パターンがUnixシェルと同様のワイルドカードであるか( | |
指定されたパターンが一致し、対応するパッケージに重要のマークが付いている場合(カーネルパッケージなど)、そのスナップショットにも重要のマークが付きます。 | |
パッケージ名に一致するパターン。特殊文字は、 | |
この行は、無条件にすべてのパッケージに一致します。 |
この設定スナップショットでは、パッケージのインストール時に常にペアが作成されます(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>
スナップショットはディスク容量を占有します。ディスク容量不足によるシステム停止が発生しないようにするために、古いスナップショットは自動的に削除されます。デフォルトでは、次のスナップショットが保持されます。
最近10日間、10カ月間、および10年間の最初のスナップショット
重要のマークが付いている最近の10個のインストールスナップショットペア
最近の10個のインストール/管理スナップショット
これらの値の変更方法については、4.4.1項 「既存の設定の管理」を参照してください。
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)を使用してファイルシステムを指定する必要があります。ext3、etx4、またはxfsは、FILESYSTEMの有効な値です。例:
snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm
4.4.1項 「既存の設定の管理」で説明したように、必要に応じてこの設定を調整できます。
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などの一部のシステムファイルは復元しないでください。このため、「必ず」、変更されたファイルとその差分をよく確認してください。どうしても元に戻すことが必要なファイルのみ復元してください。
インストール時にルートパーティションをBtrfsで設定すると、Snapper (YaSTまたはZypperによる変更のロールバックがあらかじめ設定されている)が自動的にインストールされます。YaSTモジュールまたはZypperトランザクションを開始するたびに、2つのスナップショットが作成されます。モジュール開始前のファイルシステムの状態をキャプチャした「事前スナップショット」と、モジュール完了後の状態をキャプチャした「事後スナップショット」です。「」「」
YaSTのSnapperモジュールまたはsnapperコマンドラインツールを使用して、「事前スナップショット」「」からファイルを復元し、YaST/Zypperによる変更を元に戻すことができます。また、2つのスナップショットを比較して、どのファイルが変更されているか調べることができます。2つのバージョンのファイルの違いを表示することもできます(diff)。
YaSTのセクションにあるモジュールを起動するか、「yast2 snapper」と入力します。
がになっていることを確認します。 独自のSnapper設定を手動で追加していない限り、常にそのようになっています。
リストから事前スナップショットと事後スナップショットのペアを選択します。YaSTのスナップショットペアもZypperのスナップショットペアも、種類はです。YaSTのスナップショットの場合はに「zypp(y2base)」と表示され、Zypperのスナップショットの場合は「zypp(zypper)」と表示されます。
をクリックすると、2つのスナップショット間のファイルの差異がリストに表示されます。
ファイルのリストを確認します。事前および事後のファイル間の「差異」「」を表示するには、リストからファイルを選択します。
1つまたは複数のファイルを復元するには、該当するチェックボックスをオンにして、関連するファイルまたはディレクトリを選択します。をクリックし、をクリックして操作を確認します。
単一のファイルを復元する場合は、ファイル名をクリックして差分を表示します。をクリックし、をクリックして選択内容を確認します。
snapperコマンドによる変更の取り消し #
snapper list を実行すると、YaSTおよびZypperのスナップショットリストが表示されます。YaSTのスナップショットの場合はに「-t pre-postyastモジュール名」と表示され、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)
スナップショットのペア間で変更されたファイルのリストを取得するには、以下を実行します。snapper status PREPOST. 内容が変更されたファイルにはのマーク、追加されたファイルにはのマーク、削除されたファイルにはのマークが付いています。
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
特定のファイルの差異を表示するには、以下を実行します。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
[...]
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のツールを使用して、ユーザを削除することを強くお勧めします。
インストールスナップショットおよび管理スナップショットとは別に、Snapperはタイムラインスナップショットを作成します。このバックアップ用スナップショットを使用して、誤って削除したファイルを復元したり、ファイルの以前のバージョンを復元したりできます。Snapperの差分抽出機能を使用して、ある時点でどのファイルが変更されたのか調べることもできます。
ファイルの復元機能は、特に、デフォルトではスナップショットが作成されないサブボリュームまたはパーティションに存在するデータにとって重要です。ホームディレクトリからファイルを復元できるようにするには、たとえば、/home用に、自動的にタイムラインスナップショットを作成する別個のSnapper設定を作成します。手順については、4.4項 「Snapper設定の作成と変更」を参照してください。
ルートファイルシステムから作成されたスナップショット(Snapperのルート設定で定義されています)を使用して、システムロールバックを実行できます。このようなロールバックを実行する場合にお勧めする方法は、そのスナップショットからブートしてからロールバックを実行する方法です。詳細については、4.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
次に説明するように、ルートファイルシステムスナップショットからすべてのファイルを復元することによってロールバックを実行することもできます。ただし、これはお勧めできません。たとえば、/etcディレクトリから環境設定ファイルなど単一のファイルを復元できますが、スナップショットからファイルの完全なリストを復元することはできません。
この制限は、ルートファイルシステムから作成されたスナップショットにのみ影響します。
YaSTのセクションにあるモジュールを起動するか、「yast2 snapper」と入力します。
スナップショットの選択肢からを選択します。
ファイルの復元元からタイムラインスナップショットを選択し、を選択します。タイムラインスナップショットは、タイプがで、説明の値がであるスナップショットです。
ファイル名をクリックしてテキストボックスからファイルを選択します。スナップショットバージョンと現在のシステムとの差分が表示されます。復元対象ファイルを選択するチェックボックスをオンにします。復元するすべてのファイルに対してこれを行います。
をクリックし、をクリックして操作を確認します。
snapperコマンドを使用したファイルの復元 #次のコマンドを実行して、特定の設定のタイムラインスナップショットのリストを取得します。
snapper -c CONFIG list -t single | grep timeline
CONFIGは、既存のSnapper設定に置き換える必要があります。snapper list-configsを使用してリストを表示します。
次のコマンドを実行して、指定のスナップショットの変更ファイルのリストを取得します。
snapper -c CONFIG status SNAPSHOT_ID>..0
SNAPSHOT_IDをファイルの復元元のスナップショットIDで置き換えます。
オプションで、次のコマンドを実行して、現在のファイルバージョンとスナップショットからのバージョンとの差分を一覧にします。
snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME
<FILE NAME>を指定しない場合は、すべてのファイルの差分が表示されます。
1つ以上のファイルを復元するには、以下を実行します
snapper -c CONFIG -v undochange
SNAPSHOT_ID..0 FILENAME1 FILENAME2ファイル名を指定しない場合は、変更されたすべてのファイルが復元されます。
SUSE Linux Enterprise Desktopに含まれているGRUB 2バージョンは、Btrfsスナップショットからブートできます。Snapperのロールバック機能と併用することで、誤設定されたシステムを回復できます。Snapperによって作成されたすべてのスナップショットはブートに使用することができ、ブートメニューから選択できます。
ブート可能なスナップショットは、ルートファイルシステムからのスナップショット(Snapperのルート設定によって定義されます)のみです。
スナップショットをブートする場合、スナップショットに含まれているファイルシステムの該当部分が読み込み専用でマウントされます。スナップショットから除外されている他のすべてのファイルシステムと該当部分は読み書き可能でマウントされ、変更できます。
スナップショットを操作してデータを復元する場合、Snapperが処理可能なシナリオとして、根本的に異なる次の2つのシナリオがあることを理解することが重要です。
4.2項 「Snapperを使用した変更の取り消し」で説明されているように、変更を取り消す場合は、2つのスナップショットが比較され、これらの2つのスナップショット間の変更が元に戻されます。この方法を使用すると、選択したファイルを復元から明示的に除外することもできます。
次に説明する方法でロールバックを実行すると、システムはスナップショットが作成された状態にリセットされます。
ブート可能なスナップショットからロールバックを行うには、次の要件を満たす必要があります。デフォルトインストールを行った場合、システムはそのように設定されます。
ルートファイルシステムは、Btrfsである必要があります。LVMボリュームスナップショットからのブートはサポートされていません。
ルートファイルシステムは、単一のデバイス、単一のパーティション、および単一のサブボリューム上にある必要があります。/srvなどスナップショットから除外されるディレクトリ(完全なリストについては、スナップショットから除外されるディレクトリを参照)は、別のパーティション上に存在していても構いません。
システムは、インストールされたブートローダを介してブート可能である必要があります。
ブート可能なスナップショットからのロールバックを実行するには、次の手順に従います。
システムをブートします。ブートメニューから、を選択して、ブートするスナップショットを選択します。スナップショットのリストが日別に一覧にされます。最新のスナップショットが先頭に表示されます。
システムにログインします。すべてが予期したとおりに動作しているかどうかを注意深く確認します。スナップショットの一部であるディレクトリには書き込むことができないことに注意してください。他のディレクトリに書き込むデータは、次に行う操作にかかわらず、失われることは「ありません」。
ロールバックを実行するかどうかに応じて、次のステップを選択します。
システムがロールバックが不要な状態である場合、再起動して現在のシステム状態でブートするか、再起動して別のスナップショットを選択するか、または再起動してレスキューシステムを起動します。
ロールバックを実行する場合は、次のコマンドを実行します。
sudo snapper rollback
その後、再起動します。ブート画面で、デフォルトのブートエントリを選択して、復元されたシステムで再起動します。
システム全体をスナップショット作成時点とまったく同じ状態に復元する、システムの「完全な」ロールバックは不可能です。
ルートファイルシステムのスナップショットには、すべてのディレクトリが含まれるわけではありません。詳細および理由については、スナップショットから除外されるディレクトリを参照してください。そのため、一般的にこれらのディレクトリのデータは復元されないため、次の制限が生じます。
スナップショットから除外されるサブボリューム(/optなど)にデータをインストールするアプリケーションやアドオンは、アプリケーションデータの他の部分がスナップショットに含まれるサブボリュームにもインストールされている場合、ロールバック後に動作しない場合があります。この問題を解決するには、アプリケーションまたはアドオンを再インストールします。
スナップショットと現在のシステムでファイルのパーミッションまたは所有権、あるいはその両方がアプリケーションによって変更されている場合、そのアプリケーションは該当するファイルにアクセスできない場合があります。ロールバック後、影響を受けるファイルのパーミッションまたは所有権、あるいはその両方をリセットします。
サービスまたはアプリケーションがスナップショットと現在のシステムとの間に新しいデータ形式を設定した場合、ロールバック後、そのアプリケーションは影響を受けたデータファイルを読み込めない場合があります。
/srvのようなサブボリュームには、コードとデータが混在する場合があります。ロールバックの結果、コードが機能しなくなる場合があります。たとえば、PHPのバージョンがダウングレードされ、WebサーバのPHPスクリプトが壊れる場合があります。
ロールバックによりシステムからユーザが削除された場合、これらのユーザが、スナップショットから除外されているディレクトリ内で所有していたデータは削除されません。同じユーザIDを持つユーザが作成された場合、そのユーザは該当ファイルを継承します。findのようなツールを使用して、孤立したファイルを検索して削除します。
ブートローダはロールバックできません。これは、ブートローダのすべての「」「ステージ」が整合している必要があるためです。これは、ロールバックを実行する際には保証できません。
Snapperの動作は、各パーティションまたはBtrfsサブボリュームに固有の設定ファイルで定義できます。これらの設定ファイルは、/etc/snapper/configs/に保存されます。/ディレクトリに対してSnapperでインストールされるデフォルトの設定ファイルがrootです。このファイルは、YaSTとZypperのスナップショットを作成し管理するほか、/に対する毎時のバックアップスナップショットも作成および管理します。
Btrfsでフォーマットされたその他のパーティションやBtrfsパーティション上の既存のサブボリュームに対して、独自の設定ファイルを作成できます。以下の例では、/srv/wwwにマウントされたBtrfsフォーマットのパーティションに保存されたWebサーバデータをバックアップするSnapper設定を作成します。
設定が作成された後で、snapper自体またはYaSTのモジュールを使用して、これらのスナップショットからファイルを復元できます。YaSTの場合はを選択する必要があります。snapperの場合は、グローバルスイッチ-cを使用して設定を指定する必要があります(例: snapper )。
-c myconfig list
新しいSnapper設定を作成するには、snapper create-configを実行します。
snapper -c www-data1 create-config /srv/www2
このコマンドにより、新しい設定ファイル/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
snapperは、既存の設定を管理するためのサブコマンドを備えています。これらの設定を一覧、表示、削除、および変更することができます。
既存の設定をすべて取得するには、snapper list-configsコマンドを使用します。
root # snapper list-configs
Config | Subvolume
-------+----------
root | /
usr | /usr
local | /local
設定を削除するには、snapper サブコマンドを使用します。Configは、-c CONFIG delete-configsnapper list-configsで表示される設定名に置き換える必要があります。
指定した設定を表示するには、snapper サブコマンドを使用します。Configは、-c CONFIG get-configsnapper list-configsで表示される設定名に置き換える必要があります。設定オプションの詳細については、4.4.1.1項 「設定データ」を参照してください。
指定した設定のオプションを変更するには、snapper サブコマンドを使用します。Configは、-c CONFIG set-config OPTION=VALUEsnapper list-configsで表示される設定名に置き換える必要があります。OPTIONおよびVALUEに指定可能な値は、4.4.1.1項 「設定データ」に一覧にされています。
各設定には、コマンドラインから変更可能なオプションのリストが含まれています。次のリストは、各オプションの詳細を示しています。
ALLOW_GROUPS、ALLOW_USERS
通常のユーザにスナップショットを使用するパーミッションを付与します。詳細については、4.4.1.2項 「通常ユーザとしてのSnapperの使用」を参照してください。
デフォルト値は""です。
BACKGROUND_COMPARISON
事前および事後スナップショットを作成後にバックグラウンドで比較するかどうかを定義します。
デフォルト値はyes (はい)です。
yes (はい)に設定した場合、違いがない事前および事後スナップショットのペアは削除されます。
デフォルト値はno (いいえ)です。
違いがない事前および事後スナップショットのペアが自動削除の対象となるまでの最短期間を秒単位で定義します。
デフォルト値は1800です。
FSTYPE
パーティションのファイルシステムタイプ。変更しません。
デフォルト値はbtrfsです。
NUMBER_CLEANUP
合計スナップショット数がNUMBER_LIMITで指定した数を超え、かつNUMBER_MIN_AGEで指定した保存期間を超えた場合に、古いインストールスナップショットおよび管理スナップショットを自動的に削除するかどうかを定義します。有効な値: yes (はい)、no (いいえ)
デフォルト値はno (いいえ)です。
NUMBER_LIMIT、NUMBER_LIMIT_IMPORTANT、およびNUMBER_MIN_AGEは常に評価されます。スナップショットが削除されるのは、「すべての」条件を満たしている場合のみです。保存期間に関係なく一定数のスナップショットを常に保持したい場合は、NUMBER_MIN_AGEを0に設定します。一方、一定の保存期間を超えたスナップショットをすべて削除したい場合は、NUMBER_LIMITおよびNUMBER_LIMIT_IMPORTANTを0に設定します。
NUMBER_LIMIT
NUMBER_CLEANUPがyesに設定されている場合に保持する、重要とマークされていないインストールスナップショットおよび管理スナップショットのペア数を定義します。最も新しいスナップショットのみが保持されます。
デフォルト値は50です。
NUMBER_LIMIT_IMPORTANT
NUMBER_CLEANUPがyesに設定されている場合に保持する、重要とマークされたスナップショットペアの数を定義します。最も新しいスナップショットのみが保持されます。
デフォルト値は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_DAILY、TIMELINE_LIMIT_HOURLY、TIMELINE_LIMIT_MONTHLY、 TIMELINE_LIMIT_YEARLY
1時間、1日、1カ月間、1年間に保持するスナップショット数です。
各エントリのデフォルト値は10です。
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_AGEとTIMELINE_LIMIT_*は常に両方が評価されます。この例では、スナップショットが削除対象となるまでの最短期間が30分(180秒)に設定されています。毎時のスナップショットを作成するので、最新のスナップショットだけが保持されることになります。TIMELINE_LIMIT_DAILYをゼロ以外に設定すると、1日の最初のスナップショットが保持されることになります。
1時間ごと:最新の10個のスナップショットが保持されます。
1日ごと:それぞれの日の最初のスナップショットが、直近の10日分保持されます。
1カ月ごと:それぞれの月の最後の日に作成された最初のスナップショットが、直近の10カ月分保持されます。
1年ごと:それぞれの年の最後の日に作成された最初のスナップショットが、直近の10年分保持されます。
TIMELINE_MIN_AGE
スナップショットが自動削除の対象となるまでの最短期間を秒単位で定義します。
デフォルト値は1800です。
デフォルトでは、rootしかSnapperを使用できません。しかし、以下のような場合、特定のグループまたはユーザがスナップショットを作成したり、スナップショットを使って変更を取り消したりできる必要があります。
Webサイト管理者が/srv/wwwのスナップショットを作成したい場合
ユーザが自身のホームディレクトリのスナップショットを作成したい場合
このような場合、ユーザやグループにパーミッションを与えるSnapper設定を作成できます。対応する.snapshotsディレクトリは、指定されたユーザによって読み込みおよびアクセス可能である必要があります。このための最も簡単な方法は、SYNC_ACLオプションをyes (はい)に設定することです。
次のすべての手順はrootとして実行する必要があります。
ユーザがSnapperを使用するパーティションまたはサブボリュームにSnapper設定がない場合は、作成します。手順については、4.4項 「Snapper設定の作成と変更」を参照してください。例:
snapper --config web_data create /srv/www
/etc/snapper/configs/CONFIGに設定ファイルを作成します。CONFIGは、前の手順で-c/--configを使用して指定される値です(/etc/snapper/configs/web_dataなど)。必要に応じて設定ファイルを調整します。詳細は4.4.1項 「既存の設定の管理」を参照してください。
ALLOW_USERSとALLOW_GROUPS、またはその一方の値を設定し、ユーザやグループにパーミッションを与えます。複数のエントリはSpaceで区切ってください。たとえば、ユーザwww_adminにパーミッションを与えるには、次のように入力します。
snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"
これで、指定されたユーザやグループが特定のSnapper設定を使用できます。以下のようにlistコマンドを使ってテストできます。
www_admin:~ > snapper -c web_data list
Snapperは設定によって自動的にスナップショットを作成および管理するだけのものではありません。コマンドラインツールまたはYaSTモジュールを使用して、手動でスナップショットのペア(「」「事前および事後」)や単一のスナップショットを作成することもできます。
Snapperのすべての操作は既存の設定に対して実行されます(詳細は4.4項 「Snapper設定の作成と変更」を参照)。スナップショットを作成するには、対象のパーティションまたはボリュームに対して設定が存在する必要があります。デフォルトで、システム設定(root)が使用されます。独自の設定に対してスナップショットを作成または管理する場合は、明示的にその設定を選択する必要があります。YaSTのドロップダウンボックスを使用するか、コマンドラインで-cを指定します(snapper )。
-c MYCONFIG COMMAND
各スナップショットには、スナップショット自体とメタデータが含まれています。スナップショットを作成する場合は、メタデータも指定する必要があります。スナップショットを修正すると、メタデータが変更されます。コンテンツを修正することはできません。各スナップショットについて、以下のメタデータを利用できます。
Type(種類):スナップショットの種類です。詳細は4.5.1.1項 「スナップショットの種類」を参照してください。このデータは変更できません。
Number(番号):スナップショットの一意の番号。このデータは変更できません。
Pre Number(前番号):対応する事前スナップショットの番号を指定します。事後スナップショットにのみ適用されます。このデータは変更できません。
Description(説明):スナップショットの説明です。
Userdata (ユーザデータ): カンマ区切りの「キー=値」のリスト形式でカスタムデータを指定できる、拡張用の項目です。(例:reason=testing, project=foo)。このフィールドは、スナップショットに重要のマークを付ける場合(important=yes)や、スナップショットを作成したユーザを一覧にする場合(user=tux)にも使用されます。
Cleanup-Algorithm(クリーンアップアルゴリズム):スナップショットのクリーンアップアルゴリズムです。詳細は4.5.1.2項 「クリーンアップアルゴリズム」を参照してください。
Snapperには、事前(pre)、事後(post)、および単一(single)の3種類のスナップショットがあります。これらは物理的には同じものですが、Snapperでは別のものとして扱われます。
pre(事前)
変更前のファイルシステムのスナップショットです。各pre(事前)スナップショットには、対応するpost(事後)スナップショットがあります。たとえば、YaST/Zypperの自動スナップショットに対して使用します。
post(事後)
変更後のファイルシステムのスナップショットです。各post(事後)スナップショットには、対応するpre(事前)スナップショットがあります。たとえば、YaST/Zypperの自動スナップショットに対して使用します。
single(単一)
スタンドアロンのスナップショットです。たとえば、自動毎時スナップショットに使用します。これは、スナップショットを作成する際のデフォルトの種類です。
Snapperには、古いスナップショットのクリーンアップアルゴリズムが3種類あります。このアルゴリズムは、日次のcronジョブとして実行されます。クリーンアップの頻度は、パーティションまたはサブボリュームのSnapper設定で定義されます(詳細は4.4.1項 「既存の設定の管理」を参照)。
スナップショットが特定の数に達すると、古いスナップショットを削除します。
特定の期間が経過したスナップショットを削除しますが、毎時、毎日、毎月、および毎年のスナップショットを一定数保持します。
事前と事後のスナップショットに差分がない場合、そのペアを削除します。
スナップショットを作成するには、snapper createを実行するか、YaSTのモジュールでをクリックします。以下は、コマンドラインを使ってスナップショットを作成する場合の例です。YaSTインタフェースを使用している場合、これらの例は簡単に採用できます。
後で識別しやすくするため、わかりやすい説明を指定しておいてください。ユーザデータオプションを使って、さらに情報を指定することもできます。
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"
番号30のpreスナップショットとペアになるpostスナップショットを作成します。「」「事前」と「」「事後」の状態を保存するために使用されるスナップショットペアを作成するために必要な、2番目のコマンドです。スナップショットには重要のマークが付きます。
snapper create --command COMMAND--description "Before and after COMMAND"
COMMANDの実行前後に自動的にスナップショットを作成します。このオプションを使用できるのは、コマンドラインでsnapperを使用する場合のみです。
Snapperでは、説明、クリーンアップアルゴリズム、およびスナップショットのユーザデータを修正できます。それ以外のメタデータは変更できません。以下は、コマンドラインを使ってスナップショットを修正する場合の例です。YaSTインタフェースを使用している場合、これらの例は簡単に採用できます。
コマンドラインでスナップショットを修正するには、スナップショットの番号がわかっている必要があります。snapperを実行すると、すべてのスナップショットとその番号が表示されます。
list
YaSTのモジュールでは、すでにすべてのスナップショットのリストが表示されています。リストからスナップショットを選択し、をクリックします。
snapper modify --cleanup-algorithm "timeline" 10
デフォルト(root)設定のスナップショット10番のメタデータを修正します。クリーンアップアルゴリズムがtimelineに設定されます。
snapper --config home modify --description "daily backup" -cleanup-algorithm "timeline"120
カスタム設定homeのスナップショット120番のメタデータを修正します。新しい説明が設定され、クリーンアップアルゴリズムを無しに設定します。
YaSTのモジュールを使用してスナップショットを削除するには、リストからスナップショットを選択してをクリックします。
コマンドラインツールを使ってスナップショットを削除するには、スナップショットの番号が分かっている必要があります。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項 「クリーンアップアルゴリズム」を参照してください。
/var/log、/tmpなどのディレクトリの変更が表示されませんが、なぜですか?
一部のディレクトリについては、スナップショットから除外することに決定しました。リストと理由については、スナップショットから除外されるディレクトリを参照してください。スナップショットからパスを除外するため、これらのパス用にサブボリュームを作成しています。
Btrfsファイルシステムではdfが正しいディスクの使用率を表示しないため、コマンドbtrfs filesystem df MOUNT_POINTを使用する必要があります。現時点では、Btrfsツールで、スナップショットが使用するディスク容量を表示できません。
スナップショットを含むBtrfsパーティションの容量を空けるには、ファイルではなく、不要なスナップショットを削除する必要があります。古いスナップショットは、最近のスナップショットよりも多くの領域を使用します。詳細については、4.1.1.3項 「スナップショットのアーカイブの制御」を参照してください。
あるサービスパックから別のサービスパックにアップグレードすると、多くのデータが変更される(パッケージのアップデート)ので、スナップショットにより、システムのサブボリュームで多くのディスク容量が使用されます。これらのスナップショットが不要になった場合は、手動で削除することをお勧めします。詳細については、4.5.4項 「スナップショットの削除」を参照してください。
はい。詳細については、4.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
Snapperのホームページ(http://snapper.io/)を参照してください。