目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / Snapperの基本的なコンセプト

Snapperの基本的なコンセプト

発行日: 20/03/2025
概要

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

目的

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

所要時間

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

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

  • Snapperをインストールする必要があります。デフォルトでSUSE Linux Microに用意されています。

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

注記
注記

この記事は、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でフォーマットされたシンプロビジョニングLVMボリューム。

注記
注記

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

2.1 Snapperで可能なこと

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

重要
重要

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

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

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

        > 
        df -h

3.1 Snapperのデフォルト設定

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

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

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

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

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

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

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

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

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

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

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

3.2 ルート上のSnapper

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

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

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を参照してください。