ZFS ストレージプールを RAID-Z で作る
Solaris 11 をインストールした HP MicroServer ですが、2.5TB の HDD もなんと 3 本も一緒にいただいていたので、これを使って ZFS ストレージプール (zpool) を作ります。
せっかくなので PC ではなかなか味わえない、ホットスワップでの接続を試してみました。
サーバーの電源を入れたまま 3.5 インチベイの左から挿していきますが、挿す前に HDD のラベルを写真に撮ってシリアルをメモします。
RAID-Z で組むので、HDD が 1 本故障しても大丈夫ですが、交換時にどの HDD を抜いたらいいかシリアルで区別する必要があるためです。
HDD を奥まで挿し込むと、通電して回転ノイズが聞こえてきます。すべて挿したら SSH で接続して操作していきます。
iostat コマンドではまだ認識されていません。-E で全デバイスの統計情報を出し、-n で物理デバイス名 cXtYdZ 形式で表示しています。
$ iostat -En
c1t5d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: ATA Product: INTEL SSDSA2CW08 Revision: 0362 Serial No:
Size: 80.03GB <80026361856 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 28 Predictive Failure Analysis: 0 Non-Aligned Writes: 0
ここでは直接関係ありませんが、Illegal Request があるのが気になります。。今度調べよう。
「c1t5d0」というディスク (SSD) のみが見えていることがわかります。今度は cfgadm コマンドを叩きます。すると…
$ cfgadm
Ap_Id Type Receptacle Occupant Condition
sata0/0 disk connected unconfigured unknown
sata0/1 disk connected unconfigured unknown
sata0/2 disk connected unconfigured unknown
sata0/3 sata-port empty unconfigured ok
sata0/4 sata-port empty unconfigured ok
sata0/5::dsk/c1t5d0 disk connected configured ok
(後略)
sata0/0 ~ sata0/2 までが、ディスクが繋がっているけど未設定になっています。sata0/5 は dsk/c1t5d0 なので、先ほど見た SSD であることがわかります。
今度は root で cfgadm -c configure コマンドを叩き、configure していきます。
# cfgadm -c configure sata0/0
# cfgadm -c configure sata0/1
# cfgadm -c configure sata0/2
もう一度 cfgadm を叩くと以下のようになりました!
$ cfgadm | grep sata0
sata0/0::dsk/c1t0d0 disk connected configured ok
sata0/1::dsk/c1t1d0 disk connected configured ok
sata0/2::dsk/c1t2d0 disk connected configured ok
sata0/3 sata-port empty unconfigured ok
sata0/4 sata-port empty unconfigured ok
sata0/5::dsk/c1t5d0 disk connected configured ok
iostat コマンドでもバッチリ出ます。
$ iostat -En
c1t5d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: ATA Product: INTEL SSDSA2CW08 Revision: 0362 Serial No:
Size: 80.03GB <80026361856 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 29 Predictive Failure Analysis: 0 Non-Aligned Writes: 0
c1t0d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: ATA Product: WDC WD25EZRX-00M Revision: 0A80 Serial No: WD-WCAWZ*******
Size: 2500.50GB <2500495958016 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0 Non-Aligned Writes: 0
c1t1d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: ATA Product: WDC WD25EZRX-00M Revision: 0A80 Serial No: WD-WCAWZ*******
Size: 2500.50GB <2500495958016 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0 Non-Aligned Writes: 0
c1t2d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: ATA Product: WDC WD25EZRX-00M Revision: 0A80 Serial No: WD-WCAWZ*******
Size: 2500.50GB <2500495958016 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0 Non-Aligned Writes: 0
ここまでくればこっちのものですが、ここで表示されたデバイス名とシリアルを関連付けておきます。これで万一の故障交換時も、間違いなくディスクを選ぶことができます。
zpool を見ておきます。
$ zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 74G 9.50G 64.5G 12% 1.00x ONLINE -
zpool create で、raid-z の zpool を作成します (root)。
# zpool create tank raidz c1t0d0 c1t1d0 c1t2d0
もう一度 zpool を見ると出来上がっていることがわかります。
$ zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 74G 9.50G 64.5G 12% 1.00x ONLINE -
tank 6.81T 1.55M 6.81T 0% 1.00x ONLINE -
容量ですが、1 本あたり 2500495958016 bytes なので、
2500495958016 / 1024^4 * 3 = 6.822563476860523
ということで、6.81TB と表示されています。これはパリティを含んだ総容量ですね。
zfs list で見ると、パリティ分が減っていることがわかります。
$ zfs list tank
NAME USED AVAIL REFER MOUNTPOINT
tank 671K 4.47T 192K /tank
zpool status でもバッチリです!やったぜ!
$ zpool status tank
pool: tank
state: ONLINE
scan: scrub repaired 0 in 1s with 0 errors on Mon Feb 27 00:53:41 2017
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
c1t0d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
errors: No known data errors
※戯れに scrub してみてます。何も入ってないので一瞬で終わりました。