現在のBirtfs環境を理解する

従来のext4環境と比べると、Btrfsの構成は分かりにくいので、ここで一旦まとめておきます。

Birtfsのディレクトリ構造


現在は、同じ1つのディスクの中に、こういう構造がある状況です(@vmはまだ作成していませんが)。

[ 物理ディスク ]
└ Btrfsファイルシステム
├ @
├ @home
├ @lxd
└ @vm

作成した時点では、まだ見えてない内部構造です。それをマウントして見せている、というわけで、ここで初めてディレクトリと見えています。

/        ← @ をマウント
/home ← @home をマウント
/lxd ← @lxd をマウント
/vm ← @vm をマウント
サブボリュームマウント先(見える場所)
@/
@home/home
@lxd/lxd/var/...
@vm/vm

普通のext4だと、//home は単なる同じディレクトリに見えますが、Btrfsだともう少し細かく区別出来、柔軟に扱えます。

  • / だけスナップショット
  • /home はそのまま
  • /lxd は無視

Timeshiftとの関係

Timeshift(Btrfsモード)は @ を丸ごとスナップショット、つまり下記のようになります。

  • / は戻る
  • /home(=@home)は基本戻らない
  • /lxd も巻き込まれない

よくあるのが、/home というディレクトリが存在してるという勘違いですが、/home は「マウントポイント」で中身は @homeです。つまり、@home/home の中にあるわけではなく、同じ階層(Btrfsのルート)にあります。

コマンドで実際に確認

Btrfsのサブボリューム一覧は、次のコマンドで見られます。

sudo btrfs subvolume list /

これを実施すれば、次のように表示されます。

ID 256 path @
ID 257 path @home
ID 258 path @lxd

ちなみに、サブボリュームを作成したあとにfstabに登録していますが、これは下記のような、サブボリュームをどこにマウントするかの設定です。

UUID=xxx /      btrfs subvol=@
UUID=xxx /home btrfs subvol=@home

ここまで作成した ルート直下(top level 5)のサブボリューム

このブログで、ここまで作成した主なサブボリュームは次のようになります。

@                → ルート (/)
@home → /home
@lxd → LXD用
@data-immich → Immichデータ
@data-tv → TVデータ

Timeshiftスナップショット

Timeshiftのスナップショットは、次のような形で保存されています。

timeshift-btrfs/snapshots/
├ 2026-03-30_11-52-52/@
├ 2026-03-30_12-45-45/@
├ 2026-03-30_14-12-03/@
├ 2026-03-30_22-21-24/@
└ 2026-03-30_23-40-09/@

つまり、@(ルート)のスナップショットを保存しているという状態です。

LXD本体構造(@lxd配下)

@lxd
└ storage-pools/
└ default/

LXD イメージ

images/
└ d6c39329...(イメージキャッシュ)

LXD コンテナ本体

containers/
├ lxd-base-minimal
├ lxd-base-docker
├ linkwarden
├ vaultwarden
├ outline
├ immich
└ tv

LXD コンテナスナップショット

containers-snapshots/
├ linkwarden/
│ └ inport
├ vaultwarden/
│ └ setup
├ outline/
│ └ before-setup
├ immich/
│ ├ before-setup
│ └ after-setup
└ tv/
└ mount

構造の全体像

Btrfs
├ @
├ @home
├ @lxd
│ └ storage-pools/default/
│ ├ images/
│ ├ containers/
│ └ containers-snapshots/
├ @data-immich
├ @data-tv
└ timeshift-btrfs/
└ snapshots/

subvolid=5とは何か

Btrfsファイルシステムにおいて、subvolid=5は、ファイルシステムのルート(最上位レベル)にあるデフォルトのサブボリューム(Root Subvolume)を指します。

イメージ

subvolid=5(ルート)
├ @
├ @home
├ @lxd
├ @data-immich
└ ...

なぜ5なのかというと、これは内部的に決まってる固定IDだからであり、「変更不可」「削除不可」「常に存在」といった属性があります。
したがって、下記コマンドを実施すれば全てが見えることになります。

sudo mount -o subvolid=5 /dev/sdX /mnt
ls /mnt

subvolid=5とtop level 5

Btrfsファイルシステムにおけるsubvolid=5top level 5は、どちらも「ファイルシステムのルート(最上位・根幹)」を指す言葉です。

具体的には以下の意味を持ちます。

1. subvolid=5 

  • 意味: ID番号が5であるサブボリューム。
  • 詳細: Btrfsにおいて、ID 5は「ファイルシステム全体(ルート)の親」と定義されており、物理パーティションのトップレベルを指します。
  • 使われる場面mountコマンドで特定のサブボリュームをマウントする際、どのサブボリュームをルートとしてマウントするかを指定するオプション(subvolid=5)として使用されます。 

2. top level 5

  • 意味: 上位(親)のサブボリュームのIDが5である。
  • 詳細: 自分が属している(ネストされている)親のサブボリュームIDです。
  • 使われる場面btrfs subvolume listコマンドの結果などで、サブボリュームの階層構造を示す際に表示されます。top level 5とあれば、そのサブボリュームはファイルシステムの最上位直下に作成されたものであることを意味します。 
・ID 5 は、Btrfsにおける特別な「デフォルトのルート」のID。
・subvolid=5 は「ID 5のサブボリュームをマウントする」こと。
・top level 5 は「ID 5(ルート)の中にいる」こと。

通常、Subvolid 5はサブボリュームのネスト(入れ子)構造をフラットに管理するための基準点として扱われます。

Ubuntu 26.10以降の懸念点

Ubuntu 26.10では、セキュアブート時のセキュリティ強化を目的として、デジタル署名されたGRUBからBtrfs、XFS、ZFS、LVM、LUKS(暗号化)のサポートを削除する計画が提案されています。これにより、これらを利用した「/bootパーティション」からの起動ができなくなる可能性があります。 

  • 影響範囲: UEFIセキュアブートモード使用時。
  • 理由: GRUBの脆弱性が多く、セキュリティ上のリスクがあるため。
  • 対策(提案)/bootパーティションはext4を使用する、またはUEFIセキュアブートを無効にする。 

この提案が確定すれば、Ubuntu 26.10以降ではBtrfsを/(ルート)に採用している場合、ブートローダーの構成を変更する必要があるかもしれません。
UEFIセキュアブートを使用しなければ良いだけなので個人用途ですぐに大きな問題になる可能性は低いですが、将来性を考えた時に悩ましいところではあります。

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