2020-10-03

btrfs ファイルシステムをいじってみた

10 月末にリリースされる予定の Fedora 33 では、Workstation 版のデフォルトのファイルシステムに Btrfs が採用されます。一方、Fedora プロジェクトのスポンサー企業である Red Hat 社では、昨年 (2019-05-07) リリースされた Red Hat Enterprise Linux 8 (RHEL 8) で、Btrfs のサポートが廃止されました [1] [2]

一見、相反する動きのようですが、考えてみると RHEL 8 や CentOS 8 で採用されているファイルシステム XFS を Fedora Workstation では使ったことがありません。いままでほぼデフォルトの設定で Fedora をインストールしてきましたが、ファイルシステムは ext3ext4 だった記憶しかありません。ユーザが、将来の RHEL で Btrfs が採用されるかどうかを気にしても仕方のないことなのかもしれません。

今回のテーマ

32GB の eMMC を搭載した PC に Fedora 33 をインストール後、Btrfs ファイルシステムに、SD カードを追加あるいは削除してストレージの容量を増減を確認します。

従来のファイルシステム ext4 では、LVM で論理ボリュームを構成して、ストレージのスケーラビリティを確保していましたが [3]、Btrfs では考え方が異なります。テスト機に Fedora 33 Workstation のベータ版をインストールしたあとに、SD カードを追加/削除してストレージ領域を増減できることを確認しました。

格安 PC に Fedora をインストール

使用した PC、OS は以下の通りです。

MUGA ストイック PC2 KNW14FHD2-SR
Fedora 33 Workstation (beta) x86_64 (Fedora-Workstation-Live-x86_64-33_Beta-1.3.iso)

一代前のドンキの PC の eMMC 32GB という小さなストレージにインストールしました。

インストールした Fedora 33 Workstation (beta) のデスクトップ画面

SD カードの追加と削除

RHEL 7 まではテクノロジープレビューの扱いで Btrfs がサポートされていました。そのためドキュメントが整備されています。Red Hat 社の下記のサイトを参考にさせていただきました。

実際には試行錯誤をしましたが、ここではうまくできた結果を中心にまとめました。

SD カードの追加

128GB の SD カードをスロット (/dev/mmcblk2) に挿して、Btrfs のファイルシステムの領域を増やしてみます。

追加する SD カード

vfat でフォーマットされていて、マウントされていない状態です。

現状のストレージの容量は、df コマンドで確認すると次のようになっています。

[bitwalk@localhost ~]$ df -Th
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs       devtmpfs   1.9G     0  1.9G    0% /dev
tmpfs          tmpfs      1.9G     0  1.9G    0% /dev/shm
tmpfs          tmpfs      772M  2.1M  770M    1% /run
/dev/mmcblk0p3 btrfs       28G  7.3G   20G   27% /
tmpfs          tmpfs      1.9G   48K  1.9G    1% /tmp
/dev/mmcblk0p3 btrfs       28G  7.3G   20G   27% /home
/dev/mmcblk0p2 ext4       976M  208M  702M   23% /boot
/dev/mmcblk0p1 vfat       599M   21M  579M    4% /boot/efi
tmpfs          tmpfs      386M  140K  386M    1% /run/user/1000
[bitwalk@localhost ~]$ 

btrfs filesystem show を実行すると次のように出力されます。

[bitwalk@localhost ~]$ sudo btrfs filesystem show
Label: 'fedora_localhost-live'  uuid: 29c16dd9-efbb-4b3b-8c14-e766f797b301
	Total devices 1 FS bytes used 7.25GiB
	devid    1 size 27.32GiB used 8.53GiB path /dev/mmcblk0p3

[bitwalk@localhost ~]$

マウント位置 /home に、SD カード (/dev/mmcblk2) を追加します。

[bitwalk@localhost ~]$ sudo btrfs device add /dev/mmcblk2 /home
[sudo] bitwalk のパスワード:
/dev/mmcblk2 appears to contain an existing filesystem (vfat).
ERROR: use the -f option to force overwrite of /dev/mmcblk2

既に vfat のファイルシステムがあるというエラーが出ます。-f オプションを付けて強制的に上書きします。

※ あらかじめ btrfs でフォーマットしておいても、既に btrfs のファイルシステムがあるというエラーが出ます。

[bitwalk@localhost ~]$ sudo btrfs device add -f /dev/mmcblk2 /home
[bitwalk@localhost ~]$ 

何もメッセージが出ません。再度 df コマンドで確認すると容量が増えています。

[bitwalk@localhost ~]$ df -Th
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs       devtmpfs   1.9G     0  1.9G    0% /dev
tmpfs          tmpfs      1.9G     0  1.9G    0% /dev/shm
tmpfs          tmpfs      772M  2.1M  770M    1% /run
/dev/mmcblk0p3 btrfs      147G  7.3G  139G    5% /
tmpfs          tmpfs      1.9G   48K  1.9G    1% /tmp
/dev/mmcblk0p3 btrfs      147G  7.3G  139G    5% /home
/dev/mmcblk0p2 ext4       976M  208M  702M   23% /boot
/dev/mmcblk0p1 vfat       599M   21M  579M    4% /boot/efi
tmpfs          tmpfs      386M  140K  386M    1% /run/user/1000
[bitwalk@localhost ~]$ 

btrfs filesystem show を実行すると、デバイスがひとつ増えていることを確認できます。

[bitwalk@localhost ~]$ sudo btrfs filesystem show
Label: 'fedora_localhost-live'  uuid: 29c16dd9-efbb-4b3b-8c14-e766f797b301
	Total devices 2 FS bytes used 7.25GiB
	devid    1 size 27.32GiB used 8.53GiB path /dev/mmcblk0p3
	devid    2 size 119.08GiB used 0.00B path /dev/mmcblk2

[bitwalk@localhost ~]$ 

デバイスが追加されたり削除された場合にファイルシステム上のデータを再配置するために btrfs balance start path を実行します。処理の終了までしばらく掛かります。

[bitwalk@localhost ~]$ sudo btrfs balance start /home
[sudo] bitwalk のパスワード:
WARNING:

        Full balance without filters requested. This operation is very
        intense and takes potentially very long. It is recommended to
        use the balance filters to narrow down the scope of balance.
        Use 'btrfs balance start --full-balance' option to skip this
        warning. The operation will start in 10 seconds.
        Use Ctrl-C to stop it.
10 9 8 7 6 5 4 3 2 1
Starting balance without any filters.
Done, had to relocate 11 out of 11 chunks
[bitwalk@localhost ~]$

btrfs filesystem show を再度実行すると、ストレージの使用量がデバイス間で変化していることを確認できます。

[bitwalk@localhost ~]$ sudo btrfs filesystem show
[sudo] bitwalk のパスワード:
Label: 'fedora_localhost-live'  uuid: 29c16dd9-efbb-4b3b-8c14-e766f797b301
        Total devices 2 FS bytes used 7.27GiB
        devid    1 size 27.32GiB used 0.00B path /dev/mmcblk0p3
        devid    2 size 119.08GiB used 9.03GiB path /dev/mmcblk2

[bitwalk@localhost ~]$

SD カードの削除

SD カードを、btrfs ファイルシステムから削除することができます。おそらく、削除できるのは、SD カードで使っているデータを移し替えるだけの領域が残っている場合に有効なのだと思いますが、今回は、今追加した SD カードをまた取り外すだけですので、残っている容量は問題ありません。

btrfs device remove device path コマンドは削除するデバイスにあるデータを、残っている領域に移すので、処理に時間が掛かります。

[bitwalk@localhost ~]$ sudo btrfs device remove /dev/mmcblk2 /home
[sudo] bitwalk のパスワード:
[bitwalk@localhost ~]$

デバイスを削除した場合にもバランス (btrfs balance start path) を実行するべきとされています。残りのデバイスが一つしかない場合にもバランスが本当に必要なのかは解りませんが、念のため実行しておきます。

[bitwalk@localhost ~]$ sudo btrfs balance start /home
[sudo] bitwalk のパスワード:
WARNING:

        Full balance without filters requested. This operation is very
        intense and takes potentially very long. It is recommended to
        use the balance filters to narrow down the scope of balance.
        Use 'btrfs balance start --full-balance' option to skip this
        warning. The operation will start in 10 seconds.
        Use Ctrl-C to stop it.
10 9 8 7 6 5 4 3 2 1
Starting balance without any filters.
Done, had to relocate 11 out of 11 chunks
[bitwalk@localhost ~]$

btrfs filesystem show を実行すると、デバイスが減ってひとつのみになっていることを確認できます。

[bitwalk@localhost ~]$ sudo btrfs filesystem show
[sudo] bitwalk のパスワード:
Label: 'fedora_localhost-live'  uuid: 29c16dd9-efbb-4b3b-8c14-e766f797b301
        Total devices 1 FS bytes used 7.27GiB
        devid    1 size 27.32GiB used 8.28GiB path /dev/mmcblk0p3

[bitwalk@localhost ~]$

まとめ

Btrfs は、ストレージを RAID で構成している場合に対応していますが、RAID を使っていない場合 (single) でも、デバイスを追加して簡単に領域を拡張できることを確認できました。btrfs の一部のコマンドを使ってみただけです。今までメインで使っていたファイルシステム ext4 と使い勝手も違い、まだ慣れません。使用経験を重ねながら情報を整理していきます。

参考サイト

  1. Red Hat、Btrfsの採用を断念か - XFSベースに舵切り | マイナビニュース [2017-08-04]
  2. 2017年8月3日 Red Hat,RHEL 7.4リリースで"脱Btrfs"を明らかに:Linux Daily Topics|gihyo.jp … 技術評論社
  3. bitWalk's: 小容量ストレージ対策 〜 LVM [2020-05-0]
  4. Fedora/CentOS Stream/CentOS/RHELの関係性 - 赤帽エンジニアブログ [2020-07-27]

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: