Btrfs を練習してみた

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

##Btrfs って、こういうことかな？

実際に使ってみた。

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

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

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


<img width="640" alt="概念図" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176228/07aa1df2-6638-5215-ea3b-25be8e3c3ba5.png">


##やってみるときの手順

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

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

```
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'
```

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

```
# /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について軽く調べた](https://takapi86.hatenablog.com/entry/2019/11/24/180758)