ZFSでRAID10ボリュームの作成とペア追加
コマンド
考え方としては、「mirror RAID1の構成デバイスa RAID1の構成デバイスb RAID1の構成デバイスc …」で出来るRAID 1のvdevを並べてストライピングとする。
ボリュームの作成
zpool create プール名 \
mirror RAID1ペア1のデバイス1 RAID1ペア1のデバイス2 ... RAID1ペア1のデバイスn \
mirror RAID1ペア2のデバイス1 RAID1ペア2のデバイス2 ... RAID1ペア2のデバイスn \
... \
mirror RAID1ペアmのデバイス1 RAID1ペアmのデバイス2 ... RAID1ペアmのデバイスn
RAID1ペアの追加
試した環境
NAS4Free 11.0.0.4
4TB HDD × 6本
手順
こんな感じ↓で4TBのHDDが6本ある。途中でデバイス番号(adaX)が飛んでるのは、2台に重ねた4本収納のホットスワップケースに対し、HDDをそれぞれ3本ずつ挿したから。上下のHDDをRAID-1のペアとする想定。
# camcontrol devlist
<WDC WD40EFRX-68N32N0 82.00A82> at scbus0 target 0 lun 0 (ada0,pass0)
<WDC WD40EFRX-68N32N0 82.00A82> at scbus1 target 0 lun 0 (ada1,pass1)
<WDC WD40EFRX-68N32N0 82.00A82> at scbus2 target 0 lun 0 (ada2,pass2)
<WDC WD40EFRX-68N32N0 82.00A82> at scbus4 target 0 lun 0 (ada4,pass3)
<WDC WD40EFRX-68N32N0 82.00A82> at scbus5 target 0 lun 0 (ada5,pass4)
<WDC WD40EFRX-68N32N0 82.00A82> at scbus6 target 0 lun 0 (ada6,pass5)
GPTで初期化する。
# gpart create -s gpt ada0
# gpart create -s gpt ada1
# gpart create -s gpt ada2
# gpart create -s gpt ada4
# gpart create -s gpt ada5
# gpart create -s gpt ada6
ZFS用にパーティションを切る。ディスク全体を使ってもいいのだが(実際ZFSではそのような使い方が推奨されている)、微妙な容量差で同一公称容量のHDDと交換出来ないと詰むため、敢えてパーティションを切って使っている。
# gpart add -a 4k -s 7800000000 -t freebsd-zfs ada0
# gpart add -a 4k -s 7800000000 -t freebsd-zfs ada1
# gpart add -a 4k -s 7800000000 -t freebsd-zfs ada2
# gpart add -a 4k -s 7800000000 -t freebsd-zfs ada4
# gpart add -a 4k -s 7800000000 -t freebsd-zfs ada5
# gpart add -a 4k -s 7800000000 -t freebsd-zfs ada6
# gpart show
=> 40 7814037088 ada0 GPT (3.6T)
40 7800000000 1 freebsd-zfs (3.6T)
7800000040 14037088 - free - (6.7G)
=> 40 7814037088 ada1 GPT (3.6T)
40 7800000000 1 freebsd-zfs (3.6T)
7800000040 14037088 - free - (6.7G)
=> 40 7814037088 ada2 GPT (3.6T)
40 7800000000 1 freebsd-zfs (3.6T)
7800000040 14037088 - free - (6.7G)
=> 40 7814037088 ada4 GPT (3.6T)
40 7800000000 1 freebsd-zfs (3.6T)
7800000040 14037088 - free - (6.7G)
=> 40 7814037088 ada5 GPT (3.6T)
40 7800000000 1 freebsd-zfs (3.6T)
7800000040 14037088 - free - (6.7G)
=> 40 7814037088 ada6 GPT (3.6T)
40 7800000000 1 freebsd-zfs (3.6T)
7800000040 14037088 - free - (6.7G)
RAID10ボリュームを作成する。後の実験のために2ペア4台しか指定していないが、実際には初めから全てのHDDを使ったほうがいいだろう。
# zpool create zdata mirror ada0p1 ada4p1 mirror ada1p1 ada5p1
# zpool status
pool: zdata
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zdata ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p1 ONLINE 0 0 0
ada4p1 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ada1p1 ONLINE 0 0 0
ada5p1 ONLINE 0 0 0
errors: No known data errors
RAID1のペアを追加してみる。
# zpool add zdata mirror ada2p1 ada6p1
# zpool status
pool: zdata
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zdata ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p1 ONLINE 0 0 0
ada4p1 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ada1p1 ONLINE 0 0 0
ada5p1 ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
ada2p1 ONLINE 0 0 0
ada6p1 ONLINE 0 0 0
errors: No known data errors
念のためashiftを確認。シフト量はvdevごとに存在することに注意。
# zdb -C zdata | grep ashift
ashift: 12
ashift: 12
ashift: 12