CentOS 7 - 自宅のNASを ZFS から Btrfs に乗り換えた。

以前、CentOS 7 にZFSをインストールする方法を紹介しましたが Yum update のたびに不具合が発生したので Btrfs(バター エフエス)に乗り換えることにしました。

ZFSほど、便利な機能やコマンドはなさそうですが私の場合はBtrfsで十分そうです。

 

本投稿では、CentOS 7 に Btrfs をインストールする方法と利用方法を紹介します。

 

目次

1.Btrfsをインストール

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

3.ディスクをマウントする方法

4.使用済み・空き容量の確認方法

5.RAID機能

 

作業環境
OS: CentOS Linux release 7.1.1503 (Core)
仮想化: KVM(MEM 4G,CPU 2)

※物理サーバでも、本投稿で紹介する手順で動作することを確認しています。

 

1.Btrfsをインストール

 

ちなみにBtrfsとは

Btrfs は Linux 用の全く新しいコピーオンライト (COW) のファイルシステムです。先進的な機能を実装することを目指しつつ、障害耐性を持ち簡単に管理できることに焦点が置かれています。Btrfs は Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO やその他多くの人々によって共同で開発されており GPL でライセンスされていて誰でも貢献できるように開かれています。

Btrfs Wiki 参照

 

Btrfsをインストール

Btrfs は、Yumでインストールできます。CentOS 7 では、インストールが済んでいる可能性が高いと思います。

# yum install btrfs-progs

以上でインストールは、終わりです。

 

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

 

ファイルシステムを作成

まず、Btrfsファイルシステムを作成するために必要なディスクを追加しましょう。以下の場合、sdb が新しく追加したディスクです。

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    253:0    0   20G  0 disk
|-sda1 253:1    0  500M  0 part /boot
|-sda2 253:2    0 15.5G  0 part /
`-sda3 253:3    0    4G  0 part [SWAP]
sdb    253:16   0   30G  0 disk

パーティション分けされていないディスク sdb(30G)を確認できました。

 

Btrfsファイルシステムを作成します。作成には、「mkfs.btrfs」コマンドを使います。また、「-L」オプションでラベル名を指定することをおススメします。

# mkfs.btrfs -L single -f /dev/sdb
Btrfs v3.16.2
See http://btrfs.wiki.kernel.org for more information.

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
fs created label (null) on /dev/sdb
        nodesize 16384 leafsize 16384 sectorsize 4096 size 30.00GiB

 

Btrfsコマンドで、作成したBtrfsファイルシステムを確認しましょう。

# btrfs filesystem show
Label: 'single'  uuid: 7d84be73-b0a1-4f03-8bd6-149a68650098
        Total devices 1 FS bytes used 112.00KiB
        devid    1 size 30.00GiB used 2.04GiB path /dev/sdb

Btrfs v3.16.2

正常にファイルシステムが作成されたことを確認できました。

 

 

3.ディスクをマウントする方法

 

マウントオプション

まず、ディスクマウントで重要なマウントオプションについてです。以下は、AarchlinuxのWikiでオススメしているマウントオプションです。

 

・SSD の Btrfs で出来る限りパフォーマンスを引き出したい場合

noatime,discard,ssd,compress=lzo,space_cache

 

・HDD の Btrfs で出来る限り容量を削減したい場合

noatime,autodefrag,compress-force=lzo,space_cache

 

使用例。マウントオプションは「-o」オプションの後に指定します。

# mount -t btrfs -o noatime,autodefrag,compress-force=lzo,space_cache [device] [position]

 

ディスクマウント

以下は、ディスクをマウントする前の状態です。

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda2         16G  917M   15G    6% /
devtmpfs         489M     0  489M    0% /dev
tmpfs            497M     0  497M    0% /dev/shm
tmpfs            497M   19M  478M    4% /run
tmpfs            497M     0  497M    0% /sys/fs/cgroup
/dev/sda1        497M  113M  385M   23% /boot

 

では、mountコマンドで「/dev/sdb」を「/mnt」にマウントします。

# mount -t btrfs -o noatime,autodefrag,compress-force=lzo,space_cache /dev/sdb /mnt

 

以下がディスクをマウントした後の状態です。

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda2         16G  917M   15G    6% /
devtmpfs         489M     0  489M    0% /dev
tmpfs            497M     0  497M    0% /dev/shm
tmpfs            497M   19M  478M    4% /run
tmpfs            497M     0  497M    0% /sys/fs/cgroup
/dev/sda1        497M  113M  385M   23% /boot
/dev/sdb          30G  512K   28G    1% /mnt

「/mnt」に「/dev/sdb」がマウントされていることが確認できました。

 

fstabを使ったディスクマウント

mountコマンドを使う手動のディスクマウント以外に、「/etc/fstab」を使い自動でディスクマウントができます。

「/etc/fstab」を使った自動ディスクマウントには、ディスクの「UUID」か「Label」が必要です。どちらも、Btrfsコマンドで確認できます。

# btrfs filesystem show
Label: 'single'  uuid: 7d84be73-b0a1-4f03-8bd6-149a68650098
        Total devices 1 FS bytes used 384.00KiB
        devid    1 size 30.00GiB used 2.04GiB path /dev/sdb

Btrfs v3.16.2

 

ラベル名かUUIDがわかったら、fstab の最終行に以下のように登録します。

・ラベル名で fstab に登録する場合

# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Oct 10 05:18:21 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f78ba260-4069-4e53-a22e-a4a00a2e2b88 /                       xfs     defaults        0 0
UUID=db34cc34-29eb-49ab-a15f-f5b165388eec /boot                   xfs     defaults        0 0
UUID=eeaa943e-4edd-4c80-891d-0bbbbeef319c swap                    swap    defaults        0 0
LABEL=single /mnt btrfs noatime,autodefrag,compress-force=lzo,space_cache 0 0

 

・UUID で fstab に登録する場合

#
# /etc/fstab
# Created by anaconda on Thu Jun 11 10:45:49 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=0c8076f6-16fa-479d-8869-0c66bd1ae641 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
UUID=7d84be73-b0a1-4f03-8bd6-149a68650098 /mnt btrfs noatime,autodefrag,compress-force=lzo,space_cache 0 0

 

サーバを再起動して確認してみましょう。正しくfstabに登録できていれば、ディスクマウントされた状態でOSが起動するはずです。

 

 

4.使用済み・空き容量の確認方法

 

使用済み・空き容量の確認方法

使用済み・空き容量の確認方法を3つ紹介します。

①.使用済み容量を確認

# btrfs filesystem show /dev/sdb
Label: 'single'  uuid: a2c19c42-e54c-48f4-8f4b-3c3bf17a9d53
        Total devices 1 FS bytes used 477.69MiB
        devid    1 size 30.00GiB used 3.04GiB path /dev/sdb

Btrfs v3.16.2

②.①より詳細な使用済み容量を確認

# btrfs filesystem df /mnt
Data, single: total=1.01GiB, used=486.60MiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.00GiB, used=20.02MiB
Metadata, single: total=8.00MiB, used=0.00
GlobalReserve, single: total=16.00MiB, used=0.00

③.使用済み容量と空き容量を確認

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda2         16G  841M   15G    6% /
devtmpfs         489M     0  489M    0% /dev
tmpfs            497M     0  497M    0% /dev/shm
tmpfs            497M  6.6M  491M    2% /run
tmpfs            497M     0  497M    0% /sys/fs/cgroup
/dev/sda1        497M  113M  385M   23% /boot
/dev/sdb          30G  527M   28G    2% /mnt

 

 

5.RAID機能

 

RAIDデバイスの作成(RAID1)

RAID1には、ディスクが2つ(sdb,sdc)必要です。

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    253:0    0   20G  0 disk
|-sda1 253:1    0  500M  0 part /boot
|-sda2 253:2    0 15.5G  0 part /
`-sda3 253:3    0    4G  0 part [SWAP]
sdb    253:16   0   30G  0 disk
sdc    253:32   0   30G  0 disk

 

2つのディスク確認できたら、Btrfsファイルシステムを作成します。このとき、RAIDレベルは「-d」オプションの後で指定します。

# mkfs.btrfs -L RAID1 -d raid1 -f /dev/sdb /dev/sdc
Btrfs v3.16.2
See http://btrfs.wiki.kernel.org for more information.

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
adding device /dev/sdc id 2
fs created label RAID1 on /dev/sdb
        nodesize 16384 leafsize 16384 sectorsize 4096 size 60.00GiB

 

Btrfsコマンドで、RAIDデバイスが作成できているか確認しましょう。

# btrfs filesystem show
Label: 'RAID1'  uuid: dc363a6e-1b21-4d1b-ad9d-2b6c626ab3e7
        Total devices 2 FS bytes used 112.00KiB
        devid    1 size 30.00GiB used 2.03GiB path /dev/sdb
        devid    2 size 30.00GiB used 2.01GiB path /dev/sdc

Btrfs v3.16.2

fstabに登録しておきましょう。

# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Oct 10 05:18:21 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f78ba260-4069-4e53-a22e-a4a00a2e2b88 /                       xfs     defaults        0 0
UUID=db34cc34-29eb-49ab-a15f-f5b165388eec /boot                   xfs     defaults        0 0
UUID=eeaa943e-4edd-4c80-891d-0bbbbeef319c swap                    swap    defaults        0 0
LABEL=RAID1 /mnt btrfs noatime,autodefrag,compress-force=lzo,space_cache 0 0

 

 

以上、終わり。