Linux 上の Snapper を使用してスナップショットを管理する方法
Snapper は、Linux 上でスナップショットを管理するために使用できる無料のオープンソース アプリケーションです。元々は BTRFS スナップショットで動作するように設計されましたが、LVM シンプロビジョニング論理ボリュームもサポートするように拡張されました。このチュートリアルでは、最もよく使用されている Linux ディストリビューションに Snapper をインストールする方法と、Snapper を使用して Linux 上でスナップショットを管理する方法を学びます。
このチュートリアルでは次のことを学びます:
- 最も使用されている Linux ディストリビューションに Snapper をインストールする方法
- Snapper 構成を生成する方法
- Snapper を使用してスナップショットを作成、変更、削除する方法
- 時間ごとのスナップショットを自動的に作成する方法
- スナップショット クリーンアップ アルゴリズムを選択して適用する方法
インストール
もともと OpenSUSE 開発者の Arvin Schnell によって作成された Snapper は、現在、最もよく使用されているすべての Linux ディストリビューションの公式リポジトリで入手できます。 Fedora にアプリケーションをインストールするには、dnf
パッケージ マネージャーを使用します。
$ sudo dnf install snapper
Snapper を Debian および Debian ベースのディストリビューションにインストールするには、代わりに次のコマンドを使用します。
$ sudo apt install snapper
Snapper は、Archlinux の「Extra」リポジトリでも入手できます。 pacman
を使用してアプリケーションをインストールできます。
$ sudo pacman -S snapper
最後に、Snapper を OpenSUSE 自体にインストールするには、zypper
パッケージ マネージャーを使用します。
$ sudo zypper in snapper
Snapper構成の生成
Snapper を使用する前に、create-config
コマンドを使用して、スナップショットを作成する各ファイルシステムの構成を生成する必要があります。 BTRFS サブボリュームが「/」にマウントされているとします。 Snapper 構成を生成するには、次のコマンドを実行します。
$ sudo snapper -c myconfig create-config -f btrfs /
上記のコマンドを分析してみましょう。 -c
オプションを使用して Snapper を呼び出しました。これは --config
の略です。このオプションを使用して構成名を指定します。この例では、オプションの引数として「myconfig」を使用していますが、これは必須ではありません。省略した場合は、デフォルト名 (「root」) が使用されます。 -f
オプション (--fstype
の略) を指定して create-config
コマンドを呼び出し、スナップショット バックエンドを指定しました。この場合、BTRFS ファイルシステムを使用しているため、引数として「btrfs」を渡しました。 LVM シンプロビジョニング スナップショットの構成を作成している場合は、次のコマンドを実行して、論理ボリューム上のファイル システムを指定します。
$ sudo snapper -c myconfig create-config -f "lvm(ext4)" /
Snapper 設定は、/etc/snapper/configs
ディレクトリに保存されます。
構成用に作成されたスナップショットのリストの取得
Snapper で作成されたスナップショットの概要を取得するには、ls
コマンドを使用します。もう一度言いますが、-c
オプションで構成名を指定しない場合は、デフォルトの名前が想定されるため、カスタム名で構成を作成した場合は、すべての名前で明示的にその構成名を指定する必要があります。スナッパーのコマンド。前の例では、構成名として「myconfig」を使用しました。それに関連付けられたスナップショットのリストを取得するには、次を実行します。
$ sudo snapper -c myconfig ls
まだスナップショットを作成していないため、コマンドの出力は次のようになります。
# | Type | Pre # | Date | User | Cleanup | Description | Userdata
---+--------+-------+------+------+---------+-------------+---------
0 | single | | | root | | current |
ID 0 のスナップショットは「実際の」スナップショットではなく、システムの現在の状態を指すだけです。デフォルトでは、コマンドの出力では次の情報が報告されます。
- スナップショットID
- スナップショットのタイプ (単一、事前、または事後 - 下記を参照)
- スナップショットが「ポスト」タイプの場合、関連する「プレ」スナップショットの ID (再度、以下を参照)
- スナップショットが作成された日付
- スナップショットを作成したユーザー
- クリーンアップ アルゴリズム (数値、タイムライン、または空-プレ-ポスト)
- スナップショットに提供されるオプションの説明
- スナップショットに提供されたキーと値のペアのリスト
Snapper を使用したスナップショットの作成
Snapper は、スナップショットを「pre」、「post」、「single」の 3 つのカテゴリに分類します。これらのタイプのスナップショット間に構造的な違いはなく、リレーショナルのみです。「pre」スナップショットと「post」スナップショットは常に関連しています。各「post」スナップショットには、対応する「pre」スナップショットが関連付けられています。これらは、アクションまたはコマンドの前後のファイルシステムの状態をマークするために作成されます。 「単一」スナップショットは、その名前が示すように「分離」されており、他のスナップショットとは関係がありません。
Snapper でスナップショットを作成するには、create
コマンドを使用します。他のオプションを指定せずにこのコマンドを使用すると、「単一」スナップショットが作成されます。
$ sudo snapper -c myconfig create
-t
(--type
) オプションを使用して、作成するスナップショットのタイプを指定できます。ほんの一例として、「pre」スナップショットを作成するには、次のコマンドを実行します。
$ sudo snapper -c myconfig create -t pre
「ポスト」スナップショットを作成するときは、関連する「プレ」スナップショット ID を指定する必要があります。これを行うには、それを引数として --pre-number
オプションに渡します。例:
$ sudo snapper -c myconfig create -t post --pre-number 1
関連する「pre」スナップショットと「post」スナップショットを手動で作成することを避けるために、 --command
オプションを使用できます。このオプションはコマンドを値として受け取ります。Snapper は、コマンドを実行する前に「pre」スナップショットを自動的に作成し、コマンドの実行後に「post」スナップショットを作成します。例として、システムを更新する前にスナップショットを作成し、システムが更新された直後にスナップショットを作成するには、次のコマンドを実行します。
$ sudo snapper -c myconfig create --command “dnf update”
スナップショットのメタデータの提供
Snapper でスナップショットを作成する場合、その役割を説明するのに役立つオプションの説明と一連のキーと値のペアを提供できます。作成時にスナップショットの説明を提供するには、-d
オプション (--description
) を使用し、説明を引数として渡します。以下の例では、ダミーの説明を含む「単一」スナップショットを作成します (説明にスペースが含まれる場合は、一重引用符で囲む必要があります)。
$ sudo snapper -c myconfig create -d 'This is a dummy description'
-u
(--userdata
) オプションを使用して、コンマ区切りのキーと値のペアのリストを提供することもできます。
$ sudo snapper -c myconfig create -u important=yes
スナップショットのクリーンアップ アルゴリズムの指定
スナップショットを作成するとき、それを利用可能なクリーンアップ アルゴリズムの 1 つに関連付けることができます。クリーンアップ アルゴリズムを指定するには、-c
または --cleanup-algorithm
オプションを使用します。以下の例では、スナップショットを作成し、それを「number 」アルゴリズムに関連付けます。
$ sudo snapper -c myconfig create -c number
利用可能なクリーンアップ アルゴリズムがどのように機能するか、およびその構成方法について詳しく知りたい場合は、読み続けてください。スナップショットに関連付けられたクリーンアップ アルゴリズムは、そのメタデータと同様に、スナップショットの作成後に modify
コマンドを使用し、対応するオプションを使用して変更できます。
時間ごとのスナップショットを自動的に作成する
時間ごとのスナップショットを自動的に作成するには、Snapper 構成ファイルで TIMELINE_CREATE
変数を「yes」に設定し、systemd snapper-timeline.timer
をアクティブにするだけです。 。各 systemd タイマーは、同じ名前の systemd サービスに関連付けられています。この場合、タイマーは 1 時間に 1 回 snapper-timeline.service
を実行します。タイマーをアクティブにするには、次を実行します。
$ sudo systemctl enable snapper-timeline.timer
クリーンアップアルゴリズム
クリーンアップ アルゴリズムは、スナップショットを「ローテーション」し、スナップショットが無期限に蓄積されることを回避するために使用されます。現在利用可能なアルゴリズムは、「number 」、「timeline 」、および「empty-pre-post 」です。それらがどのように機能するかを見てみましょう。
「数値」アルゴリズム
「number 」アルゴリズムは、許可されるスナップショットの最大数に基づいています。これは、構成ファイルで指定された次の変数を介して構成できます。
- NUMBER_CLEANUP
- NUMBER_MIN_AGE
- NUMBER_LIMIT
- NUMBER_LIMIT_IMPORTANT
NUMBER_CLEANUP
変数はブール値を受け取り、「number」クリーンアップ アルゴリズムを構成に対して実行するかどうかを決定します。代わりに、NUMBER_MIN_AGE
変数は、クリーンアップ アルゴリズムを適用するために必要なスナップショットの最小保存期間を受け入れます。値は秒単位で指定します。 NUMBER_LIMIT
変数を使用して、一度に保持するスナップショットの最大数を指定します。最後に、NUMBER_LIMIT_IMPORTANT
変数を使用して、 許可される重要なスナップショットの最大数を設定します。上で見たように、スナップショットを作成するときに -u
オプションの引数として「 important=yes 」キーと値のペアを指定することで、スナップショットを「重要」としてマークできます。
「タイムライン」アルゴリズム
「タイムライン」アルゴリズムは、保持する必要がある時間別、日次、週次、月次、および年次のスナップショットの数に基づいています。 「タイムライン」アルゴリズムの設定は、次の変数を介して指定されます。
- TIMELINE_CLEANUP
- TIMELINE_MIN_AGE
- TIMELINE_HOURLY
- TIMELINE_DAILY
- TIMELINE_WEEKLY
- TIMELINE_MONTHLY
- TIMELINE_YEARLY
TIMELINE_CLEANUP
変数はブール値を受け取ります。この変数は、「タイムライン」アルゴリズムを特定の構成に対して実行するかどうかを決定するために使用されます。 TIMELINE_MIN_AGE
変数は、アルゴリズムで考慮されるスナップショットの最小経過時間を決定するために使用されます (秒単位)。最後に、TIMELINE_HOURLY
、TIMELINE_DAILY
、TIMELINE_WEEKLY
、TIMELINE_MONTHLY
、および TIMELINE_YEARLY
変数、時間、日、週、月、年ごとのスナップショットをいくつ保持するかを指定するために使用されます。
「empty-pre-post」アルゴリズム
「empty-pre-post」アルゴリズムは、空の差分を持つプレ/ポストスナップショットのペア(差分のない関連付けられたスナップショット)を削除するために使用されます。次の 2 つの変数を使用して、アルゴリズムの動作を調整できます。
- EMPTY_PRE_POST_CLEANUP
- EMPTY_PRE_POST_MIN_AGE
EMPTY_PRE_POST
変数は、基本的に構成のクリーンアップ アルゴリズムのオンとオフを切り替えるブール値を受け取ります。代わりに、EMPTY_PRE_POST_MIN_AGE
変数は、アルゴリズムで考慮されるスナップショットの最小経過時間を秒単位で決定します。
クリーンアップアルゴリズムの実行
クリーンアップ アルゴリズムは、Snapper cleanup
コマンドを使用して手動で実行できます。コマンドを実行するときは、実行するクリーンアップ アルゴリズムを最初の引数として指定します。たとえば、「myconfig」構成に「number」アルゴリズムを適用するには、次のコマンドを実行します。
$ sudo snapper -c myconfig cleanup number
Snapper には通常、systemd クリーンアップ タイマーとその関連サービスがインストールされます。タイマーは、systemd が起動してから 10 分後に実行されるように構成され (OnBootSec=10m)、デフォルトでは無効になっています。これを有効にするには、次のコマンドを実行します。
$ sudo systemctl enable snapper-cleanup.timer
snapper-cleanup.service
は、既存の構成ファイルでアクティブ化されたすべてのクリーンアップ アルゴリズムを適用します。
スナップショットの削除
Snapper を使用してスナップショットまたはスナップショットの範囲を手動で削除するには、delete
コマンドを使用します。必要なのは、削除するスナップショットの ID を渡すことだけです。たとえば、ID 1 のスナップショットを削除するには、次のコマンドを実行します。
$ sudo snapper -c myconfig delete 1
スナップショット 1 から 3 を削除するには、代わりに次のようにします。
$ sudo snapper -c myconfig delete 1-3
バックエンド固有のコマンド
すでに述べたように、Snapper は BTRFS とシンプロビジョニングされた LVM スナップショットの両方をバックエンドとしてサポートします。これらのタイプのスナップショットは性質が大きく異なるため、特定のコマンドは特定のバックエンドを操作する場合にのみ適用されます。
たとえば、snapper mount
コマンドは、LVM スナップショットを操作する場合にのみ意味を持ちます。このコマンドは、指定されたシン スナップショットをアクティブ化し (LVM シン スナップショットはデフォルトではアクティブ化されません)、それを適切なディレクトリにマウントします。 rollback
などの他のコマンドは、バックエンドとして BTRFS を使用している場合にのみ機能します。これらのコマンドの詳細については、Snapper のマニュアルを参照してください。
結論
このチュートリアルでは、最もよく使用されている Linux ディストリビューションに Snapper をインストールする方法と、Snapper を使用してスナップショットを管理する方法について説明しました。 Snapper は、BTRFS と LVM の両方のシンプロビジョニング スナップショットのフロントエンドとして機能します。ファイルシステムのSnapper構成を生成する方法、スナップショットを作成、削除、変更する方法、利用可能なクリーンアップアルゴリズムを適用する方法について説明しました。