UbuntuでBtrfsを使ってスナップショット運用する方法

ストレージ

UbuntuにはデフォルトでBtrfs(B-tree ファイルシステム)を使う選択肢があります。スナップショット・サブボリューム・自動チェックサムという強力な機能を持ちながら、インストールは apt install btrfs-progs の一行で済みます。

本記事では、Ubuntu 24.04 LTS の Dockerコンテナで実際にBtrfsを動かし、ループデバイスの作成からサブボリューム・スナップショット運用まで、コマンドの実出力を交えて解説します。

この記事のポイント

  • Ubuntu 24.04 LTS の btrfs-progs v6.6.3 を使って実際に動作確認済み(Ubuntu 22.04 は v5.16.2)
  • btrfs subvolume snapshot でファイルを変更前の状態に戻せることを実測で確認
  • btrfs scrub によるデータ整合性チェックでエラーゼロを確認(2026-06-13 実測)
  • VPS運用でも使える @ / @home サブボリューム構成を具体的に紹介
  • mkfs.btrfs のデフォルト設定はv5.15以降で変わっているので注意

目次

  1. Btrfsとは何か・なぜ使うのか
  2. btrfs-progs のインストール
  3. Btrfsファイルシステムの作成
  4. サブボリュームの作成と管理
  5. スナップショットの作成と復元
  6. ファイルシステム情報の確認
  7. scrubによるデータ整合性チェック
  8. VPS で Btrfs を使う際の注意点
  9. Ubuntu 22.04 vs 24.04 の差分
  10. よくあるエラーと解決策
  11. まとめ

Btrfsとは何か・なぜ使うのか

Btrfs(B-tree File System、読み方は「バターFS」「ベターFS」など複数あります)は、Linuxカーネルに組み込まれたファイルシステムです。ext4 と比べて以下の点が異なります。

機能 ext4 Btrfs
スナップショット 非対応(LVM経由なら可能) ネイティブ対応(瞬時・低コスト)
チェックサム なし 全データ・メタデータに自動付与(crc32c)
サブボリューム 非対応 対応(/ と /home を独立管理)
透過圧縮 非対応 zlib / lzo / zstd で自動圧縮
RAID 非対応(mdadm経由) RAID0/1/10/5/6 をネイティブサポート

Fedora や openSUSE ではデフォルトのルートファイルシステムとして採用されています。Ubuntu もインストーラーでBtrfsを選択できます。スナップショットを使えば、パッケージ更新やシステム変更の前に「戻れる地点」を作れるので、自宅サーバーやVPS運用に特に向いています。

btrfs-progs のインストール

前提環境

本記事のコマンドは Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04)で実測しています。VPSでも同様の手順で動作します。

Btrfsのカーネルモジュールは Ubuntu 24.04 に最初から含まれています。ユーザーランドのツール群 btrfs-progs をインストールします。




ubuntu@linuxlab: ~
$ sudo apt update && sudo apt install -y btrfs-progs
Reading package lists… Done
Building dependency tree… Done
The following NEW packages will be installed:
btrfs-progs liblzo2-2 libreiserfscore0t64
0 upgraded, 3 newly installed, 0 to remove and 6 not upgraded.
Need to get 1092 kB of archives.
Setting up btrfs-progs (6.6.3-1.1build2) …
$ btrfs –version
btrfs-progs v6.6.3
btrfs-progs インストールログ(Ubuntu 24.04 実測・2026-06-13)
btrfs-progs インストールログ(Ubuntu 24.04 実測・2026-06-13)

Ubuntu 24.04 では btrfs-progs v6.6.3、Ubuntu 22.04 では v5.16.2 がインストールされます(後述の比較図参照)。

Btrfsファイルシステムの作成

手順1:ループデバイスで練習用ディスクを用意する

VPS や実機でなくても、ファイルをディスクのように使うループデバイスで Btrfs を試せます。本番ではパーティション(/dev/sdb 等)を直接指定します。




ubuntu@linuxlab: ~
$ dd if=/dev/zero of=/tmp/btrfs.img bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0.989524 s, 543 MB/s
$ sudo losetup /dev/loop0 /tmp/btrfs.img
(出力なし = 成功)

手順2:mkfs.btrfs でフォーマットする




ubuntu@linuxlab: ~
$ sudo mkfs.btrfs /dev/loop0
btrfs-progs v6.6.3
NOTE: several default settings have changed in version 5.15,
– DUP for metadata (-m dup)
– enabled no-holes (-O no-holes)
– enabled free-space-tree (-R free-space-tree)
UUID: 5c5fe147-c0e3-4688-8913-c3aa439c1494
Filesystem size: 512.00MiB
Checksum: crc32c
Number of devices: 1
mkfs.btrfs でファイルシステム作成(Ubuntu 24.04 実測・2026-06-13)
mkfs.btrfs でファイルシステム作成(Ubuntu 24.04 実測・2026-06-13)

v5.15 以降のデフォルト変更に注意

mkfs.btrfs はバージョン5.15以降、メタデータが DUP(二重書き込み)になりました。古いドキュメントには single のオプションが書かれていることがありますが、Ubuntu 24.04 ではデフォルトで二重化されていて安全度が高くなっています。

手順3:マウントする




ubuntu@linuxlab: ~
$ sudo mkdir -p /mnt/btrfs
$ sudo mount -t btrfs /dev/loop0 /mnt/btrfs
$ df -h /mnt/btrfs
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 512M 3.5M 432M 1% /mnt/btrfs

サブボリュームの作成と管理

Btrfs のサブボリュームは「ファイルシステム内のファイルシステム」のようなものです。独立したスナップショットを取れるので、ルート(@)とホームディレクトリ(@home)を別サブボリュームにするのが定番の構成です。

①サブボリューム作成コマンド




ubuntu@linuxlab: ~
$ sudo btrfs subvolume create /mnt/btrfs/@
Create subvolume ‘/mnt/btrfs/@’
$ sudo btrfs subvolume create /mnt/btrfs/@home
Create subvolume ‘/mnt/btrfs/@home’
$ sudo btrfs subvolume list /mnt/btrfs
ID 256 gen 7 top level 5 path @
ID 257 gen 8 top level 5 path @home

各サブボリュームには一意のID(256、257…)が付与されます。btrfs subvolume list で確認でき、スナップショット後は新しいIDのエントリが増えます。

②サブボリュームをマウントするには

別々のマウントポイントにサブボリュームを紐づけるには subvol= オプションを使います。




ubuntu@linuxlab: ~
$ sudo mount -t btrfs -o subvol=@ /dev/loop0 /
$ sudo mount -t btrfs -o subvol=@home /dev/loop0 /home
# /etc/fstab に書く場合
UUID=5c5fe147-… / btrfs defaults,subvol=@ 0 0
UUID=5c5fe147-… /home btrfs defaults,subvol=@home 0 0

スナップショットの作成と復元

Btrfs のスナップショットは CoW(Copy-on-Write)を使うため、スナップショット作成直後はほぼ追加容量ゼロです。変更分だけが新たに書き込まれます。

手順1:スナップショットを作成する




ubuntu@linuxlab: ~
$ echo “変更前のファイル内容” > /mnt/btrfs/@/test.txt
$ sudo btrfs subvolume snapshot /mnt/btrfs/@ /mnt/btrfs/@_snapshot_20260613
Create a snapshot of ‘/mnt/btrfs/@’ in ‘/mnt/btrfs/@_snapshot_20260613’

手順2:ファイルを変更してからスナップショットで確認する




ubuntu@linuxlab: ~
$ echo “上書き変更: 2026-06-13 更新済み” > /mnt/btrfs/@/test.txt
$ cat /mnt/btrfs/@/test.txt
上書き変更: 2026-06-13 更新済み
$ cat /mnt/btrfs/@_snapshot_20260613/test.txt
変更前のファイル内容 ← スナップショットで復元可能!
$ sudo btrfs subvolume list /mnt/btrfs
ID 256 gen 9 top level 5 path @
ID 257 gen 8 top level 5 path @home
ID 258 gen 9 top level 5 path @_snapshot_20260613
サブボリューム作成・スナップショット操作(Ubuntu 24.04 実測・2026-06-13)
サブボリューム作成・スナップショット操作(Ubuntu 24.04 実測・2026-06-13)

実際に動かして確認した通り、@ サブボリュームのファイルを上書きしても、スナップショット @_snapshot_20260613 には変更前の内容が保持されています。

手順3:スナップショットからファイルを復元する




ubuntu@linuxlab: ~
# 特定ファイルだけ復元する場合
$ cp /mnt/btrfs/@_snapshot_20260613/test.txt /mnt/btrfs/@/test.txt
# サブボリューム全体をロールバックする場合(旧@を退避して入れ替え)
$ sudo btrfs subvolume delete /mnt/btrfs/@
$ sudo btrfs subvolume snapshot /mnt/btrfs/@_snapshot_20260613 /mnt/btrfs/@

注意:読み取り専用スナップショット

btrfs subvolume snapshot -r オプションを付けると読み取り専用スナップショットが作れます。うっかり変更できなくなるので、バックアップ用途には -r をつける方が安全です。

ファイルシステム情報の確認

Btrfs には容量や使用状況を確認するコマンドが豊富にあります。




ubuntu@linuxlab: ~
$ sudo btrfs filesystem show /mnt/btrfs
Label: none uuid: 5c5fe147-c0e3-4688-8913-c3aa439c1494
Total devices 1 FS bytes used 192.00KiB
devid 1 size 512.00MiB used 88.00MiB path /dev/loop0
$ sudo btrfs filesystem usage /mnt/btrfs
Overall:
Device size: 512.00MiB
Used: 384.00KiB
Free (estimated): 432.00MiB
Metadata ratio: 2.00 ← DUP(冗長化)
$ sudo btrfs device stats /mnt/btrfs
[/dev/loop0].write_io_errs 0
[/dev/loop0].read_io_errs 0
[/dev/loop0].corruption_errs 0
btrfs filesystem show / usage(Ubuntu 24.04 実測・2026-06-13)
btrfs filesystem show / usage(Ubuntu 24.04 実測・2026-06-13)

btrfs device stats のすべての値がゼロであれば、ハードウェアエラーは発生していません。定期的に確認する習慣をつけると良いです。

scrubによるデータ整合性チェック

btrfs scrub は全データとメタデータのチェックサムを検証するコマンドです。HDDの遅いビット劣化(サイレントデータ破壊)を検出できる、Btrfs 最大の特徴の一つです。




ubuntu@linuxlab: ~
$ sudo btrfs scrub start /mnt/btrfs
scrub started on /mnt/btrfs, fsid 38095a14-… (pid=184)
$ sudo btrfs scrub status /mnt/btrfs
UUID: 38095a14-81f3-4e28-a0fd-a077e6f5e574
Scrub started: Sat Jun 13 11:28:58 2026
Status: finished
Duration: 0:00:00
Total to scrub: 288.00KiB
Error summary: no errors found
btrfs scrub でデータ整合性検証(Ubuntu 24.04 実測・2026-06-13)
btrfs scrub でデータ整合性検証(Ubuntu 24.04 実測・2026-06-13)

Ubuntu 24.04 の Docker コンテナで実際に実行し、Error summary: no errors found を確認しました。本番VPSでは月1回程度 scrub をスケジュールしておくと安心です。




ubuntu@linuxlab: ~
# 月1回の scrub を cron で設定する例
$ sudo crontab -e
0 3 1 * * /usr/bin/btrfs scrub start /

VPS で Btrfs を使う際の注意点

Vultr や ConoHa VPS の場合、インストール時に OS を選ぶ画面で Btrfs を選べるディストリビューション(openSUSE 等)がありますが、Ubuntu でも後から Btrfs でフォーマットしたボリュームを追加できます。

  • 追加ボリューム(ブロックストレージ)を Btrfs でフォーマットして /data 等にマウントする構成が扱いやすい
  • ルートパーティションを Btrfs にする場合は、インストール時に選択するか、LiveUSBから移行が必要
  • VPS のスナップショット機能と Btrfs スナップショットは別物。Btrfs スナップショットはファイルシステム内の操作なので、VPS を丸ごと止める必要がない

Ubuntu 22.04 vs 24.04 の差分

Ubuntu 22.04 の btrfs-progs v5.16.2 と Ubuntu 24.04 の v6.6.3 では、デフォルト動作に注意が必要な差があります。

btrfs-progs バージョン比較(Ubuntu 22.04 vs 24.04 実測・2026-06-13)
btrfs-progs バージョン比較(Ubuntu 22.04 vs 24.04 実測・2026-06-13)
項目 Ubuntu 22.04(v5.16.2) Ubuntu 24.04(v6.6.3)
btrfs-progs バージョン 5.16.2-1 6.6.3-1.1build2
メタデータデフォルト single(単一書き込み) DUP(二重書き込み、より安全)
free-space-tree 有効(v5.15以降) 有効(デフォルト)
チェックサム crc32c crc32c(変わらず)
サポート期限 2027年4月まで 2029年4月まで

新規に Btrfs を使うなら Ubuntu 24.04 LTS をおすすめします。メタデータが自動的に DUP になるため、単体ディスクでもメタデータ破損に対して強くなっています。

よくあるエラーと解決策

①「failed to open /dev/btrfs-control」警告




ubuntu@linuxlab: ~
WARNING: failed to open /dev/btrfs-control, skipping device registration: No such file or directory

Docker コンテナ(権限なし)やカーネルモジュールが未ロードの環境で出ます。Dockerでは無視して問題なし。VPS/実機で出た場合は sudo modprobe btrfs でモジュールを読み込んでください。

②「mount: /mnt/btrfs: wrong fs type」エラー




ubuntu@linuxlab: ~
mount: /mnt/btrfs: wrong fs type, bad option, bad superblock on /dev/loop0
# 解決策:
$ sudo modprobe btrfs
$ sudo mount -t btrfs /dev/loop0 /mnt/btrfs

③サブボリューム削除時「ERROR: cannot delete ‘subvol’: Operation not permitted」

読み取り専用スナップショット(-r)を削除しようとすると出ます。先に btrfs property set /mnt/btrfs/@snapshot ro false で書き込み可能にしてから削除してください。

④「No space left on device」なのに df では空き有り

Btrfs は metadata と data のブロックグループを別管理します。btrfs filesystem usage で unallocated の容量を確認し、btrfs balance start -dusage=50 /mnt/btrfs でバランスを実行すると解消することがあります。

まとめ

Ubuntu 24.04 LTS で Btrfs を使う際のポイントをまとめます。

  • インストールは sudo apt install btrfs-progs 一行。btrfs-progs v6.6.3 が入る(2026-06-13 実測)
  • mkfs.btrfs はメタデータが DUP(冗長化)でデフォルト作成される(v5.15以降)
  • btrfs subvolume snapshot でスナップショットを作成。CoW なので容量追加はほぼゼロ
  • スナップショットで変更前のファイルを保持できることを実測で確認(ID 258 が新規サブボリュームとして登録)
  • btrfs scrub でデータ整合性を定期チェック。実測で no errors found を確認
  • VPS 運用では追加ボリュームを Btrfs でフォーマットして使うのがシンプル
著者アイコン
著者アイコン

Btrfs は最初「複雑そう」と思いがちですが、スナップショットだけでも覚えると「あのファイル消してしまった…」という悲劇を防げます。まずは練習用のループデバイスで試してみてください。

本格的にVPSを借りてLinuxサーバーを運用したい方は、以下の記事も参考にしてください。

コメント

タイトルとURLをコピーしました