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以降で変わっているので注意
目次
- Btrfsとは何か・なぜ使うのか
- btrfs-progs のインストール
- Btrfsファイルシステムの作成
- サブボリュームの作成と管理
- スナップショットの作成と復元
- ファイルシステム情報の確認
- scrubによるデータ整合性チェック
- VPS で Btrfs を使う際の注意点
- Ubuntu 22.04 vs 24.04 の差分
- よくあるエラーと解決策
- まとめ
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 をインストールします。
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

Ubuntu 24.04 では btrfs-progs v6.6.3、Ubuntu 22.04 では v5.16.2 がインストールされます(後述の比較図参照)。
Btrfsファイルシステムの作成
手順1:ループデバイスで練習用ディスクを用意する
VPS や実機でなくても、ファイルをディスクのように使うループデバイスで Btrfs を試せます。本番ではパーティション(/dev/sdb 等)を直接指定します。
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 でフォーマットする
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

v5.15 以降のデフォルト変更に注意
mkfs.btrfs はバージョン5.15以降、メタデータが DUP(二重書き込み)になりました。古いドキュメントには single のオプションが書かれていることがありますが、Ubuntu 24.04 ではデフォルトで二重化されていて安全度が高くなっています。
手順3:マウントする
$ 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)を別サブボリュームにするのが定番の構成です。
①サブボリューム作成コマンド
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= オプションを使います。
$ 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:スナップショットを作成する
$ sudo btrfs subvolume snapshot /mnt/btrfs/@ /mnt/btrfs/@_snapshot_20260613
Create a snapshot of ‘/mnt/btrfs/@’ in ‘/mnt/btrfs/@_snapshot_20260613’
手順2:ファイルを変更してからスナップショットで確認する
$ 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

実際に動かして確認した通り、@ サブボリュームのファイルを上書きしても、スナップショット @_snapshot_20260613 には変更前の内容が保持されています。
手順3:スナップショットからファイルを復元する
$ 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 には容量や使用状況を確認するコマンドが豊富にあります。
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 device stats のすべての値がゼロであれば、ハードウェアエラーは発生していません。定期的に確認する習慣をつけると良いです。
scrubによるデータ整合性チェック
btrfs scrub は全データとメタデータのチェックサムを検証するコマンドです。HDDの遅いビット劣化(サイレントデータ破壊)を検出できる、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

Ubuntu 24.04 の Docker コンテナで実際に実行し、Error summary: no errors found を確認しました。本番VPSでは月1回程度 scrub をスケジュールしておくと安心です。
$ 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 では、デフォルト動作に注意が必要な差があります。

| 項目 | 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」警告
Docker コンテナ(権限なし)やカーネルモジュールが未ロードの環境で出ます。Dockerでは無視して問題なし。VPS/実機で出た場合は sudo modprobe btrfs でモジュールを読み込んでください。
②「mount: /mnt/btrfs: wrong fs type」エラー
# 解決策:
$ 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 でフォーマットして使うのがシンプル
本格的にVPSを借りてLinuxサーバーを運用したい方は、以下の記事も参考にしてください。


コメント