Linux btrfs コマンド
Btrfs(B-tree File System)は、Oracle によって開発され、2007年に初めてリリースされた先進的な Linux ファイルシステムです。その設計目標は、従来のファイルシステムの限界を解決し、より優れた拡張性、信頼性、管理機能を提供することです。
コア機能
- コピーオンライト(CoW): すべての書き込み操作は元のデータを上書きせず、新しいコピーを作成します
- スナップショット機能: ファイルシステムの即時スナップショットを迅速に作成でき、追加スペースをほとんど消費しません
- サブボリューム管理: ファイルシステムを複数の独立したサブボリュームに分割できます
- データチェックサム: データ破損を自動検出します
- 透過的圧縮: ファイルデータのリアルタイム圧縮と解凍をサポートします
- RAID サポート: 複数の RAID レベルを内蔵サポート
btrfs 基本コマンド構文
btrfs [选项] [子命令选项] [参数]
一般的なオプション
| オプション | 説明 |
|---|---|
-v |
詳細出力モード |
--help |
ヘルプ情報を表示 |
--version |
バージョン情報を表示 |
主要サブコマンドの詳細
ファイルシステムの作成と管理
btrfs ファイルシステムの作成
例
# デバイス上に btrfs ファイルシステムを作成
sudo mkfs.btrfs /dev/sdX
# ラベル付きファイルシステムを作成
sudo mkfs.btrfs -L mylabel /dev/sdX
# 複数のデバイスを使用して RAID1 を作成
sudo mkfs.btrfs -m raid1 -d raid1 /dev/sdX /dev/sdY
sudo mkfs.btrfs /dev/sdX
# ラベル付きファイルシステムを作成
sudo mkfs.btrfs -L mylabel /dev/sdX
# 複数のデバイスを使用して RAID1 を作成
sudo mkfs.btrfs -m raid1 -d raid1 /dev/sdX /dev/sdY
btrfs ファイルシステムのマウント
例
# 基本的なマウント
sudo mount /dev/sdX /mnt/btrfs
# 圧縮を有効にする(推奨: lzo または zstd)
sudo mount -o compress=lzo /dev/sdX /mnt/btrfs
# マウントオプションを表示
mount | grep btrfs
sudo mount /dev/sdX /mnt/btrfs
# 圧縮を有効にする(推奨: lzo または zstd)
sudo mount -o compress=lzo /dev/sdX /mnt/btrfs
# マウントオプションを表示
mount | grep btrfs
サブボリューム操作
サブボリュームの作成
例
# サブボリュームを作成
sudo btrfs subvolume create /mnt/btrfs/subvol1
# サブボリュームを一覧表示
sudo btrfs subvolume list /mnt/btrfs
# サブボリュームを削除
sudo btrfs subvolume delete /mnt/btrfs/subvol1
sudo btrfs subvolume create /mnt/btrfs/subvol1
# サブボリュームを一覧表示
sudo btrfs subvolume list /mnt/btrfs
# サブボリュームを削除
sudo btrfs subvolume delete /mnt/btrfs/subvol1
スナップショット管理
例
# スナップショットを作成
sudo btrfs subvolume snapshot /mnt/btrfs /mnt/btrfs/snapshot_$(date +%Y%m%d)
# 読み取り専用スナップショット
sudo btrfs subvolume snapshot -r /mnt/btrfs /mnt/btrfs/readonly_snap
# スナップショットを削除
sudo btrfs subvolume delete /mnt/btrfs/snapshot_20230101
sudo btrfs subvolume snapshot /mnt/btrfs /mnt/btrfs/snapshot_$(date +%Y%m%d)
# 読み取り専用スナップショット
sudo btrfs subvolume snapshot -r /mnt/btrfs /mnt/btrfs/readonly_snap
# スナップショットを削除
sudo btrfs subvolume delete /mnt/btrfs/snapshot_20230101
スペース管理
ファイルシステムの使用状況を表示
例
# 詳細なスペース情報を表示
sudo btrfs filesystem usage /mnt/btrfs
# ディスク使用状況を表示
sudo btrfs filesystem df /mnt/btrfs
# データ分布のバランスを取る(注意して使用、時間がかかる可能性あり)
sudo btrfs balance start /mnt/btrfs
sudo btrfs filesystem usage /mnt/btrfs
# ディスク使用状況を表示
sudo btrfs filesystem df /mnt/btrfs
# データ分布のバランスを取る(注意して使用、時間がかかる可能性あり)
sudo btrfs balance start /mnt/btrfs
ファイルシステムサイズの調整
例
# ファイルシステムを拡大
sudo btrfs filesystem resize +10G /mnt/btrfs
# ファイルシステムを縮小
sudo btrfs filesystem resize -5G /mnt/btrfs
sudo btrfs filesystem resize +10G /mnt/btrfs
# ファイルシステムを縮小
sudo btrfs filesystem resize -5G /mnt/btrfs
データ整合性チェック
ファイルシステムのチェック
例
# 読み取り専用チェック
sudo btrfs check /dev/sdX
# 修復を試みる(注意して使用)
sudo btrfs check --repair /dev/sdX
sudo btrfs check /dev/sdX
# 修復を試みる(注意して使用)
sudo btrfs check --repair /dev/sdX
クリーンアップと修復
例
# 空きスペースをクリーンアップ
sudo btrfs filesystem defrag /mnt/btrfs
# ファイルシステムをチェックして修復
sudo btrfs scrub start /mnt/btrfs
# 修復状態を表示
sudo btrfs scrub status /mnt/btrfs
sudo btrfs filesystem defrag /mnt/btrfs
# ファイルシステムをチェックして修復
sudo btrfs scrub start /mnt/btrfs
# 修復状態を表示
sudo btrfs scrub status /mnt/btrfs
実践的な応用例
例1: 圧縮付き btrfs ホームディレクトリの設定
例
# パーティションを作成
sudo mkfs.btrfs -L home /dev/sdX
# マウントして圧縮を有効化
sudo mount -o compress=zstd /dev/sdX /mnt/newhome
# 既存データをコピー
sudo rsync -avx /home/ /mnt/newhome/
# fstab を更新して自動マウントを実現
echo "UUID=$(blkid -s UUID -o value /dev/sdX) /home btrfs defaults,compress=zstd 0 2" | sudo tee -a /etc/fstab
# 再マウント
sudo umount /mnt/newhome
sudo mount -a
sudo mkfs.btrfs -L home /dev/sdX
# マウントして圧縮を有効化
sudo mount -o compress=zstd /dev/sdX /mnt/newhome
# 既存データをコピー
sudo rsync -avx /home/ /mnt/newhome/
# fstab を更新して自動マウントを実現
echo "UUID=$(blkid -s UUID -o value /dev/sdX) /home btrfs defaults,compress=zstd 0 2" | sudo tee -a /etc/fstab
# 再マウント
sudo umount /mnt/newhome
sudo mount -a
例2: 定期的なスナップショットとクリーンアップ
例
#!/bin/bash
# 毎日のスナップショットを作成
SNAP_DIR="/mnt/btrfs/.snapshots"
mkdir -p "$SNAP_DIR"
sudo btrfs subvolume snapshot -r /mnt/btrfs "$SNAP_DIR/$(date +%Y%m%d)"
# 直近7日間のスナップショットを保持
find "$SNAP_DIR" -mindepth 1 -maxdepth 1 -type d -name "2*" | sort -r | tail -n +8 | xargs -r sudo btrfs subvolume delete
# 毎日のスナップショットを作成
SNAP_DIR="/mnt/btrfs/.snapshots"
mkdir -p "$SNAP_DIR"
sudo btrfs subvolume snapshot -r /mnt/btrfs "$SNAP_DIR/$(date +%Y%m%d)"
# 直近7日間のスナップショットを保持
find "$SNAP_DIR" -mindepth 1 -maxdepth 1 -type d -name "2*" | sort -r | tail -n +8 | xargs -r sudo btrfs subvolume delete
よくある問題の解決
問題1: スペース不足なのに df には空きがある
例
# 削除されていないスナップショットの占有スペースを確認
sudo btrfs subvolume list -s /mnt/btrfs
# 不要なスナップショットをクリーンアップ
sudo btrfs subvolume delete /mnt/btrfs/old_snapshot
sudo btrfs subvolume list -s /mnt/btrfs
# 不要なスナップショットをクリーンアップ
sudo btrfs subvolume delete /mnt/btrfs/old_snapshot
問題2: バランス操作がフリーズする
例
# バランス状態を確認
sudo btrfs balance status /mnt/btrfs
# バランス操作を一時停止
sudo btrfs balance pause /mnt/btrfs
# バランス操作を再開
sudo btrfs balance resume /mnt/btrfs
sudo btrfs balance status /mnt/btrfs
# バランス操作を一時停止
sudo btrfs balance pause /mnt/btrfs
# バランス操作を再開
sudo btrfs balance resume /mnt/btrfs
問題3: マウントに失敗する
例
# ファイルシステムをチェック
sudo btrfs check /dev/sdX
# 修復を試みる
sudo btrfs rescue zero-log /dev/sdX
sudo mount /dev/sdX /mnt/btrfs
sudo btrfs check /dev/sdX
# 修復を試みる
sudo btrfs rescue zero-log /dev/sdX
sudo mount /dev/sdX /mnt/btrfs
ベストプラクティスの推奨事項
-
圧縮を有効にする: 特にテキストやログなどの圧縮可能なデータに有効
# 推荐使用 zstd 压缩算法 mount -o compress=zstd /dev/sdX /mnt/btrfs
-
定期的にスナップショットを作成する: 重要な操作の前に手動でスナップショットを作成
-
スペース使用量を監視する: btrfs のスペースレポートは従来のファイルシステムとは異なる
-
100% 満杯を避ける: 少なくとも 5〜10% の空きスペースを維持
-
balance は慎重に使用: 必要な場合のみ実行、非常に時間がかかる可能性がある
-
RAID 構成を検討する: 重要なデータには RAID1 または RAID10 を使用
-
定期的に scrub を実行する: データ整合性をチェック
# 每月执行一次数据检查 sudo btrfs scrub start /mnt/btrfs
この記事を通じて、btrfs ファイルシステムの基本操作と管理方法を習得できたはずです。btrfs の強力な機能により、現代の Linux システム、特に高度なストレージ機能が必要なシナリオに最適な選択肢となっています。
その他の拡張
Linux コマンド大全