Snapperを使ったBtrfsスナップショット:Linuxでシステムとデータを復元する

最終更新: 25/06/2025
  • Btrfs と Snapper は、即時のスナップショットと効率的なシステムおよびファイルの復元を提供します。
  • 適切なサブボリューム構造により、選択的なバックアップと高速なリカバリが容易になります。
  • Snapper は、イベントベースのスナップショットを自動化し、クリーンアップを管理し、正確な比較とロールバックを可能にします。

BTRFS

Btrfs は近年、エコシステム内で最も先進的かつ柔軟なファイルシステムの 1 つとしての地位を確立しました。 Linux. 効率的なスナップショット作成機能と自己管理機能により、openSUSE、Siduction、Arch Linuxなどのディストリビューションで人気を博しています。さらに、スナップショットの管理、復元、バックアップタスクのリアルタイム自動化に特化したツールであるSnapperと組み合わせることで、その可能性はさらに広がります。

この記事の目的は、Btrfs でのスナップショットの仕組みと、Snapper を使用してスナップショットを最大限に活用する方法を徹底的かつ実践的に説明することです。 基本的な概念から高度な設定、リカバリ例、自動化、ヒントまで、すべてを網羅します。 トリック パフォーマンスに関する推奨事項も掲載しています。すべてスペイン語で、分かりやすい用語を用いて、このソリューションをLinuxシステムまたはサーバーに導入する際の利点と潜在的な落とし穴の両方を解説しています。

Btrfs とは何ですか? なぜスナップショットにとって重要なのですか?

Btrfs (B-Tree File System の略) は、Linux 上のデータ管理にコピーオンライト (CoW) の考え方を導入した最新のファイル システムです。 上級ユーザーと管理者にとっての主な魅力は、サブボリュームとスナップショットをほぼ瞬時に、最小限のスペース使用量で作成できることです。

ext4 のような従来のファイルシステムとは異なり、Btrfs は次のものを実装します。

  • サブボリューム: 内部論理パーティションのように動作するディレクトリ。これにより、ファイル システムの特定の領域を分離して個別に管理できるようになります。
  • スナップショット: サブボリュームのポイントインタイムコピー。CoWのおかげで、元のファイルに対して変更があった場合にのみスペースを消費します。そのため、次のような用途に最適です。 以前のシステム状態を回復したり、効率的なバックアップを実行したり、更新エラーから保護したりします.

Btrfs 構造により、各サブボリュームは独自のファイル階層と構成を持つことができ、ユーザーには通常のディレクトリとして表示されますが、特別な内部管理が行われます。

Snapper が Btrfs に最適なのはなぜですか?

Snapper は、Btrfs スナップショットを最大限に活用するためのスター ツールです。 スナップショットの作成と削除だけでなく、システムアップデートなどの重要なタイミングでのスナップショット作成を自動化し、状態間の差分を比較し、個々のファイルとシステム全体の復元を容易にします。また、ディスク容量の不足を防ぐための自動タイムラインとスケジュールされたクリーンアップもサポートしています。

Btrfs を使用する場合に Snapper がほぼ必須となる理由は次のとおりです。

  • 重要なイベントでのスナップショットの自動化 (パッケージのインストール、更新、管理上の変更など)
  • 変更を比較して元に戻す機能 2点間の 時間アップデート後に何が壊れたのか、またはどのファイルが誤って変更されたのかを調べるのに最適です。
  • 粒状修復災害発生時には、特定のファイルのレベルでも、オペレーティング システム全体のレベルでも、保護されます。
  • 自動クリーニングのサポート スペースの制限、スナップショットの保存期間または数によって異なります。
  • CLIインターフェースとグラフィカルモジュール (例えば、yast2-snapperやbtrfs-assistantなど、 コマンド).

基本概念: Btrfs のサブボリュームとスナップショット

Snapper がスナップショットを管理する方法を完全に理解するには、まず Btrfs が内部階層をどのように構成するかを明確にする必要があります。

Btrfsのサブボリューム

サブボリュームは、Btrfs 内の論理パーティションの一種です。 通常のディレクトリとして表示されますが、独立してマウントでき、独自の名前空間を持ち、スナップショットおよびクォータ レベルで個別に管理されます。

  VLC およびその他のオプションを使用して MKV ファイルを MP4 に変換するための完全ガイド

デフォルトでは、多くのディストリビューション (openSUSE、Siduction、Arch など) はサブボリュームを次のように設定します。

  • @ パラ ルート (/)
  • @家 パラ /ホーム
  • @スナップショット フォルダ用 /.スナップショット
  • @var_log パラ / var / log

これにより、システムのみのスナップショットを撮ることができ、ユーザーデータや ログ 必要に応じて復元できます。例えば、アップデートに失敗した後、オペレーティングシステムを復元する場合、個人ファイルはそのままにして、ルートのみを復元できます。

Btrfs のスナップショットとは何ですか?

Btrfs のコンテキストでは、スナップショットは、特定の時点における別のサブボリュームの正確な状態を保存する特別なサブボリュームです。ただし、CoW モデルのおかげで、スナップショットは元のファイルに対してファイルが変更された場合のみ、スペースを占有します。

つまり、全体のスペースのほんの一部を占めるだけの何十もの履歴スナップショットを保持でき、そのいずれかをほぼ瞬時に復元できるということです。

スナップショットは再帰的ではありません。つまり、そのサブボリュームの内容のみをキャプチャし、ネストされたサブボリュームの内容はキャプチャしません。そのため、サブボリュームのレイアウトを適切に構成し、失いたくない重要なデータ(個人用フォルダやシステムログなど)を分離することが重要です。

スナップショットの種類: いつ、どのように作成されるのか?

Snapperでは、Btrfsの内部的には技術的にはすべて同一ですが、複数の種類のスナップショットを区別できます。Snapperは、管理、比較、およびクリーンアップのために、以下の違いを設けています。

  • : 大きな変更の前に取得されたスナップショット (たとえば、メジャー アップデートをインストールする前)。
  • ポスト: 同じ変更を行った直後のスナップショット。これにより、変更内容を簡単に比較できます。
  • 単発講座: 手動スナップショット、自動タイムライン スナップショット、または特定の事前/事後イベントに関連付けられていないその他のスナップショット。

Snapper を統合するほとんどのディストリビューションでは、管理アクションまたはパッケージのインストールの事前/事後スナップショットの自動作成がデフォルトで有効になっています。 例えば、openSUSEはYaSTによるアップデートの前後にスナップショットを作成します。SiductionはAPT操作ごとに同様のスナップショットを作成します。これにより、何か問題が発生した場合でも、いつでも以前の状態に戻すことができます。

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

もう一つの重要な機能は、自動スナップショットタイムラインです。Snapper を設定すれば、時間、日、週、月、または年ごとにスナップショットを作成し、指定した数のスナップショットのみを保持し、クリーンアップルールに基づいて古いスナップショットを削除できます。

十分な空き容量があるシステムでは通常、デフォルトで有効になっており、対応する構成ファイルで簡単に調整できます。

Btrfs システムに Snapper をインストールして設定する方法

インストールはディストリビューションによって若干異なりますが、ほとんどの RPM ベースのシステム (openSUSE、RHEL、Siduction、Fedora など) では次のコマンドを実行するだけで簡単に行えます。

  • openSUSE/SLE: zypper install snapper (完全な統合にはオプションで yast2-snapper および snapper-zypp-plugin が必要です)。
  • Arch Linux / Manjaro: pacman -S snapper グラフィカルインターフェースについては、 yay -S btrfs-assistant snapper-gui-git
  • Debian/siduction: apt install snapper

インストールが完了したら、保護したいサブボリュームまたはパーティションの設定を作成します。通常、ルートシステムの場合は以下の手順に従います。

# snapper -c root create-config /

これにより、いくつかの自動アクションが実行されます。

  • Snapperの設定ファイルを作成します。 /etc/snapper/configs/root.
  • フォルダを準備する /.snapshots スナップショットを保存するための対応するサブボリューム内。
  • 変数を更新する SNAPPER_CONFIGS グローバル設定ファイル内。

管理したい場合 /ホーム (またはその他のサブボリューム) の場合は、このプロセスを繰り返すだけです。

# snapper -c home create-config /home

適切なサブボリューム構造を持つことは、重要なものだけを保護するために重要であることを覚えておいてください。システムのみを保護することに関心がある場合は、ロールバック中に誤って元に戻ってしまうことを避けるために、ユーザー フォルダーとデータ フォルダーを別のサブボリュームに分離します。

主なパラメータと設定編集

Snapperの魔法は、以下の場所にある設定ファイルにあります。 /etc/snapper/configs/ニーズと利用可能なスペースに合わせてカスタマイズできる主な設定は次のとおりです。

  • タイムライン_作成: 「はい」または「いいえ」。自動スナップショットタイムラインを有効または無効にします。
  • TIMELINE_LIMIT_時間/日/週/月/年: 各タイプで保持するスナップショットの最大数。
  • NUMBER_CLEANUP、NUMBER_LIMIT、NUMBER_MIN_AGE: 手動スナップショットまたは番号付きスナップショットのクリーニングを制御します。
  • FREE_LIMIT と SPACE_LIMIT: スナップショット用に予約される最小空き容量と最大容量を定義します。
  • ALLOW_USERS と ALLOW_GROUPS: その構成のスナップショットを管理できるユーザーまたはグループのリスト。
  • SYNC_ACL: 「はい」の場合、SnapperはディレクトリのACL権限を自動的に同期します。 .snapshots 許可されたユーザー/グループに応じて。
  Windows 11で自動ファイル圧縮を無効にする方法

境界をすばやく変更したり、タイムラインのオン/オフを切り替えたりするには、ファイルを直接編集するか、次のコマンドを使用します。

# snapper -c root set-config TIMELINE_CREATE=yes NUMBER_LIMIT=20

ちなみに、最近のシステムでは、スナップショットのクリーンアップはタイマー経由でsystemdによって管理されています(snapper-timeline.timer y snapper-cleanup.timer) ですが、古いシステムでは cron も引き続き使用できます。

スナップショットの保存とアクセス方法

Snapperが取得する各スナップショットは、実際にはフォルダ内の子サブボリュームです。 /.snapshots 対応するサブボリュームの。例えば、ルートシステムのスナップショットは /.snapshots/X/snapshot/ここで、X はスナップショット番号です。

読み取り専用ディレクトリとして参照できます。特定のファイルを復元する必要がある場合は、適切なスナップショットから元の場所にコピーするだけです。

# cp /.snapshots/16/snapshot/etc/hosts /etc/hosts

スナップショットを変更する必要がある場合 (特別な場合を除き、推奨されません)、次のコマンドを使用して、スナップショットのサブボリュームを一時的に書き込み可能として再構成できます。

# btrfs プロパティセット /.snapshots/ /スナップショット ro false

不整合を避けるため、変更後は必ず読み取り専用に戻してください。

スナップショットの作成と管理: 手動、自動、イベントベース

手動スナップショット

以下の方法でいつでもスナップショットを作成できます。

# snapper -c root create --description "手動スナップショット" --cleanup-algorithm 番号

¡おじょ! クリーニングアルゴリズムを指定しない場合(--cleanup-algorithm) の場合、スナップショットは手動で削除するまで無期限に残り、乱用するとディスクがいっぱいになる可能性があります。

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

タイムライン機能を有効にすると、Snapperは定期的に(例えば、時間ごと、日ごと、週ごとなど)スナップショットを作成します。制限と頻度は設定(TIMELINE_LIMIT_*).

周波数はsystemdタイマーによって制御されます( ブートメニューのタイムアウトを変更する方法)。フィールドを変更することで、タイマーの頻度を増減することができます。 OnCalendar.

事前/事後スナップショットとトランザクションラッピング

Snapper は、重要なアクション (パッケージの更新など) を前後のスナップショットでラップできます。 こうすることで、常に変更内容を比較し、何か問題が発生した場合には元に戻すことができます。

例えば、openSUSEとSUSEでは、YaSTやZypperを使用すると自動的に統合されます。Arch Linuxでは、次のようなパッケージがあります。 snap-pac, grub-btrfs またはのようなツール refind-btrfs この機能を追加します。

siduction などの APT ベースのシステムでは、apt アクションは事前/事後スナップショットで操作をラップできます (デフォルトの統合による)。

復元とロールバック: システムまたはファイルを以前の状態に復元する方法

特定のファイルまたはフォルダを復元する

特定のファイルへの変更のみを元に戻したい場合は、Snapper を使用して比較し、復元することができます。

# スナッパーステータス 42..45 /etc/hosts

これにより、スナップショット 42 と 45 の間で何が変更されたかが表示されます。ファイルを復元する場合は、次の手順を実行します。

# スナッパー diff 42..45 /etc/hosts
# snapper undochange 42..45 /etc/hosts

コマンド undochange システムの残りの部分に影響を与えずに、そのファイルのみを元に戻します。ファイルを視覚的に比較する必要がある場合は、次のようなプログラムが便利です。 メルド 関心のある変更のみを視覚化して選択するのに役立ちます。

システムルート全体を以前のスナップショットに復元する(ロールバック)

問題のあるアップデートやシステムを不安定にするアクションの後に全面的な災害が発生した場合は、ロールバック機能を使用してシステム状態を完全に元に戻すことができます。

  Windows で hiberfil.sys や pagefile.sys などの大きなファイルをどうすればよいですか?

一般的な手順は次のとおりです。

  1. システムを再起動してメニューにアクセスします ブーツ 希望するスナップショットから起動するには( WindowsとLinuxのデュアルブート はるかに簡単になります。
  2. システムが読み取り専用モードで正常に起動することを確認します。問題がなければ、完全復元を開始します。
    # snapper --ambit クラシック ロールバック
  3. Snapper は新しいバックアップ スナップショットを作成し、目的の状態を新しいサブボリュームにコピーして、それを新しいデフォルトとして設定します。
  4. システムを再起動します。元に戻された状態に直接起動します。

重要!サブボリューム構造(例えば、 @home (別途)システムのみが復元され、個人ファイルはそのまま残ります。

ブートローダーの統合とブートオプションとしてのスナップショット

のようなツール grub-btrfs これにより、Snapperの各スナップショットがGRUBのエントリとして表示されるため、以前のシステム状態から迅速かつ簡単に起動できるようになります。これにより、アップデート後にシステムが動作しなくなった場合でも、ブートローダーから以前のスナップショットを直接選択できます。

これを機能させるには、スナップショットをサブボリュームとしてマウントし、ディレクトリを /.snapshots 読み取り可能でなければなりません。一部のサービスでは、スナップショットを書き込み可能としてマウントするか、overlayfs を使用してベーススナップショットを変更せずに書き込み可能な環境をシミュレートする必要があります(一時的なリカバリや診断に最適です)。

非ルートユーザーによる権限とアクセスの管理

デフォルトでは、スナップショットを作成、削除、または一覧表示する権限はスーパーユーザーのみにあります。他のユーザーが特定の構成のスナップショットを管理できるようにするには、そのユーザーの名前を ALLOW_USERS またはそのグループに ALLOW_GROUPS 対応する構成ファイル内。

ディレクトリの権限を必ず調整してください /.snapshots ユーザー/グループに少なくとも読み取りと実行の権限を与えます(例:所有グループを「users」に変更します)。

レイアウトとサブボリューム構造に関する推奨事項

サブボリュームとマウント ポイントの論理的な計画は、スナップショットを効率的に管理し、必要なときに必要なものだけを復元するための鍵となります。

一般的に推奨されるスキームは次のようになります。

サブボリューム 取り付けポイント
@ /
@家 /ホーム
@スナップショット /.スナップショット
@var_log / var / log

これにより、ユーザーデータやログに影響を与えずにシステムを復元でき、また、循環依存関係を回避するためにスナップショットをメインサブボリュームから切り離すことができます。 /.snapshots 単なるディレクトリではなく、別個にマウントされたサブボリュームとして。

スナップショットアルゴリズムとクリーンアップ:ディスクの空き容量の確保

自動スナップショットシステムの弱点は、放置しておくとディスクが徐々にいっぱいになってしまうことです。Snapperには、事前定義されたルールに基づいて古いスナップショットをクリーンアップするためのオプションがいくつか用意されています。

  • 数量制限(NUMBER_LIMIT (事前/事後および手動スナップショット用)。
  • 年齢制限(NUMBER_MIN_AGE).
  • タイムラインの制限(TIMELINE_LIMIT_HOURLY, TIMELINE_LIMIT_DAILY...)。
  • 最大占有スペース(SPACE_LIMIT).
  • 最小空きディスク率(FREE_LIMIT).

クリーンアップシステムは、systemdを使用してデフォルトで毎日実行されます(LinuxからUEFIファームウェア設定を更新する方法)に設定されていますが、いつでも手動で調整したり強制的に変更したりできます。現在のスナップショットは自動的に削除されることはありません。

UEFI BIOS
関連記事
systemctl と systemd を使用して Linux からファームウェア (BIOS/UEFI) 設定にアクセスして更新する方法

コメントを残します