Btrfsサブボリュームの背景と必要性
Linux、特に開発システムやサーバーで作業する場合、ディスク管理は常に最優先事項です。多くの人は、その安定性と実績のあるパフォーマンスで知られるExt4のような従来のファイルシステムに慣れ親しんでいます。しかし、柔軟性、データ保全能力、そして特に迅速な復元に対する要求が高まるにつれて、より現代的なソリューションを探す必要があります。
Btrfs(B-tree file system)は、注目すべき名前の1つです。これは「copy-on-write」(CoW)ファイルシステムであり、Ext4にはないスナップショット、チェックサム、圧縮、そして本記事で特に重要なサブボリュームなどの高度な機能を提供するように開発されました。
私は2年間、主要な開発マシンとしてFedoraを使用しています。パッケージの更新速度には非常に満足していますが、大規模な更新には時としてリスクが伴います。Btrfsのサブボリュームとスナップショットはまさに救世主であり、システムを壊す心配なく安心して実験することを可能にしてくれました。
サブボリュームとは何か、そしてどのように役立つのか?
サブボリュームは、Btrfsファイルシステム上の特別なディレクトリと考えることができます。通常のディレクトリとは異なり、サブボリュームは独立したファイルシステムとして機能する能力を持っています。マウント、アンマウント、個別管理が可能で、多くの重要な利点をもたらします。
- データの分離: オペレーティングシステム(
/)やユーザーディレクトリ(/home)用に個別のサブボリュームを作成できます。さらに、データベース(/var/lib/mysql、/var/lib/postgresql)やログ(/var/log)のような重要なアプリケーション専用にすることも可能です。これによりデータが分離され、システムの一部が満杯になることで全体に影響を与える状況を防ぎます。 - 柔軟なスペース管理: サブボリュームは共通の物理ディスクスペースプールを共有します。これは、サイズを事前に定義する必要があり、変更が非常に困難な従来のパーティションとは大きく異なります。Btrfsサブボリュームは、その共通スペース内で自動的にサイズを調整できるため、最大限の柔軟性を提供します。
- 強力なスナップショット: これはサブボリュームの最も「高価な」機能です。サブボリュームの状態をいつでもスナップショット(高速なイメージ)として作成できます。最初、スナップショットは元のサブボリュームとデータを共有するため、追加のディスクスペースをほとんど占有しません。データが変更された場合にのみ、新しいデータブロックを保存するためにスペースが使用されます。これは、ソフトウェアの更新失敗や互換性のないアプリケーションのインストールなどの問題が発生した場合に、システムを以前の状態に復元するのに非常に役立ちます。
Fedoraでは、バージョン33以降、Btrfsが新規インストール時のデフォルトファイルシステムになりました。これは、Fedoraをインストールすると、root(/用)とhome(/home用)のような基本的なサブボリュームが既に設定されていることを意味します。これは、より効率的な管理のための強固な基盤となります。
FedoraでのBtrfsのインストールと確認
Fedora 33以降をインストールした場合、Btrfsはデフォルトのファイルシステムであるため、追加でインストールする必要はありません。ただし、Btrfs管理ツールがシステムで利用可能であることを確認することが重要です。
Btrfsステータスの確認
まず、システムがBtrfsを使用しているかどうか、および既存のBtrfsパーティションを確認します。
df -h -t btrfs
結果は以下のようになり、Btrfsパーティションとそのマウントポイントが表示されます。
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 475G 15G 459G 4% /var/home
/dev/sda3 475G 15G 459G 4% /
/と/var/home(または/home)の両方が同じ/dev/sda3デバイスからマウントされていることに注意してください。ただし、これらは同じBtrfsファイルシステム上の個別のサブボリュームです。
Btrfsツールのインストール
Btrfsサブボリュームとスナップショットを管理するには、btrfs-progsパッケージが必要です。Fedoraは通常、このパッケージをプリインストールしています。しかし、何らかの理由でこのパッケージが欠落している場合は、次のように簡単にインストールできます。
sudo dnf install btrfs-progs
インストールが完了したら、サブボリュームの操作を開始する準備が整いました。
Btrfsサブボリュームの詳細設定
既存のサブボリュームをリストアップ
Btrfsファイルシステム上の既存のサブボリュームを表示するには、btrfs subvolume listコマンドを使用します。ルートBtrfsファイルシステムのパスを指定する必要があります。不明な場合は、/またはBtrfsパーティションのマウントポイントを使用できます。
sudo btrfs subvolume list /
結果には、各サブボリュームのID、世代、パスが表示されます。
ID 256 gen 2102 top level 5 path root
ID 257 gen 2102 top level 5 path home
この例では、rootはルートシステム(/)のサブボリュームであり、homeはユーザーディレクトリ(/homeまたは/var/home、Fedoraのインストール方法による)のサブボリュームです。
新しいサブボリュームの作成
様々な目的のためにサブボリュームを作成できます。たとえば、開発プロジェクト用や、/var/logのような他の重要なディレクトリ用に個別のサブボリュームを作成できます。これにより、スナップショットと復元を個別に管理しやすくなります。
基本的な構文は次のとおりです。
sudo btrfs subvolume create /path/to/parent/directory/new_subvolume_name
例として、ログ用のサブボリュームを作成します。
sudo btrfs subvolume create /var/log_btrfs
サブボリュームを作成した後、必要に応じて既存のコンテンツを移動し、目的の場所にマウントできます。たとえば、既存のログファイルを新しいサブボリュームに移動し、/var/logにマウントする場合:
sudo mv /var/log/* /var/log_btrfs/
sudo rmdir /var/log # ディレクトリが空であることを確認
# 隠しファイルや権限の問題でrmdirがエラーを報告する場合、空のディレクトリを再作成する必要があるかもしれません
sudo mkdir /var/log
次に、このサブボリュームをマウントするために/etc/fstabを更新します。
# この行を/etc/fstabに追加します。/dev/sda3をBtrfsデバイスに置き換えてください
UUID=<あなたのUUID> /var/log btrfs subvol=log_btrfs,compress=zstd:3,defaults 0 0
BtrfsパーティションのUUIDを見つけるには、次のコマンドを使用します。
lsblk -f
/etc/fstabを編集した後、マウントを試して確認します。
sudo mount -a
df -h /var/log
スナップショットの作成と管理
スナップショットは、Btrfsサブボリュームの最も強力な機能の1つです。これらにより、特定の時点でのファイルシステムの状態の「高速なイメージ」を作成できます。最初、スナップショットは元のサブボリュームとデータを共有するため、追加のディスクスペースをほとんど占有しません。データが変更された場合にのみ、新しいデータブロックを保存するためにスペースが使用されます。これは、ソフトウェアの更新失敗や互換性のないアプリケーションのインストールなどの問題が発生した場合に、システムを以前の状態に復元するのに非常に役立ちます。
スナップショットの作成
スナップショットを作成するための構文:
sudo btrfs subvolume snapshot <source_subvolume_path> <destination_snapshot_path>
例として、大規模なシステムアップデートを実行する前にrootサブボリュームのスナップショットを作成します。
sudo btrfs subvolume snapshot / /.snapshots/root_before_update_$(date +%F_%H-%M)
この例では、.snapshotsはスナップショットを格納するために作成されたディレクトリです。管理と識別を容易にするために、日付と時刻でスナップショットに名前を付けることをお勧めします。
デフォルトでは、スナップショットは書き込み可能(writable)です。読み取り専用(read-only)のスナップショットを作成したい場合は、-rオプションを追加します。
sudo btrfs subvolume snapshot -r /home /.snapshots/home_ro_backup
スナップショットをリストアップ
スナップショットも一種のサブボリュームであるため、他のサブボリュームと同様にリストアップできます。
sudo btrfs subvolume list /
スナップショットからの復元
ここでスナップショットの真の力が発揮されます。アップデートによってシステムが不安定になった場合、以前のスナップショットの状態に簡単に復元できます。
復元プロセスには通常、以下のステップが含まれます。
- リカバリー環境(例:FedoraのライブUSB)で起動します。または、以前動作していたスナップショットから起動するようにGRUBを設定している場合は、その方法を使用できます。
- 現在の
rootサブボリュームと復元したいスナップショットのIDを見つけます。 - 現在の
rootサブボリュームを削除します。 - 復元したいスナップショットから書き込み可能なスナップショットを作成します。
- この新しいスナップショットをデフォルトのサブボリュームとして設定します。
- システムを再起動します。
例として、root_before_update_2026-03-11_10-00というスナップショットに復元したいと仮定します。
# 1. Btrfsパーティション(例:/dev/sda3)を一時的なマウントポイントにマウントします
sudo mount /dev/sda3 /mnt
# 2. サブボリュームをリストし、スナップショットと元のサブボリュームの名前を特定します
sudo btrfs subvolume list /mnt
# スナップショットが .snapshots/root_before_update_2026-03-11_10-00 であると仮定します
# 3. 現在のルートサブボリュームを削除します(この手順は非常に慎重に行ってください!)
sudo btrfs subvolume delete /mnt/root
# 4. 復元したいスナップショットから書き込み可能なスナップショットを作成します
sudo btrfs subvolume snapshot /mnt/.snapshots/root_before_update_2026-03-11_10-00 /mnt/root
# 5. この新しいスナップショットをデフォルトのサブボリュームとして設定します
sudo btrfs subvolume set-default $(btrfs subvolume show /mnt/root | awk '/Subvolume ID:/ {print $NF}') /mnt/
# 6. アンマウントして再起動します
sudo umount /mnt
sudo reboot
注意: この復元は慎重に行う必要があり、リカバリー環境での経験が必要です。大規模な操作を行う前に、常に重要なデータをバックアップしてください。
サブボリューム/スナップショットの削除
不要になったサブボリュームまたはスナップショットは、スペースを解放するために削除できます。
sudo btrfs subvolume delete /path/to/subvolume_or_snapshot
例:
sudo btrfs subvolume delete /.snapshots/root_old_snapshot
確認と監視
設定後、Btrfsファイルシステムとサブボリュームの状態を確認および監視することは、すべてがスムーズに機能していることを保証するために非常に重要です。
使用スペースの確認
df -hコマンドはディスクスペースの概要を提供します。しかし、各サブボリュームごとの詳細な使用スペースを確認するには、btrfs filesystem duを使用できます。
sudo btrfs filesystem du -s /path/to/subvolume
または、ファイルシステム全体を見るには:
sudo btrfs filesystem du /
Btrfsファイルシステムエラーの確認
Btrfsはデータ整合性チェック(チェックサム)機能を持っています。潜在的なエラーを見つけるためにファイルシステムをチェックできます。
sudo btrfs scrub start /
このコマンドは、ファイルシステム全体をスキャンしてデータとメタデータが破損していないかを確認します。スクラブプロセスのステータスは以下で確認できます。
sudo btrfs scrub status /
スペースの最適化(デフラグとデータ圧縮)
Btrfsはストレージスペースを節約するためにデータ圧縮をサポートしています。圧縮はサブボリュームレベルまたはファイルレベルで有効にできます。例として、サブボリュームを圧縮する場合:
# 圧縮オプション、例えば /etc/fstab に compress=zstd:3 を指定して再マウントする必要があります
# または、手動でディレクトリを圧縮する場合:
sudo btrfs filesystem defragment -r -v -c zstd /path/to/directory
デフラグメンテーションも実行できます。CoWファイルシステムでは、Ext4ほど必要ではありませんが、頻繁に変更される大きなファイルがある場合、デフラグメンテーションはパフォーマンスの向上に役立つことがあります。
sudo btrfs filesystem defragment -r /path/to/directory
結論
Btrfsサブボリュームとスナップショットのような関連機能は、従来のファイルシステムでは匹敵し得ない強力なレベルのデータ管理と保護を提供します。Fedoraでは、Btrfsがデフォルトの選択肢となったことで、これがさらに利用しやすくなりました。
Btrfsサブボリュームを理解し、習得することで、ストレージスペースを最適化するだけでなく、システムアップデートやテストのための強固な「安全網」を持つことができます。私のようなITエンジニアにとって、迅速な復元能力は非常に貴重であり、自分の開発マシンで新しい技術を探求し、適用する自信を与えてくれます。
Btrfsサブボリュームをあなたのワークフローに組み込み、試してみてください。安定した効率的なLinuxシステムを維持するための非常に便利なツールであることがわかるでしょう。
