Linuxでファイルシステムのスナップショットを作成し、ロールバックできるようにすることは、過去に要望の多かった機能です。Snapperを、BtrfsファイルシステムまたはシンプロビジョンのLVMボリュームと併用することによって、それに対応できます。
Btrfsは、Linux用の新しい書き込み時コピー方式のファイルシステムで、サブボリューム(各物理パーティション内の1つまたは複数の個別にマウント可能なファイルシステム)のファイルシステムスナップショット(特定時点におけるサブボリュームの状態のコピー)をサポートします。スナップショットは、XFS、Ext4、またはExt3でフォーマットされたシンプロビジョンLVMボリュームでもサポートされています。Snapperを使用してこれらのスナップショットを作成および管理できます。Snapperには、コマンドラインおよびYaSTインタフェースがあります。SUSE Linux Enterprise Serverバージョン12から、Btrfsスナップショットからブートすることもできるようになりました。詳細については、6.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
Snapperを使用して、次のタスクを実行できます。
zypperやYaSTで行ったシステムの変更を元に戻す。詳細については、6.2項 「Snapperを使用した変更の取り消し」を参照してください。
古いスナップショットからファイルを復元する。詳細については、6.2.2項 「Snapperを使用したファイルの復元」を参照してください。
スナップショットからブートすることによってシステムをロールバックする。詳細については、6.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
オンザフライでスナップショットを手動作成し、既存のスナップショットを管理する。詳細については、6.5項 「スナップショットの手動での作成と管理」を参照してください。
SUSE Linux Enterprise Desktop上のSnapperは、システム変更の「「取り消しおよび回復ツール」」として機能するように設定されています。デフォルトでは、SUSE Linux Enterprise Desktopのルートパーティション(/)はBtrfsでフォーマットされています。ルートパーティション(/)に十分な容量(約16GB以上)がある場合、スナップショットの作成が自動的に有効になります。デフォルトでは、/以外のパーティション上でスナップショットを作成することはできません。
スナップショットを作成すると、スナップショットとスナップショット元のファイルは、 いずれもファイルシステム内の同じブロックを指します。そのため、最初は、スナップショットが余分にディスク容量を占めることはありません。元のファイルシステムのデータが変更されると、変更されたデータブロックがコピーされ、古いデータブロックはスナップショットのように保持されます。このため、スナップショットは、変更されたデータと同じ容量を占めます。こうして、時間が経過するにつれて、スナップショットの領域は大きくなっていきます。その結果、スナップショットを含むBtrfsファイルシステムからファイルを削除しても、ディスクの空き容量が増えないことがあります。
スナップショットは常に、スナップショット作成元と同じパーティションまたはサブボリュームに保存されます。別のパーティションまたはサブボリュームにスナップショットを保存することはできません。
その結果、スナップショットを含むパーティションは、「通常の」パーティションよりも大きくする必要があります。具体的な容量は、保持するスナップショット数やデータの変更頻度によって異なります。一般的には、通常のファイルシステムの2倍程度を検討してください。ディスク容量が不足しないようにするために、古いスナップショットは自動的にクリーンアップされます。詳細については、6.1.3.4項 「スナップショットのアーカイブの制御」を参照してください。
スナップショット自体は技術的な意味では同じですが、作成された状況に基づいて、次の3種類のスナップショットを区別しています。
1時間ごとに1つのスナップショットが作成されます。古いスナップショットは自動的に削除されます。デフォルトで、最近10日間、10カ月間、10年間の最初のスナップショットが保持されます。タイムラインスナップショットはデフォルトで無効になっています。
YaSTまたはZypperで1つ以上のパッケージをインストールする場合、常にスナップショットのペアが作成されます。インストール開始前のスナップショット(「事前」)と、インストール完了後のスナップショット(「事後」)です。カーネルなどの重要なコンポーネントがインストールされた場合、スナップショットのペアは重要とマークされます(important=yes)。古いスナップショットは自動的に削除されます。デフォルトでは、最新の10個の重要なスナップショット、および最新の10個の「通常」のスナップショット(管理スナップショットを含む)が保持されます。インストールスナップショットはデフォルトで有効になっています。
システムをYaSTで管理する場合、常にスナップショットのペアが作成されます。YaSTモジュール開始時のスナップショット(「事前」)と、モジュール終了時のスナップショット(「事後」)です。古いスナップショットは自動的に削除されます。デフォルトでは、最新の10個の重要なスナップショットと最新の10個の「通常」のスナップショット(インストールスナップショットを含む)が保持されます。管理スナップショットはデフォルトで有効になっています。
一部のディレクトリは、さまざまな理由により、スナップショットから除外する必要があります。次のリストは、除外されるすべてのディレクトリを示しています。
/boot/grub2/i386-pc、/boot/grub2/x86_64-efi、/boot/grub2/powerpc-ieee1275、/boot/grub2/s390x-emu
ブートローダ設定のロールバックはサポートされていません。これらのディレクトリは、アーキテクチャ固有です。最初の2つのディレクトリはAMD64/Intel 64マシン上に存在し、その後の2つのディレクトリはそれぞれIBM POWERとIBM z Systems上に存在します。
/home
/homeが独立したパーティションに存在していない場合、ロールバック時にデータが失われのを避けるために除外されます。
/opt、/var/opt
サードパーティ製品は通常、/optにインストールされます。ロールバック時にこれらのアプリケーションがアンインストールされるのを避けるために除外されます。
/srv
WebおよびFTPサーバ用のデータが含まれています。ロールバック時にデータが失われるのを避けるために除外されます。
/tmp、/var/tmp、/var/cache、/var/crash
スナップショットから除外される一時ファイルとキャッシュを含むすべてのディレクトリ。
/usr/local
このディレクトリは、ソフトウェアの手動インストール時に使用します。ロールバック時にこれらのインストール済みソフトウェアがアンインストールされるのを避けるために除外されます。
/var/lib/libvirt/images
libvirtで管理される仮想マシンイメージのデフォルトの場所。ロールバック時に仮想マシンイメージが古いバージョンに置き換えられないようにするために除外されます。デフォルトでは、このサブボリュームは、no copy on writeオプションを使用して作成されます。
/var/lib/mailman、/var/spool
電子メールまたは電子メールキューを含むディレクトリは、ロールバック後に電子メールが失われるのを避けるために除外されます。
/var/lib/named
DNSサーバ用のゾーンデータが含まれます。ネームサーバがロールバック後に確実に動作できるように、スナップショットから除外されます。
/var/lib/mariadb、/var/lib/mysql、/var/lib/pgqsl
これらのディレクトリにはデータベースのデータが格納されます。デフォルトでは、これれのサブボリュームは、no copy on writeオプションを使用して作成されます。
/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>
/階層下に新規のサブボリュームを作成し、永続的にマウントすることができます。ただし、スナップショット内に作成してはいけません。ロールバック後にスナップショットを削除できなくなるためです。
SUSE Linux Enterprise Desktopは、/@/サブボリュームが設定されており、このサブボリュームは、/opt、/srv、/home、その他の永続サブボリュームの独立したルートとしての役割を果たします。作成し、永続的にマウントする新規のサブボリュームは、この初期のルートファイルシステムに作成しなければなりません。
そのように設定するには、次のコマンドを実行します。この例では、新規サブボリューム、/usr/importantは/dev/sda2から作成されます。
mount /dev/sda2 -o subvol=@ /mnt btrfs subvolume create /mnt/usr/important umount /mnt
/etc/fstabの該当エントリは、次のようになります。
/dev/sda2 /usr/important btrfs subvol=@/usr/important 0 0
スナップショットはディスク容量を占有します。ディスク容量が不足してシステムが停止しないようにするために、古いスナップショットは自動的に削除されます。デフォルトでは、最大10個の重要なインストールスナップショットと管理スナップショット、および最大10個の標準のインストールスナップショットと管理スナップショットが保持されます。これらのスナップショットがルートファイルシステムのサイズの50%超を占有する場合、追加のスナップショットは削除されます。最低でも、4つの重要なスナップショットと2つの標準スナップショットは常に保持されます。
これらの値の変更方法については、6.4.1項 「既存の設定の管理」を参照してください。
Snapperは、Btrfsファイルシステムのスナップショット作成だけでなく、XFS、Ext4、またはExt3でフォーマットされたシンプロビジョンLVMボリュームのスナップショット作成にも対応しています(通常のLVMボリュームのスナップショットには「対応していません」)。LVMボリュームに関する詳細および設定の手順については、Section 7.2, “LVM Configuration”を参照してください。
シンプロビジョンLVMボリュームでSnapperを使用するには、そのようにSnapperの設定を作成する必要があります。LVMで、--fstype=lvm(FILESYSTEM)を使用してファイルシステムを指定する必要があります。ext3、etx4、またはxfsは、FILESYSTEMの有効な値です。例:
snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm
6.4.1項 「既存の設定の管理」で説明したように、必要に応じてこの設定を調整できます。
SUSE Linux Enterprise DesktopのSnapperは、zypperやYaSTで行った変更を取り消すことができるツールとしてあらかじめ設定されています。このために、Snapperは、zypperおよびYaSTの実行前後にスナップショットのペアを作成します。また、Snapperを使用して、誤って削除または変更したシステムファイルを復元することもできます。このためには、ルートパーティションのタイムラインスナップショットを有効にする必要があります。詳細については、6.1.3.1項 「スナップショットの無効化/有効化」を参照してください。
上記の自動スナップショットは、デフォルトでルートパーティションとそのサブボリュームに対して設定されます。カスタム設定を作成すれば、/homeなど、他のパーティションに対してスナップショット機能を使用できます。
スナップショットを操作してデータを復元する場合、Snapperが処理可能なシナリオとして、根本的に異なる次の2つのシナリオがあることを理解することが重要です。
次に説明されているように、変更を取り消す際には、2つのスナップショットが比較され、これらの2つのスナップショット間の変更が取り消されます。この方法を使用して、復元する必要があるファイルを明示的に選択できます。
6.3項 「スナップショットからのブートによるシステムロールバック」で説明されているように、ロールバックを実行すると、システムはスナップショットが作成された状態にリセットされます。
変更を取り消す場合は、現在のシステムとスナップショットを比較することもできます。このような比較から「すべての」ファイルを復元すると、ロールバックを実行した場合と同じ結果になります。ただし、ロールバックについては、6.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 -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)
スナップショットのペア間で変更されたファイルのリストを取得するには、「snapper status PRE」を入力します。POST. 内容が変更されたファイルにはのマーク、追加されたファイルにはのマーク、削除されたファイルにはのマークが付いています。
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設定を作成します。手順については、6.4項 「Snapper設定の作成と変更」を参照してください。
ルートファイルシステムから作成されたスナップショット(Snapperのルート設定で定義されています)を使用して、システムロールバックを実行できます。このようなロールバックを実行する場合にお勧めする方法は、そのスナップショットからブートしてからロールバックを実行する方法です。詳細については、6.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設定(root)で作成されたスナップショットのみがブート可能です。
SUSE Linux Enterprise Desktop 12 SP2の時点では、システムのロールバックは、ルートパーティションのデフォルトのサブボリューム設定が変更されていない場合にのみサポートされます。
スナップショットをブートする場合、スナップショットに含まれているファイルシステムの該当部分が読み込み専用でマウントされます。スナップショットから除外されている他のすべてのファイルシステムと該当部分は読み書き可能でマウントされ、変更できます。
スナップショットを操作してデータを復元する場合、Snapperが処理可能なシナリオとして、根本的に異なる次の2つのシナリオがあることを理解することが重要です。
6.2項 「Snapperを使用した変更の取り消し」で説明されているように、変更を取り消す場合は、2つのスナップショットが比較され、これらの2つのスナップショット間の変更が元に戻されます。この方法を使用すると、選択したファイルを復元から明示的に除外することもできます。
次に説明する方法でロールバックを実行すると、システムはスナップショットが作成された状態にリセットされます。
ブート可能なスナップショットからロールバックを行うには、次の要件を満たす必要があります。デフォルトインストールを行った場合、システムはそのように設定されます。
ルートファイルシステムは、Btrfsである必要があります。LVMボリュームスナップショットからのブートはサポートされていません。
ルートファイルシステムは、単一のデバイス、単一のパーティション、および単一のサブボリューム上にある必要があります。/srvなどスナップショットから除外されるディレクトリ(完全なリストについては、6.1.2項 「スナップショットから除外されるディレクトリ」を参照)は、別のパーティション上に存在していても構いません。
システムは、インストールされたブートローダを介してブート可能である必要があります。
ブート可能なスナップショットからのロールバックを実行するには、次の手順に従います。
システムをブートします。ブートメニューから、を選択して、ブートするスナップショットを選択します。スナップショットのリストが日別に一覧にされます。最新のスナップショットが先頭に表示されます。
システムにログインします。すべてが予期したとおりに動作しているかどうかを注意深く確認します。スナップショットの一部であるディレクトリに書き込むことはできないので注意してください。他のディレクトリに書き込むデータは、次に行う操作にかかわらず、失われることは「ありません」。
ロールバックを実行するかどうかに応じて、次のステップを選択します。
システムがロールバックが不要な状態である場合、再起動して現在のシステム状態でブートするか、再起動して別のスナップショットを選択するか、または再起動してレスキューシステムを起動します。
ロールバックを実行する場合は、次のコマンドを実行します。
sudo snapper rollback
その後、再起動します。ブート画面で、デフォルトのブートエントリを選択して、復元されたシステムで再起動します。
スナップショットがインストール時に無効になっていない場合、最初のシステムインストールの最後に初期のブート可能スナップショットが作成されます。このスナップショットをブートすることで、いつでもその状態に戻ることができます。スナップショットは、インストール後、説明で識別できます。
ブート可能スナップショットは、サービスパックや新しいメジャーリリースへのシステムアップグレードの開始時にも作成されます(スナップショットが無効になっていない場合のみ)。
スナップショットからブートするには、マシンを再起動して、を選択します。ブート可能なすべてのスナップショットをリストした画面が開きます。最も新しいスナップショットが先頭に表示され、最も古いものは最後に表示されます。↓キーおよび↑キーを使用して移動し、Enterキーを押して、選択したスナップショットを有効にします。ブートメニューからスナップショットを有効にしても、マシンは即座に再起動されません。選択したスナップショットのブートローダが開くだけです。
ブートローダの各スナップショットエントリの名前は、命名規則に従っているため、容易に識別できます。
[*]1OS2 (KERNEL3,DATE4TTIME5,DESCRIPTION6)
| |
オペレーティングシステムラベル。 | |
日付フォーマット( | |
時刻フォーマット( | |
このフィールドには、スナップショットの説明が入ります。手動で作成されたスナップショットの場合、この説明は |
スナップショットの説明フィールドのデフォルトの文字列をカスタム文字列に置き換えることができます。この機能は、自動的に作成された説明が不十分な場合や、ユーザが入力した説明が長すぎる場合などに役立ちます。カスタム文字列、STRINGをスナップショット、NUMBERに設定するには、次のコマンドを使用します。
snapper modify --userdata "bootloader=STRING" NUMBER
説明は25文字未満にしてください。このサイズを超える部分はブート画面では一切読めません。
システム全体をスナップショット作成時と同一の状態に復元する、システムの「完全な」ロールバックは不可能です。
ルートファイルシステムのスナップショットには、すべてのディレクトリが含まれるわけではありません。詳細および理由については、6.1.2項 「スナップショットから除外されるディレクトリ」を参照してください。そのため、一般的にこれらのディレクトリのデータは復元されないため、次の制限が生じます。
スナップショットから除外されるサブボリューム(/optなど)にデータをインストールするアプリケーションやアドオンは、アプリケーションデータの他の部分がスナップショットに含まれるサブボリュームにもインストールされている場合、ロールバック後に動作しない場合があります。この問題を解決するには、アプリケーションまたはアドオンを再インストールします。
スナップショットと現在のシステムでファイルのパーミッションまたは所有権、あるいはその両方がアプリケーションによって変更されている場合、そのアプリケーションは該当するファイルにアクセスできない場合があります。ロールバック後、影響を受けるファイルのパーミッションまたは所有権、あるいはその両方をリセットします。
サービスまたはアプリケーションがスナップショットと現在のシステムとの間に新しいデータ形式を設定した場合、ロールバック後、そのアプリケーションは影響を受けたデータファイルを読み込めない場合があります。
/srvのようなサブボリュームには、コードとデータが混在する場合があります。ロールバックの結果、コードが機能しなくなる場合があります。たとえば、PHPのバージョンがダウングレードされ、WebサーバのPHPスクリプトが壊れる場合があります。
ロールバックによりシステムからユーザが削除された場合、これらのユーザが、スナップショットから除外されているディレクトリ内で所有していたデータは削除されません。同じユーザIDを持つユーザが作成された場合、そのユーザは該当ファイルを継承します。findのようなツールを使用して、孤立したファイルを検索して削除します。
ブートローダはロールバックできません。これは、ブートローダのすべての「ステージ」が整合している必要があるためです。これは、/bootのロールバックを実行する際には保証できません。
Snapperの動作は、各パーティションまたはBtrfsサブボリュームに固有の設定ファイルで定義できます。これらの設定ファイルは、/etc/snapper/configs/に保存されます。
ルートファイルシステムに十分な容量(約16GB)がある場合、ルートファイルシステム(/)のスナップショットはインストール時に自動的に有効になります。対応するデフォルト設定はrootという名前です。これにより、YaSTおよびZypperのスナップショットが作成および管理されます。デフォルト値のリストについては、6.4.1.1項 「設定データ」を参照してください。
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から取得されたデフォルト値が使用されます。これらのデフォルトの調整方法については、6.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 -c CONFIG get-configサブコマンドを使用します。Configは、snapper list-configsで表示される設定名に置き換える必要があります。設定オプションの詳細については、6.4.1.1項 「設定データ」を参照してください。
デフォルト設定を表示するには、次のコマンドを実行します。
snapper -c root get-config
指定した設定のオプションを変更するには、snapper -c CONFIG set-config OPTION=VALUEサブコマンドを使用します。Configは、snapper list-configsで表示される設定名に置き換える必要があります。OPTIONおよびVALUEに指定可能な値は、6.4.1.1項 「設定データ」に一覧にされています。
設定を削除するには、snapper -c CONFIG delete-configサブコマンドを使用します。Configは、snapper list-configsで表示される設定名に置き換える必要があります。
各設定には、コマンドラインから変更可能なオプションのリストが含まれています。次に、各オプションの詳細を示します。値を変更するには、snapper -c CONFIG set-config "KEY=VALUE"を実行します。
ALLOW_GROUPS、ALLOW_USERS
通常のユーザにスナップショットを使用するパーミッションを付与します。詳細については、6.4.1.2項 「通常ユーザとしてのSnapperの使用」を参照してください。
デフォルト値は""です。
BACKGROUND_COMPARISON
事前および事後スナップショットを、作成後にバックグラウンドで比較するかどうかを定義します。
デフォルト値はyes (はい)です。
なし_*
同一の事前および事後スナップショットを持つスナップショットペアのクリーンアップアルゴリズムを定義します。詳細については、6.6.3項 「違いがないスナップショットのペアのクリーンアップ」を参照してください。
FSTYPE
パーティションのファイルシステムタイプ。変更しません。
デフォルト値はbtrfsです。
インストールおよび管理スナップショットのクリーンアップアルゴリズムを定義します。詳細については、6.6.1項 「番号付きスナップショットのクリーンアップ」を参照してください。
QGROUP / SPACE_LIMIT
クリーンアップアルゴリズムにクォータサポートを追加します。詳細については、6.6.5項 「ディスククォータサポートの追加」を参照してください。
SUBVOLUME
スナップショットを作成するパーティションまたはサブボリュームのマウントポイント。変更しません。
デフォルト値は「/」です。
SYNC_ACL
Snapperが通常ユーザによって使用される場合(6.4.1.2項 「通常ユーザとしてのSnapperの使用」を参照)、ユーザは.snapshotディレクトリにアクセスして、そのディレクトリ内のファイルを読み取ることができる必要があります。SYNC_ACLをyes (はい)に設定した場合、Snapperは自動的に、ALLOW_USERSまたはALLOW_GROUPSエントリからACLを使用してユーザとグループがファイルにアクセスできるようにします。
デフォルト値はno (いいえ)です。
TIMELINE_CREATE
yes (はい)に設定されている場合は、毎時スナップショットが作成されます。有効な値: yes(はい)、no(いいえ)。
デフォルト値はno (いいえ)です。
TIMELINE_CLEANUP / TIMELINE_LIMIT_*
タイムラインスナップショットのクリーンアップアルゴリズムを定義します。詳細については、6.6.2項 「タイムラインスナップショットのクリーンアップ」を参照してください。
デフォルトでは、rootしかSnapperを使用できません。しかし、以下のような場合、特定のグループまたはユーザがスナップショットを作成したり、スナップショットを使って変更を取り消したりできる必要があります。
Webサイト管理者が/srv/wwwのスナップショットを作成したい場合
ユーザが自身のホームディレクトリのスナップショットを作成したい場合
このような場合、ユーザやグループにパーミッションを与えるSnapper設定を作成できます。対応する.snapshotsディレクトリは、指定されたユーザによって読み込みおよびアクセス可能である必要があります。このための最も簡単な方法は、SYNC_ACLオプションをyes (はい)に設定することです。
次のすべての手順はrootとして実行する必要があります。
ユーザがSnapperを使用するパーティションまたはサブボリュームにSnapper設定がない場合は、作成します。手順については、6.4項 「Snapper設定の作成と変更」を参照してください。例:
snapper --config web_data create /srv/www
/etc/snapper/configs/CONFIGに設定ファイルを作成します。CONFIGは、前の手順で-c/--configを使用して指定される値です(/etc/snapper/configs/web_dataなど)。必要に応じて設定ファイルを調整します。詳細は6.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のすべての操作は既存の設定に対して実行されます(詳細は6.4項 「Snapper設定の作成と変更」を参照)。スナップショットを作成するには、対象のパーティションまたはボリュームに対して設定が存在する必要があります。デフォルトで、システム設定(root)が使用されます。独自の設定に対してスナップショットを作成または管理する場合は、明示的にその設定を選択する必要があります。YaSTのドロップダウンボックスを使用するか、コマンドラインで-cを指定します(snapper -c MYCONFIG COMMAND)。
各スナップショットには、スナップショット自体とメタデータが含まれています。スナップショットを作成する場合は、メタデータも指定する必要があります。スナップショットを修正すると、メタデータが変更されます。コンテンツを修正することはできません。既存のスナップショットとそのメタデータを表示するには、snapper listを使用します。
snapper --config home list
設定homeのスナップショットの一覧を示します。デフォルト設定(root)のスナップショットの一覧が示されるようにするには、snapper -c root listまたはsnapper listを使用します。
snapper list -a
すべての既存設定の一覧を示します。
snapper list -t pre-post
デフォルト(root)設定の事前および事後スナップショットの全ペアの一覧を示します。
snapper list -t single
デフォルト(root)設定について、singleタイプの全スナップショットの一覧を示します。
各スナップショットについて、以下のメタデータを利用できます。
Type(種類):スナップショットの種類です。詳細は6.5.1.1項 「スナップショットの種類」を参照してください。このデータは変更できません。
Number(番号):スナップショットの一意の番号。このデータは変更できません。
Pre Number(前番号):対応する事前スナップショットの番号を指定します。事後スナップショットにのみ適用されます。このデータは変更できません。
Description(説明):スナップショットの説明です。
Userdata (ユーザデータ): カンマ区切りの「キー=値」のリスト形式でカスタムデータを指定できる、拡張用の項目です。(例:reason=testing, project=foo)。このフィールドは、スナップショットに重要のマークを付ける場合(important=yes)や、スナップショットを作成したユーザを一覧にする場合(user=tux)にも使用されます。
Cleanup-Algorithm(クリーンアップアルゴリズム):スナップショットのクリーンアップアルゴリズムです。詳細は6.6項 「スナップショットの自動クリーンアップ」を参照してください。
Snapperには、事前(pre)、事後(post)、および単一(single)の3種類のスナップショットがあります。これらは物理的には同じものですが、Snapperでは別のものとして扱われます。
pre(事前)
変更前のファイルシステムのスナップショットです。各pre(事前)スナップショットには、対応するpost(事後)スナップショットがあります。たとえば、YaST/Zypperの自動スナップショットに対して使用します。
post(事後)
変更後のファイルシステムのスナップショットです。各post(事後)スナップショットには、対応するpre(事前)スナップショットがあります。たとえば、YaST/Zypperの自動スナップショットに対して使用します。
single(単一)
スタンドアロンのスナップショットです。たとえば、自動毎時スナップショットに使用します。これは、スナップショットを作成する際のデフォルトの種類です。
Snapperには、古いスナップショットのクリーンアップアルゴリズムが3種類あります。このアルゴリズムは、日次のcronジョブとして実行されます。保持するさまざまなタイプのスナップショットの数を、Snapper設定で定義することができます(詳細は6.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インタフェースを使用している場合、これらの例は簡単に採用できます。
コマンドラインでスナップショットを修正するには、スナップショットの番号がわかっている必要があります。snapperlistコマンドを実行すると、すべてのスナップショットとその番号が表示されます。
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コマンドを実行します。
Snapperでスナップショットを削除すると、空いたスペースはバックグラウンドで実行されているBtrfsプロセスによって要求されます。つまり、空きスペースが見えるように、あるいは使用できるようになるまでに遅れが生じます。スナップショットの削除で空いたスペースをすぐに使用したい場合は、deleteコマンドで--syncオプションを指定します。
preスナップショットを削除する場合は、必ず、対応するpostスナップショットを削除する必要があります(逆も同様です)。
snapper delete 65
デフォルト(root)設定のスナップショット65番を削除します。
snapper -c home delete 89 90
カスタム設定homeのスナップショット89番および90番を削除します。
snapper delete --sync 23
デフォルト設定(root) のスナップショット23を削除し、空いたスペースをすぐに使用できるようにします。
Btrfsスナップショットが存在するのに、Snapper用のメタデータを含むXMLファイルが欠落している場合があります。この場合、スナップショットがSnapperには見えないため、手動で削除する必要があります。
btrfs subvolume delete /.snapshots/SNAPSHOTNUMBER/snapshot rm -rf /.snapshots/SNAPSHOTNUMBER
ハードディスクの容量を空けるためにスナップショットを削除する場合は、古いスナップショットから削除するようにします。古いスナップショットほど、多くの容量を使用します。
スナップショットは、日次のcronジョブでも自動的に削除されます。詳細については、6.5.1.2項 「クリーンアップアルゴリズム」を参照してください。
スナップショットはディスク容量を占有し、時間が経つにつれて、スナップショットが占有するディスク容量が増える可能性があります。ディスク容量が不足しないようにするために、Snapperは、古いスナップショットを自動的に削除するためのアルゴリズムを備えています。これらのアルゴリズムは、タイムラインスナップショットと番号付きスナップショット(管理スナップショットとインストールスナップショットのペア)を区別します。各タイプに対して、保持するスナップショットの数を指定できます。
そのほかに、オプションでディスク容量クォータを指定し、スナップショットが占有可能な最大ディスク容量を定義することもできます。また、事前スナップショットと事後スナップショットのペアに違いがない場合、それらのペアを自動的に削除することもできます。
クリーンアップアルゴリズムは常に1つのSnapper設定にバインドされるため、各設定に対してアルゴリズムを設定する必要があります。特定のスナップショットが自動的に削除されないようにする場合は、 スナップショットを永続的にするにはどうすればよいですか? を参照してください。
デフォルトのセットアップ(root)は、番号付きスナップショットと、空の事前/事後スナップショットのペアのクリーンアップを実行するように設定されています。クォータサポートが有効になっている場合、スナップショットは、ルートパーティションの使用可能なディスク容量を50%までしか占有できません。タイムラインスナップショットはデフォルトで無効になっているため、タイムラインのクリーンアップアルゴリズムも無効になっています。
番号付きスナップショット(管理スナップショットとインストールスナップショットのペア)のクリーンアップは、Snapper設定の次のパラメータで制御します。
NUMBER_CLEANUP
インストールスナップショットと管理スナップショットのペアのクリーンアップを有効または無効にします。有効にすると、スナップショットのペアは、スナップショットの合計数がNUMBER_LIMITまたはNUMBER_LIMIT_IMPORTANT、あるいはその両方で指定された数を超え、「かつ」NUMBER_MIN_AGEで指定された保存期間を超えた場合に削除されます。有効な値: yes(はい) (有効)、no(いいえ) (無効)。
デフォルト値はyes (はい)です。
変更または設定を行うコマンドの例:
snapper -c CONFIG set-config "NUMBER_CLEANUP=no"
NUMBER_LIMIT / NUMBER_LIMIT_IMPORTANT
保持する通常のインストール/管理スナップショットのペア、または重要なインストール/管理スナップショットのペア、あるいはその両方の数を定義します。最も新しいスナップショットのみが保持されます。NUMBER_CLEANUPが「no(いいえ)」に設定されている場合、無視されます。
デフォルト値は、NUMBER_LIMITでは「2-10」、NUMBER_LIMIT_IMPORTANTでは「4-10」です。
変更または設定を行うコマンドの例:
snapper -c CONFIG set-config "NUMBER_LIMIT=10"
クォータサポートが有効な場合は(6.6.5項 「ディスククォータサポートの追加」を参照)、制限を「最小値-最大値」の範囲として指定する必要があります。たとえば、2-10のように指定します。クォータサポートが無効な場合は、定数値(たとえば10)を指定する必要があります。そうしないと、エラーが発生してクリーンアップに失敗します。
NUMBER_MIN_AGE
スナップショットが自動削除の対象となるまでの最短期間を秒単位で定義します。ここで指定した期間に達していなければ、スナップショットはいくつ存在していても削除されません。
デフォルト値は1800です。
変更または設定を行うコマンドの例:
snapper -c CONFIG set-config "NUMBER_MIN_AGE=864000"
NUMBER_LIMIT、NUMBER_LIMIT_IMPORTANT、およびNUMBER_MIN_AGEは常に評価されます。スナップショットが削除されるのは、「すべての」条件を満たしている場合のみです。
保存期間に関係なく、NUMBER_LIMIT*で定義された数のスナップショットを常に保持する場合は、NUMBER_MIN_AGEを0に設定します。
NUMBER_CLEANUP=yes NUMBER_LIMIT_IMPORTANT=10 NUMBER_LIMIT=10 NUMBER_MIN_AGE=0
一方、一定の保存期間を超えたスナップショットを保持しない場合は、NUMBER_LIMIT*を0に設定し、NUMBER_MIN_AGEで保存期間を指定します。
NUMBER_CLEANUP=yes NUMBER_LIMIT_IMPORTANT=0 NUMBER_LIMIT=0 NUMBER_MIN_AGE=864000
タイムラインスナップショットのクリーンアップは、Snapper設定の次のパラメータで制御します。
TIMELINE_CLEANUP
タイムラインスナップショットのクリーンアップを有効または無効にします。有効にすると、スナップショットは、スナップショットの合計数がTIMELINE_LIMIT_*で指定された数を超え、「かつ」TIMELINE_MIN_AGEで指定された保存期間を超える場合に削除されます。有効な値: yes(はい)、no(いいえ)。
デフォルト値はyes (はい)です。
変更または設定を行うコマンドの例:
snapper -c CONFIG set-config "TIMELINE_CLEANUP=yes"
TIMELINE_LIMIT_DAILY、TIMELINE_LIMIT_HOURLY、TIMELINE_LIMIT_MONTHLY、TIMELINE_LIMIT_WEEKLY、TIMELINE_LIMIT_YEARLY
1時間、1日、1週間、1カ月間、および1年間に保持するスナップショット数です。
各エントリのデフォルト値は「10」です。ただし、TIMELINE_LIMIT_WEEKLYは例外であり、デフォルトで「0」に設定されています。
TIMELINE_MIN_AGE
スナップショットが自動削除の対象となるまでの最短期間を秒単位で定義します。
デフォルト値は1800です。
TIMELINE_CLEANUP="yes" TIMELINE_CREATE="yes" TIMELINE_LIMIT_DAILY="7" TIMELINE_LIMIT_HOURLY="24" TIMELINE_LIMIT_MONTHLY="12" TIMELINE_LIMIT_WEEKLY="4" TIMELINE_LIMIT_YEARLY="2" TIMELINE_MIN_AGE="1800"
この設定例では、毎時スナップショットが自動的に削除されます。TIMELINE_MIN_AGEとTIMELINE_LIMIT_*は常に両方が評価されます。この例では、スナップショットが削除対象となるまでの最短保存期間が30分(1800秒)に設定されています。毎時のスナップショットを作成するので、最新のスナップショットだけが保持されることになります。TIMELINE_LIMIT_DAILYをゼロ以外に設定すると、1日の最初のスナップショットが保持されることになります。
1時間ごと: 最新の24個のスナップショットが保持されます。
1日ごと: 各日の最初に作成されたスナップショットが、直近の7日分保持されます。
1カ月ごと: 各月の最後の日に作成された最初のスナップショットが、直近の12カ月分保持されます。
1週ごと: 各週の最後の日に作成された最初のスナップショットが、直近の4週分保持されます。
1年ごと: 各年の最後の日に作成された最初のスナップショットが、直近の2年分保持されます。
6.1.1項 「スナップショットのタイプ」で説明したように、YaSTモジュールまたはZypperを実行すると、起動時に事前スナップショットが作成され、終了時に事後スナップショットが作成されます。変更を何も加えていない場合、事前スナップショットと事後スナップショットには違いがありません。Snapper設定で次のパラメータを設定することで、そのような「空の」スナップショットのペアを自動的に削除できます。
EMPTY_PRE_POST_CLEANUP
yes (はい)に設定した場合、違いがない事前および事後スナップショットのペアは削除されます。
デフォルト値はyes (はい)です。
EMPTY_PRE_POST_MIN_AGE
違いがない事前および事後スナップショットのペアが自動削除の対象となるまでの最短期間を秒単位で定義します。
デフォルト値は1800です。
Snapperは、手動で作成されたスナップショットに対するカスタムクリーンアップアルゴリズムを備えていません。ただし、手動で作成されたスナップショットに、numberクリーンアップアルゴリズムまたはtimelineクリーンアップアルゴリズムを割り当てることができます。その場合、スナップショットは、指定されたアルゴリズムの「クリーンアップキュー」に入ります。クリーンアップアルゴリズムは、スナップショットの作成時に指定することも、既存のスナップショットを変更して指定することもできます。
snapper create --description "Test" --cleanup-algorithm number
デフォルト(ルート)設定のスタンドアロンスナップショット(singleタイプ)を作成して、numberクリーンアップアルゴリズムを割り当てます。
snapper modify --cleanup-algorithm "timeline" 25
番号が25のスナップショットを変更して、クリーンアップアルゴリズムtimelineを割り当てます。
上で説明したnumberクリーンアップアルゴリズムまたはtimelineクリーンアップアルゴリズム、あるいはその両方のほかに、Snapperはクォータもサポートします。スナップショットが占有できる使用可能な容量の割合を定義できます。この割合の値は常に、各Snapper設定で定義されたBtrfsサブボリュームに適用されます。
インストール時にSnapperを有効にした場合、クォータサポートは自動的に有効になっています。後から手動でSnapperを有効にする場合は、snapper setup-quotaを実行することでクォータサポートを有効にできます。そのためには有効な設定が必要です(詳細については、6.4項 「Snapper設定の作成と変更」を参照してください)。
クォータサポートは、Snapper設定の次のパラメータで制御します。
QGROUP
Snapperによって使用されるBtrfsクォータグループです。設定されていない場合は、snapper setup-quotaを実行します。すでに設定されている場合は、man 8 btrfs-qgroupについて十分理解している場合にのみ変更してください。この値はsnapper setup-quotaで設定されます。値を変更しないでください。
SPACE_LIMIT
スナップショットが使用できる容量の制限を、1を100%とする小数で指定します。値の範囲は0~1(0.1 = 10%、0.2 = 20%、...)です。
次の制限とガイドラインが適用されます。
クォータは、既存のnumberクリーンアップアルゴリズムまたはtimelineクリーンアップアルゴリズム、あるいはその両方に「追加」する形でのみアクティブ化されます。クリーンアップアルゴリズムがアクティブになっていない場合、クォータ制約は適用されません。
クォータサポートが有効な場合、Snapperは必要に応じてクリーンアップを2回実行します。最初の実行では、number スナップショットおよびtimelineスナップショットに対して指定されているルールを適用します。この実行後にクォータを超えた場合にのみ、2回目の実行でクォータ固有のルールが適用されます。
クォータサポートが有効になっていて、クォータを超えた場合でも、Snapperは常に、NUMBER_LIMIT*およびTIMELINE_LIMIT*の値で指定された数のスナップショットを保持します。したがって、NUMBER_LIMIT*およびTIMELINE_LIMIT*に対する値の範囲(min-max)を指定して、クォータを確実に適用できるようにすることをお勧めします。
たとえば、NUMBER_LIMIT=5-20が設定されている場合、Snapperは、最初のクリーンアップを実行して、標準の番号付きスナップショットの数を20に減らします。これら20個のスナップショットがクォータを超えると、Snapperは、2回目の実行時に、クォータが満たされるまで最も古いスナップショットから順番に削除します。スナップショットが占有する容量にかかわらず、少なくとも5つのスナップショットは常に保持されます。
/var/log、/tmpなどのディレクトリの変更が表示されませんが、なぜですか?
一部のディレクトリについては、スナップショットから除外することに決定しました。リストと理由については、6.1.2項 「スナップショットから除外されるディレクトリ」を参照してください。スナップショットからパスを除外するため、これらのパス用にサブボリュームを作成しています。
現時点では、Btrfsツールで、スナップショットが使用するディスク容量を表示できません。ただし、クォータが有効な場合は、「すべての」スナップショットを削除した場合に解放される容量を判断できます。
クォータグループIDを取得します(次の例の1/0)。
root # snapper -c root get-config | grep QGROUP
QGROUP | 1/0サブボリュームクォータを再スキャンします。
btrfs quota rescan -w /
クォータグループのデータを表示します(次の例の1/0)。
root # btrfs qgroup show / | grep "1/0"
1/0 4.80GiB 108.82MiB
3番目の列に、すべてのスナップショットを削除した場合に解放される容量(108.82MiB)が表示されます。
スナップショットを含むBtrfsパーティションの容量を空けるには、ファイルではなく、不要なスナップショットを削除する必要があります。古いスナップショットは、最近のスナップショットよりも多くの領域を使用します。詳細については、6.1.3.4項 「スナップショットのアーカイブの制御」を参照してください。
あるサービスパックから別のサービスパックにアップグレードすると、多くのデータが変更される(パッケージのアップデート)ので、スナップショットにより、システムのサブボリュームで多くのディスク容量が使用されます。これらのスナップショットが不要になった場合は、手動で削除することをお勧めします。詳細については、6.5.4項 「スナップショットの削除」を参照してください。
はい。詳細については、6.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
現在のところ、Snapperでは、スナップショットが手動で削除されるのを防ぐ方法はありません。ただし、スナップショットがクリーンアップアルゴリズムによって自動的に削除されるのを防ぐことはできます。手動で作成されたスナップショット(6.5.2項 「スナップショットの作成」を参照)には、--cleanup-algorithmでクリーンアップアルゴリズムを指定しない限り、クリーンアップアルゴリズムは割り当てられていません。自動的に作成されたスナップショットには、常にnumberアルゴリズムまたはtimelineアルゴリズムが割り当てられています。1つ以上のスナップショットからそのような割り当てを削除するには、次の手順に従います。
使用可能なすべてのスナップショットの一覧を表示します。
snapper list -a
削除されないようにするスナップショットの数を記憶します。
次のコマンドを実行します。数字のプレースホルダを、記憶した数に置き換えます。
snapper modify --cleanup-algorithm "" #1 #2 #n
もう一度snapper list -aを実行して、結果を確認します。変更したスナップショットの列Cleanupのエントリが空になります。
Snapperのホームページ(http://snapper.io/)を参照してください。