10 Snapperを使用したシステムの回復とスナップショット管理 #
Snapperにより、ファイルシステムスナップショットを作成および管理できます。ファイルシステムスナップショットは特定の時点でのファイルシステムの状態のコピーを保持できます。Snapperの標準セットアップは、システムの変更のロールバックを許可するように設計されています。ただし、これを使用して、ユーザデータのオンディスクバックアップを作成することもできます。この機能のベースとして、SnapperはBtrfsファイルシステム、またはXFSあるいはExt4ファイルシステムでシンプロビジョニングされたLVMボリュームを使用します。
SnapperにはコマンドラインインタフェースとYaSTインタフェースがあります。Snapperでは、次のタイプのファイルシステムでファイルシステムスナップショットを作成および管理できます。
Btrfs。サブボリュームのファイルシステムスナップショットをネイティブにサポートするLinux用のコピーオンライトファイルシステム。(サブボリュームは物理パーティション内で別個にマウント可能なファイルシステムです。)
Btrfsスナップショットから起動することもできます。詳細については、10.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。XFSまたはExt4でフォーマットされたシンプロビジョニングLVMボリューム。
Snapperを使用して、次のタスクを実行できます。
zypperやYaSTで行ったシステムの変更を元に戻す。詳細については10.2項 「Snapperを使用した変更の取り消し」を参照してください。古いスナップショットからファイルを復元する。詳細については10.2.2項 「Snapperを使用したファイルの復元」を参照してください。
スナップショットからブートすることによってシステムをロールバックする。詳細については10.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
実行中のシステム内で、スナップショットを手動で作成および管理する。詳細については10.6項 「スナップショットの手動での作成と管理」を参照してください。
10.1 デフォルト設定 #
SUSE Linux Enterprise Desktop上のSnapperは、システム変更の「取り消しおよび回復ツール」として設定されています。デフォルトでは、SUSE Linux Enterprise Desktopのルートパーティション(/)はBtrfsでフォーマットされています。ルートパーティション(/)に十分な容量(約16 GB以上)がある場合、スナップショットの作成が自動的に有効になります。デフォルトでは、スナップショットは/以外のパーティションでは無効になっています。
インストール中にSnapperを無効にした場合、後からいつでも有効にできます。そのためには、次のコマンドを実行して、ルートファイルシステムのデフォルトのSnapper設定を作成します。
>sudosnapper -c root create-config /
その後、10.1.4.1項 「スナップショットの有効化/無効化」の説明に従って、別のスナップショットタイプを有効にします。
Btrfsルートファイルシステムでは、スナップショットには、インストーラが提案するように設定されたサブボリュームと、少なくとも16 GBのパーティションサイズを持つファイルシステムが必要です。
スナップショットを作成すると、スナップショットとスナップショット元のファイルは、 いずれもファイルシステム内の同じブロックを指します。そのため、最初は、スナップショットが余分にディスク容量を占めることはありません。元のファイルシステムのデータが変更されると、変更されたデータブロックがコピーされ、古いデータブロックはスナップショットのように保持されます。このため、スナップショットは、変更されたデータと同じ容量を占めます。こうして、時間が経過するにつれて、スナップショットの領域は大きくなっていきます。その結果、スナップショットを含むBtrfsファイルシステムからファイルを削除しても、ディスクの空き容量が増えないことがあります。
スナップショットは常に、スナップショット作成元と同じパーティションまたはサブボリュームに保存されます。別のパーティションまたはサブボリュームにスナップショットを保存することはできません。
結果として、スナップショットを含むパーティションは、スナップショットを含まないパーティションよりも大きくする必要があります。具体的な容量は、保持するスナップショット数やデータの変更頻度によって大きく異なります。経験則として、パーティションには通常の2倍の容量を割り当てます。ディスク容量が不足しないようにするために、古いスナップショットは自動的にクリーンアップされます。詳細については、10.1.4.4項 「スナップショットのアーカイブの制御」を参照してください。
10.1.1 デフォルト設定 #
- 16 GBより大きいディスク
環境設定ファイル:
/etc/snapper/configs/rootUSE_SNAPPER=yesTIMELINE_CREATE=no
- 16 GB未満のディスク
設定ファイル: 作成されない
USE_SNAPPER=noTIMELINE_CREATE=yes
10.1.2 スナップショットのタイプ #
スナップショット自体は技術的な意味では同じですが、トリガするイベントに基づいて、次の3種類のスナップショットを区別しています。
- タイムラインスナップショット
1時間ごとに1つのスナップショットが作成されます。古いスナップショットは自動的に削除されます。デフォルトで、最近10日間、10カ月間、10年間の最初のスナップショットが保持されます。YaST OSのインストール方法(デフォルト)を使用すると、ルートファイルシステムを除いてタイムラインスナップショットが有効になります。
- インストールスナップショット
YaSTまたはZypperで1つ以上のパッケージをインストールする場合、常にスナップショットのペアが作成されます。インストール開始前のスナップショット(「事前」)と、インストール完了後のスナップショット(「事後」)です。カーネルなどの重要なコンポーネントがインストールされた場合、スナップショットのペアは重要とマークされます(
important=yes)。古いスナップショットは自動的に削除されます。デフォルトでは、最新の10個の重要なスナップショット、および最新の10個の「通常」のスナップショット(管理スナップショットを含む)が保持されます。インストールスナップショットはデフォルトで有効になっています。- 管理スナップショット
システムをYaSTで管理する場合、常にスナップショットのペアが作成されます。YaSTモジュール開始時のスナップショット(「事前」)と、モジュール終了時のスナップショット(「事後」)です。古いスナップショットは自動的に削除されます。デフォルトでは、最新の10個の重要なスナップショットと最新の10個の「通常」のスナップショット(インストールスナップショットを含む)が保持されます。管理スナップショットはデフォルトで有効になっています。
10.1.3 スナップショットから除外されるディレクトリ #
特定のディレクトリは、さまざまな理由により、スナップショットから除外する必要があります。次のリストは、除外されるすべてのディレクトリを示しています。
/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上に存在します。
/home/homeが独立したパーティションに存在していない場合、ロールバック時のデータ損失を避けるために除外されます。/optサードパーティ製品は通常、
/optにインストールされます。ロールバック時にこれらのアプリケーションがアンインストールされるのを避けるために除外されます。/srvWebおよびFTPサーバ用のデータが含まれています。ロールバック時にデータが失われるのを避けるために除外されます。
/tmpスナップショットから除外される一時ファイルとキャッシュを含むすべてのディレクトリ。
/usr/localこのディレクトリは、ソフトウェアの手動インストール時に使用します。ロールバック時にこれらのインストール済みソフトウェアがアンインストールされるのを避けるために除外されます。
/varこのディレクトリには、ログ、一時キャッシュ、
/var/optのサードパーティ製品など、多くのバリアブルファイルが含まれており、仮想マシンのイメージとデータベースのデフォルトの場所です。したがって、このサブボリュームはスナップショットからすべてのこのバリアブルデータを除外するように作成され、コピーオンライトが無効になっています。
10.1.4 設定のカスタマイズ #
SUSE Linux Enterprise Desktopには、適切なデフォルト設定が用意されていて、ほとんどの使用事例ではこのままで十分です。ただし、スナップショットの自動作成およびスナップショットの維持管理のあらゆる側面をニーズに合わせて設定できます。
10.1.4.1 スナップショットの有効化/無効化 #
3つのスナップショットの種類(タイムライン、インストール、および管理)はそれぞれ独立して有効化または無効化することができます。
- タイムラインスナップショットの有効化/無効化
有効化.
snapper -c root set-config "TIMELINE_CREATE=yes"無効化.
snapper -c root set-config "TIMELINE_CREATE=no"YaST OSのインストール方法(デフォルト)を使用すると、ルートファイルシステムを除いてタイムラインスナップショットが有効になります。
- インストールスナップショットの有効化/無効化
有効化: パッケージ
snapper-zypp-plugin無効化.
snapper-zypp-pluginパッケージをアンインストールします。インストールスナップショットはデフォルトで有効になっています。
- 管理スナップショットの有効化/無効化
有効化:
/etc/sysconfig/yast2でUSE_SNAPPERをyesに設定します。無効化.
/etc/sysconfig/yast2でUSE_SNAPPERをnoに設定します。管理スナップショットはデフォルトで有効になっています。
10.1.4.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>
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.1.4.3 新規サブボリュームの作成とマウント #
/階層下に新規のサブボリュームを作成し、永続的にマウントすることができます。このようなサブボリュームはスナップショットから除外されます。既存のスナップショット内に作成してはいけません。ロールバック後にスナップショットを削除できなくなるためです。
SUSE Linux Enterprise Desktopは、/@/サブボリュームが設定されており、このサブボリュームは、/opt、/srv、/home、その他の永続サブボリュームの独立したルートとしての役割を果たします。作成し、永続的にマウントする新規のサブボリュームは、この初期のルートファイルシステムに作成しなければなりません。
そのように設定するには、次のコマンドを実行します。この例では、新規サブボリューム、/usr/importantは/dev/sda2から作成されます。
>sudomount /dev/sda2 -o subvol=@ /mnt>sudobtrfs subvolume create /mnt/usr/important>sudoumount /mnt
/etc/fstabの該当エントリは、次のようになります。
/dev/sda2 /usr/important btrfs subvol=@/usr/important 0 0
サブボリュームには、仮想化ディスクイメージ、データベースファイル、ログファイルなど、頻繁に変更されるファイルが含まれている場合があります。その場合、ディスクブロックの重複を避けるため、このボリュームのコピーオンライト機能を無効にすることを検討します。そのためには、/etc/fstabでnodatacowマウントオプションを使用します。
/dev/sda2 /usr/important btrfs nodatacow,subvol=@/usr/important 0 0
1つのファイルまたはディレクトリに対してコピーオンライトを無効にするには、コマンドchattr +C
PATHを使用します。
10.1.4.4 スナップショットのアーカイブの制御 #
スナップショットはディスク容量を占有します。ディスク容量が不足してシステムが停止しないようにするために、古いスナップショットは自動的に削除されます。デフォルトでは、最大10個の重要なインストールスナップショットと管理スナップショット、および最大10個の標準のインストールスナップショットと管理スナップショットが保持されます。これらのスナップショットがルートファイルシステムのサイズの50%超を占有する場合、追加のスナップショットは削除されます。最低でも、4つの重要なスナップショットと2つの標準スナップショットは常に保持されます。
これらの値の変更方法については、10.5.1項 「既存の設定の管理」を参照してください。
10.1.4.5 シンプロビジョニングされたLVMボリュームでのSnapperの使用 #
Snapperは、Btrfsファイルシステムのスナップショット作成だけでなく、XFS、Ext4、またはExt3でフォーマットされたシンプロビジョニングLVMボリュームのスナップショット作成にも対応しています(通常のLVMボリュームのスナップショットには対応していません)。LVMボリュームに関する詳細および設定の手順については、Section 7.3, “LVM configuration”を参照してください。
シンプロビジョニングLVMボリュームでSnapperを使用するには、そのようにSnapperの設定を作成する必要があります。LVMで、--fstype=lvm(FILESYSTEM)を使用してファイルシステムを指定する必要があります。ext3、etx4またはxfsは、FILESYSTEMの有効な値です。例:
>sudosnapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm
10.5.1項 「既存の設定の管理」で説明したように、必要に応じてこの設定を調整できます。
10.2 Snapperを使用した変更の取り消し #
SUSE Linux Enterprise DesktopのSnapperは、zypperやYaSTで行った変更を取り消すことができるツールとしてあらかじめ設定されています。このために、SnapperはzypperおよびYaSTの各実行前後にスナップショットのペアを作成するように設定されています。また、Snapperを使用して、誤って削除または変更したシステムファイルを復元することもできます。このためには、ルートパーティションのタイムラインスナップショットを有効にする必要があります。詳細については、10.1.4.1項 「スナップショットの有効化/無効化」を参照してください。
上記の自動スナップショットは、デフォルトでルートパーティションとそのサブボリュームに対して設定されます。カスタム設定を作成すれば、/homeなど、他のパーティションに対してスナップショット機能を使用できます。
スナップショットを操作してデータを復元する場合、Snapperが処理可能なシナリオとして、根本的に異なる次の2つのシナリオがあることを理解することが重要です。
- 変更の取り消し
次に説明されているように、変更を取り消す際には、2つのスナップショットが比較され、これらの2つのスナップショット間の変更が取り消されます。この方法を使用して、復元する必要があるファイルを明示的に選択できます。
- ロールバック
10.3項 「スナップショットからのブートによるシステムロールバック」で説明されているように、ロールバックを実行すると、システムはスナップショットが作成された状態にリセットされます。
変更を取り消す場合は、現在のシステムとスナップショットを比較することもできます。このような比較から「すべての」ファイルを復元すると、ロールバックを実行した場合と同じ結果になります。ただし、ロールバックについては、10.3項 「スナップショットからのブートによるシステムロールバック」で説明されている方法を使用することをお勧めします。この方法はより高速で、ロールバック実行前にシステムを確認できるためです。
スナップショットを作成する際に、データの整合性を確保するメカニズムがありません。スナップショットを作成するのと同時にファイルが書き込まれると(データベースなど)、ファイルが破損したり、ファイルへの書き込みが部分的になったりします。このようなファイルを復元すると、問題が発生することがあります。また、/etc/mtabなどの特定のシステムファイルは復元しないでください。このため、「必ず」、変更されたファイルとその差分をよく確認してください。どうしても元に戻すことが必要なファイルのみ復元してください。
10.2.1 YaSTおよびZypperによる変更の取り消し #
インストール時にルートパーティションをBtrfsで設定すると、Snapper(YaSTまたはZypperによる変更のロールバックがあらかじめ設定されている)が自動的にインストールされます。YaSTモジュールまたはZypperトランザクションを開始するたびに、2つのスナップショットが作成されます。モジュール開始前のファイルシステムの状態をキャプチャした「事前スナップショット」と、モジュール完了後の状態をキャプチャした「事後スナップショット」です。
YaSTのモジュールまたはsnappersnapperコマンドラインツールを使用して、「事前スナップショット」からファイルを復元し、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 MODULE_NAME」と表示され、Zypperのスナップショットの場合は「zypp(zypper)」と表示されます。>sudosnapper list -t pre-post Pre # | Post # | Pre Date | Post Date | Description ------+--------+-------------------------------+-------------------------------+-------------- 311 | 312 | Tue 06 May 2018 14:05:46 CEST | Tue 06 May 2018 14:05:52 CEST | zypp(y2base) 340 | 341 | Wed 07 May 2018 16:15:10 CEST | Wed 07 May 2018 16:15:16 CEST | zypp(zypper) 342 | 343 | Wed 07 May 2018 16:20:38 CEST | Wed 07 May 2018 16:20:42 CEST | zypp(y2base) 344 | 345 | Wed 07 May 2018 16:21:23 CEST | Wed 07 May 2018 16:21:24 CEST | zypp(zypper) 346 | 347 | Wed 07 May 2018 16:41:06 CEST | Wed 07 May 2018 16:41:10 CEST | zypp(y2base) 348 | 349 | Wed 07 May 2018 16:44:50 CEST | Wed 07 May 2018 16:44:53 CEST | zypp(y2base) 350 | 351 | Wed 07 May 2018 16:46:27 CEST | Wed 07 May 2018 16:46:38 CEST | zypp(y2base)スナップショットのペア間で変更されたファイルのリストを取得するには、以下を実行します。
snapper statusPREPOSTをクリックします。内容が変更されたファイルにはのマーク、追加されたファイルにはのマーク、削除されたファイルにはのマークが付いています。>sudosnapper 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 diffPRE..POST FILENAME。FILENAMEを指定しない場合は、すべてのファイルの差異が表示されます。>sudosnapper 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 undochangePRE..POST FILENAMES。FILENAMESを指定しない場合は、変更されたすべてのファイルが復元されます。>sudosnapper -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のツールを使用して、ユーザを削除することを強くお勧めします。
10.2.2 Snapperを使用したファイルの復元 #
インストールスナップショットおよび管理スナップショットとは別に、Snapperはタイムラインスナップショットを作成します。このバックアップ用スナップショットを使用して、誤って削除したファイルを復元したり、ファイルの以前のバージョンを復元したりできます。Snapperの差分抽出機能を使用して、特定の時点でどのような変更が加えられたのかを調べることもできます。
ファイルの復元機能は、特に、デフォルトではスナップショットが作成されないサブボリュームまたはパーティションに存在するデータにとって重要です。ホームディレクトリからファイルを復元できるようにするには、たとえば、/home用に、自動的にタイムラインスナップショットを作成する別個のSnapper設定を作成します。手順については、10.5項 「Snapper設定の作成と変更」を参照してください。
ルートファイルシステムから作成されたスナップショット(Snapperのルート設定で定義されています)を使用して、システムロールバックを実行できます。このようなロールバックを実行する場合にお勧めする方法は、そのスナップショットからブートしてからロールバックを実行する方法です。詳細については10.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
次に説明するように、ルートファイルシステムスナップショットからすべてのファイルを復元することによってロールバックを実行することもできます。ただし、これはお勧めできません。たとえば、/etcディレクトリから環境設定ファイルなど単一のファイルを復元できますが、スナップショットからファイルの完全なリストを復元することはできません。
この制限は、ルートファイルシステムから作成されたスナップショットにのみ影響します。
YaSTのセクションから、または「
yast2 snapper」と入力してモジュールを起動します。スナップショットを選択するためのを選択します。
ファイルを復元するためのタイムラインスナップショットを選択しを選択します。タイムラインスナップショットは、タイプがで、説明の値がであるスナップショットです。
ファイル名をクリックしてテキストボックスからファイルを選択します。スナップショットバージョンと現在のシステムとの差分が表示されます。復元対象ファイルを選択するチェックボックスをオンにします。復元するすべてのファイルに対してこれを行います。
をクリックし、をクリックして操作を確認します。
snapperコマンドを使用したファイルの復元 #次のコマンドを実行して、特定の設定のタイムラインスナップショットのリストを取得します。
>sudosnapper -c CONFIG list -t single | grep timelineCONFIGは、既存のSnapper設定に置き換える必要があります。
snapper list-configsを使用してリストを表示します。次のコマンドを実行して、指定のスナップショットの変更ファイルのリストを取得します。
>sudosnapper -c CONFIG status SNAPSHOT_ID..0SNAPSHOT_IDをファイルの復元元のスナップショットIDで置き換えます。
オプションで、次のコマンドを実行して、現在のファイルバージョンとスナップショットからのバージョンとの差分を一覧にします。
>sudosnapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME<FILE NAME>を指定しない場合は、すべてのファイルの差分が表示されます。
1つ以上のファイルを復元するには、以下を実行します
>sudosnapper -c CONFIG -v undochange SNAPSHOT_ID..0 FILENAME1 FILENAME2ファイル名を指定しない場合は、変更されたすべてのファイルが復元されます。
10.3 スナップショットからのブートによるシステムロールバック #
SUSE Linux Enterprise Desktopに含まれているGRUB 2バージョンは、Btrfsスナップショットからブートできます。Snapperのロールバック機能と併用することで、誤設定されたシステムを回復できます。デフォルトのSnapper設定(root)で作成されたスナップショットのみがブート可能です。
SUSE Linux Enterprise Desktop 15 SP6の時点では、システムのロールバックは、ルートパーティションのデフォルトのサブボリューム設定が変更されていない場合にのみサポートされます。
スナップショットをブートする場合、スナップショットに含まれているファイルシステムの該当部分が読み込み専用でマウントされます。スナップショットから除外されている他のすべてのファイルシステムと該当部分は読み書き可能でマウントされ、変更できます。
スナップショットを操作してデータを復元する場合、Snapperが処理可能なシナリオとして、根本的に異なる次の2つのシナリオがあることを理解することが重要です。
- 変更の取り消し
10.2項 「Snapperを使用した変更の取り消し」で説明されているように、変更を取り消す場合は、2つのスナップショットが比較され、これらの2つのスナップショット間の変更が元に戻されます。この方法を使用すると、選択したファイルを復元から明示的に除外することもできます。
- ロールバック
次に説明する方法でロールバックを実行すると、システムはスナップショットが作成された状態にリセットされます。
ブート可能なスナップショットからロールバックを行うには、次の要件を満たす必要があります。デフォルトインストールを行った場合、システムはそのように設定されます。
ルートファイルシステムは、Btrfsである必要があります。LVMボリュームスナップショットからのブートはサポートされていません。
ルートファイルシステムは、単一のデバイス上にある必要があります。確認するには、
sudo /sbin/btrfs filesystem showを実行します。Total devices 1と報告される必要があります。1台を超えるデバイスが表示されている場合、セットアップはサポートされません。注記: ロールバックから除外されるディレクトリ/srvなどスナップショットから除外されるディレクトリ(完全なリストについては、10.1.3項 「スナップショットから除外されるディレクトリ」を参照)は、別のデバイス上に存在していても構いません。システムは、インストールされたブートローダを介してブート可能である必要があります。
サブボリューム
/の内容のみがロールバックされます。他のサブボリュームを含めることはできません。
ブート可能なスナップショットからのロールバックを実行するには、次の手順に従います。
システムをブートします。ブートメニューから、を選択して、ブートするスナップショットを選択します。スナップショットのリストが日別に一覧にされます。最新のスナップショットが先頭に表示されます。
システムにログインします。すべてが予期したとおりに動作しているかどうかを注意深く確認します。スナップショットの一部であるディレクトリに書き込むことはできないので注意してください。他のディレクトリに書き込むデータは、次に行う操作にかかわらず、失われることは「ありません」。
ロールバックを実行するかどうかに応じて、次のステップを選択します。
システムが、ロールバックを実行したくない状態になっている場合は、再起動して現在のシステム状態にブートします。その後、別のスナップショットを選択するか、レスキューシステムを開始することができます。
ロールバックを実行するには、次のコマンドを実行し
>sudosnapper rollbackその後、再起動します。ブート画面で、デフォルトのブートエントリを選択して、復元されたシステムで再起動します。ロールバック前のファイルシステムの状態のスナップショットが作成されます。rootのデフォルトのサブボリュームは、新しい読み書きスナップショットに置き換えられます。詳細については、10.3.1項 「ロールバック後のスナップショット」を参照してください。
-dオプションを使用してスナップショットの説明を追加すると役に立ちます。例:New file system root since rollback on DATE TIME
スナップショットがインストール時に無効になっていない場合、最初のシステムインストールの最後に初期のブート可能スナップショットが作成されます。このスナップショットをブートすることで、いつでもその状態に戻ることができます。スナップショットは、after installationという記述で識別できます。
ブート可能スナップショットは、サービスパックや新しいメジャーリリースへのシステムアップグレードの開始時にも作成されます(スナップショットが無効になっていない場合のみ)。
10.3.1 ロールバック後のスナップショット #
ロールバックの実行前に、動作中のファイルシステムのスナップショットが作成されます。この説明では、ロールバックで復元されたスナップショットのIDを参照します。
ロールバックで作成されたスナップショットは、Cleanup属性に値numberが付きます。したがって、設定されているスナップショット数に達すると、ロールバックスナップショットは自動的に削除されます。詳細については、10.7項 「スナップショットの自動クリーンアップ」を参照してください。スナップショットに重要なデータが含まれている場合は、スナップショットが削除される前にデータを抽出してください。
10.3.1.1 ロールバックスナップショットの例 #
たとえば、新規インストール後に、システムで次のスナップショットが使用可能であるとします。
#snapper--iso list Type | # | | Cleanup | Description | Userdata -------+---+ ... +---------+-----------------------+-------------- single | 0 | | | current | single | 1 | | | first root filesystem | single | 2 | | number | after installation | important=yes
sudo snapper rollbackを実行すると、スナップショット3が作成され、ロールバック実行前のシステムの状態が格納されます。スナップショット4は新しいデフォルトのBtrfsサブボリュームであるため、再起動後にシステムになります。
#snapper--iso list Type | # | | Cleanup | Description | Userdata -------+---+ ... +---------+-----------------------+-------------- single | 0 | | | current | single | 1 | | number | first root filesystem | single | 2 | | number | after installation | important=yes single | 3 | | number | rollback backup of #1 | important=yes single | 4 | | | |
10.3.2 スナップショットブートエントリのアクセスと識別 #
スナップショットからブートするには、マシンを再起動して、を選択します。ブート可能なすべてのスナップショットをリストした画面が開きます。最も新しいスナップショットが先頭に表示され、最も古いものは最後に表示されます。↓キーおよび↑キーを使用して移動し、Enterキーを押して、選択したスナップショットを有効にします。ブートメニューからスナップショットを有効にしても、マシンは即座に再起動されません。選択したスナップショットのブートローダが開くだけです。
詳細については、https://www.suse.com/support/kb/doc/?id=000020602を参照してください。
ブートローダの各スナップショットエントリの名前は、命名規則に従っているため、容易に識別できます。
[*]1OS2 (KERNEL3,DATE4TTIME5,DESCRIPTION6)
スナップショットに | |
オペレーティングシステムラベル。 | |
日付フォーマット( | |
時刻フォーマット( | |
このフィールドには、スナップショットの説明が入ります。手動で作成されたスナップショットの場合、この説明は |
スナップショットの説明フィールドのデフォルトの文字列をカスタム文字列に置き換えることができます。この機能は、自動的に作成された説明が不十分な場合や、ユーザが入力した説明が長すぎる場合などに役立ちます。カスタム文字列、STRINGをスナップショット、NUMBERに設定するには、次のコマンドを使用します。
>sudosnapper modify --userdata "bootloader=STRING" NUMBER
説明は25文字未満にしてください。このサイズを超える部分はブート画面では一切読めません。
10.3.3 制限 #
システム全体をスナップショット作成時と同一の状態に復元する、システムの「完全な」ロールバックは不可能です。
10.3.3.1 スナップショットから除外されるディレクトリ #
ルートファイルシステムのスナップショットには、すべてのディレクトリが含まれるわけではありません。詳細および理由については、10.1.3項 「スナップショットから除外されるディレクトリ」を参照してください。そのため、一般的にこれらのディレクトリのデータは復元されないため、次の制限が生じます。
- ロールバック後、アドオンおよびサードパーティソフトウェアを使用できない場合がある
スナップショットから除外されるサブボリューム(
/optなど)にデータをインストールするアプリケーションやアドオンは、アプリケーションデータの他の部分がスナップショットに含まれるサブボリュームにもインストールされている場合、ロールバック後に動作しない場合があります。この問題を解決するには、アプリケーションまたはアドオンを再インストールします。- ファイルアクセスの問題
スナップショットと現在のシステムでファイルのパーミッションまたは所有権、あるいはその両方がアプリケーションによって変更されている場合、そのアプリケーションは該当するファイルにアクセスできない場合があります。ロールバック後、影響を受けるファイルのパーミッションまたは所有権、あるいはその両方をリセットします。
- 互換性のないデータ形式
サービスまたはアプリケーションがスナップショットと現在のシステムとの間に新しいデータ形式を設定した場合、ロールバック後、そのアプリケーションは影響を受けたデータファイルを読み込めない場合があります。
- コードとデータが混在するサブボリューム
/srvのようなサブボリュームには、コードとデータが混在する場合があります。ロールバックの結果、コードが機能しなくなる場合があります。たとえば、PHPのバージョンがダウングレードされ、WebサーバのPHPスクリプトが壊れる場合があります。- ユーザデータ量
ロールバックによりシステムからユーザが削除された場合、これらのユーザが、スナップショットから除外されているディレクトリ内で所有していたデータは削除されません。同じユーザIDを持つユーザが作成された場合、そのユーザは該当ファイルを継承します。
findのようなツールを使用して、孤立したファイルを検索して削除します。
10.3.3.2 ブートローダのデータはロールバックできない #
ブートローダはロールバックできません。これは、ブートローダのすべての「ステージ」が整合している必要があるためです。これは、/bootのロールバックを実行する際には保証できません。
10.4 ユーザホームディレクトリでのSnapperの有効化 #
いくつかのユースケースをサポートする、ユーザの/homeディレクトリのスナップショットを有効にできます。
個々のユーザは独自のスナップショットおよびロールバックを管理できます。
システムユーザ、たとえば、設定ファイル、ドキュメントなどのコピーを追跡したいデータベース、システム、およびネットワーク管理者。
SambaはホームディレクトリおよびBtrfsバックエンドと共有します。
各ユーザのディレクトリは/homeのBtrfsサブボリュームです。これを手動で設定できます(10.4.3項 「ホームディレクトリでのスナップショットの手動有効化」を参照)。ただし、pam_snapperを使用する方がより便利です。pam_snapperパッケージでは、pam_snapper.soモジュールおよびヘルパースクリプトがインストールされ、ユーザの作成およびSnapper設定が自動化されます。
pam_snapperでは、useraddコマンド、プラグ可能認証モジュール(PAM)、およびSnapperとの統合が提供されます。デフォルトでは、ユーザログイン時およびログアウト時にスナップショットが作成され、特定のユーザは延長された期間にログインしたままであるため、タイムベースのスナップショットも作成されます。通常のSnapperコマンドと設定ファイルを使用して、デフォルトを変更できます。
10.4.1 pam_snapperのインストールとユーザの作成 #
最も簡単な方法は、Btrfsでフォーマットされた新しい/homeディレクトリで既存のユーザなしで開始する方法です。両方のノードに pam_snapper:
# zypper in pam_snapper
/etc/pam.d/common-sessionに次の行を追加します。
session optional pam_snapper.so
/usr/lib/pam_snapper/pam_snapper_useradd.shスクリプトを使用して、新しいユーザとホームディレクトリを作成します。デフォルトで、スクリプトはドライランを実行します。スクリプトを編集し、DRYRUN=1をDRYRUN=0に変更します。これで、新しいユーザを作成できます。
# /usr/lib/pam_snapper/pam_snapper_useradd.sh \
username group passwd=password
Create subvolume '/home/username'
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
/etc/skelからのファイルは最初のログイン時にユーザのホームディレクトリにコピーされます。ユーザの設定がSnapper設定を一覧表示して作成されていることを確認します。
# snapper list --all
Config: home_username, subvolume: /home/username
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+------+------+---------+-------------+---------
single | 0 | | | root | | current |時間が経過するにつれて、この出力にはスナップショットのリストが取り込まれ、ユーザは標準のSnapperコマンドを管理できます。
10.4.2 ユーザを削除する #
/usr/lib/pam_snapper/pam_snapper_userdel.shスクリプトを使用してユーザを削除します。デフォルトでは、ドライランを実行し、それを編集して、DRYRUN=1をDRYRUN=0に変更します。ユーザ、ユーザのホームサブボリューム、Snapper設定が削除され、すべてのスナップショットが削除されます。
# /usr/lib/pam_snapper/pam_snapper_userdel.sh username10.4.3 ホームディレクトリでのスナップショットの手動有効化 #
Snapperを使用してユーザのホームディレクトリを手動で設定するためのステップがあります。/homeは、Btrfsでフォーマットされる必要があり、ユーザはまだ作成されていません。
#btrfs subvol create /home/username#snapper -c home_username create-config /home/username#sed -i -e "s/ALLOW_USERS=\"\"/ALLOW_USERS=\"username\"/g" \ /etc/snapper/configs/home_username#yast users add username=username home=/home/username password=password#chown username.group /home/username#chmod 755 /home/username/.snapshots
10.5 Snapper設定の作成と変更 #
Snapperの動作は、各パーティションまたはBtrfsサブボリュームに固有の設定ファイルで定義できます。これらの設定ファイルは、/etc/snapper/configs/に保存されます。
ルートファイルシステムに十分な容量(約12GB)がある場合、ルートファイルシステム(/)のスナップショットはインストール時に自動的に有効になります。対応するデフォルト設定はrootという名前です。これにより、YaSTおよびZypperのスナップショットが作成および管理されます。デフォルト値のリストについては、10.5.1.1項 「環境設定データ」を参照してください。
10.1項 「デフォルト設定」で説明されているように、スナップショットを有効にするには、ルートファイルシステムに追加の空き容量が必要です。この容量は、インストールされているパッケージの量と、スナップショットに含まれるボリュームに加えられた変更の量によって異なります。スナップショットの頻度と、アーカイブされるスナップショットの数も重要です。
インストール時にスナップショットを自動的に有効にするには、最小サイズのルートファイルシステムが必要です。現在、このサイズは約12GBです。この値は今後、基本システムのアーキテクチャとサイズに応じて変わる可能性があります。これは、インストールメディアにあるファイル/control.xmlの次のタグの値に依存します。
<root_base_size> <btrfs_increase_percentage>
これは、ROOT_BASE_SIZE * (1 + BTRFS_INCREASE_PERCENTAGE/100)という式で計算されます。
この値は最小サイズであることに注意してください。ルートファイルシステム用に、これよりも多くの容量を使用することを検討します。一般的には、スナップショットが有効でない場合に使用するサイズの2倍にします。
Btrfsでフォーマットされたその他のパーティションやBtrfsパーティション上の既存のサブボリュームに対して、独自の設定ファイルを作成できます。以下の例では、/srv/wwwにマウントされたBtrfsフォーマットのパーティションに保存されたWebサーバデータをバックアップするSnapper設定を作成します。
設定が作成された後で、snapper自体またはYaSTのモジュールを使用して、これらのスナップショットからファイルを復元できます。YaSTの場合はを選択する必要があります。snapperの場合は、グローバルスイッチ-cを使用して設定を指定する必要があります(例: snapper -c myconfig
list)。
新しいSnapper設定を作成するには、snapper
create-configを実行します。
>sudosnapper -c www-data1 create-config /srv/www2
このコマンドにより、新しい設定ファイル/etc/snapper/configs/www-dataが作成され、/etc/snapper/config-templates/defaultから取得されたデフォルト値が使用されます。これらのデフォルトの調整方法については、10.5.1項 「既存の設定の管理」を参照してください。
新しい設定ファイルのデフォルト値は/etc/snapper/config-templates/defaultから取得されます。独自のデフォルトセットを使用する場合は、同じディレクトリ内にこのファイルのコピーを作成し、必要に応じて調整してください。作成したファイルを使用するには、create-configコマンドで-tオプションを指定します。
>sudosnapper -c www-data create-config -t MY_DEFAULTS /srv/www
10.5.1 既存の設定の管理 #
snapperコマンドは、既存の設定を管理するためのサブコマンドを備えています。これらの設定を一覧、表示、削除、および変更することができます。
- 設定の一覧表示
既存の設定をすべて取得するには、
snapper list-configsサブコマンドを使用します。>sudosnapper list-configs Config | Subvolume -------+---------- root | / usr | /usr local | /local- 設定の表示
指定した設定を表示するには、
snapper -c CONFIG get-configサブコマンドを使用します。CONFIGをsnapper list-configsで示される設定名のいずれかに置き換えます。環境設定オプションの詳細については、10.5.1.1項 「環境設定データ」を参照してください。デフォルトの設定を表示するには、次のコマンドを実行します。
>sudosnapper -c root get-config- 設定の変更
指定した設定のオプションを変更するには、
snapper -c CONFIG set-config OPTION=VALUEサブコマンドを使用します。CONFIGをsnapper list-configsで示される設定名のいずれかに置き換えます。OPTIONおよびVALUEに指定可能な値は、10.5.1.1項 「環境設定データ」に一覧にされています。- 設定の削除
設定を削除するには、
snapper -c CONFIG delete-configサブコマンドを使用します。CONFIGをsnapper list-configsで示される設定名のいずれかに置き換えます。
10.5.1.1 環境設定データ #
各設定には、コマンドラインから変更可能なオプションのリストが含まれています。次に、各オプションの詳細を示します。値を変更するには、snapper -c CONFIG
set-config
"KEY=VALUE"を実行します。
ALLOW_GROUPS、ALLOW_USERS通常のユーザにスナップショットを使用するパーミッションを付与します。詳細については、10.5.1.2項 「通常ユーザとしてのSnapperの使用」を参照してください。
デフォルトの設定は
""です。BACKGROUND_COMPARISON事前および事後スナップショットを、作成後にバックグラウンドで比較するかどうかを定義します。
デフォルトの設定は
"yes"です。EMPTY_*同一の事前および事後スナップショットを持つスナップショットペアのクリーンアップアルゴリズムを定義します。詳細については10.7.3項 「違いがないスナップショットのペアのクリーンアップ」を参照してください。
FSTYPEパーティションのファイルシステムタイプ。変更しません。
デフォルトの設定は
"btrfs"です。NUMBER_*インストールおよび管理スナップショットのクリーンアップアルゴリズムを定義します。詳細については10.7.1項 「番号付きスナップショットのクリーンアップ」を参照してください。
QGROUP/SPACE_LIMITクリーンアップアルゴリズムにクォータサポートを追加します。詳細については10.7.5項 「ディスククォータサポートの追加」を参照してください。
SUBVOLUMEスナップショットを作成するパーティションまたはサブボリュームのマウントポイント。変更しません。
デフォルトの設定は
"/"です。SYNC_ACLSnapperが通常ユーザによって使用される場合(10.5.1.2項 「通常ユーザとしてのSnapperの使用」を参照)、ユーザは
.snapshotディレクトリにアクセスして、そのディレクトリ内のファイルを読み取ることができる必要があります。SYNC_ACLをyesに設定した場合、Snapperは自動的に、ALLOW_USERSまたはALLOW_GROUPSエントリからACLを使用してユーザとグループがファイルにアクセスできるようにします。デフォルトの設定は
"no"です。TIMELINE_CREATEyes(はい)に設定されている場合は、毎時スナップショットが作成されます。有効値:yes,no。デフォルトの設定は
"no"です。TIMELINE_CLEANUP/TIMELINE_LIMIT_*タイムラインスナップショットのクリーンアップアルゴリズムを定義します。詳細については10.7.2項 「タイムラインスナップショットのクリーンアップ」を参照してください。
10.5.1.2 通常ユーザとしてのSnapperの使用 #
デフォルトでは、rootしかSnapperを使用できません。しかし、以下のような場合、特定のグループまたはユーザがスナップショットを作成したり、スナップショットを使って変更を取り消したりできる必要があります。
Webサイト管理者が
/srv/wwwのスナップショットを作成したい場合ユーザが自身のホームディレクトリのスナップショットを作成したい場合
このような目的のために、ユーザまたは/およびグループに許可を付与するSnapper設定を作成できます。対応する.snapshotsディレクトリは、指定されたユーザによって読み込みおよびアクセス可能である必要があります。このための最も簡単な方法は、SYNC_ACLオプションをyes (はい)に設定することです。
次のすべての手順はrootとして実行する必要があります。
Snapper設定がまだ存在しない場合は、ユーザがSnapperを使用できるようにする必要のあるパーティションまたはサブボリュームに対してSnapper設定を作成します。手順については、10.5項 「Snapper設定の作成と変更」を参照してください。例:
>sudosnapper --config web_data create /srv/www/etc/snapper/configs/CONFIGに設定ファイルを作成します。CONFIGは、前の手順で-c/--configを使用して指定される値です(/etc/snapper/configs/web_dataなど)。必要に応じて調整します。詳細については、10.5.1項 「既存の設定の管理」を参照してください。ALLOW_USERSとALLOW_GROUPS、またはその一方の値を設定し、ユーザやグループにパーミッションを与えます。複数のエントリはSpaceで区切ってください。たとえば、ユーザwww_adminにパーミッションを与えるには、次のように入力します。>sudosnapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"これで、指定されたユーザやグループが特定のSnapper設定を使用できます。以下のように
listコマンドを使ってテストできます。www_admin:~ >snapper -c web_data list
10.6 スナップショットの手動での作成と管理 #
Snapperは設定によって自動的にスナップショットを作成および管理するだけのものではありません。コマンドラインツールまたはYaSTモジュールを使用して、手動でスナップショットのペア(「事前および事後」)や単一のスナップショットを作成することもできます。
Snapperのすべての操作は既存の設定に対して実行されます(詳細は10.5項 「Snapper設定の作成と変更」を参照)。スナップショットを作成するには、対象のパーティションまたはボリュームに対して設定が存在する必要があります。デフォルトで、システム設定(root)が使用されます。独自の設定に対してスナップショットを作成または管理するには、明示的にその設定を選択する必要があります。YaSTのドロップダウンボックスを使用するか、コマンドラインで-cを指定します(snapper -c MYCONFIG
COMMAND)。
10.6.1 スナップショットのメタデータ #
各スナップショットには、スナップショット自体と特定のメタデータが含まれています。スナップショットを作成する場合は、メタデータも指定する必要があります。スナップショットを修正すると、メタデータが変更されます。コンテンツを修正することはできません。既存のスナップショットとそのメタデータを表示するには、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(種類):スナップショットの種類です。詳細は10.6.1.1項 「スナップショットの種類」を参照してください。このデータは変更できません。
Number(番号):スナップショットの一意の番号。このデータは変更できません。
Pre Number(前番号):対応する事前スナップショットの番号を指定します。事後スナップショットにのみ適用されます。このデータは変更できません。
Description(説明):スナップショットの説明です。
Userdata (ユーザデータ): カンマ区切りの「キー=値」のリスト形式でカスタムデータを指定できる、拡張用の項目です。(例:
reason=testing, project=foo)。このフィールドは、スナップショットに重要のマークを付ける場合(important=yes)や、スナップショットを作成したユーザを一覧にする場合(user=tux)にも使用されます。Cleanup-Algorithm(クリーンアップアルゴリズム):スナップショットのクリーンアップアルゴリズムです。詳細は10.7項 「スナップショットの自動クリーンアップ」を参照してください。
10.6.1.1 スナップショットの種類 #
Snapperには、事前(pre)、事後(post)、および単一(single)の3種類のスナップショットがあります。これらは物理的には同じものですが、Snapperでは別のものとして扱われます。
pre変更前のファイルシステムのスナップショットです。各
preスナップショットはpostスナップショットに対応しています。たとえば、これはYaST/Zypperの自動スナップショットに使用されます。post変更後のファイルシステムのスナップショットです。各
postスナップショットはpreスナップショットに対応しています。たとえば、これはYaST/Zypperの自動スナップショットに使用されます。singleスタンドアロンのスナップショットです。たとえば、これは1時間ごとの自動スナップショットに使用されます。これは、スナップショットを作成する際のデフォルトの種類です。
10.6.1.2 クリーンアップアルゴリズム #
Snapperには、古いスナップショットのクリーンアップアルゴリズムが3種類あります。このアルゴリズムは、日次のcronジョブとして実行されます。保持するさまざまなタイプのスナップショットの数を、Snapper設定で定義することができます(詳細は10.5.1項 「既存の設定の管理」を参照)。
- number(番号)
スナップショットが特定の数に達すると、古いスナップショットを削除します。
- timeline (タイムライン)
特定の期間が経過した古いスナップショットは削除しますが、毎時、毎日、毎月、および毎年のスナップショットを複数保持します。
- empty-pre-post(事前事後の差分なし)
事前と事後のスナップショットに差分がない場合、そのペアを削除します。
10.6.2 スナップショットの作成 #
スナップショットを作成するには、snapper createを実行するか、YaSTモジュールのをクリックします。以下は、コマンドラインを使ってスナップショットを作成する場合の例です。Snapper用のYaSTインタフェースはここでは明示的に説明されていませんが、等価な機能を提供しています。
後で識別しやすくするため、わかりやすい説明を指定しておいてください。オプション--userdataを介して追加情報を指定することもできます。
snapper create --from 17 --description "with package2"既存のスナップショットからスタンドアロンスナップショット(シングルタイプ)を作成します。これは、
snapper listからのスナップショットの番号で指定されます。(これはSnapperバージョン0.8.4以降に適用されます。)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を使用する場合のみです。
10.6.3 スナップショットのメタデータ修正 #
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番のメタデータを修正します。新しい説明が設定され、クリーンアップアルゴリズムを無しに設定します。
10.6.4 スナップショットの削除 #
YaSTのモジュールを使用してスナップショットを削除するには、リストからスナップショットを選択してをクリックします。
コマンドラインツールを使ってスナップショットを削除するには、スナップショットの番号が分かっている必要があります。snapper listを実行して番号を調べます。スナップショットを削除するには、snapper delete
NUMBERコマンドを実行します。
現在のデフォルトのサブボリュームスナップショットの削除は許可されません。
Snapperでスナップショットを削除すると、空いたスペースはバックグラウンドで実行されているBtrfsプロセスによって要求されます。つまり、空きスペースが見えるように、あるいは使用できるようになるまでに遅れが生じます。スナップショットの削除で空いたスペースをすぐに使用したい場合は、deleteコマンドで--syncオプションを指定します。
preスナップショットを削除する場合は、必ず、対応するpostスナップショットを削除する必要があります(逆も同様です)。
snapper delete 65デフォルト(
root)設定のスナップショット65番を削除します。snapper -c home delete 89 90homeという名前のカスタム設定のスナップショット89番および90番を削除します。snapper delete --sync 23デフォルト設定(
root)のスナップショット23を削除し、空いたスペースをすぐに使用できるようにします。
Btrfsスナップショットが存在するのに、Snapper用のメタデータを含むXMLファイルが欠落している場合があります。この場合、スナップショットがSnapperには見えないため、手動で削除する必要があります。
btrfs subvolume delete /.snapshots/SNAPSHOTNUMBER/snapshot rm -rf /.snapshots/SNAPSHOTNUMBER
ハードディスクの容量を空けるためにスナップショットを削除する場合は、古いスナップショットから削除するようにします。古いスナップショットほど、多くの容量を使用します。
スナップショットは、日次のcronジョブでも自動的に削除されます。詳細については、10.6.1.2項 「クリーンアップアルゴリズム」を参照してください。
10.7 スナップショットの自動クリーンアップ #
スナップショットはディスク容量を占有し、時間が経つにつれて、スナップショットが占有するディスク容量が増える可能性があります。ディスク容量が不足しないようにするために、Snapperは、古いスナップショットを自動的に削除するためのアルゴリズムを備えています。これらのアルゴリズムは、タイムラインスナップショットと番号付きスナップショット(管理スナップショットとインストールスナップショットのペア)を区別します。各タイプに対して、保持するスナップショットの数を指定できます。
そのほかに、オプションでディスク容量クォータを指定し、スナップショットが占有可能な最大ディスク容量を定義することもできます。また、事前スナップショットと事後スナップショットのペアに違いがない場合、それらのペアを自動的に削除することもできます。
クリーンアップアルゴリズムは常に1つのSnapper設定にバインドされるため、各設定に対してアルゴリズムを設定する必要があります。特定のスナップショットが自動的に削除されないようにするには、 スナップショットを削除から保護することができますか? を参照してください。
デフォルトのセットアップ(root)は、番号付きスナップショットと、空の事前/事後スナップショットのペアのクリーンアップを実行するように設定されています。クォータサポートが有効になっている場合、スナップショットは、ルートパーティションの使用可能なディスク容量を50%までしか占有できません。タイムラインスナップショットはデフォルトで無効になっているため、タイムラインのクリーンアップアルゴリズムも無効になっています。
10.7.1 番号付きスナップショットのクリーンアップ #
番号付きスナップショット(管理スナップショットとインストールスナップショットのペア)のクリーンアップは、Snapper設定の次のパラメータで制御します。
NUMBER_CLEANUPインストールスナップショットと管理スナップショットのペアのクリーンアップを有効または無効にします。有効にすると、スナップショットのペアは、スナップショットの合計数が
NUMBER_LIMIT/NUMBER_LIMIT_IMPORTANTで指定された数を超え、「かつ」NUMBER_MIN_AGEで指定された保存期間を超える場合に削除されます。有効な値:yes(はい) (有効)、no(いいえ) (無効)。デフォルトの設定は
"yes"です。変更または設定を行うコマンドの例:
>sudosnapper -c CONFIG set-config "NUMBER_CLEANUP=no"NUMBER_LIMIT/NUMBER_LIMIT_IMPORTANT保持する通常のインストール/管理スナップショットのペア、または重要なインストール/管理スナップショットのペア、あるいはその両方の数を定義します。
NUMBER_CLEANUPが"no"に設定されている場合、無視されます。デフォルト値は、
NUMBER_LIMITでは"2-10"、NUMBER_LIMIT_IMPORTANTでは"4-10"です。クリーニングアルゴリズムにより、スナップショットとファイルシステムの容量を考慮せずに、指定された最大値を超えるスナップショットは削除されます。また、このアルゴリズムにより、スナップショットとファイルシステムの制限に達するまで、最小値を超えるスナップショットも削除されます。変更または設定を行うコマンドの例:
>sudosnapper -c CONFIG set-config "NUMBER_LIMIT=10"重要: 範囲値と定数値の比較クォータサポートが有効な場合は(10.7.5項 「ディスククォータサポートの追加」を参照)、制限を「最小値-最大値」の範囲として指定する必要があります。たとえば、
2-10のように指定します。クォータサポートが無効な場合は、定数値(たとえば10)を指定する必要があります。そうしないと、エラーが発生してクリーンアップに失敗します。NUMBER_MIN_AGEスナップショットが自動削除の対象となるまでの最短期間を秒単位で定義します。ここで指定した期間に達していなければ、スナップショットはいくつ存在していても削除されません。
デフォルトの設定は
"1800"です。変更または設定を行うコマンドの例:
>sudosnapper -c CONFIG set-config "NUMBER_MIN_AGE=864000"
NUMBER_LIMIT、NUMBER_LIMIT_IMPORTANT、およびNUMBER_MIN_AGEは常に評価されます。スナップショットが削除されるのは、「すべての」条件を満たしている場合のみです。
保存期間に関係なく、NUMBER_LIMIT*で定義された数のスナップショットを常に保持する場合は、NUMBER_MIN_AGEを0に設定します。
次の例は、保存期間に関係なく最新の10個の重要なスナップショットと通常のスナップショットを保持するための設定を示しています。
NUMBER_CLEANUP=yes NUMBER_LIMIT_IMPORTANT=10 NUMBER_LIMIT=10 NUMBER_MIN_AGE=0
特定の保存期間を超えてスナップショットを保持したくない場合は、NUMBER_LIMIT*を0に設定して、NUMBER_MIN_AGEで保存期間を指定します。
次の例は、10日経っていないスナップショットのみを保持するための設定を示しています。
NUMBER_CLEANUP=yes NUMBER_LIMIT_IMPORTANT=0 NUMBER_LIMIT=0 NUMBER_MIN_AGE=864000
10.7.2 タイムラインスナップショットのクリーンアップ #
タイムラインスナップショットのクリーンアップは、Snapper設定の次のパラメータで制御します。
TIMELINE_CLEANUPタイムラインスナップショットのクリーンアップを有効または無効にします。有効にすると、スナップショットは、スナップショットの合計数が
TIMELINE_LIMIT_*で指定された数を超え、「かつ」TIMELINE_MIN_AGEで指定された保存期間を超える場合に削除されます。有効値:yes,no。デフォルトの設定は
"yes"です。変更または設定を行うコマンドの例:
>sudosnapper -c CONFIG set-config "TIMELINE_CLEANUP=yes"TIMELINE_LIMIT_DAILY,TIMELINE_LIMIT_HOURLY,TIMELINE_LIMIT_MONTHLY,TIMELINE_LIMIT_WEEKLY,TIMELINE_LIMIT_YEARLY1時間、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年分保持されます。
10.7.3 違いがないスナップショットのペアのクリーンアップ #
10.1.2項 「スナップショットのタイプ」で説明したように、YaSTモジュールまたはZypperを実行すると、起動時に事前スナップショットが作成され、終了時に事後スナップショットが作成されます。変更を何も加えていない場合、事前スナップショットと事後スナップショットには違いがありません。Snapper設定で次のパラメータを設定することで、そのような「空の」スナップショットのペアを自動的に削除できます。
EMPTY_PRE_POST_CLEANUPyesに設定した場合、違いがない事前および事後スナップショットのペアは削除されます。デフォルトの設定は
"yes"です。EMPTY_PRE_POST_MIN_AGE違いがない事前および事後スナップショットのペアが自動削除の対象となるまでの最短期間を秒単位で定義します。
デフォルトの設定は
"1800"です。
10.7.4 手動で作成されたスナップショットのクリーンアップ #
Snapperは、手動で作成されたスナップショットに対するカスタムクリーンアップアルゴリズムを備えていません。ただし、手動で作成されたスナップショットに、numberクリーンアップアルゴリズムまたはtimelineクリーンアップアルゴリズムを割り当てることができます。その場合、スナップショットは、指定されたアルゴリズムの「クリーンアップキュー」に入ります。クリーンアップアルゴリズムは、スナップショットの作成時に指定することも、既存のスナップショットを変更して指定することもできます。
snapper create --description "Test" --cleanup-algorithm numberデフォルト(ルート)設定のスタンドアロンスナップショット(singleタイプ)を作成して、
numberクリーンアップアルゴリズムを割り当てます。snapper modify --cleanup-algorithm "timeline" 25番号が25のスナップショットを変更して、クリーンアップアルゴリズム
timelineを割り当てます。
10.7.5 ディスククォータサポートの追加 #
上で説明したnumberクリーンアップアルゴリズムまたはtimelineクリーンアップアルゴリズム、あるいはその両方のほかに、Snapperはクォータもサポートします。スナップショットが占有できる使用可能な容量の割合を定義できます。この割合の値は常に、各Snapper設定で定義されたBtrfsサブボリュームに適用されます。
Btrfsクォータはユーザにではなく、サブボリュームに適用されます。Btrfsクォータを使用するだけでなく、ディスクスペースクォータをユーザやグループに適用することもできます(たとえば、quotaコマンドを使用)。
インストール時にSnapperを有効にした場合、クォータサポートは自動的に有効になっています。後から手動でSnapperを有効にする場合は、snapper
setup-quotaを実行することでクォータサポートを有効にできます。そのためには有効な設定が必要です(詳細については、10.5項 「Snapper設定の作成と変更」を参照してください)。
クォータサポートは、Snapper設定の次のパラメータで制御します。
QGROUPSnapperによって使用される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つのスナップショットは常に保持されます。
10.8 スナップショットが使用する排他的なディスク容量の表示 #
スナップショットはデータを共有してストレージ容量を効率的に使用できるため、duやdfなどの通常のコマンドを使用しても、使用済みディスク容量は正確に測定されません。クォータを有効にしてBtrfsのディスク容量を解放する場合は、共有領域ではなく、各スナップショットで使用されている排他的なディスク容量を把握する必要があります。Snapper 0.6以降では、各スナップショットの使用済みディスク容量がUsed Space列に報告されます。
# snapper --iso list
# | Type | Pre # | Date | User | Used Space | Cleanup | Description | Userdata
----+--------+-------+---------------------+------+------------+---------+-----------------------+--------------
0 | single | | | root | | | current |
1* | single | | 2019-07-22 13:08:38 | root | 16.00 KiB | | first root filesystem |
2 | single | | 2019-07-22 14:21:05 | root | 14.23 MiB | number | after installation | important=yes
3 | pre | | 2019-07-22 14:26:03 | root | 144.00 KiB | number | zypp(zypper) | important=no
4 | post | 3 | 2019-07-22 14:26:04 | root | 112.00 KiB | number | | important=no
5 | pre | | 2019-07-23 08:19:36 | root | 128.00 KiB | number | zypp(zypper) | important=no
6 | post | 5 | 2019-07-23 08:19:43 | root | 80.00 KiB | number | | important=no
7 | pre | | 2019-07-23 08:20:50 | root | 256.00 KiB | number | yast sw_single |
8 | pre | | 2019-07-23 08:23:22 | root | 112.00 KiB | number | zypp(ruby.ruby2.5) | important=no
9 | post | 8 | 2019-07-23 08:23:35 | root | 64.00 KiB | number | | important=no
10 | post | 7 | 2019-07-23 08:24:05 | root | 16.00 KiB | number | |
btrfsコマンドは、スナップショットが使用するスペースの別のビューを提供します。
# btrfs qgroup show -p /
qgroupid rfer excl parent
-------- ---- ---- ------
0/5 16.00KiB 16.00KiB ---
[...]
0/272 3.09GiB 14.23MiB 1/0
0/273 3.11GiB 144.00KiB 1/0
0/274 3.11GiB 112.00KiB 1/0
0/275 3.11GiB 128.00KiB 1/0
0/276 3.11GiB 80.00KiB 1/0
0/277 3.11GiB 256.00KiB 1/0
0/278 3.11GiB 112.00KiB 1/0
0/279 3.12GiB 64.00KiB 1/0
0/280 3.12GiB 16.00KiB 1/0
1/0 3.33GiB 222.95MiB ---
qgroupid列には、各サブボリュームの識別番号が表示され、qgroupレベルとIDの組み合わせが割り当てられます。
rfer列には、サブボリュームに参照されるデータ合計数が表示されます。
excl列には、各サブボリュームの排他的なデータが表示されます。
parent列には、サブボリュームの親qgroupが表示されます。
最後の項目、1/0、は親qgroupの合計が表示されます。上記の例では、サブボリュームのすべてが削除される場合、222.95MiBが解放されます。次のコマンドを実行して、各サブボリュームに関連するスナップショットが確認されます。
# btrfs subvolume list -st /
ID gen top level path
-- --- --------- ----
267 298 266 @/.snapshots/1/snapshot
272 159 266 @/.snapshots/2/snapshot
273 170 266 @/.snapshots/3/snapshot
274 171 266 @/.snapshots/4/snapshot
275 287 266 @/.snapshots/5/snapshot
276 288 266 @/.snapshots/6/snapshot
277 292 266 @/.snapshots/7/snapshot
278 296 266 @/.snapshots/8/snapshot
279 297 266 @/.snapshots/9/snapshot
280 298 266 @/.snapshots/10/snapshotあるサービスパックから別のサービスパックにアップグレードすると、スナップショットがシステムサブボリュームの多くのディスク領域を占有することになります。これらのスナップショットが不要になった場合は、手動で削除することをお勧めします。詳細については10.6.4項 「スナップショットの削除」を参照してください。
10.9 ホットスポットに関する一般的な質問とその回答 (FAQ) #
- 問:
Snapperが
/var/log、/tmpなどのディレクトリの変更を表示しないのはなぜですか? 特定のディレクトリについては、スナップショットから除外することに決定しました。リストと理由については、10.1.3項 「スナップショットから除外されるディレクトリ」を参照してください。スナップショットからパスを除外するため、これらのパス用にサブボリュームを作成しています。
- 問: ブートローダからスナップショットをブートできますか?
はい。詳細については、10.3項 「スナップショットからのブートによるシステムロールバック」を参照してください。
- 問: スナップショットを削除から保護することができますか?
現在のところ、Snapperでは、スナップショットが手動で削除されるのを防ぐ方法はありません。ただし、スナップショットがクリーンアップアルゴリズムによって自動的に削除されるのを防ぐことはできます。手動で作成されたスナップショット(10.6.2項 「スナップショットの作成」を参照)には、
--cleanup-algorithmでクリーンアップアルゴリズムを指定しない限り、クリーンアップアルゴリズムは割り当てられていません。自動的に作成されたスナップショットには、常にnumberアルゴリズムまたはtimelineアルゴリズムが割り当てられています。1つ以上のスナップショットからそのような割り当てを削除するには、次の手順に従います。使用可能なすべてのスナップショットの一覧を表示します。
>sudosnapper list -a削除されないようにするスナップショットの数を記憶します。
次のコマンドを実行します。数字のプレースホルダを、記憶した数に置き換えます。
>sudosnapper modify --cleanup-algorithm "" #1 #2 #nもう一度
snapper list -aを実行して、結果を確認します。変更したスナップショットの列Cleanupのエントリが空になります。
- 問: Snapperに関する詳細情報はどこで入手できますか?
Snapperのホームページ(http://snapper.io/)を参照してください。




