Ubuntu15.04でBtrfsによるRAID5、RAID6を試してみる。


Kernel3.19でBtrfsによるRAID5/6のリビルドが出来るようになったらしいので、実用段階に達しているのか早速試してみたいと思います。

一応、先に書いておくと、まだ人柱絶賛募集中のステータスらしい事は先に注釈として書いておきます。

Btrfs関係のパッケージインストール

sysstatはHDDの性能情報を見るために入れています。

sudo apt-get install btrfs-tools sysstat

Btrfsの作成、確認、削除コマンドの事前紹介

最後まで読むのが面倒な人へ。。。作成、確認、削除の紹介です。RAIDから脱落したHDDの差し替えは、事前確認があるので、本記事中にて紹介しています。

# RAID6で作成
mkfs.btrfs -d raid6 -m raid6 -L btrfsLabel /dev/sd[bcdef]

# 確認コマンド
btrfs fi show
btrfs fi df /mnt/btrfs

# マウント
mkdir /mnt/btrfs
mount /dev/sdb /mnt/btrfs/

# サブボリューム作成
btrfs subvolume create /mnt/btrfs/sub1
btrfs subvolume create /mnt/btrfs/sub2
btrfs sub list -p /mnt/btrfs/

# 削除
umount /mnt/btrfs
wipefs -o 0x10040 /dev/sd[bcdef]

Btrfsの作成

今回は、vmware上でテストを実施しました。まずは/dev/sdb~dを用意して、RAID5を構成してみます。

mkfs.btrfs -d raid5 -m raid5 -L btrfsLabel /dev/sd[bcd]
mkdir /mnt/btrfs
mount /dev/sdb /mnt/btrfs/

Btrfsファイルシステムの確認

作成したBtrfsを確認してみます。

btrfs filesystem show
# Label: 'btrfsLabel'  uuid: aded1759-c57e-419f-a940-26fa61ab192d
#        Total devices 3 FS bytes used 112.00KiB
#        devid    1 size 3.00GiB used 642.38MiB path /dev/sdb
#        devid    2 size 3.00GiB used 622.38MiB path /dev/sdc
#        devid    3 size 3.00GiB used 622.38MiB path /dev/sdd

dfコマンド実行結果。3GB×3のRAID5構成なので、トータルで6GB程度で認識されています。問題なさそうですね。ただし、dfコマンドの結果で、1k-blocksの値は3GB×3そのままの容量になっているので、そこは読み替える必要があるようです。

df
# Filesystem                  1K-blocks    Used Available Use% Mounted on
# udev                          2007852       0   2007852   0% /dev
# tmpfs                          403908    5848    398060   2% /run
# /dev/mapper/ubuntu--vg-root  26453884 1269692  23817360   6% /
# tmpfs                         2019524       0   2019524   0% /dev/shm
# tmpfs                            5120       0      5120   0% /run/lock
# tmpfs                         2019524       0   2019524   0% /sys/fs/cgroup
# /dev/sda1                      240972   42694    185837  19% /boot
# tmpfs                          403908       0    403908   0% /run/user/1000
# /dev/sdb                      9437184 3605808   2645248  58% /mnt/btrfs

ddコマンドでゼロデータを書き込んで、速度を確認する

3G×3HDDでRAID5構成にしたBtrfsに対して、ddコマンドで取りあえず書き込んでみます。結果、5.8GBコピーした所で、空き容量が無いと言う事で止まりました。HDD容量は、RAID5構成なので、パリティがHDD1台分、総容量はHDD2台分の6Gが上限なので、限界まで書き込んでも変な問題を引き起こさない事が確認出来ました。

それにしても、vmware上で565MB/秒って、やけに速いんですが・・・・

dd if=/dev/zero of=./test.img bs=100M
# dd: `./test.img' の書き込みエラー: デバイスに空き領域がありません
# 55+0 レコード入力
# 54+0 レコード出力
# 5759303680 バイト (5.8 GB) コピーされました、 10.1855 秒、 565 MB/秒

df
# Filesystem                  1K-blocks    Used Available Use% Mounted on
# udev                          2007852       0   2007852   0% /dev
# tmpfs                          403908    5848    398060   2% /run
# /dev/mapper/ubuntu--vg-root  26453884 1269692  23817360   6% /
# tmpfs                         2019524       0   2019524   0% /dev/shm
# tmpfs                            5120       0      5120   0% /run/lock
# tmpfs                         2019524       0   2019524   0% /sys/fs/cgroup
# /dev/sda1                      240972   42694    185837  19% /boot
# tmpfs                          403908       0    403908   0% /run/user/1000
/dev/sdb                      9437184 5647008       128 100% /mnt/btrfs

起動時にBtrfsの領域をマウントするように設定する

/etc/fstabに設定を追加します。その際にbtrfsでは、設定の仕方が幾つかあるようです。1つ目は、BtrfsでRAID構成になっているデバイスファイル/dev/sdb、/dev/sdc、/dev/sddを全部指定するパターン。もう一つはUUIDを指定するパターン。RedhatのマニュアルではUUIDを指定した方が安全性が高いと記載しているので、本設定例でもUUIDを設定する方式で紹介します。

# UUIDを確認する。
sudo btrfs filesystem show
Label: 'btrfsLabel'  uuid: aded1759-c57e-419f-a940-26fa61ab192d
        Total devices 3 FS bytes used 601.00MiB
        devid    1 size 3.00GiB used 642.38MiB path /dev/sdb
        devid    2 size 3.00GiB used 622.38MiB path /dev/sdc
        devid    3 size 3.00GiB used 622.38MiB path /dev/sdd

sudo vi /etc/fstab

/etc/fstabに設定する内容。UUIDは上記のbtrfs filesystem showで表示したものを設定してください。

UUID=aded1759-c57e-419f-a940-26fa61ab192d /mnt/btrfs    btrfs   defaults        0       2

HDDが1本故障した場合をシュミレーションしてみる

VmwareでHDDを用意しているので、そのうち、/dev/sddをOS起動中に削除してみました。

btrfs filesystem show
# Label: 'btrfsLabel'  uuid: aded1759-c57e-419f-a940-26fa61ab192d
#        Total devices 3 FS bytes used 601.00MiB
#        devid    1 size 3.00GiB used 642.38MiB path /dev/sdb
#        devid    2 size 3.00GiB used 622.38MiB path /dev/sdc
#        devid    3 size 3.00GiB used 622.38MiB path /dev/sdd
#
# warning, device 3 is missing
# warning devid 3 not found already
# Check tree block failed, want=37748736, have=65536
# Check tree block failed, want=37748736, have=65536
# read block failed check_tree_block
# Couldn't read tree root
# Btrfs v3.17

btrfs filesystem showコマンドの実行結果が上記。read block failed check_tree_blockと言うエラーが出ています。

# 事前にステータス確認しておく。まだ、復旧コマンドを叩いていない状態。
btrfs replace status -1 /mnt/btrfs/
# Never started

# 3番目のディスクを/dev/sdeで置き換える
btrfs replace start 3 /dev/sde /mnt/btrfs/

# ステータス確認を何度か実施。 -1 オプションを指定しないと、
# 終わるまでずっとステータス表示が更新され続ける。
btrfs replace status -1 /mnt/btrfs/
# 10.2% done, 0 write errs, 0 uncorr. read errs
btrfs replace status -1 /mnt/btrfs/
# Started on 25.Apr 18:01:44, finished on 25.Apr 18:02:15, 0 write errs, 0 uncorr. read errs

# ステータスを確認してみる。
btrfs filesystem show
# Label: 'btrfsLabel'  uuid: aded1759-c57e-419f-a940-26fa61ab192d
#         Total devices 3 FS bytes used 601.00MiB
#         devid    1 size 3.00GiB used 642.38MiB path /dev/sdb
#         devid    2 size 3.00GiB used 622.38MiB path /dev/sdc
#         devid    3 size 3.00GiB used 622.38MiB path /dev/sde
#
# Btrfs v3.17

# 一応、syslogにもログが出るので確認しておく
grep dev_replace /var/log/syslog
# Apr 25 18:01:44 ubuntu kernel: [ 1388.199300] BTRFS: dev_replace from /dev/sdd (devid 3) to /dev/sde started
# Apr 25 18:02:15 ubuntu kernel: [ 1419.516462] BTRFS: dev_replace from /dev/sdd (devid 3) to /dev/sde finished

無事にBtrfsの領域をマウントしたまま故障したHDDを交換できました。中身のデータも無事でした。

Btrfsで作ったRAIDセットを削除する

下記で削除します。元ネタはこちら

umount /mnt/btrfs
wipefs -o 0x10040 /dev/sd[bcdef]
# wipefs: /dev/sdb: offset 0x10040 not found
# wipefs: /dev/sdc: offset 0x10040 not found
# wipefs: /dev/sdd: offset 0x10040 not found
# wipefs: /dev/sde: offset 0x10040 not found
# wipefs: /dev/sdf: offset 0x10040 not found

 

速度比較

Vmware上のHDDで恐縮ですが、ddでの書き込み速度を載せておきます。RAID6がなんだか遅いですね。今度、実ディスクを購入する事があれば、改めて結果を記載しておきます。

RAID構成 DD書き込み
RAID0(3G×5) 532 MB/秒
RAID5(3G×5) 452 MB/秒
RAID6(3G×5) 232 MB/秒

不明点

作成した後に、balance -dconvert -mconvertすると Data single、System single、Metadata singleが無くなるのですが、これは一体何だろう・・・知っている人がいればコメント頂けると嬉しいです。

mkfs.btrfs -d raid6 -m raid6 -L btrfsLabel /dev/sd[bcdef]
mount /dev/sdb /mnt/btrfs/

btrfs fi df /mnt/btrfs
# Data, single: total=8.00MiB, used=0.00B
# Data, RAID6: total=921.56MiB, used=384.00KiB
# System, single: total=4.00MiB, used=0.00B
# System, RAID6: total=9.56MiB, used=16.00KiB
# Metadata, single: total=8.00MiB, used=0.00B
# Metadata, RAID6: total=921.56MiB, used=112.00KiB
# GlobalReserve, single: total=16.00MiB, used=0.00B

btrfs fi balance start -dconvert=raid6 -mconvert=raid6 /mnt/btrfs
# Done, had to relocate 6 out of 6 chunks

btrfs fi df /mnt/btrfs
# Data, RAID6: total=1.50GiB, used=448.00KiB
# System, RAID6: total=96.00MiB, used=16.00KiB
# Metadata, RAID6: total=288.00MiB, used=112.00KiB
# GlobalReserve, single: total=16.00MiB, used=0.00B

Btrfsでディスク作成等をやってみた感想

リビルドを含め、使ってみた範囲では動いていますが、kernel3.19ではまだ実運用は怖いので、テスト目的での使用に留めるのが良いと思われます。

参考ページ

タグ付けされた , . ブックマークする へのパーマリンク.

コメントを残す

メールアドレスが公開されることはありません。