はじめに
Btrfs を学習した際のメモ
Btrfs は バターエフエス
と読む、 B-tree file system
の略
オンラインデフラグができる
マウントしたままファイルシステムの拡張と縮小ができる
スナップショットがとれる
構築できるRAIDの種類は以下
- RAID0 : 2台以上
- RAID1 : 2台以上
- RAID10 : 4台以上
- RAID5 : 3台以上(実験中)
- RAID6 : 4台以上(実験中)
特殊なモードの single
と dup
がある
-
single
各データブロックをストレージプールの一部として配置するモード。
このモードは冗長性や冗長性に対する保護を提供せず、データは単一のデバイスにのみ書き込まれる。 -
dup
各データブロックを同じデバイス上の2箇所に書き込むモード。
単一のデバイス内での読み取りエラーから保護する一定の冗長性が提供さる。
しかし、デバイス全体が故障した場合には保護されない。
ファイルシステムの作成
シングルデバイス
- デバイスは
/dev/sdb
(2GB) と、/dev/sdc
(2GB)
$ sudo mkfs.btrfs /dev/sdb
btrfs-progs v5.16.2
See http://btrfs.wiki.kernel.org for more information.
Performing full device TRIM /dev/sdb (2.00GiB) ...
NOTE: several default settings have changed in version 5.15, please make sure
this does not affect your deployments:
- DUP for metadata (-m dup)
- enabled no-holes (-O no-holes)
- enabled free-space-tree (-R free-space-tree)
Label: (null)
UUID: ********-****-****-****-************
Node size: 16384
Sector size: 4096
Filesystem size: 2.00GiB
Block group profiles:
Data: single 8.00MiB
Metadata: DUP 102.38MiB
System: DUP 8.00MiB
SSD detected: yes
Zoned device: no
Incompat features: extref, skinny-metadata, no-holes
Runtime features: free-space-tree
Checksum: crc32c
Number of devices: 1
Devices:
ID SIZE PATH
1 2.00GiB /dev/sdb
RAID 0 (ストライピング)
- デバイスは
/dev/sdb
(2GB) と、/dev/sdc
(2GB)
$ sudo mkfs.btrfs -f -d raio0 /dev/sdb /dev/sdc
btrfs-progs v5.16.2
See http://btrfs.wiki.kernel.org for more information.
Performing full device TRIM /dev/sdb (2.00GiB) ...
NOTE: several default settings have changed in version 5.15, please make sure
this does not affect your deployments:
- DUP for metadata (-m dup)
- enabled no-holes (-O no-holes)
- enabled free-space-tree (-R free-space-tree)
Performing full device TRIM /dev/sdc (2.00GiB) ...
Label: (null)
UUID: ********-****-****-****-************
Node size: 16384
Sector size: 4096
Filesystem size: 4.00GiB
Block group profiles:
Data: RAID0 409.50MiB
Metadata: RAID1 256.00MiB
System: RAID1 8.00MiB
SSD detected: yes
Zoned device: no
Incompat features: extref, skinny-metadata, no-holes
Runtime features: free-space-tree
Checksum: crc32c
Number of devices: 2
Devices:
ID SIZE PATH
1 2.00GiB /dev/sdb
2 2.00GiB /dev/sdc
RAID 1 (ミラーリング)
- デバイスは
/dev/sdb
(2GB) と、/dev/sdc
(2GB)
$ sudo mkfs.btrfs -f -d raid1 /dev/sdb /dev/sdc
btrfs-progs v5.16.2
See http://btrfs.wiki.kernel.org for more information.
Performing full device TRIM /dev/sdb (2.00GiB) ...
NOTE: several default settings have changed in version 5.15, please make sure
this does not affect your deployments:
- DUP for metadata (-m dup)
- enabled no-holes (-O no-holes)
- enabled free-space-tree (-R free-space-tree)
Performing full device TRIM /dev/sdc (2.00GiB) ...
Label: (null)
UUID: ********-****-****-****-************
Node size: 16384
Sector size: 4096
Filesystem size: 4.00GiB
Block group profiles:
Data: RAID1 204.75MiB
Metadata: RAID1 256.00MiB
System: RAID1 8.00MiB
SSD detected: yes
Zoned device: no
Incompat features: extref, skinny-metadata, no-holes
Runtime features: free-space-tree
Checksum: crc32c
Number of devices: 2
Devices:
ID SIZE PATH
1 2.00GiB /dev/sdb
2 2.00GiB /dev/sdc
ファイルシステムの情報確認
- 複数デバイスでストレージプールを構築している場合、構成している1つのデバイスを
btrfs filesystem show
すると、ストレージプール全体が表示される - 複数デバイスでストレージプールを構築している場合、構成している1つのデバイスを
mount
すると、ストレージプール全体がマウントされる - 2023/06 時点で、mountせずに、サブボリュームの情報やファイルシステム全体の利用可能なスペースを知る方法はないらしい
RAID 0 (ストライピング)
sudo btrfs filesystem df /export
で Data, RAID0:
と表示される
$ sudo btrfs filesystem show /dev/sdb
Label: none uuid: ********-****-****-****-************
Total devices 2 FS bytes used 144.00KiB
devid 1 size 2.00GiB used 272.00MiB path /dev/sdb
devid 2 size 2.00GiB used 264.00MiB path /dev/sdc
$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FS AVAIL FSUSE% MOUNTPOINTS
:
:
sdb btrfs ********-****-****-****-************
sdc btrfs ********-****-****-****-************
:
:
$ sudo mount /dev/sdb /export
$ df -h
Filesystem Size Used Avail Use% Mounted on
:
:
/dev/sdb 4.0G 3.6M 3.5G 1% /export
:
:
$ sudo btrfs filesystem df /export
Data, RAID0: total=409.50MiB, used=0.00B
System, RAID1: total=8.00MiB, used=16.00KiB
Metadata, RAID1: total=256.00MiB, used=160.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
RAID 1 (ミラーリング)
sudo btrfs filesystem df /export
で Data, RAID1:
と表示される
$ sudo btrfs filesystem show /dev/sdb
Label: none uuid: ********-****-****-****-************
Total devices 2 FS bytes used 176.00KiB
devid 1 size 2.00GiB used 468.75MiB path /dev/sdb
devid 2 size 2.00GiB used 468.75MiB path /dev/sdc
$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
:
:
sdb btrfs ********-****-****-****-************ 1.7G 0% /export
sdc btrfs ********-****-****-****-************
:
:
$ sudo mount /dev/sdb /export
$ df -h
Filesystem Size Used Avail Use% Mounted on
:
:
/dev/sdb 2.0G 3.4M 1.8G 1% /export
:
:
$ sudo umount /dev/sdb
$ sudo mount /dev/sdc /export
$ df -h
Filesystem Size Used Avail Use% Mounted on
:
:
/dev/sdb 2.0G 3.4M 1.8G 1% /export
:
:
$ sudo btrfs filesystem df /export
Data, RAID1: total=204.75MiB, used=0.00B
System, RAID1: total=8.00MiB, used=16.00KiB
Metadata, RAID1: total=256.00MiB, used=160.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
ファイルシステムのチェック
マウントしたままチェック、チェックはバックグラウンドで行われる、自動的に修復も行われる
- チェック開始
$ sudo btrfs scrub start /export
- 進行状況の確認
$ sudo btrfs scrub status /export
- キャンセル
$ sudo btrfs scrub cancel /mountpoint
アンマウントしてチェック
$ sudo umount /dev/sdb
$ sudo btrfs check
アンマウントしてチェックし、復旧も行う
$ sudo umount /dev/sdb
$ sudo btrfs check --repair
ストレージプールのデバイスを入れ替える
/dev/sdb
(2GB)、 /dev/sdc
(2GB) で構成されているストレージプールで、/dev/sdc
が故障したので、ストレージプールから削除し、デバイスを入れ替えて、再度ストレージプールを構成し直す
- ストレージプールから
/dev/sdc
を削除
$ sudo btrfs device delete /dev/sdc /export
- 一度、ストレージプールのバランスをとる
$ sudo btrfs filesystem balance /export
-
/dev/sdc
を入れ替える - ストレージプールにデバイスを追加する
$ sudo btrfs device add /dev/sdc /export
- ストレージプールのバランスをとる(
/dev/sdb
から/dev/sdc
へデータがコピーされる)
$ sudo btrfs filesystem balance /export
さいごに
かんたんでしたね