2007年 1月 30日 火曜日
やっぱり Sun がスキ!
Sunグッズ紹介(8)
Sun のロゴ入りグッズ紹介の第八弾です。
・Sun ロゴ入りフォトスタンド
ガラス製のフォトスタント。透明なフレームなので机の上に置いても邪魔になりません。
お気に入りの写真を入れればリラックスして仕事に向き合えます。
・Sun ロゴ入りシューホーン(靴べら)
Sun ロゴ入りの革小物。折りたたみタイプでコンパクトに収まり持ち運びにも便利。
落ち着きのあるシンプルなデザインなのでビジネスシューズにもピッタリですね。
・Sun ロゴ入りペンケース
Sun ロゴ入りの革小物。ペンを一本収納するシンプルなペンケース。
鞄に忍ばせておいてもかさばらないのが良いところです!
・Sun ロゴ入りボールペン
新しい Sun 製品に採用されているシルバーデザインに合わせたスタイルで
仕上げたボールペン。金属の質感と重量感がとても良い感じです。
※ Sunグッズ紹介(1)にてご紹介したボールペンと同じモデルです。質の良さをお伝えする為に撮り直しました♪
Posted at 02:36午後 1 30, 2007 by moridenki in Goods | 投稿されたコメント[0]
Solaris iSCSI Target/Initiator
Solaris でも iSCSI Target/Initiator が構築できることをご存知ですか?
実は、Nevada build 7 (Nevada は、次期 Solaris の開発コードネームです)では、Solaris iSCSI Initiator が実装され Solaris 10 3/05 HW2 リリースから、Solaris iSCSI Initiator が一般にリリースされました。
しかし、iSCSI を堪能するには、iSCSI Target が必要となります。
Solaris iSCSI Initiator が実装された当時は、iSCSI Target を手軽に構築しようにも、なかなかできることではありませんでした。
しかし、昨年の夏、ついにソフトウェアによる iSCSI Target が Nevada build 44 にて実装されました!
さらに改良は続けられており、Nevada build 54 では、ZFS ファイルシステムとの連携が可能となりました。
この機会を逃すわけにはいきませんので、iSCSI Target となる Solaris 上に、zfs volume を作成し、その領域を iSCSI Initiator で mount してみるのが、今回の目的となります。
iSCSI の概要については、下記 URL に書かれているものが、良くまとまっているかと思いますので、 参考になるかと思います。
最新IPストレージ技術「iSCSI」
http://www.atmarkit.co.jp/fnetwork/tokusyuu/16iscsi/iscsi01.html
ZFS 連携では、ZFS の emulated volume 機能 ( zfs create -V) を利用します。
Nevada b54 では、ZFS 領域を iSCSI target として利用できる shareiscsi オプション が実装されました。
- 必要なもの
- iSCSI Target となる、Nevada b54 がインストールされたマシン
http://www.opensolaris.org/os/downloads/
- iSCSI Initiator となる、Solaris 10 11/06 がインストールされたマシン
http://www.sun.com/software/solaris/get.jsp
- 上記を接続するネットワーク
- マニュアル
Chapter 14 Configuring Solaris iSCSI Targets and Initiators (Tasks) http://docs.sun.com/app/docs/doc/819-2723/6n50a1mve?a=view
これだけです。
ZFS 同様、特定のハードウェアなどは、必要ありません。
- iSCSI Target の構築
まずは、iscsi target である、iscsitadm が起動しているか確認します。
# svcs -a | grep iscsi
disabled 21:20:36 svc:/network/iscsi_initiator:default
disabled 21:20:48 svc:/system/iscsitgt:default
default では、disable となっているので、これを enable にしてあげます。
# svcadm enable iscsitgt
# svcs -a | grep iscsi
disabled 21:20:36 svc:/network/iscsi_initiator:default
online 21:49:29 svc:/system/iscsitgt:default
次に、iSCSI Initiator が利用するストレージを作成します。
これは、ZFS で pool を作成、ZFS emulated volume で、適当な容量を切り出します。
ZFS 用にディスクが用意出来ない事態も考慮して、ここでは 2G バイトのファイル を利用して pool を作成してみることにします。
- 1. 2G バイトのファイルを作成し、zfs 領域を作成
# mkfile 2g /usr/tmp/iscsitest.2g
# zpool create test /usr/tmp/iscsitest.2g
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
test 1.98G 88K 1.98G 0% ONLINE -
- 2. 作成した test pool から、1G バイトの emulated volume である test/vol を作成します。
# zfs create -V 1gb test/vol
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
test 1.00G 976M 24.5K /test
test/vol 22.5K 1.95G 22.5K -
- 3. 利用する ZFS 領域を確保できたら、iSCSI Target で利用する backing storeディレクトリを指定します。
ここから、iSCSI を構築するためのコマンドが登場します。
・iscsitadm (iSCSI Target 管理コマンド )
・iscsiadm (iSCSI Initator 管理コマンド )
backing store ディレクトリは、iSCSI Target が Initiator に提供する領域 に使われる場所となるので、ここでは、emulated vlume を作成した /test (ZFS pool) を指定します。
# iscsitadm modify admin -d /test
# iscsitadm show admin
iscsitadm:
Base Directory: /test
CHAP Name: Not set
RADIUS Access: Not set
RADIUS Server: Not set
iSNS Access: Not set
Fast Write ACK: Not set
- 4. 作成した test/vol に shareiscsi オプションをセットします。
これで、iSCSI Target としての情報が登録されます。
# zfs set shareiscsi=on test/vol
- 5. iSCSI Target 情報を見る
iSCSI では、iSCSI Qualified Name と呼ばれるユニークな ID で、ノード管理をおこないます。
Solaris iSCSI Target/Initiator では、iqn. で始まる識別子を利用しており、iSCSI Target となる、Nevada b54 マシンは、
「iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea」
という、iSCSI ネームで識別されることがわかります。
# iscsitadm list target -v
Target: test/vol
iSCSI Name: iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea
Alias: test/vol
Connections: 0
ACL list:
TPGT list:
LUN information:
LUN: 0
GUID: 0x0
VID: SUN
PID: SOLARIS
Type: disk
Size: 1.0G
Backing store: /dev/zvol/rdsk/test/vol
Status: online
さらに、LUN 情報からは、VID(Vendor ID) や、容量(Size)、どのような領域を利用しているか (backing store) などがわかります。
以上で、iSCSI Target の構築は完了です。
本当ならば、接続認証などの設定もおこなうべきですが、まずは接続してみることを目的としていますので、省略します。
ちなみに、次期アップデートリリースとなる、Solaris 10 Update 4 では、iSCSI Target が提供される予定です。
それでは、上記で構築した iSCSI Target が提供する、1GB の領域を利用するために
iSCSI Initiator の設定をおこなってみましょう。
- iSCSI Initiator の構築
引き続き、Solaris 10 11/06 のマシンで iSCSI Initiator を構築します。
まずは、iSCSI Initiator のサービス (iscsid) が有効になっているか確認します。
# svcs -a | grep iscsi
disabled 21:20:36 svc:/network/iscsi_initiator:default
default では、disable となっているので、これを enable にしてあげます。
# svcadm enable iscsi_initiator
# svcs -a | grep iscsi
enable 21:20:36 svc:/network/iscsi_initiator:default
- 1. iSCSI Initiator の情報を確認
iSCSI Target の時と同様、iSCSI Initiator 側の情報も確認してみましょう。
iSCSI Initiator となる、Solaris 10 11/06 のマシンには、以下の iSCSI ネームが割り当てられていることがわかります。iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
# iscsiadm list initiator-node
Initiator node name: iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
Initiator node alias: -
Login Parameters (Default/Configured):
Header Digest: NONE/-
Data Digest: NONE/-
Authentication Type: NONE
RADIUS Server: NONE
RADIUS access: unknown
Configured Sessions: 1
- 2. iSCSI Target の IP アドレスを設定します。
iSCSI Target に接続するために、iSCSI Target となるマシンの IP アドレス (ここでは、129.158.56.74)を discovery-address に指定します。
# iscsiadm add discovery-address 129.158.56.74
- 3. iSCSI Target への接続を有効にします。
このコマンドを実行することで、すぐに接続が開始されます。
# iscsiadm modify discovery -t enable
- 4. デバイスを確認します。
それでは、デバイスが認識されているか確認しましょう。
てっとりばやく、iostat コマンドで。
# iostat -En
c0t010000D7E29A7AC700002A0045B5A7EDd0 Soft Errors: 2 Hard Errors: 0 Transport Errors: 0
Vendor: SUN Product: SOLARIS Revision: 1 Serial No:
Size: 1.07GB <1073741312 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 2 Predictive Failure Analysis: 0
お?何か、みたことのないデバイスが表示されていますよ?
実は、これが、iSCSI ディスクとなります。
もし、何も表示されない場合は、以下のコマンドを実行してください
# devfsadm -c iscsi
一見、わけのわからない文字列ですが、Solaris のデバイス命名規則に従っていることがわかります
コントローラ: c0
SCSI ターゲット: t010000D7E29A7AC700002A0045B5A7ED
SCSI LUN: d0
偉いですね。
続いて、format コマンドでみてみましょう。
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t010000D7E29A7AC700002A0045B5A7EDd0 <DEFAULT cyl 1021 alt 2 hd 64 sec 32>
/scsi_vhci/disk@g010000d7e29a7ac700002a0045b5a7ed
1. c1d0 <DEFAULT cyl 1336 alt 2 hd 255 sec 63>
/pci@0,0/pci-ide@1f,1/ide@0/cmdk@0,0
Specify disk (enter its number): 0
selecting c0t010000D7E29A7AC700002A0045B5A7EDd0
[disk formatted]こちらも、ローカルに接続されたディスクとして見えていますね。
この状態のまま、iSCSI Target 側で target 情報をみてましょう。
すばらしい。
Initiator の項目が増え、iSCSI ネームが表示されています。
これは、iSCSI Initiator となる Solaris 10 11/06 のものであることが わかり、接続されていることがわかります。
# iscsitadm list target -v
Target: test/vol
iSCSI Name: iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea
Alias: test/vol
Connections: 1
Initiator:
iSCSI Name: iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
Alias: unknown
ACL list:
TPGT list:
LUN information:
LUN: 0
GUID: 010000d7e29a7ac700002a0045b5a7ed
VID: SUN
PID: SOLARIS
Type: disk
Size: 1.0G
Backing store: /dev/zvol/rdsk/test/vol
Status: online
ここまでできれば、あとは煮るやり焼くなり、お好きなように。
NFS などの、ネットワーク・ファイルシステムと違い、Solaris 上からはローカルな デバイスとして扱うことができるため、ファイルシステムを作成できます。
では、ちょっと実験してみましょう。
- 5. iSCSI ディスクを使って、ZFS プールを作成
わくわくする瞬間です。認識できた iSCSI ディスクに ZFS ファイルシステムを構築してみましょう。
デバイス名は、すでにわかっているので、下記のコマンドを実行します。
# zpool create test c0t010000D7E29A7AC700002A0045B5A7EDd0
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
test 1008M 134K 1008M 0% ONLINE -
# zfs create test/iscsi
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
test 132K 976M 26.5K /test
test/iscsi 24.5K 976M 24.5K /test/iscsi
# zpool status -v
プール: test
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
c0t010000D7E29A7AC700002A0045B5A7EDd0 ONLINE 0 0 0
エラー: 既知のデータエラーはありません# kazus
できちゃいました。
ちょっと感動しました。
性能は、iSCSI Target となるマシンや、ネットワークに依存しますので、なんとも言えません。
が、Sun Fire X4500 を使って dladm で trunking、そんな環境で実験してみたくなったのでした。
これからの Solaris にも、どうぞご期待ください。
Posted at 10:49午前 1 26, 2007 by noriho in Sun | 投稿されたコメント[1]
システム監視ツール fsstat の紹介
皆さん fsstat って知っていますか?
fsstat は Solaris 10 の 3番目のアップデートリリースとなる、Solaris 10 11/06 で組み込まれた新機能の 1つです。
この機能は iostat や vmstat のようなカーネル統計情報を取得するための機能です。
基本的な機能の特徴は以下となります。
・カーネルによるファイルオペレーション動作をレポートします
・監視対象としてはマウントポイント単位、ファイルシステムタイプ単位となります
(※ 統計情報は Gバイト、Kバイト、Mバイトなど見やすい形式に自動的に単位が
設定されます)
使用方法は、全てのファイルシステムの統計情報を表示するために -F オプションを指定
するか、その他のオプション(-a | f | i | n | v )と一緒に 「ファイルシステム」 か
「マウントポイント」 を指定します。
連続して監視を行う場合は interval と count を指定することもできます。
(※)オプションの種類や表示項目の詳細についてはマニュアルをご参照ください。
実際にどのようなことができるか確認してみましょう。
まずは -F オプションを使用します。
bash-3.00# fsstat -F
new name name attr attr lookup rddir read read write write
file remov chng get set ops ops ops bytes ops bytes
276 47 11 41.0K 119 266K 1.03K 47.6K 81.6M 3.68K 3.95M ufs
0 0 0 295 0 456 178 111 34.6K 0 0 proc
0 0 0 0 0 0 0 0 0 0 0 nfs
0 0 0 0 0 0 0 0 0 0 0 zfs
0 0 0 1.76K 0 0 0 0 0 0 0 lofs
2.75K 2.38K 178 17.0K 28 3.38K 4 34.5K 34.5M 36.6K 31.6M tmpfs
0 0 0 62 0 0 0 32 5.07K 0 0 mntfs
0 0 0 0 0 0 0 0 0 0 0 nfs3
0 0 0 0 0 0 0 0 0 0 0 nfs4
0 0 0 0 0 0 0 0 0 0 0 autofs
bash-3.00#
上から 2行目までがファイルオペレーションの種類となります。
右側に全てのファイルシステム一覧が表示されます。
上記はシステム起動直後の状態ですが、すでに ufs や tmpfs 等が頻繁に使用されて
いるのがわかります。
次に直接 ufs(ファイルシステム) を指定します。
(※)この場合はファイルシステム、またはマウントポイントのどちらか(または両方)を指定することができます。
bash-3.00# fsstat zfs new name name attr attr lookup rddir read read write write file remov chng get set ops ops ops bytes ops bytes 276 47 11 41.0K 119 266K 1.03K 47.6K 81.6M 3.68K 3.95M ufs bash-3.00#
今度は詳細情報を表示する -f オプションを使用してみます。
(※)この場合もファイルシステム、またはマウントポイントのどちらか(または両方)
を指定することができます。
今回はとりあえずルート(/:マウントポイント)を指定します。
bash-3.00# fsstat -f /
/
operation #ops bytes
open 8.32K
close 9.5K
read 49.4K 81.7M
write 5.31K 4.05M
ioctl 10.0K
setfl 35
getattr 33.9K
setattr 94
access 12.0K
lookup 304K
create 257
remove 45
link 0
rename 7
mkdir 18
rmdir 2
readdir 1.37K 553K
symlink 4
readlink 6.64K
fsync 60
inactive 1.16K
fid 0
rwlock 56.1K
rwunlock 56.1K
seek 30.4K
cmp 58.1K
frlock 4.80K
space 6
realvp 2.19K
getpage 93.5K
putpage 559
map 15.3K
addmap 28.2K
delmap 26.4K
poll 26.1K
dump 0
pathconf 88
pageio 2
dumpctl 0
dispose 27.1K
getsecattr 404
setsecattr 19
shrlock 0
vnevent 0
このオプションは他のオプションとは表示形式が異なり左側にファイルシステムのオペレーションの種類、右側にはオペレーション数が表示されます。
上の例は、システムが起動してから現在までのルート(/)で行われたオペレーション情報が全て表示されています。
コマンドの説明はこれくらいにして、zfs ファイルシステムを作成して fsstat でその様子を確認してみましょう。
pool(pooltest1) を作成してみます。
bash-3.00# zpool create -f pooltest1 raidz c1t2d0s0 c1t2d0s1 c1t2d0s3
bash-3.00# fsstat zfs /pooltest1
new name name attr attr lookup rddir read read write write
file remov chng get set ops ops ops bytes ops bytes
0 0 0 1 0 0 0 0 0 0 0 zfs
0 0 0 1 0 0 0 0 0 0 0 /pooltest1
pool を作成したときにはattr getの値が増えています。
作成した pool に対してアクセスしてみましょう。
bash-3.00# ls -la /pooltest1/
合計 6
drwxr-xr-x 2 root sys 2 1月 22日 11:43 .
drwxr-xr-x 33 root root 1024 1月 22日 11:43 ..
bash-3.00#
bash-3.00# fsstat zfs /pooltest1
new name name attr attr lookup rddir read read write write
file remov chng get set ops ops ops bytes ops bytes
0 0 0 13 0 5 2 0 0 0 0 zfs
0 0 0 13 0 5 2 0 0 0 0 /pooltest1
今度は attr get, lookup ops, rddir ops の値が増えているのがわかります。
システムが起動されて初めて pool を作成したのでファイルシステム(zfs)もマウントポイント(pooltest1)もオペレーション数は同じになっています。 以降はシステムを再起動しない限りファイルシステム(zfs)の情報は蓄積されていきます。 もちろんマウントポイント(pooltest1)に対してのアクセスがあった場合にはマウント ポイント(pooltest1)の情報も蓄積されますが、そのときはファイルシステム(zfs)も 情報が蓄積されます。
もうひとつ pool(pootest2) を作成してみて、どんな情報が得られるか確認してみます。
bash-3.00# zpool create -f pooltest2 c1t2d0s4
bash-3.00# ls -la /pooltest2
合計 5
drwxr-xr-x 2 root sys 2 1月 22日 13:16 .
drwxr-xr-x 34 root root 1024 1月 22日 13:16 ..
bash-3.00#
bash-3.00# fsstat zfs /pooltest1 /pooltest2
new name name attr attr lookup rddir read read write write
file remov chng get set ops ops ops bytes ops bytes
0 0 0 23 0 10 4 0 0 0 0 zfs
0 0 0 13 0 5 2 0 0 0 0 /pooltest1
0 0 0 10 0 5 2 0 0 0 0 /pooltest2
pooltest2 が作成されたことによってファイルシステム(zfs)の値も増えているのがわかります。
(pooltest1 + pooltest2 = zfs)
マウントポイント(/pooltest1/test1)に対して直接ファイルやディレクトリ作成したり、内容を確認したりしても情報が蓄積されます。
現状の状態を確認
bash-3.00# fsstat zfs /pooltest1 /pooltest1/test1
new name name attr attr lookup rddir read read write write
file remov chng get set ops ops ops bytes ops bytes
1 0 0 33 0 24 10 0 0 0 0 zfs
1 0 0 22 0 19 8 0 0 0 0 /pooltest1
0 0 0 1 0 0 0 0 0 0 0 /pooltest1/test1
ディレクトリ、ファイルを作成
bash-3.00# mkdir aaa
bash-3.00# mkfile 100m bbb
bash-3.00# fsstat zfs /pooltest1 /pooltest1/test1
new name name attr attr lookup rddir read read write write
file remov chng get set ops ops ops bytes ops bytes
3 0 0 49 1 48 14 0 0 12.5K 100M zfs
1 0 0 27 0 37 10 0 0 0 0 /pooltest1
2 0 0 12 1 6 2 0 0 12.5K 100M /pooltest1/test1
ディレクトリ、ファイルを作成したことによりnew file, attr get, attr set, write ops, write bytes 等の値が増えています。
ディレクトリ名変更/削除、及びファイル名変更/削除
bash-3.00# mv aaa ccc
bash-3.00# rmdir ccc
bash-3.00# mv bbb aaa
bash-3.00# rm aaa
bash-3.00# fsstat zfs /pooltest1 /pooltest1/test1
new name name attr attr lookup rddir read read write write
file remov chng get set ops ops ops bytes ops bytes
3 2 2 89 1 133 16 0 0 12.5K 100M zfs
1 0 0 33 0 59 10 0 0 0 0 /pooltest1
2 2 2 46 1 69 4 0 0 12.5K 100M /pooltest1/test1
ディレクトリやファイル名前の変更/削除を行った結果、name remov, name chng等の値が増えています。
このように fsstat は ファイルシステムやマウントポイントに対して行われた情報を リアルタイムに取得することも可能ですし、システムが起動してから現在までの全情報 を取得することも可能となっています。
fsstat はデバイス単位でなく、ファイルシステムやマウントポイント単位で統計情報 が取れるってすごくないですか。皆さんもこの新機能を使ってファイルシステムの健全性のチェックに役立ててください。
Posted at 01:27午後 1 25, 2007 by Golgo1.3 in Sun | 投稿されたコメント[1]
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]
DTraceで遊ぶ
今回は、DTrace を使って uname の出力結果を(あくまでお遊びで)強制的に
変更する例を紹介します。
実際に Nevada の環境に Solaris 10 のパッケージをインストールしたいんだけど、
インストールパッケージの中で OS のバージョンチェック
が入り、 pkgadd がはじかれてしまう時がありますよね。
こんな時、 DTrace を使って uname の表示を Solaris 10 用に変更する事で、 Nevada に
Solaris 10 対応のパッケージをインストールできる場合があります。
下記の Dスクリプト(port2.d)は、Nevada で実行した uname -a の結果を
Solaris 10 で実行した出力結果に置き換えてしまいます。
このスクリプトは、
Peter Karlsson の DTrace Code Camp 資料
Page 97 で紹介されている port.d スクリプトからヒントを得ました。
【port2.d スクリプト】
#!/usr/sbin/dtrace -Cs #include#pragma D option destructive syscall::uname:entry { self->addr = arg0; } syscall::uname:return { copyoutstr("SunOS", self->addr,257); copyoutstr("pana", self->addr+257,257); copyoutstr("5.10", self->addr+(257*2),257); copyoutstr("Generic_118855-33", self->addr+(257*3),257); copyoutstr("i86pc", self->addr+(257*4),257); }
では早速実行してみましょう。
ホスト名 pana にインストールされている Nevada_43 で試してみました。
<テストログ>
pana# uname -a SunOS pana 5.11 snv_43 i86pc i386 i86pc使用しているOS が 5.11 snv_43 と表示されます。
ここでuname 出力変更プログラムを実行
pana# ./port2.d & dtrace: script './port2.d' matched 2 probes dtrace: allowing destructive actionsもう一度 uname -a を実行
pana# uname -a SunOS pana 5.10 Generic_118855-33 i86pc i386 i86pcはい、uname の出力が Solaris 10 11/06 に変更できました!!
<実践編>
それでは、実際に N1 Service Provisioning System のパッケージで試してみましょう。
<dtraceで OS 情報変更前>
pana# ./cr_cli_solaris_x86_pkg_5.0.sh
N1 Grid Service Provisioning System (N1 Grid SPS) Installation Setup
A log of events during this installation is being generated in
/tmp/N1GridSPSInstaller.log.1552.
Hit enter to accept the (default values) or enter a valid value from the
list provided: [valid values]
ERROR! Unable to continue with N1 Grid SPS CLI Client installation.
The highest OS version is 5.10, and this machine is running 5.11.
For information on how to continue the installation on an unsupported
platform, see the N1 Grid Service Provisioning System 5.0 Installation
Guide.
このパッケージは、使用している OS が 5.11 (サポート対象外)を使用して
いる事をチェックしており、インストールがはじかれてしまいます。<dtraceで OS 情報を変更し、インストールを実行>
pana# ./port2.d & dtrace: script './port2.d' matched 2 probes dtrace: allowing destructive actions
pana# ./cr_cli_solaris_x86_pkg_5.0.sh
N1 Grid Service Provisioning System (N1 Grid SPS) Installation Setup
A log of events during this installation is being generated in
/tmp/N1GridSPSInstaller.log.1591.
Hit enter to accept the (default values) or enter a valid value from the
list provided: [valid values]
Checking for required and recommended Solaris 5.10 patches.
Done checking for required and recommended Solaris 5.10 patches.
Checking the integrity of the package.
Package is intact.
....
....
今度は、インストール処理で uname のチェックではじかれていたパスがスルーされました。今回はお遊びで OS 情報の変更を試しましたが、 DTrace の copyoutstr() は、コマンドや関数のに対して、 リコンパイルせずにダイナミックに任意の 引数を渡す事ができますので、デバッグ時に活躍すると思います。
Posted at 12:41午後 1 23, 2007 by Naoyuki Yamada in Sun | 投稿されたコメント[0]