Btrfs を練習してみた


これはなに

Btrfsに初めて触るひと(ぼく)がこの手順で試行錯誤すれば、一定の理解に達する手順書です。
Btrfsはとても便利なファイルシステムと聞いたんだけど、説明を読んでも意味が分からなかった。
subvolume(サブボリューム)、snapshot(スナップショット)、ってなに? 具体的にどう使うの? ていう人向け。
理解が間違っている点があると思います。コメントいただけると幸いです。

Btrfs って、こういうことかな?

実際に使ってみた。

  • サブボリュームを作ったり、スナップショットをとったりしてみた。
  • Btrfsには、サブボリュームとディレクトリを自由に配置できる。
  • サブボリュームのスナップショットをとることができるが、サブボリュームの中のサブボリュームは、スナップショットでは空のディレクトリになる。
  • トップレベルのスナップショットもとることができる。例えば、トップレベルのスナップショットをサブボリュームA内にとることもできる。
  • スナップショットのスナップショットもとれる。
  • スナップショットはどのサブボリューム、どのディレクトリ、どこでも配置できる。

で、これらを任意のマウントポイントにマウントできる。

  • トップレベルのサブボリュームは、マウントできる。
  • 任意のサブボリュームも、マウントできる。
  • スナップショットは、実はサブボリュームの一種なので、マウントできる。

やってみるときの手順

  • 追加のパッケージのインストール

必要なパッケージを追加する

sudo apt install btrfs-progs 
  • 新しいパーティションの作成

/dev/sda の空き領域に、新しいパーティションを作る。

# fdisk /dev/sda

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
( 略 )
Command (m for help): w

  • Btrfsを作成する

/dev/sda3に新しいパーティションを作成したので、そこにBtrfsを作成。Btrfs_partition ラベルを付けた。


# mkfs.btrfs -f -L Btrfs_partition /dev/sda3
Label:              Btrfs_partition
UUID:               9******f-d**3-a**6-1**5-7**********e
Node size:          16384
Sector size:        4096
Filesystem size:    3.63TiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         DUP               1.00GiB
  System:           DUP               8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1     3.63TiB  /dev/sda3

- サブボリューム作成

マウントポイント /mnt/disk_btrfs/ を mkdir し、マウントする。
サブボリューム@nasを作成する。(名前は何でもよい)

# mount -t btrfs  /dev/sda3 /mnt/disk_btrfs/
# btrfs subvolume create /mnt/disk_btrfs/@nas
Create subvolume '/mnt/disk_btrfs/@nas'
  • /etc/fstabに追記して、起動時にマウントするようにする

NAS用に、いろいろオプション付けた。

/etc/fstab
##Btrfs ファイルシステム本体(メンテ用)
UUID=9******f-d**3-a**6-1**5-7**********e /mnt/disk_btrfs      btrfs   defaults,noatime,autodefrag,compress-force=lzo,space_cache        0       0

##Btrfs subvolume @nas()
UUID=9******f-d**3-a**6-1**5-7**********e /mnt/nas      btrfs   defaults,noatime,autodefrag,compress-force=lzo,space_cache,subvol=@nas        0       0

マウントしてみる

# mount -a

/mnt/disk_btrfs と/mnt/nas が読み書きできれば成功。
スナップショットをとってみる。

# btrfs subvolume snapshot @nas/ snapshot_20200414
Create a snapshot of '@nas/' in './snapshot_20200414'

サブボリュームのリストを表示し、スナップショットのIDを調べる

# /mnt/disk_btrfs$ sudo btrfs subvolume list .
ID 257 gen 20 top level 5 path @nas
ID 263 gen 20 top level 5 path snapshot_20200414

/dev/sda3上のID=263のスナップショットを/mnt/testにマウントする

# mkdir /mnt/test
# mount -t btrfs -o subvolid=263 /dev/sda3 /mnt/test/

ファイルシステムの状態を表示

# btrfs filesystem df /mnt/disk_btrfs
Data, single: total=8.00MiB, used=256.00KiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=1.00GiB, used=192.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B

参考

Btrfs - ArchWiki
https://wiki.archlinux.jp/index.php/Btrfs
btrfs - GreenLeaf
https://greenleaf.mydns.jp/pukiwiki/?btrfs
takapiのブログ
Btrfsについて軽く調べた