Btrfsについて軽く調べた

Btrfsとは

Btrfsは、フォールトトレランス、管理、データ保護など、企業のストレージ システムでよく見られた障害に対処することを目的に、複数の組織(Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATOなど)によって、開発されたファイルシステム

SUSE Linux Enterprise Server 12 で採用されているらしいです。

https://www.synology.com/ja-jp/dsm/Btrfs https://wiki.archlinux.jp/index.php/Btrfs

Btrfsの特徴

  • 最大ファイルサイズは16EiB
  • コピーオンライト
  • ディスク容量の効率的な利用
  • iノードの動的割り当て
  • ストレージプール対応
  • スナップショット機能
  • チェックサムによる完全性の保証
  • 効率的な増分バックアップ
  • オンラインデフラグ

まず使用できるか確認してみる

modprobe btrfs
grep btrfs /proc/filesystems
    btrfs

Btrfsファイルシステムを作成

前回と同じく、家に転がっていた4GのHDDを使います。

ディスク /dev/sdb: 4 GiB, 4327464960 バイト, 8452080 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子:

mkfs.btrfs または mkfs -t btrfs で、作成します。

今回は、/dev/sdb1 /dev/sdb2 まとめて、Btrfsファイルシステムを作成します。

sudo mkfs -t btrfs /dev/sdb1 /dev/sdb2
btrfs-progs v4.15.1
See http://btrfs.wiki.kernel.org for more information.

Label:              (null)
UUID:               911d6614-d117-44b2-93a5-4a531e7938ec
Node size:          16384
Sector size:        4096
Filesystem size:    4.03GiB
Block group profiles:
  Data:             RAID0           412.50MiB
  Metadata:         RAID1           206.25MiB
  System:           RAID1             8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1     1.95GiB  /dev/sdb1
    2     2.08GiB  /dev/sdb2
lsblk
sdb      8:16   0     4G  0 disk
├─sdb1   8:17   0     2G  0 part /media/takapi/911d6614-d117-44b2-93a5-4a531e7938ec
└─sdb2   8:18   0   2.1G  0 part
df -h
/dev/sdb1       4.1G   17M  3.5G   1% /media/takapi/911d6614-d117-44b2-93a5-4a531e7938ec

どうやら、sdb1 の方にまとまっているっぽいです。

マウントする

特に指定無しで、マウントできました。

sudo mount /dev/sdb1 /mnt/disk/
sudo bash -c "echo test > /mnt/disk/test.txt" # 一応、読み書きできるか確認
cat /mnt/disk/test.txt
test
sudo umount /dev/sdb1

ファイルシステムのチェック

fsckコマンドを実行すると、btrfs check を使ってくれとのこと。

sudo fsck /dev/sdb1
fsck from util-linux 2.31.1
If you wish to check the consistency of a BTRFS filesystem or
repair a damaged filesystem, see btrfs(8) subcommand 'check'.

チェックできました。

sudo btrfs check /dev/sdb1
Checking filesystem on /dev/sdb1
UUID: 911d6614-d117-44b2-93a5-4a531e7938ec
checking extents
checking free space cache
checking fs roots
checking csums
checking root refs
found 262144 bytes used, no error found
total csum bytes: 0
total tree bytes: 131072
total fs tree bytes: 32768
total extent tree bytes: 16384
btree space waste bytes: 123655
file data blocks allocated: 131072
 referenced 131072

サブボリューム

Btrfsでは、ファイルシステムをサブボリュームという単位で分割することができます。

作成

sudo btrfs subvolume create /mnt/disk/sub1
Create subvolume '/mnt/disk/sub1'
sudo btrfs subvolume create /mnt/disk/sub2
Create subvolume '/mnt/disk/sub2'

一覧表示

sudo btrfs subvolume list /mnt/disk/
ID 260 gen 15 top level 5 path sub1
ID 261 gen 16 top level 5 path sub2

削除

sudo btrfs subvolume delete /mnt/disk/sub1
Delete subvolume (no-commit): '/mnt/disk/sub1'
sudo btrfs subvolume delete /mnt/disk/sub2
Delete subvolume (no-commit): '/mnt/disk/sub2'

サブボリュームのマウント

個々のサブボリュームをマウントする場合は、IDを使います。

sudo btrfs subvolume list /mnt/disk/
ID 262 gen 19 top level 5 path mount_data
sudo mount -t btrfs -o subvolid=262 /dev/sdb1 /mnt/disk/
mount | grep sdb1
/dev/sdb1 on /mnt/disk type btrfs (rw,relatime,space_cache,subvolid=262,subvol=/mount_data)
df -h | grep sdb1
/dev/sdb1       4.1G   17M  3.5G   1% /mnt/disk

スナップショット

サブボリューム単位でスナップショットもとれます。

sudo touch /mnt/disk/test.txt
sudo btrfs subvolume snapshot /mnt/disk/ /mnt/disk/snapshot
Create a snapshot of '/mnt/disk/' in '/mnt/disk/snapshot/disk'
sudo ls /mnt/disk/snapshot
disk
sudo ls /mnt/disk/snapshot/disk/
snapshot  test.txt

ファイルシステムの情報の表示

ファイルシステムの情報を表示する

sudo btrfs filesystem df /mnt/disk/
Data, RAID0: total=412.50MiB, used=128.00KiB
System, RAID1: total=8.00MiB, used=16.00KiB
Metadata, RAID1: total=206.25MiB, used=160.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B

ファイルシステムの使用状況を表示する

sudo btrfs filesystem df /mnt/disk/
Data, RAID0: total=412.50MiB, used=128.00KiB
System, RAID1: total=8.00MiB, used=16.00KiB
Metadata, RAID1: total=206.25MiB, used=160.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B

参考

https://www.slideshare.net/fj_staoru_takeuchi/btrfs-part1