Snapperユーティリティを使用したファイル・システム・スナップショットの自動化
Snapperユーティリティを使用すると、ファイル・システムのスナップショットの管理を自動化できます。 このユーティリティを使用すると、スナップショットの作成と削除が容易になり、ユーザーはスナップショット間の差異を比較して変更をファイル・レベルで元に戻せるようになります。 Snapperユーティリティの詳細は、アップストリームのプロジェクト・ページ(http://snapper.io/)を参照してください。
注意:
スナップショットでは、ある時点のファイル・システムの状態を記録します。 そのため、スナップショットの取得時に動作していた可能性のあるトランザクション・プロセスのファイル・システムの整合性を保証することはできません。 snapperコマンドなどのユーティリティは、dnfコマンドの使用時など、特定の操作のスナップショットの前後の取得に役立ちますが、これらのスナップショットは、システム上で同時に実行されている可能性がある他のプロセスを認識しません。 集中的なI/Oまたはメモリー使用量(データベースやミドルウェア・アプリケーションなど)の可能性があるプロセスがある場合は、これらを停止するか、スナップショットを作成する前にすべてのアクティビティが完了していることを確認して、スナップショット内のデータ整合性またはファイル・システム破損の問題の可能性を低減してください。
サブボリュームのSnapper構成の作成
snapperコマンドを使用して、Btrfsサブボリュームのスナップショットを作成および管理できます。 Snapperで使用するBtrfsサブボリュームごとに構成エントリを作成する必要があります。 サブボリュームがデフォルトのSELinuxポリシー構成の外部にあるディレクトリにマウントされている場合、Snapperを使用してそのディレクトリのスナップショットを作成するために、そのディレクトリのSELinuxファイル・コンテキストを更新する必要がある場合があります。
様々なタイプのスナップショットの理解
snapperコマンドを使用して、次の3つのタイプのスナップショットを作成できます:
- 単一
-
「単一スナップショット」を使用して、サブボリュームの状態を記録しますが、サブボリュームの他のスナップショットとの関連付けはありません。
- pre
-
プリ・スナップショットを使用して、変更前のサブボリュームの状態を記録します。 事前スナップショットは、変更が完了した直後に取得する「ポスト・スナップショット」と常にペアになります。
- post
-
ポスト・スナップショットを使用して、変更後のサブボリュームの状態を記録します。 ポスト・スナップショットは、変更を行う直前に取得する「preスナップショット」と常にペアになります。
サブボリュームの単一のスナップショットを作成するには、snapper createコマンドを使用します。たとえば:
sudo snapper -c root_config create --description "Regular daily snapshot"単一のスナップショットは、定期的なバックアップの目的で役立ち、「自動スナッパ・スナップショットの構成」で説明されているように、バックアップ・タイムラインの作成にも使用できます。
ロールバックする必要がある特定のファイル・システム変更が発生する可能性が高いアクションの場合は、プリ・スナップショットとポスト・スナップショットを使用して、トランザクションの前後にファイル・システムのスナップショットを取得できます。
たとえば、次のコマンドでは、サブボリュームのプリ・スナップショットおよびポスト・スナップショットを作成します。
sudo snapper -c root_config create -t pre -pプリ・スナップショットを作成したら、ファイル・システムを変更するアクションを実行します。 次に、次のコマンドを実行してポスト・スナップショットを作成します。
sudo snapper -c root_config create -t post --pre-num N -p
snapperコマンドで-pオプションを指定すると、スナップショットの番号が表示され、ポスト・スナップショットの作成時に、またはpreスナップショットとpostスナップショットの内容を比較するときに参照できます。
事前スナップショットおよび事後スナップショットを作成するアクションは、snapper createコマンドで--commandオプションを使用して、指定したコマンドライン操作をpreおよびpostスナップショットでラップすることで凝縮できます。 たとえば:
snapper -c root create --command "cd /tmp/build; make install" \
--description "Installing a home built binary"事前スナップショットと事後スナップショットは、多くの場合、パッケージのインストールやアップグレード時など、手動で元に戻すには複雑すぎるシステム変更を実行するときに使用されます。
「自動スナッパ・スナップショットの構成」で説明されているDNF Snapperプラグインは、この方法で事前および事後スナップショットを使用し、説明フィールドを使用してスナップショットをトリガーしたDNFトランザクションを格納します。
たとえば、次のスナップショット・セットでは、タイムラインの一部としてトリガーされる定期的な単一のスナップショット、およびvimパッケージのインストール時にDNF Snapperプラグインによってトリガーされる事前および事後スナップショットを識別できます。
$ sudo snapper -c root list # | Type | Pre # | Date | User | Cleanup | Description | Userdata
---+--------+-------+------------------------------+------+----------+--------------------------+---------
0 | single | | | root | | current |
1 | single | | Wed 25 Nov 2020 07:00:30 EST | root | timeline | timeline |
2 | single | | Wed 25 Nov 2020 08:00:01 EST | root | timeline | timeline |
3 | single | | Wed 25 Nov 2020 09:00:01 EST | root | timeline | timeline |
4 | pre | | Wed 25 Nov 2020 09:07:21 EST | root | number | /usr/bin/dnf install vim |
5 | post | 4 | Wed 25 Nov 2020 09:07:25 EST | root | number | /usr/bin/dnf install vim |
6 | single | | Wed 25 Nov 2020 10:00:01 EST | root | timeline | timeline |
自動スナッパ・スナップショットの構成
Snapperは、自動定期バックアップを実行するように構成して、システムを瞬時にロールバックするために使用できるシステム・タイムラインを作成できます。 また、SnapperでDNFプラグインを使用して、プラグインのインストール後にすべてのDNFトランザクションに対してバックアップ前およびバックアップ後を作成することもできます。
自動定期バックアップは、Snapperに含まれる主要な機能として提供されます。 これらのバックアップは、Snapperの単一バックアップ機能を利用し、systemdタイマー・ユニットを使用して、1時間ごとのスケジュールで自動的にバックアップを取得します。 2番目のsystemdタイマー・ユニットは、システムに格納されるスナップショットの数を減らすためにバックアップをプルーニングするために含まれています。 各Snapper構成のタイムライン・オプションは、サブボリュームごとにカスタマイズできます。
スナッパ・タイムライン構成の詳細は、「単一バックアップの自動化によるスナッパ・タイムラインの作成」を参照してください。
Snapper用のDNFプラグインは、ソフトウェアのインストールまたはアップグレードを実行する前にシステムをすぐにロールバックするために使用できる強力なツールです。 このツールは、ソフトウェアのインストールまたはアップグレードによってファイル・システムまたは現在のシステム構成に大幅な変更が実行される可能性がある場合に役立ちます。 詳細は、https://dnf-plugins-extras.readthedocs.io/en/latest/snapper.htmlを参照してください。 この機能をシステムで有効にする方法については、「DNFトランザクションの事前バックアップおよび事後バックアップの自動化」を参照してください。
単一バックアップの自動化によるスナッパ・タイムラインの作成
Snapperは、定期的な単一バックアップを実行して、システムに構成した任意のサブボリュームに対してロールバックできるSnapperタイムラインを作成するように構成できます。
次のステップでは、Snapperタイムライン管理を制御するsystemdユニットを有効にする方法と、タイムライン内に格納するスナップショットの数を構成する方法について説明します。 詳細は、snapper(8)およびsnapper-configs(5)のマニュアル・ページを参照してください。
DNFトランザクションの事前バックアップおよび事後バックアップの自動化
DNF Snapperプラグインをシステムにインストールすると、DNFトランザクションの事前スナップショットおよび事後スナップショットを自動的にトリガーできます。
この機能は、システム・パッケージのアップグレードによってデバッグが必要な障害が発生した場合や、インストールまたはアップグレード中に変更されたファイルを分析できるようになった場合に、変更をロールバックするのに役立ちます。 このプラグインが動作するために、ユーザーによる構成や操作は必要ありません。 プラグインがシステムにインストールされたあと、すべてのDNFトランザクションに対してプリスナップショットとポスト・スナップショットが自動的に作成されます。
Snapperを使用したBtrfsスナップショットの操作
Snapperを使用してBtrfsスナップショットを管理する場合は、一般的に実行されるアクションのこの表されたサマリーを参照として使用します。 詳細は、snapper(8)マニュアル・ページを参照してください。
表4-1 一般的に使用されるSnapperコマンド・リファレンス
| アクション | コマンドおよび説明 |
|---|---|
| 単一のスナップショットを作成します。 |
サブボリュームの単一のスナップショットを作成するには、
|
| コマンドのプリスナップショットとポスト・スナップショットを作成します。 |
|
|
構成のスナップショットをリストします。 |
スナッパ構成またはサブボリュームに存在するスナップショットをリストするには、次を実行します:
|
|
スナップショット間のファイルとディレクトリの変更を表示します。 |
2つのスナップショット間で追加、削除または変更されたファイルおよびディレクトリを表示するには、
|
|
スナップショット間のファイル内の差異を表示します。 |
2つのスナップショット間のすべてのファイルの内容の差異を表示するには、
ファイルへのフルパスを指定すると、単一ファイルの2つのスナップショットの差異を表示することもできます。
|
|
スナップショットの削除 |
スナップショットを削除するには、
|
|
プリ・スナップショットとポスト・スナップショットの間でファイルに加えられた変更を元に戻します。 |
サブボリューム内の、ポスト・スナップショットN'に含まれる変更をプリ・スナップショットN'に戻すには、次のようにします。
変更を元に戻しても、ファイル・システムは前のスナップショットに戻されませんが、スナップショット内の既存のファイルに加えられた変更は元に戻されます。 つまり、スナップショットの取得後に作成されたファイルは、 |