宮崎悟氏のUbuntuでZFSを使ってみよう第四回「ZFSで使用できるストレージプールを確認しよう(2)」
前回のおさらい
前回はzpoolで基本的なRAID構成であるストライプとミラーが構成できることを説明しました。
さて今回は、zpoolで構築できる、RAID5以上のボリュームについて説明したいと思います。
RAIDZ
RAIDZ(RAIDZ1とも呼びます)はいわゆるRAID5に相当する構成です。データはブロックサイズで分散してディスクに配置し、そのデータブロックのパリティ(誤り訂正補正)を他ディスクに分散して配置します。そのため、構成するディスク1台が故障してもディスクを交換すれば、パリティからデータを復旧することが可能になります。
今回は1GBのファイルを複数用意して、挙動を確認します。
# dd if=/dev/zero of=/tmp/disk01 bs=$((1024*1024)) count=1000
-rw-rw-r-- 1 root root 1000M Jan 4 10:52 /tmp/disk01
# for i in $(seq 2 9) ; do cp /tmp/disk01 /tmp/disk0$i ;done
RAIDZは以下のように作成します。RAID5と同様に、3つ以上のディスクで構成します。
# zpool create tank raidz /tmp/disk0[1-3]
# zpool list tank
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 2.91G 187K 2.91G - 0% 0% 1.00x ONLINE -
# zfs list tank
NAME USED AVAIL REFER MOUNTPOINT
tank 98.6K 1.81G 30.6K /tank
# zpool status tank
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
/tmp/disk01 ONLINE 0 0 0
/tmp/disk02 ONLINE 0 0 0
/tmp/disk03 ONLINE 0 0 0
errors: No known data errors
zpoolでは2.9GBですが、zfsとしては1.8GBが確保されます。zpool/zfs合わせて200MBほどが管理領域として確保されます。
RAIDZ2、RAIDZ3
RAIDZ2はRAID6相当で、RAIDZがパリティ1つなのに対し2つのパリティを持ちます。また、3つのパリティを持つRAIDZ3もあります。RAIDZ2~3のパリティはそれぞれアルゴリズムが異なるものを使用し、パリティが破壊されても他アルゴリズムでの復旧を行うことで、さらに堅牢性をあげています。
RAIDZ2/RAIDZ3は以下のように作成します。RAIDZ2は4本以上、RAIDZ3は5本以上のディスクで構成します。
# zpool destroy tank
# zpool list tank
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 3.88G 624K 3.87G - 0% 0% 1.00x ONLINE -
# zfs list tank
NAME USED AVAIL REFER MOUNTPOINT
tank 109K 1.80G 32.9K /tank
# zpool status tank
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
/tmp/disk01 ONLINE 0 0 0
/tmp/disk02 ONLINE 0 0 0
/tmp/disk03 ONLINE 0 0 0
/tmp/disk04 ONLINE 0 0 0
errors: No known data errors
# zpool destroy tank
# zpool create tank raidz3 /tmp/disk0[1-5]
# zpool list tank
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 4.84G 832K 4.84G - 0% 0% 1.00x ONLINE -
# zfs list tank
NAME USED AVAIL REFER MOUNTPOINT
tank 112K 1.80G 35.1K /tank
# zpool status tank
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz3-0 ONLINE 0 0 0
/tmp/disk01 ONLINE 0 0 0
/tmp/disk02 ONLINE 0 0 0
/tmp/disk03 ONLINE 0 0 0
/tmp/disk04 ONLINE 0 0 0
/tmp/disk05 ONLINE 0 0 0
errors: No known data errors
RAIDZ2、RAIDZ3ともに、zpool上では構成したディスクの本数に比例した容量を持ちますが、zfs上ではRAIDZと同じ1.8GBが有効な容量となります。
RAIDZのストライプ構成
RAIDZ1~3は、複数個束ねてストライプ構成にすることが可能です。いわゆるRAID50やRAID60のような構成です。RAIDZ1~3は、パリティ計算をCPUで行うことからストライプ幅(構成するディスク量)を多くしても遅くなりがちですが、RAIDZ1~3をストライプ構成することにより、高速化することが可能です。
# zpool create tank raidz /tmp/disk0[1-3] raidz /tmp/disk0[4-6] raidz /tmp/disk0[7-9]
# zpool list tank
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 8.72G 193K 8.72G - 0% 0% 1.00x ONLINE -
# sudo zfs list tank
NAME USED AVAIL REFER MOUNTPOINT
tank 103K 5.63G 30.6K /tank
# zpool status tank
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
/tmp/disk01 ONLINE 0 0 0
/tmp/disk02 ONLINE 0 0 0
/tmp/disk03 ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
/tmp/disk04 ONLINE 0 0 0
/tmp/disk05 ONLINE 0 0 0
/tmp/disk06 ONLINE 0 0 0
raidz1-2 ONLINE 0 0 0
/tmp/disk07 ONLINE 0 0 0
/tmp/disk08 ONLINE 0 0 0
/tmp/disk09 ONLINE 0 0 0
errors: No known data errors
これらの構成は、同じRAID構成であればストレージプールに追加可能ですが、ストライプ幅やRAID構成が異なるものを追加することは出来ません。それぞれ、以下のようにエラーが発生します。
# zpool destroy tank
# sudo zpool create tank raidz /tmp/disk0[1-3]
# zpool add tank raidz2 /tmp/disk0[4-7]
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses 1 device parity and new vdev uses 2
# zpool add tank raidz /tmp/disk0[4-7]
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses 3-way raidz and new vdev uses 4-way raidz
# zpool add tank raidz /tmp/disk0[4-6]
今回はストレージプールについて説明いたしたが、いかがだったでしょうか。次回はストレージプールとZFSの関係について説明していきたいと思いますので、お楽しみに。
さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス
https://kusanagi.dht-jpn.co.jp/solutions/dht-oss-consulting/