Snapperの基本的なコンセプト
SUSE Linux Enterprise Server 16.0

Snapperの基本的なコンセプト

発行日: 11/12/2025
概要

この記事では、Btrfsファイルシステムのスナップショットを作成および管理するために使用されるSnapperツールの基本的なコンセプトについて説明します。

目的

この記事では、Snapperの基本的な概要、サポートされているインタフェース、および主な目的について説明します。また、SUSE Linux Enterprise Serverのスナップショットのデフォルト設定についても説明します。

所要時間

Snapperとそのデフォルト設定を理解するには、最大20分かかります。

要件
  • root特権またはsudo特権

  • Snapperをインストールする必要があります。デフォルトでは、SUSE Linux Enterprise Serverで利用できます。

  • 16GB以上のルートパーティション(/)のサイズ。ルートパーティションのサイズは、製品によって異なります。50GB以上を強くお勧めします。

注記
注記

この記事は、Snapperに関する連載記事の第1回です。以降の記事では、変更の取り消し、システムのロールバック、スナップショットの手動作成と管理、スナップショットの自動クリーンアップなどの一般的なユースケースについて説明します。各記事は、前の記事で得た知識を基に構成されており、Snapperツールの理解を徐々に深めることができます。

1 Btrfsサブボリュームとスナップショットの基本コンセプト

Btrfsサブボリュームは物理パーティション内で別個にマウント可能なファイルシステムです。Btrfsファイルシステムは、デフォルトでサブボリュームを使用してセットアップされています。Btrfsのスナップショットは、別のサブボリュームとデータを共有するサブボリュームの一種です。これらはBtrfsのコピーオンライト機能を使用して作成されるため、ディスク容量の使用量を最小限に抑えてすばやく作成できます。スナップショットを使用すると、特定の時点におけるファイルシステムの状態をキャプチャし、必要に応じて以前の状態にロールバックできます。

Btrfsサブボリュームには、独自の独立したファイルおよびディレクトリ階層があります。ブロックレベルで動作するLVM論理ボリュームとは異なり、Btrfsサブボリュームはファイルエクステントベースです。スナップショットは、元のサブボリュームの初期コンテンツを保持するサブボリュームとも見なされます。サブボリュームはディレクトリとして表示され、名前の変更や移動など、他のディレクトリと同様に操作できます。

サブボリュームの主な目的の1つは、スナップショットに明示的に含めたり、スナップショットから除外することです。スナップショットを使用してシステムをロールバックする場合、ユーザのホームディレクトリ、WebサーバとFTPサーバのコンテンツ、ログファイルなどのデータがロールバック中に失われたり、上書きされたりしないようにする必要があります。これは、スナップショットから特定のBtrfsサブボリュームを除外することで実現されます。詳細情報と除外されるサブボリュームのリストについては、3.3項 「スナップショットから除外されるサブボリューム」を参照してください。

2 Snapperとは

Snapperは、ファイルシステムのスナップショットを作成および管理するのに役立つツールです。ファイルシステムスナップショットは特定の時点でのファイルシステムの状態のコピーを保持できます。Snapperは、スナップショットの作成と比較、スナップショット間での復元を行うことができ、自動スナップショットタイムラインをサポートします。Snapperはスナップショットの内容を変更しません。

Snapperの標準セットアップは、システムの変更のロールバックを許可するように設計されています。ただし、これを使用して、ユーザデータのオンディスクバックアップを作成することもできます。この機能の基盤として、Snapperは次の2種類のファイルシステムを使用します。

  • Btrfs。サブボリュームのファイルシステムスナップショットをネイティブにサポートするLinux用のコピーオンライトファイルシステム。

  • XFSおよびext4でフォーマットされたシンプロビジョニングLVMボリューム。

注記
注記

Btrfsスナップショットから起動することもできます。

2.1 Snapperで可能なこと

Snapperには、コマンドラインインタフェースがあり、スナップショットの作成、削除、比較ができるほか、スナップショット間で行われた変更を元に戻すこともできます。

Snapperを使用して、次のタスクを実行できます。

  • zypperで行ったシステムの変更を元に戻す。

  • 古いスナップショットからファイルを復元する。

  • スナップショットからブートすることによってシステムをロールバックする。

  • 実行中のシステム内で、スナップショットを手動で作成および管理する。

  • スナップショットの自動クリーンアップを実行します。

2.2 スナップショットのタイプ

スナップショットは、スナップショットトリガイベントとスナップショット作成時刻という2つの側面に基づいて分類できます。

トリガイベントに基づくスナップショットタイプ

スナップショット自体は技術的な意味では同じですが、トリガするイベントに基づいて、次の3種類のスナップショットを区別しています。

インストールスナップショット

1つ以上のパッケージがインストールされるたびに、スナップショットは次のように作成されます。

  • スナップショット0 singleは常にSnapperに存在します。これは、常に現在のシステム状態を指し、Description列に表示されます。このスナップショットは、インストールプロセスが完了した直後のシステムの状態をキャプチャします。

  • ルートパーティション(/)のスナップショット1 singleは、first root filesystemという名前で自動的に取得されます。このスナップショットは、最初のシステム更新または設定セットの後に取得されます。

  • スナップショット2 singleは、after installationという名前で自動的に取得されます。このスナップショットはインストールプロセスの最後に作成され、importantとマークされます。すべての初期セットアップが完了した後のシステムの状態を表します。

古いスナップショットは自動的に削除されます。デフォルトでは、最新の10個の重要なスナップショットと最新の10個の通常のスナップショット(管理スナップショットを含む)が保持されます。インストールスナップショットはデフォルトで有効になっています。インストールスナップショットを手動で無効にするには、パッケージsnapper-zypp-pluginをアンインストールします。

管理スナップショット

システムに変更を加える場合、常にスナップショットのペアが作成されます。システム変更前のスナップショット(事前)とシステム変更後のスナップショット(事後)です。古いスナップショットは自動的に削除されます。デフォルトでは、最新の10個の重要なスナップショットと最新の10個の通常のスナップショット(インストールスナップショットを含む)が保持されます。管理スナップショットはデフォルトで有効になっています。

タイムラインスナップショット

1時間ごとに1つのスナップショットが作成されます。タイムラインスナップショットは、ルートファイルシステムを除きデフォルトで有効になっています。タイムラインスナップショットのデフォルトの間隔は、時間単位、日単位、週単位、月単位、および年単位です。これらの間隔を変更するには、Snapper自体では設定できないため、Snapperのsystemdタイマーを直接変更する必要があります。古いスナップショットは自動的に削除されます。デフォルトで、最近10日間、10カ月間、10年間の最初のスナップショットが保持されます。

重要
重要: インストールスナップショットタイプと管理スナップショットタイプの例外

インストールスナップショットタイプと管理スナップショットタイプは、トランザクションシステムには適用されません。

注記
注記

タイムラインスナップショットと管理スナップショットは、個別に有効または無効にできます。

作成時刻に基づくスナップショットタイプ

管理スナップショットとインストールスナップショットの中で、Snapperは3つの異なるタイプ(pre、post、single)を認識します。これらは物理的には同じものですが、Snapperでは別のものとして扱われます。

pre

変更のファイルシステムのスナップショットです。各preスナップショットはpostスナップショットに対応しています。たとえば、これは自動スナップショットに使用されます。

post

変更のファイルシステムのスナップショットです。各postスナップショットはpreスナップショットに対応しています。たとえば、これは自動スナップショットに使用されます。

single

スタンドアロンのスナップショットです。たとえば、これは1時間ごとの自動スナップショットに使用されます。これは、スナップショットを作成する際のデフォルトの種類です。

これは、ルートパーティションが16GBを超えるシステムを新規にインストールした直後のスナップショットのリストです。

# | Type   | Pre # | Date                     | User | Used Space | Cleanup | Description           | Userdata     
-----+--------+-------+--------------------------+------+------------+---------+-----------------------+--------------
0  | single |       |                          | root |            |         | current               |              
1  | single |       | Thu Mar 24 12:14:34 2022 | root |  32.44 MiB |         | first root filesystem |              
2  | single |       | Thu Mar 24 12:25:55 2022 | root | 280.40 MiB | number  | after installation    | important=yes
45 | pre    |       | Mon Apr 25 17:58:45 2022 | root |  27.52 MiB | number  | zypp(zypper)          | important=yes
46 | post   |    45 | Mon Apr 25 18:00:07 2022 | root |  39.04 MiB | number  |                       | important=yes

2.3 スナップショットの作成

スナップショットを作成すると、スナップショットとスナップショット元のファイルは、 いずれもファイルシステム内の同じブロックを指します。そのため、最初は、スナップショットが余分にディスク容量を占めることはありません。元のファイルシステムのデータが変更されると、変更されたデータブロックがコピーされ、古いデータブロックはスナップショットのように保持されます。このため、スナップショットは、変更されたデータと同じ容量を占めます。こうして、時間が経過するにつれて、スナップショットの領域は大きくなっていきます。その結果、スナップショットを含むBtrfsファイルシステムからファイルを削除しても、ディスクの空き容量が増えないことがあります。

注記
注記: スナップショットの場所

スナップショットは常に、スナップショット作成元と同じパーティションまたはサブボリュームに保存されます。別のファイルシステムにスナップショットを保存することはできません。

結果として、スナップショットを含むパーティションは、スナップショットを含まないパーティションよりも大きくする必要があります。具体的な容量は、保持するスナップショット数やデータの変更頻度によって大きく異なります。経験則として、パーティションには通常の2倍の容量を割り当てます。ディスク容量が不足しないようにするために、古いスナップショットは自動的にクリーンアップされます。

3 Snapperのデフォルトセットアップ

Snapperのデフォルトセットアップとそのデフォルト設定について習得します。

Snapperは、システム変更の「取り消しおよび回復ツール」として設定されています。デフォルトでは、SUSE Linux Enterprise Serverのルートパーティション(/)はBtrfsでフォーマットされています。ルートパーティション(/)に十分な容量(約16GB以上)がある場合、スナップショットの作成が自動的に有効になります。デフォルトでは、スナップショットは/以外のパーティションでは無効になっています。

重要
重要

スナップショット付きでシステムをインストールした後、スナップショットを手動で有効化することはお勧めしません。インストール後にSnapperを有効にすると、ここで説明されているものとは異なるセットアップになります。

ヒント
ヒント: ルートパーティションのサイズを確認する

ルートパーティションのサイズは製品固有です。ルートパーティションが占めているディスク容量を確認するには、次のコマンドを実行します。

> df -h

3.1 Snapperのデフォルト設定

デフォルトでは、SUSE Linux Enterprise Server上のSnapperは、次の要件が満たされている場合、システムインストール時に自動的に設定されます。

  • ルートパーティションのサイズ: > 16GB

  • ルートパーティションファイルシステム:Btrfs

スナップショットはルートパーティションに対してのみ作成され、特定のディレクトリはサブボリュームによって除外されます。除外されるサブボリュームのリストについては、3.3項 「スナップショットから除外されるサブボリューム」を参照してください。スナップショットのタイプ、スナップショットの作成時刻、および作成機会の詳細については、2.2項 「スナップショットのタイプ」を参照してください。

Snapperは、ルートパーティションの容量不足を防ぐための自動スナップショットクリーンアップアルゴリズムを提供します。これらのアルゴリズムは、タイムラインスナップショットと番号付きスナップショット(管理スナップショットとインストールスナップショットのペア)を区別します。クリーンアップの動作は、次の基準に基づいて設定できます。

  • 数制限:スナップショットが特定の数に達したときに古いスナップショットを自動的に削除するようにシステムを設定できます。

  • 保持期間制限:一定の保持期間を超えた古いスナップショットは削除できますが、各期間(毎時、毎日、毎月、毎年)のスナップショットの数は保持されます。

  • Prepostのスナップショットのペア: 差異のないprepostのスナップショットのペアは自動的に削除できます。

管理スナップショットとインストールスナップショットのペアを含む番号付きスナップショットの場合、クリーンアップは、NUMBER_CLEANUPNUMBER_LIMITNUMBER_LIMIT_IMPORTANTNUMBER_MIN_AGEなどのパラメータによって制御されます。デフォルト値は、NUMBER_LIMITが2~10、NUMBER_LIMIT_IMPORTANTが4~10です。これは、最も新しいスナップショットのみが保持されることを意味します。

タイムラインスナップショットの場合、クリーンアップは、各タイプ(毎時、毎日、毎週、毎月、毎年)で保持するスナップショットの数に基づいて行われます。たとえば、過去24時間ごとのスナップショット、過去7日間の最初の毎日のスナップショット、過去12カ月間の月の最終日に作成された最初のスナップショットなどです。パラメータには、TIMELINE_CLEANUPTIMELINE_MIN_AGE、およびTIMELINE_LIMIT_DAILYTIMELINE_LIMIT_HOURLYなどの間隔パラメータが含まれます。

既存のスナップショットには、それぞれのスナップショットから起動し、後でアクティブにすることで、いつでもロールバックできます。

注記
注記: Snapperの自動および手動の無効化

ルートパーティションが16GB未満の場合、上記のスナップショットの自動作成はデフォルトで無効になっています。この場合、スナップショットを手動で作成できます。使用可能なディスク容量に注意してください。

ルートパーティションのサイズが十分である場合でも自動スナップショットを無効にするには、インストール中のパーティションのセットアップ手順でスナップショットを手動で無効にします。

3.2 ルート上のSnapper

Snapperがルート上で動作するように設定されている場合、デフォルトではすべてのBtrfsサブボリュームが除外されます。

Snapperのデフォルト動作は、各パーティションまたはBtrfsサブボリュームに固有の設定ファイルで定義できます。これらの設定ファイルは、/etc/snapper/configs/に保存されます。

警告
警告: インストール済みシステムでのSnapperの有効化

インストール中にSnapperを無効にした場合、後からいつでも有効にできます。ただし、インストール後にSnapperを有効にすると、サブボリュームのレイアウトや変数などが異なります。インストールを開始する前に、システムでスナップショットが必要かどうかをに決定することを強くお勧めします。

3.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/usr/local

これらのディレクトリは、サードパーティ製品を手動でインストールするときに使用されます。ロールバック時にこれらのインストール済みソフトウェアがアンインストールされるのを避けるために除外されます。

/srv

WebおよびFTPサーバ用のデータが保存されています。ロールバック時にデータが失われるのを避けるために除外されます。

/tmp

スナップショットから除外される一時ファイルとキャッシュを含むすべてのディレクトリ。

/var

このディレクトリには、ログ、一時キャッシュ、/var/optのサードパーティ製品など、変更されるファイルが多数保存されています。また、仮想マシンのイメージとデータベースがデフォルトで置かれる場所です。したがって、このサブボリュームはスナップショットからすべてのこのバリアブルデータを除外するように作成され、コピーオンライトが無効になっています。

/run

このディレクトリにはアプリケーションのランタイムデータが含まれており、スナップショットのサイズを縮小し、潜在的に機密性の高い情報を含めないようにするためにスナップショットから除外されています。

ヒント
ヒント

サブボリュームのリストは製品固有です。/の下にどのサブボリュームが作成されているかを確認し、どのディレクトリがデフォルトのスナップショット動作から除外されているかを確認するには、次のコマンドを実行します。

> sudo btrfs subvolume list /
注記
注記: 容量制限がある理由

スナップショットを作成する際、物理データのコピーは作成されません。スナップショットは、それぞれのデータブロックへのポインタのみで構成されます。スナップショットが現在のシステムと一貫性を保っている限り、(スナップショットに含まれるメタデータは別として)スナップショットは追加のディスク容量をほとんど占有しません。ただし、システム上でファイルが変更された場合、元のデータはスナップショットに記録されます。時間の経過とともに、より多くの変更が蓄積され、スナップショットがライブシステムから乖離すると、それに応じてスナップショットのサイズが増加します。

ディスクがいっぱいになる(その結果、システムが動作不能になる)ことを防ぐために、ルートファイルシステムのサイズを最小限に抑えることをお勧めします。必要なサイズは、システムの使用状況によって異なります。

  • スナップショット作成の頻度

  • スナップショットが保持される期間

  • システムに対する変更率

一般に、スナップショットの数が多いほど、スナップショットの保持期間が長くなり、システムの変更頻度が高ければ高いほど、ルートパーティションを大きくする必要があります。

4 詳細情報

Btrfsファイルシステムの詳細については、https://documentation.suse.com/sles/15-SP5/html/SLES-all/cha-filesystems.html#sec-filesystems-major-btrfsおよびhttps://wiki.archlinux.org/title/btrfsを参照してください。

LVMボリュームの詳細については、https://documentation.suse.com/sles/15-SP5/html/SLES-all/part-lvm.htmlを参照してください。