2007年 1月 24日 水曜日
やっぱり Sun がスキ!
ZFS でホットスペア!
Solaris 10 11/06 から ホットスペア の機能が
実装された事を以前ご紹介致しました。
そこで、今回は実際に X4500 を使用して、ZFS Hotspare の作成方法と
障害時の Status の変化についてご紹介したいと思います。
まずホットスペアの設定方法ですが、ZFS Pool の構築時に、下記のように spare オプションを使用すれば構築することができます。
- 例 ) ZFS Pool 構築時
# zpool create zfs_pool_test raidz c5t1d0 c4t1d0 c7t1d0 spare c4t0d0 c7t0d0 c6t0d0
もし既存の Pool に対してホットスペアを設定する場合には、 add オプションで既存の pool に対して追加します。
- 例 ) HotSpare 追加時
# zpool add pool_test spare c4t0d0 c7t0d0 c6t0d0
又、他のプールでホットスペアとして指定したデバイスは、複数のプールで共有することも可能です。 ( Global hotspare の様な動きになります。)
- 例 ) Global HotSpare 設定時
# zpool create -f pool1 raidz c5t1d0 c4t1d0 c7t1d0 spare c4t0d0 c7t0d0 c6t0d0
# zpool create -f pool2 raidz2 c5t2d0 c4t2d0 c7t2d0 spare c4t0d0 c7t0d0 c6t0d0
# zpool create -f pool3 mirror c5t3d0 c4t3d0 spare c4t0d0 c7t0d0 c6t0d0
※ 上記の例ではpool1, 2, 3 で同じ Spare Disk を指定します。
以上でホットスペアとしての設定は完了です。
それでは実際に X4500 を使用して ZFS Hotspare の設定と、
擬似障害としてディスク c5t1d0 を引き抜き・交換を
行ってみたいと思います。
- pool の作成
まず zpool コマンドを使用して pool を作成します。
今回は全ての pool で c4t0d0 c7t0d0 c6t0d0 の 3本のディスクを Global Spare disk として指定しています。# zpool status no pools available # # zpool create -f pool1 raidz c5t1d0 c4t1d0 c7t1d0 spare c4t0d0 c7t0d0 c6t0d0 # zpool create -f pool2 raidz2 c5t2d0 c4t2d0 c7t2d0 spare c4t0d0 c7t0d0 c6t0d0 # # zpool status pool: pool1 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool1 ONLINE 0 0 0 raidz1 ONLINE 0 0 0 c5t1d0 ONLINE 0 0 0 c4t1d0 ONLINE 0 0 0 c7t1d0 ONLINE 0 0 0 spares c4t0d0 AVAIL ★←ここに表示されているディスクが c7t0d0 AVAIL 対象のプールに設定されている c6t0d0 AVAIL ホットスペアです。 errors: No known data errors pool: pool2 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 c5t2d0 ONLINE 0 0 0 c4t2d0 ONLINE 0 0 0 c7t2d0 ONLINE 0 0 0 spares c4t0d0 AVAIL ★← pool1 と同じホットスペアです。 c7t0d0 AVAIL c6t0d0 AVAIL errors: No known data errors #
- ZFS File System の作成
次に zfs コマンドを使用して、先程作成した pool に ZFS File system を作成します。# zfs create pool1/raidz # zfs create pool2/raidz2 # # zfs list NAME USED AVAIL REFER MOUNTPOINT pool1 156K 1.11T 42.3K /pool1 pool1/raidz 40.7K 1.11T 40.7K /pool1/raidz pool2 180K 913G 51.0K /pool2 pool2/raidz2 49.0K 913G 49.0K /pool2/raidz2 #
以上で ZFS の構築は終了です。
- c5t1d0 の強制引き抜き
それでは擬似障害として物理的に pool1 の c5t1d0 を強制的に引き抜きます。
- 障害時のステータス確認
以下が c5t1d0 を強制的に引き抜いた後の zpool, cfgadm コマンドの Status です。
c5t1d0 の Disk が UNAVAIL Status に変化し、
c4t0d0 の Sapre Disk が使用されているのが確認できます。# zpool status pool: pool1 state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-D3 scrub: resilver completed with 0 errors on Sat Dec 24 00:49:06 2005 config: NAME STATE READ WRITE CKSUM pool1 DEGRADED 0 0 0 raidz1 DEGRADED 0 0 0 spare DEGRADED 0 0 0 c5t1d0 UNAVAIL 0 64 0 cannot open ★強制引き抜き c4t0d0 ONLINE 0 0 0 ★ホットスペア c4t1d0 ONLINE 0 0 0 c7t1d0 ONLINE 0 0 0 spares c4t0d0 INUSE currently in use c7t0d0 AVAIL c6t0d0 AVAIL errors: No known data errors pool: pool2 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 c5t2d0 ONLINE 0 0 0 c4t2d0 ONLINE 0 0 0 c7t2d0 ONLINE 0 0 0 spares c4t0d0 INUSE in use by pool 'pool1' c7t0d0 AVAIL ★↑pool1 で c4t0d0 が使用 c6t0d0 AVAIL されている事を示しています。 errors: No known data errors # # cfgadm -al Ap_Id Type Receptacle Occupant Condition sata0/0::dsk/c0t0d0 disk connected configured ok sata0/1::dsk/c0t1d0 disk connected configured ok sata0/2::dsk/c0t2d0 disk connected configured ok : 省略 sata2/6::dsk/c4t6d0 disk connected configured ok sata2/7::dsk/c4t7d0 disk connected configured ok sata3/0::dsk/c5t0d0 disk connected configured ok sata3/1 sata-port empty unconfigured ok ★ sata3/2::dsk/c5t2d0 disk connected configured ok sata3/3::dsk/c5t3d0 disk connected configured ok : 省略 usb4/5.2 unknown empty unconfigured ok usb4/5.3 unknown empty unconfigured ok usb4/5.4 unknown empty unconfigured ok #
- c5t1d0 の挿入を実施
次にディスクの交換を行ったと仮定して、先程引き抜いた c5t1d0 のディスクを再度挿入します。
# date; cfgadm -al Sat Dec 24 01:06:46 JST 2005 Ap_Id Type Receptacle Occupant Condition sata0/0::dsk/c0t0d0 disk connected configured ok sata0/1::dsk/c0t1d0 disk connected configured ok : 省略 sata2/7::dsk/c4t7d0 disk connected configured ok sata3/0::dsk/c5t0d0 disk connected configured ok sata3/1 disk connected unconfigured unknown ★ sata3/2::dsk/c5t2d0 disk connected configured ok sata3/3::dsk/c5t3d0 disk connected configured ok : 省略 usb4/5.3 unknown empty unconfigured ok usb4/5.4 unknown empty unconfigured ok #
- c5t1d0 の再認識を実施
挿入した c5t1d0 のディスクを OS 上で認識させます。
# cfgadm -c configure sata3/1::dsk/c5t1d0 # # cfgadm -al Ap_Id Type Receptacle Occupant Condition sata0/0::dsk/c0t0d0 disk connected configured ok sata0/1::dsk/c0t1d0 disk connected configured ok : 省略 sata2/7::dsk/c4t7d0 disk connected configured ok sata3/0::dsk/c5t0d0 disk connected configured ok sata3/1::dsk/c5t1d0 disk connected configured ok ★ sata3/2::dsk/c5t2d0 disk connected configured ok sata3/3::dsk/c5t3d0 disk connected configured ok : 省略 usb4/5.3 unknown empty unconfigured ok usb4/5.4 unknown empty unconfigured ok #
- ZFS 上の Status の確認
OS から c5t1d0 を認識した状態で pool1 に対してファイルの 読み込みや書き込みを行うと、自動的に ONLINE Status に戻ります。
# zpool status pool: pool1 state: ONLINE scrub: resilver completed with 0 errors on Sat Dec 24 00:49:06 2005 config: NAME STATE READ WRITE CKSUM pool1 ONLINE 0 0 0 raidz1 ONLINE 0 0 0 spare ONLINE 0 0 0 c5t1d0 ONLINE 0 0 0 ★Online に変化! c4t0d0 ONLINE 0 0 0 c4t1d0 ONLINE 0 0 0 c7t1d0 ONLINE 0 0 0 spares c4t0d0 INUSE currently in use c7t0d0 AVAIL c6t0d0 AVAIL errors: No known data errors pool: pool2 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 c5t2d0 ONLINE 0 0 0 c4t2d0 ONLINE 0 0 0 c7t2d0 ONLINE 0 0 0 spares c4t0d0 INUSE in use by pool 'pool1' c7t0d0 AVAIL c6t0d0 AVAIL errors: No known data errors #
もし暫く経っても Online Status に変わらない場合には、 下記のコマンドを実施します。# zpool clear pool1 c5t1d0 # zpool online pool1 c5t1d0
- ZFS の Spare を戻す
最後に c4t0d0 を Spare Disk として元に戻します。
( 現在はまだ c5t1d0, c4t0d0 の両方のディスクに対して読み書きしています )# zpool detach pool1 c4t0d0
これで Status が正常に戻りました。# date; zpool status Sat Dec 24 01:12:21 JST 2005 pool: pool1 state: ONLINE scrub: resilver completed with 0 errors on Sat Dec 24 00:49:06 2005 config: NAME STATE READ WRITE CKSUM pool1 ONLINE 0 0 0 raidz1 ONLINE 0 0 0 c5t1d0 ONLINE 0 0 0 c4t1d0 ONLINE 0 0 0 c7t1d0 ONLINE 0 0 0 spares c4t0d0 AVAIL c7t0d0 AVAIL c6t0d0 AVAIL errors: No known data errors pool: pool2 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 c5t2d0 ONLINE 0 0 0 c4t2d0 ONLINE 0 0 0 c7t2d0 ONLINE 0 0 0 spares c4t0d0 AVAIL c7t0d0 AVAIL c6t0d0 AVAIL errors: No known data errors #
以上で ZFS ホットスペアの構築と、ディスクの交換が完了しました。
皆様もご覧頂けたと思いますが、ホットスペアの設定自体は zpool コマンドに
spare オプションを加えるだけの為、管理が非常に簡単です。
(「操作が簡単」は ZFS のコンセプトでもあります )
又、ホットスペアの他にも Solaris 10 11/06 から加えられた機能の中に、 RAID-Z2 ( ダブルパリティによる RAID-6 相当の機能 ) がありますが、 ホットスペアと RAID-Z2 を組み合わせることにより、さらにシステムの冗長性を 高める事が可能になります。
まだ OS 領域に ZFS を利用できませんが、近い将来利用できるようになると思いますので、 是非、今のうちから ZFS を体験頂ければと思います。
Posted at 03:28午後 1 24, 2007 by Naoyuki Yamada in Sun | 投稿されたコメント[1]
Posted by Solaris User on 7月月 06日, 2007年 at 01:18 午後 JST #