ZFS でホットスペア! : やっぱり Sun がスキ! やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20070124 2007年 1月 24日 水曜日

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 を引き抜き・交換を 行ってみたいと思います。

  1. 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
    #

  2. 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 の構築は終了です。

  3. c5t1d0 の強制引き抜き
    それでは擬似障害として物理的に pool1 の c5t1d0 を強制的に引き抜きます。

  4. 障害時のステータス確認
    以下が 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
    #

  5. 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
    #

  6. 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
    #

  7. 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

  8. 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 を体験頂ければと思います。

投稿されたコメント:

[Trackback] Solaris 10 11/06 �Dz�ǽ�ˤʤä� ZFS �Ķ��ǤΥۥåȥ��ڥ���...

Posted by Solaris User on 7月月 06日, 2007年 at 01:18 午後 JST #

コメント
  • HTML文法 不許可