Btrfs スナップショット
Btrfs スナップショットとは
Section titled “Btrfs スナップショットとは”詳しく説明します。
Btrfs スナップショットはサブボリュームという機能から生まれています。サブボリュームとはなにかというと、Btrfs ファイルシステム内の独立したファイルシステムのようなものです。これによりデータをさまざまな部分に分割できます。例えば CachyOS では、以下のような用途で異なるサブボリュームを使用しています。
- ルートファイルシステム: (
/) - ルートディレクトリ: (
/root) - ホームディレクトリ: (
/home) - var ディレクトリ: (
/var/cache,/var/tmp,/var/log) - srv ディレクトリ: (
/srv)
これらのディレクトリに異なるサブボリュームを使うことで、それぞれを独立して管理したり、それぞれ別々の設定を適用したり、一番重要な機能として、スナップショットを作成することができます。
この仕組みからスナップショットが生まれます。スナップショットとはかんたんに言うと、特定の時点でのサブボリュームの読み取り専用、または読み書き可能 (デフォルト) なコピーです。ある時点のすべてのファイルやディレクトリを含むファイルシステムの状態を保存しています。
ここから、スナップショットはある時点の「原本」として機能します。スナップショット作成後にファイルが変更されると、スナップショット上では元のデータはそのままで、変更後のデータは別の場所に新たに書き込まれます。スナップショット自体は作成された時点から変化することがありません。このことからスナップショットはしばしば「時の止まったデータ」と表現されます。
ファイルシステムのある瞬間を写真に収めるイメージです。必要になればいつでもその写真の状態に戻れます。
スナップショットの大きな利点のひとつは、変更が加えられるまでは元のデータへの参照に過ぎないため、とても容量の効率が良いことです。
ただし、ここが従来のバックアップとスナップショットとの違いです。ディスクが故障した場合、従来のバックアップがあればそこからデータを復元できます。しかし故障したディスクにスナップショットしかない場合、スナップショットも同じディスクに保存されているため、アクセスできなくなります。
スナップショットが役立つ場合と役立たない場合
Section titled “スナップショットが役立つ場合と役立たない場合”こんなときに役立ちます。
- システムアップデート後の破損や不具合からの復旧
- システムのブートを妨げる設定ミスからの復旧
- 誤ったファイルの削除や変更からの復旧
こうした場合は役に立ちません。
- ブートローダーの問題
- ハードウェアの故障 (例: ハードドライブの障害)
スナップショットの管理 (GUI と CLI)
Section titled “スナップショットの管理 (GUI と CLI)”スナップショットを管理する前に、いくつか気をつけるべきことがあります。CLI と GUI のどちらにも適用されます。
- スナップショットは最大 10 個がおすすめです。それ以上のスナップショットは古くなりすぎて、あまり役に立ちません。最悪の場合、古いスナップショットに戻した際に新しいバージョンのソフトウェアとの互換性の問題が生じることがあります。
- 本来、スナップショットは復旧目的で使用されます。ただしスナップショット全体を復元せず、ファイルへの変更を取り消すためにも使えます。
- スナップショットを作成するときはわかりやすい説明を追加してください。後でそれぞれの目的を見分けるのに役立ちます。
Btrfs Assistant (GUI)
Section titled “Btrfs Assistant (GUI)”作業を始める前に、自動スナップショット管理機能を活用するために btrfsmaintenance がインストールされていることを確認してください。
GUI で Btrfs、スナップショットなどを管理したい方には Btrfs Assistant が初心者にとても優しいプロジェクトになっています。
スナップショットの自動クリーンアップの設定
Section titled “スナップショットの自動クリーンアップの設定”Btrfs Assistant を使った自動スナップショットクリーンアップを設定します。手動で操作することなく効果的にスナップショットを管理できるようになります。
以下の手順にしたがってください。
-
ターミナルを開き以下のコマンドで Btrfs Assistant を起動してください。
Terminal window btrfs-assistant-launcher以下のコマンドでも起動できます。
Terminal window sudo -E btrfs-assistant -
Snapper Settings タブに移動してください。

Snapshot Retention の設定を以下のように変更してください。
root設定が選択されていることを確認する- Hourly, Daily, Weekly, Monthly, Yearly に
0を入力する Enable timeline snapshotsのチェックを外すNumberに10を入力するSnapper cleanup enabledに ✅ を付ける- 右上の
Saveボタンと右下のApply systemd changesをクリックする snapper-cleanup.timer が有効になり、設定に基づいて古いスナップショットを自動的に削除するようになります。
Btrfs Assistant でスナップショットを削除する
Section titled “Btrfs Assistant でスナップショットを削除する”-
Btrfs Assistant を開いてください。
Terminal window btrfs-assistant-launcher以下のコマンドでも起動できます。
Terminal window sudo -E btrfs-assistant -
Snapper Settings タブに移動してください。

-
一覧から削除したいスナップショットを選択してください。
-
ウィンドウ上部の
Deleteボタンをクリックしてください。 -
変更を反映させるためにブートローダーのエントリを再生成してください。
systemd-boot
Terminal window sudo sdboot-manage genGRUB
Terminal window sudo grub-mkconfig -o /boot/grub/grub.cfgLimine
Terminal window sudo limine-mkinitcpio
詳しい使い方については Btrfs Assistant 公式 Wiki をご覧ください。
Snapper (CLI)
Section titled “Snapper (CLI)”ここまでは Btrfs スナップショットとはなにかと、その使用例について説明しました。次に openSUSE の Arvin Schnell が開発した Snapper というツールを使った管理方法を説明します。
CachyOS のデフォルト Snapper 設定
# スナップショットのサブボリュームSUBVOLUME="/"
# ファイルシステムの種類FSTYPE="btrfs"
# 容量を考慮したクリーンアップアルゴリズムに使用する btrfs qgroupQGROUP=""
# スナップショットが使用できるファイルシステム容量の割合、または絶対サイズSPACE_LIMIT="0.5"
# 空けておくファイルシステム容量の割合、または絶対サイズFREE_LIMIT="0.2"
# この設定の操作を許可するユーザーとグループALLOW_USERS=""ALLOW_GROUPS=""
# ALLOW_USERS および ALLOW_GROUPS のユーザーとグループを# .snapshots ディレクトリの権限に同期するかどうかSYNC_ACL="no"
# post-snapshot の作成後、バックグラウンドで pre との# 比較を開始するBACKGROUND_COMPARISON="yes"
# 番号によるクリーンアップを毎日実行するNUMBER_CLEANUP="yes"
# 番号によるクリーンアップの制限NUMBER_MIN_AGE="1800"NUMBER_LIMIT="50"NUMBER_LIMIT_IMPORTANT="15"
# 1時間毎のスナップショット作成を有効化TIMELINE_CREATE="no"
# 一定時間経過後に1時間毎のスナップショットをクリーンアップするTIMELINE_CLEANUP="yes"
# タイムラインのクリーンアップの制限TIMELINE_MIN_AGE="1800"TIMELINE_LIMIT_HOURLY="5"TIMELINE_LIMIT_DAILY="7"TIMELINE_LIMIT_WEEKLY="0"TIMELINE_LIMIT_MONTHLY="0"TIMELINE_LIMIT_YEARLY="0"
# 空の pre-post-pairs のクリーンアップを有効化EMPTY_PRE_POST_CLEANUP="yes"
# 空の pre-post-pair のクリーンアップの制限EMPTY_PRE_POST_MIN_AGE="1800"以下は Snapper の主要なコマンドの一覧です。
現在の設定を取得する
sudo snapper get-config出力例
❯ snapper list-configsConfig │ Subvolume───────┼──────────root │ /利用可能なスナップショットの一覧と詳細を表示する
sudo snapper list出力例
# │ Type │ Pre # │ Date │ User │ Cleanup │ Description │ Userdata────┼────────┼───────┼──────────────────────────┼──────┼─────────┼──────────────────────────────────────────────────────────────────────────┼─────────0 │ single │ │ │ root │ │ current │715 │ pre │ │ Thu 22 Jan 2026 16:14:07 │ root │ number │ pacman -S -y -u --config /etc/pacman.conf -- │716 │ post │ 715 │ Thu 22 Jan 2026 16:14:25 │ root │ number │ docker-buildx lilv sof-firmware zed │717 │ pre │ │ Sat 24 Jan 2026 11:19:48 │ root │ number │ pacman -S -y -u --config /etc/pacman.conf -- │718 │ post │ 717 │ Sat 24 Jan 2026 11:20:19 │ root │ number │ bpf cachyos-hello cachyos-wallpapers cpupower jdk-openjdk ldb less libev │719 │ pre │ │ Sat 24 Jan 2026 11:20:31 │ root │ number │ pacman -U --config /etc/pacman.conf -- /home/mario/.cache/yay/visual-s │720 │ post │ 719 │ Sat 24 Jan 2026 11:20:36 │ root │ number │ visual-studio-code-bin │721 │ pre │ │ Sat 24 Jan 2026 20:46:40 │ root │ number │ pacman -Syu plasma-login-manager │722 │ post │ 721 │ Sat 24 Jan 2026 20:46:48 │ root │ number │ cmake fastfetch harfbuzz harfbuzz-icu jdk21-openjdk lib32-harfbuzz lib32 │723 │ pre │ │ Sat 24 Jan 2026 20:46:53 │ root │ number │ pacman -R sddm-kcm cachyos-themes-sddm sddm │724 │ post │ 723 │ Sat 24 Jan 2026 20:46:56 │ root │ number │ cachyos-themes-sddm sddm sddm-kcm │725 │ pre │ │ Sun 25 Jan 2026 08:05:05 │ root │ number │ pacman -S -y -u --config /etc/pacman.conf -- │726 │ post │ 725 │ Sun 25 Jan 2026 08:05:11 │ root │ number │ plasma-login-manager │727 │ pre │ │ Sun 25 Jan 2026 15:55:28 │ root │ number │ pacman -S --config /etc/pacman.conf -- cachyos-extra-znver4/caligula │728 │ post │ 727 │ Sun 25 Jan 2026 15:55:30 │ root │ number │ caligula │- 各列の説明
#: ほかのコマンドで使用するスナップショット番号Type: スナップショットが単独か pre/post ペアの一部かsingle: ほかのスナップショットと特別な関係がないスナップショットpre: システムの変更 (ファイルの編集やパッケージのインストールなど) の前に作成されるスナップショットpost: システムの変更後に作成されるスナップショット、対応するpreスナップショットと紐付けられる
Pre #:postスナップショットの場合、対応するpreスナップショットの番号Date: スナップショットの作成日時User: スナップショットを作成したユーザーCleanup: スナップショットに使用されるクリーンアップアルゴリズム- Snapper にはいくつかのクリーンアップアルゴリズムがあります (
number,timeline,empty-pre-postなど)。この例ではnumberアルゴリズムが使われており、古いスナップショットが上限に基づいて削除されます。 - timeline: スナップショットは年齢と頻度に基づいてクリーンアップされます。
- empty-pre-post: 差分が空の pre/post スナップショットペアを削除します。
- Snapper にはいくつかのクリーンアップアルゴリズムがあります (
Description: スナップショットの簡単な説明、多くは作成の理由が記されるUserdata: スナップショットに関連付けられたユーザー定義のデータ
新しいスナップショットを作成する
sudo snapper create --type single --description "My Snapshot Description"スナップショットを変更する
sudo snapper modify <option> <snapshot_number>利用可能なオプション
'modify' コマンドのオプション: --description, -d <説明> スナップショットの説明 --cleanup-algorithm, -c <アルゴリズム> スナップショットのクリーンアップアルゴリズム --userdata, -u <ユーザーデータ> スナップショットのユーザーデータ --read-only スナップショットを読み取り専用に設定 --read-write スナップショットを読み書き可能に設定 --default スナップショットをデフォルトのスナップショットに設定例: スナップショット 729 の説明を変更する
sudo snapper modify 729 --description '新しい説明'スナップショットの削除
ひとつのスナップショットを削除する
sudo snapper delete <snapshot_number>範囲を指定してスナップショットを削除する
sudo snapper delete 718-721スナップショット 718, 719, 720, 721 が削除されます。
Snapper ドキュメント
Section titled “Snapper ドキュメント”Limine 向けの推奨事項とヒント
Section titled “Limine 向けの推奨事項とヒント”Limine ブートローダーのスナップショット表示設定の調整
Section titled “Limine ブートローダーのスナップショット表示設定の調整”- 以下は Limine ブートローダーメニューに表示されるスナップショットの数を制限して見やすくする方法です。
- limine-snapper-sync 設定ファイルのバックアップを作成してください。
Terminal window sudo cp /etc/limine-snapper-sync.conf /etc/limine-snapper-sync.conf.orig - limine-snapper-sync 設定ファイルを編集してください。
設定ファイル例の抜粋:
Terminal window sudo nano /etc/limine-snapper-sync.conf任意でスナップショット名のフォーマットも変更できます。Terminal window ### Max Snapshot Entries### Sets the limit for how many snapshot entries show up in the boot menu.### This depends on the size of your FAT32 boot partition and how many different kernel and module versions you want to keep.### A larger FAT32 boot partition allows more snapshot entries.MAX_SNAPSHOT_ENTRIES=10日付・時刻とスナップショットの説明が表示されるTerminal window ### Snapshot Name Format### Choose a format for how snapshot entries look in the Limine bootloader:### 0. ID=111 2023-12-20 10:59:59 (default)### 1. 111│2023-12-20 10:59:59### 2. 111 │ 2023-12-20 10:59:59### 3. 2023-12-20 10:59:59│111### 4. 2023-12-20 10:59:59 │ 111### 5. 2023-12-20 10:59:59### 6. 111### 7. 111│snapshot description### 8. 2023-12-20 10:59:59│snapshot description### 9. │snapshot descriptionSNAPSHOT_FORMAT_CHOICE=88がおすすめです。 CTRL+O、Enter、CTRL+Xでファイルを保存して閉じてください。
スナップショットから復元する
Section titled “スナップショットから復元する”Limine
- Limine ブートローダーメニューからスナップショットメニューに移動してください。

- 復元したいスナップショットとカーネルをえらんでください。


- システムが
読み取り専用モードになります。スナップショットが検出されたことを表すポップアップ通知が表示され、復元するかどうか確認されます。
Restore nowをクリックしてください。ターミナルウィンドウが開き、確認を求めるプロンプトが表示されます。復元プロンプトの例 Snapshot ID : 2Date : 2026-01-26 11:19:14Description : nc-gitRestore method : replaceConfirm restore of snapshot 2 using the "replace" method?Type [y]es to restore, [l]ist to display all snapshots, or [c]ancel to abort.Your input: yesEnter a description for the "backup" of the subvolume: @Your input: @yesを入力し、任意でバックアップスナップショットの説明を追加してください。- 復元プロセスが始まります。完了したら、新しいプロンプトでもう一度
yesを入力してシステムを再起動してください。Terminal window The restore is complete. Please reboot now:Type [y]es to reboot, [n]o or [c]ancel to abort rebooting.Your input: yes
GRUB
-
GRUB ブートローダーメニューから復元したいスナップショットとカーネルでブートしてください。
-
起動後、Btrfs Assistant を開いてください。
Terminal window btrfs-assistant-launcher以下のコマンドでも起動できます。
Terminal window sudo -E btrfs-assistant -
Snapper タブ → “Browse/Restore” タブに移動し、ブートしたスナップショットをえらんでください。

-
Restoreボタンをクリックしてシステムを再起動して変更を適用してください。