機械翻訳について

Snapperユーティリティを使用したファイル・システム・スナップショットの自動化

Snapperユーティリティを使用すると、ファイル・システムのスナップショットの管理を自動化できます。 このユーティリティを使用すると、スナップショットの作成と削除が容易になり、ユーザーはスナップショット間の差異を比較して変更をファイル・レベルで元に戻せるようになります。 Snapperユーティリティの詳細は、アップストリームのプロジェクト・ページ(http://snapper.io/)を参照してください。

注意:

スナップショットでは、ある時点のファイル・システムの状態を記録します。 そのため、スナップショットの取得時に動作していた可能性のあるトランザクション・プロセスのファイル・システムの整合性を保証することはできません。 snapperコマンドなどのユーティリティは、dnfコマンドの使用時など、特定の操作のスナップショットの前後の取得に役立ちますが、これらのスナップショットは、システム上で同時に実行されている可能性がある他のプロセスを認識しません。 集中的なI/Oまたはメモリー使用量(データベースやミドルウェア・アプリケーションなど)の可能性があるプロセスがある場合は、これらを停止するか、スナップショットを作成する前にすべてのアクティビティが完了していることを確認して、スナップショット内のデータ整合性またはファイル・システム破損の問題の可能性を低減してください。

Snapperのインストール

まだインストールされていない場合は、ol10_UEKR8 yumリポジトリからSnapperユーティリティをインストールできます。

  1. dnfコマンドを使用して、Snapperをインストールします。
    sudo dnf install -y snapper

サブボリュームのSnapper構成の作成

snapperコマンドを使用して、Btrfsサブボリュームのスナップショットを作成および管理できます。 Snapperで使用するBtrfsサブボリュームごとに構成エントリを作成する必要があります。 サブボリュームがデフォルトのSELinuxポリシー構成の外部にあるディレクトリにマウントされている場合、Snapperを使用してそのディレクトリのスナップショットを作成するために、そのディレクトリのSELinuxファイル・コンテキストを更新する必要がある場合があります。

  1. 既存のマウントされたBtrfsサブボリュームのSnapper構成を作成します。

    既存のマウントされたBtrfsサブボリュームのSnapper構成を設定するには:

    sudo snapper -c config_name create-config -f btrfs fs_name

    前述のコマンドのconfig_nameは構成の名前、fs_nameはマウントされているBtrfsサブボリュームのパスです。 コマンドを実行すると、次の処理が実行されます。

    • config_nameのエントリを/etc/sysconfig/snapperファイルに追加します。

    • 構成ファイル/etc/snapper/configs/config_name を作成します。

    • スナップショット用の.snapshotsサブボリュームを設定します。

    たとえば、次のコマンドでは、Btrfs rootファイル・システムのSnapper構成を設定します:

    sudo snapper -c root_config create-config -f btrfs /
  2. snapper list-configsコマンドを使用して、既存の構成をすべてリストします:
    sudo snapper list-configs
    Config      | Subvolume
    ------------+----------
    home_config | /home    
    root_config | /        
  3. デフォルト・ポリシー以外のディレクトリのSELinuxファイル・コンテキストを更新します。

    デフォルトのSnapper SELinuxポリシーを使用すると、Snapperは/, /etc, /mnt, /usr, /varおよびHOME_ROOT(通常は/home)のスナップショットを管理できます。 /data/srvなどのディレクトリを作成する場合は、Snapperがそのディレクトリのスナップショットを作成および管理できるように、そのディレクトリのSELinuxファイル・コンテキストを設定する必要がある場合があります。

    たとえば、Snapperが/dataディレクトリのスナップショットを管理できるようにするには、次を実行します:

    sudo semanage fcontext -a -t snapperd_data_t "/data/\.snapshots(/.*)?"
    sudo restorecon -R -v /data 

様々なタイプのスナップショットの理解

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)のマニュアル・ページを参照してください。

  1. snapper-timeline systemdユニットを有効にします。

    自動スナップショットはsystemdタイマー・ユニットによってトリガーされます。このタイマー・ユニットは、タイムラインを作成できるように有効化する必要があります:

    sudo systemctl enable --now snapper-timeline.timer
  2. snapper-cleanup systemdユニットを有効にして、失効したスナップショットを自動的に削除し、スナップショットを管理可能にします。
    sudo systemctl enable --now snapper-cleanup.timer
    デフォルトでは、Snapperタイムライン構成は、10時間毎、10日毎、10月毎、および10年毎のスナップショットを保持します。 スナップショットは、クリーン・アップ・タイマーによってプルーニングされます。
  3. サブボリューム・スナッパ構成を確認して、スナッパ・タイムライン構成をカスタマイズします。

    各Snapper構成には、定期的なバックアップの設定が含まれています。この設定は、/etc/snapper/configs/config_name ファイルのTIMELINE_CREATE構成変数によって制御されます。

    systemdタイマー・ユニットが有効になっている場合、TIMELINE_CREATE変数が有効になっているすべてのSnapper構成に対して定期的なスナップショット・イベントが自動的にトリガーされます。 特定のサブボリューム構成の定期的なスナップショットを無効にするには、構成ファイルで変数値をnoに変更します。

    構成を編集して、snapper-cleanupプロセスによって保持されるタイムライン・スナップショットの数を制御することもできます。 次の構成変数を変更して、これらの値を設定します:

    TIMELINE_LIMIT_HOURLY="10"
    TIMELINE_LIMIT_DAILY="10"
    TIMELINE_LIMIT_WEEKLY="10"
    TIMELINE_LIMIT_MONTHLY="10"
    TIMELINE_LIMIT_YEARLY="10"

DNFトランザクションの事前バックアップおよび事後バックアップの自動化

DNF Snapperプラグインをシステムにインストールすると、DNFトランザクションの事前スナップショットおよび事後スナップショットを自動的にトリガーできます。

この機能は、システム・パッケージのアップグレードによってデバッグが必要な障害が発生した場合や、インストールまたはアップグレード中に変更されたファイルを分析できるようになった場合に、変更をロールバックするのに役立ちます。 このプラグインが動作するために、ユーザーによる構成や操作は必要ありません。 プラグインがシステムにインストールされたあと、すべてのDNFトランザクションに対してプリスナップショットとポスト・スナップショットが自動的に作成されます。

  1. dnfコマンドを使用してプラグインをインストールします:
    sudo dnf install -y python3-dnf-plugin-snapper

Snapperを使用したBtrfsスナップショットの操作

Snapperを使用してBtrfsスナップショットを管理する場合は、一般的に実行されるアクションのこの表されたサマリーを参照として使用します。 詳細は、snapper(8)マニュアル・ページを参照してください。

表4-1 一般的に使用されるSnapperコマンド・リファレンス

アクション コマンドおよび説明
単一のスナップショットを作成します。

サブボリュームの単一のスナップショットを作成するには、snapper createコマンドを使用します。たとえば:

sudo snapper -c config_name create --description "description"
コマンドのプリスナップショットとポスト・スナップショットを作成します。

snapper createコマンドで--commandオプションを使用して、preおよびpostスナップショットで操作をラップします。 たとえば:

snapper -c config_name create --command "command" \
    --description "description"

構成のスナップショットをリストします。

スナッパ構成またはサブボリュームに存在するスナップショットをリストするには、次を実行します:

sudo snapper -c config_name list

スナップショット間のファイルとディレクトリの変更を表示します。

2つのスナップショット間で追加、削除または変更されたファイルおよびディレクトリを表示するには、statusサブコマンドを使用し、比較する2つのスナップショットの番号を指定します:

sudo snapper -c config_name status N .. N'

スナップショット間のファイル内の差異を表示します。

2つのスナップショット間のすべてのファイルの内容の差異を表示するには、diffサブコマンドを使用します:

sudo snapper -c config_name diff N .. N'

ファイルへのフルパスを指定すると、単一ファイルの2つのスナップショットの差異を表示することもできます。

sudo snapper -c config_name diff N .. N' /path/to/file

スナップショットの削除

スナップショットを削除するには、deleteサブコマンドにその番号を指定します:

sudo snapper -c config_name delete N''

プリ・スナップショットとポスト・スナップショットの間でファイルに加えられた変更を元に戻します。

サブボリューム内の、ポスト・スナップショットN'に含まれる変更をプリ・スナップショットN'に戻すには、次のようにします。

sudo snapper -c config_name undochange N .. N'

変更を元に戻しても、ファイル・システムは前のスナップショットに戻されませんが、スナップショット内の既存のファイルに加えられた変更は元に戻されます。 つまり、スナップショットの取得後に作成されたファイルは、undochange操作後に残ります。 undochangeサブコマンドは、変更のデータ整合性をチェックしません。 変更の影響を明確に評価せずに、このコマンドを使用することに注意してください。

スナッパ・スナップショットのマウント

Snapperによって生成されたスナップショットは、他のBtrfsスナップショットと同じ方法でマウントできます。 マウントまたはリストアするスナップショットを処理するには、スナップショット・ボリュームIDをSnapperスナップショット番号に関連付ける必要がある場合があります。

  1. snapper listコマンドを実行して、ロールバックするスナップショットの番号を識別します。

    たとえば、DNFパッケージの更新が実行される前のスナップショットにロールバックするために、すべてのプリ・スナップショットとポスト・スナップショットを表示する場合は、次のコマンドを実行します。

    sudo snapper -c root list -t pre-post

    前述のコマンドを実行すると、次の出力が生成されます:

    Pre # | Post # | Pre Date                     | Post Date                    | Description                     | Userdata
    ------+--------+------------------------------+------------------------------+---------------------------------+---------
       4  |     5  | Wed 25 Nov 2020 09:07:21 EST | Wed 25 Nov 2020 09:07:25 EST | /usr/bin/dnf install vim        |         
     127  |   128  | Mon 30 Nov 2020 08:25:42 EST | Mon 30 Nov 2020 08:30:57 EST | /usr/bin/dnf update             |         

    この場合、マウントするプリスナップショットのスナップショット番号は127です。

  2. btrfs subvolume listコマンドを使用して、SnapperスナップショットのサブボリュームIDを取得します。

    たとえば、Snapperスナップショット番号127のスナップショットのサブボリュームIDを取得するには、次のようにします:

    sudo btrfs subvolume list /|grep .snapshots.*127  

    前述のコマンドの出力は次のようになります。

    ID 521 gen 11533 top level 268 path .snapshots/127/snapshot

    このスナップショットのサブボリュームIDは521としてリストされています。

  3. mountコマンドにsubvolidオプションを指定して、マウントするスナップショットのサブボリュームIDを指定します:
    sudo mount -o subvolid=521 /dev/sda2 /mnt

    この情報を使用すると、rootファイル・システムのスナップショットでブートすることもできます。 詳細は、「ルート・ファイル・システムとしてのスナップショットのマウント」を参照してください。