2017年4月16日日曜日

Btrfs on XubuntuでRAID10なストレージを作成

 最近は,Raspberrry Pi(armhf)で遊んでいましたが,久しぶりに,x86-64で遊んでみました.
 以前,64GBのUSBメモリを4個利用して,ZFSでRAID-Zなストレージを作成する実験を行いました.その時の結果を踏まえて,現在,3TBのHDDを4台利用した,ファイルサーバを稼働させています.
 
 今回は,Xubuntu上で,BtrfsでRAID10なストレージを作成してみました.以前使ったUSBメモリは全て,他のことに使っているので,新たに,USB HDDを4台用意して,実験&試験運用をしています.

 久しぶりに,x86-64で遊びましたが,armhfと比べると,x86-64はパッケージが豊富で良いですね.サードパーティ製のパッケージだと更に大きな差が出ますし,同じパッケージでも,x86-64の方が,バージョンが新しいこともありますしね.

 まず,システム構成ですが,PC本体は,
 OS:Xubuntu 16.04.2 LTS
 ベアボーン:Shttle DX30(Celeron J3355, Apllo lake)
 システムディスク:Apacer AP060GSC80(M.2 2280, 60GB)

  →/dev/sda
 システムメモリ:ADATA ADDS1600W4G11-R(DDR3L-1600, 4GB)×2個


RAID用ディスクは,
 USBポータブルHDD:WDBU6Y0015BBK-EESN(WD Elements Portable, 1.5TB, USB2.0で使用)×4台

 /dev/sdb~/dev/sde

 Shttle DX30は発売前にYカメラに予約して,年末に購入したものの,色々あって(主にRaspberry Pi関係)しばらく放置していました.最近になって,
システムディスク,システムメモリ,USB HDDを安価に揃えることができましたので,Shttle DX30を稼働させることができました.
 DX30は,安価なベアボーンキットですが,筐体に余裕があるため,拡張性が高いのが良いです.小型なわりに拡張性が高いのは,Shttleのベアボーンの特徴の一つですね.
  システムディスクは,〇mazonで,偶然,見つけたものです.60GBと小容量ですが,システムディスクとしては十分な容量ですし,なにより,約3千円という価格が魅力的でした. 
 システムメモリも,Yカメラで,偶然,見つけたものです.最近は,システムメモリの規格がDDR4に移行している為,DDR3やDDR3Lのものは割高になっているのですが,購入したものは,4GBで約3千円とお買い得品でした.他のものだと,安いところでも3.3千円はしますので,1割程度安価ですし,ポイントを考慮すると,2割程度安価になります.
 Celeron J3355は,メモリチャンネルが2,最大メモリ容量が8GBなので,4GB×2というのは,最適な構成です.ちなみに,他のPCで使っているメモリ(8GB×2)を挿してみましたが,起動しませんでした.
 他のApllo Lakeのマザーボードやベアボーンでは,16GB8GB×2)で動くものもあるようですが,Atom系のApllo Lakeであれば,8GB(4GB×2)もあれば十分でしょう.それ以上あっても,CPUがメモリを使いきれないと思います.
 RAID用ディスク(USB HDD)は,1.5TBという中途半端な容量のためか,他のポータブルHDDと比べると,約6千~7千円と安価(他のメーカーやブランドだと,0.5TBや1TBの価格)ですし,容量単価を考えると,非常にお買い得品でした.色々なところから,少しずつ買い足していったので(購入個数制限があることが多かったです),時間はかかりましたが,先日,4台揃いました.


-----2017/04/30追記
 普通の外付けHDDではなく,ポータブルHDDを使用した理由は,配線を減らすためです.普通の外付けHDDだと,1台に付きUSBケーブルと電源ケーブルの2本が必要ですが,ポータブルHDDなら,USBケーブル1本で済みます.
 今回はHDDを4使ったので,HDDとPCを繋ぐ4本と,PCからの2本(電源ケーブルとLANケーブル)の合計6本で済みます.
-----

 OSのインストールとセットアップは,LIVA XにXubuntuをインストールした時と,ほとんど同じ手順ですが,
Raspberry Piで遊んだ経験から,少し,パッケージを追加しました.sysv-rc-conf, gdebi, dnsutils, cpufrequtils, ethtool, hardinfo, hwinfo, lshw, hdparm, leafpad, mtoolsです.

 これで,準備は整いましたので,Btrfsを使うのに必要なパッケージをインストールします.
  $ sudo apt-get install btrfs-tools

買ってきたままの状態のUSB HDDは,NTFSでフォーマットされています.このままでも,Btrfsでフォーマットできるはずですが,もう少し,スマートにいきましょう.
 まず,アンマウントします.
  $ sudo umount /dev/sdb1
  $ sudo umount /dev/sdc1
  $ sudo umount /dev/sdd1
  $ sudo umount /dev/sde1

次にパーティションテーブルを削除します.
  $ sudo sgdisk -Z /dev/sdb
  $ sudo sgdisk -Z /dev/sdc
  $ sudo sgdisk -Z /dev/sdd
  $ sudo sgdisk -Z /dev/sde


 それでは,RAID10のストレージを作成します.コマンドはZFSよりも簡単です.
  $ sudo mkfs.btrfs -m raid10 -d raid10 -L pool /dev/sd[b-e]

オプションについては,
 -d raid10 -f -m raid10は,RAID10にする(raid1の場合は -d raid1,raid0の場合は -m raid0なので,その両方を指定する)ためのオプションです.
 -L poolは,poolというラベル名にするオプションです.


 作成したストレージをマウントします.今回はマウントポイントを/mnt/raid10とします.
  $ sudo mkdir /mnt/raid10
  $ sudo mount LABEL=pool /mnt/raid10
LABEL=poolの代わりに,
UUIDを使うことも可能です.また,/dev/sdbや/dev/sdeでも可能なようです.

 マウントされたbtrfsファイル・システムのRAID構成を検出してみます.
  $ sudo btrfs filesystem show
  $ btrfs filesystem df -h /mnt/raid10

 上手くマウントできたら,fstabに追記します.私は以下のようにしました.
 LABEL=pool    /mnt/raid10        btrfs    defaults,space_cache    0    2
これで,次回からは,自動的にマウントされます.

 ZFS(ZFS on Linux)もBtrfsも,ストレージを作成する手間は,大きくは違いないと思いますが,
Btrfsの方が,若干,簡単だと思います.違いがあるとすれば,ZFSは,ファイルシステム作成時に指定したマウントポイントに自動的にマウントされるのに対して,Btrfsは,ファイルシステム作成後,fstab等でマウントポイントを指定しないと,自動的にマウントされません.
 むしろ,差があるのは,
RAID5/6でして,ZFSでは,RAID5相当のRAID-Zや,RAID6相当のRAID-Z2が安定して使えるのに対して,Btrfsでは,RAID5/6に不具合があるため,積極的には使えないのが,残念です.そのため,大容量で安定性のあるストレージを作成しようとすると,ZFSを選択することになります.
 ただ,
BtrfsによるRAID10は,RAID-Zと比べて,メモリ使用量が少ないのが利点でしょうか.RAID-Zの場合,ストレージ1TBに対して,システムメモリ1GB程度を用意する方が良いようです.
 BtrfsのRAID5/6のメモリ使用量がどのくらいになるのかは,分かりませんが,今回作成したシステムのメモリ使用量を見る限り,RAID0/1/10であれば,おそらく,Raspberry Piでも使用できると思います.


-----2014/07/17追記
 BtrfsによるRAIDを削除したい場合は,まず,デバイスをアンマウントします.
  $ sudo umount /mnt/raid10
次に,各HDDからファイルシステムを削除します.当然,この瞬間に,内部のデータは消えますので,必要なデータがある場合は,バックアップが必要です.
  $ sudo wipefs /dev/sdb
  $ sudo wipefs /dev/sdc
  $ sudo wipefs /dev/sdd
  $ sudo wipefs /dev/sde
後は,partedなどで,パーティションテーブルやパーティションを作成すれば,普通のHDDとして使えます.
-----

0 件のコメント:

コメントを投稿