Snapperの基本的なコンセプト
- 概要
この記事では、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は、ルートパーティションの容量不足を防ぐための自動スナップショットクリーンアップアルゴリズムを提供します。これらのアルゴリズムは、タイムラインスナップショットと番号付きスナップショット(管理スナップショットとインストールスナップショットのペア)を区別します。クリーンアップの動作は、次の基準に基づいて設定できます。
数制限: スナップショットが特定の数に達したときに古いスナップショットを自動的に削除するようにシステムを設定できます。
保持期間制限: 一定の保持期間を超えた古いスナップショットは削除できますが、各期間(毎時、毎日、毎月、毎年)のスナップショットの数は保持されます。
Pre
とpost
のスナップショットのペア: 差異のないpre
とpost
のスナップショットのペアは自動的に削除できます。
管理スナップショットとインストールスナップショットのペアを含む番号付きスナップショットの場合、クリーンアップは、NUMBER_CLEANUP
、NUMBER_LIMIT
、NUMBER_LIMIT_IMPORTANT
、NUMBER_MIN_AGE
などのパラメータによって制御されます。デフォルト値は、NUMBER_LIMIT
が2~10、NUMBER_LIMIT_IMPORTANT
が4~10です。これは、最も新しいスナップショットのみが保持されることを意味します。
タイムラインスナップショットの場合、クリーンアップは、各タイプ(毎時、毎日、毎週、毎月、毎年)で保持するスナップショットの数に基づいて行われます。たとえば、過去24時間ごとのスナップショット、過去7日間の最初の毎日のスナップショット、過去12カ月間の月の最終日に作成された最初のスナップショットなどです。パラメータには、TIMELINE_CLEANUP
、TIMELINE_MIN_AGE
、およびTIMELINE_LIMIT_DAILY
、TIMELINE_LIMIT_HOURLY
などの間隔パラメータが含まれます。
既存のスナップショットには、それぞれのスナップショットから起動し、後でアクティブにすることで、いつでもロールバックできます。
ルートパーティションが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を参照してください。
5 法的事項 #
Copyright © 2006–2025 SUSE LLC and contributors. All rights reserved.
この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNUフリー文書ライセンス」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。