読者です 読者をやめる 読者になる 読者になる

異国見聞私書録

異国から見たこと感じたこと気になったこと。そして時折テクノロジーのお話。

BTRFSでRAIDを試す

tech

 久々に技術系のエントリを記載したい。以前にこのような記事を書いたことがあった。

ソフトウェアRAIDであるmdadmを用いて今までRAIDを構築していた。だが何かと取り回しが悪く、OSの再インストールなどで環境が変わるとデバイスの認識がうまくいかないことも多く、不満がたまっていた。

 そこで以前から気になっていたが、なかなか手を出せずにいたBTRFS (B-Tree File System。「バターFS」などとも呼ばれている)を使ってRAIDを作ってみようと、今更ながらではあるが、思いたった。

 BTRFSは開発そのものは10年近く続いているが、実用段階まできたのはここ最近である、Linux用のファイルシステムである。特長についてはwikiに書かれていることを参考にしていただきたいが、筆者が注目したのはファイルシステムレベルで、すでに各種RAID(0, 1, 10, 5, 6)に対応していることだ。(ただ2016年12月現在、RAID5と6についてはまだ不安定らしく使用を推奨されていない)

 しかもこのRAID対応だが、既存のものとは少し異なる。RAIDでアレイを組むには、通常同一のディスク(HDD)サイズで行う必要があるが、BTRFSで使用する場合は容量の異なるHDD同士でも問題ない。既存のRAIDでも容量の異なるHDD同士でも可能ではあるが、最も容量の小さいHDDに合わされてしまうため、無駄な部分が生じてしまう。筆者は以前、この無駄な部分を効率的に使用するため無茶なアレイ構成にしたことがあったが、障害でHDDが壊れたとき、知識が甘かったせいで修復に失敗した苦い経験がある。

 だが、BTRFSではデバイス単位でRAIDアレイを組むことをせず、データを独自のブロック単位で扱うため、無駄なくディスクスペースを使用できる。つまり余っている古いHDDがたくさんあれば、それらを一つにまとめて効率的にスペースを使用できるRAIDを組むことが可能になる。どれだけBTRFS上でHDDを効率的に使用できるか自動計算してくれるサイトがあるので、興味のある方はぜひ参考にしていただきたい。

 BTRFSで扱うブロック単位でRAIDを構築するため、RAID1で構成する場合も別に2つのディスクにこだわる必要はない。筆者の場合、4台のHDDでRAID1 (2TB×2台、750GB×2台、使用可能容量2750GB)を組んでみたが問題なく稼働している。また、本来ならRAID5で組みたいところではある(750GB×4のRAID5+1250GB×2のRAID1=3.5TBが使用可能)が、現在のところ不安定であるので推奨されていない。これについては残念であるが、早く不具合が解消されることを願っている。

BTRFSでのRAID1の組み方

BTRFSでのRAIDアレイ作成は非常に簡単である。まずはbtrfsでフォーマットするため、「btrfs-tools」を導入する。環境は最新のUbuntu系Linuxを想定しています。

sudo apt-get install btrfs-tools

次にBTRFSでデバイスをフォーマット。

sudo mkfs.btrfs /dev/sda1

その後、適当な場所にマウントを行う。下記の例では「/mnt/raid1」。BTRFSの機能の一つである、自動デフラグと圧縮オプションも付与した。

sudo mount -o autodefrag,compress=lzo /dev/sda1 /mnt/raid1 

他のHDDもディスク群(「pool」と言う)に追加する。※「/dev/sdb1」以外もあればそれも追加。

sudo btrfs device add -f /dev/sdb1 /mnt/raid1

追加処理が完了したら、追加したHDD分を確認。

sudo btrfs filesystem show

最後にRAID1に変換。筆者は既存データが入った環境下で試したが、問題なくRAID1へと変換された。ただし、データの変換・分散処理などに非常に時間がかかった。(約20時間)

sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/raid1

他にもよく使用するコマンドに、アレイやディスクの使用率を出すものがある。

sudo btrfs filesystem df /mnt/raid1

sudo btrfs filesystem usage /mnt/raid1

というのも、アロケーション方法が通常のファイルシステムとは異なるため、正確なHDD使用率を知るためにはdfコマンドでは不十分なためである。コマンドの結果表示される詳細情報については後日また紹介したいと思うが、ディスク使用率を知るには別コマンドを併用する必要があることを覚えておきたい。

 

 BTRFSで運用を始めてからまだ障害に遭遇したことがないので、その管理の容易性と信頼性はいかほどかまだ正確なところはわからないが、業務利用に耐えうるものではないが、個人利用では問題ないレベルに来ているのではないだろうか。古く、かつ容量の異なるHDDをいくつか眠らせている人は試してみる価値はあるだろう。