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ボタンをクリックしてシステムを再起動して変更を適用してください。