ZFS と fmd
ZFSの障害にfmd (Fault Managementデーモン)がどのようにレポートしてくれるかを紹介します。
Solaris 10 6/06 からは ZFS がサポートされています。
それに伴い、ZFSの障害に関しても fmd (Fault Managementデーモン)がレポートしてくれます。
例えば、/var/adm/messagesには以下のようなメッセージが記録されます。
Sep 28 11:23:11 zfstest fmd: [ID 441519 daemon.error] SUNW-MSG-ID:
ZFS-8000-D3, TYPE: Fault
, VER: 1, SEVERITY: Major
Sep 28 11:23:11 zfstest EVENT-TIME: Thu Sep 28 11:23:11 JST 2006
Sep 28 11:23:11 zfstest PLATFORM: SUNW,Ultra-250, CSN: -, HOSTNAME:
zfstest
Sep 28 11:23:11 zfstest SOURCE: zfs-diagnosis, REV: 1.0
Sep 28 11:23:11 zfstest EVENT-ID: 73de322d-782f-62b4-c717-9151fb9e5c5b
Sep 28 11:23:11 zfstest DESC: A ZFS device failed. Refer to
http://sun.com/msg/ZFS-8000-D3
for more information.
Sep 28 11:23:11 zfstest AUTO-RESPONSE: No automated response will occur.
Sep 28 11:23:11 zfstest IMPACT: Fault tolerance of the pool may be
compromised.
Sep 28 11:23:11 zfstest REC-ACTION: Run 'zpool status -x' and replace
the bad device.
IMPACTを見る限り、耐障害性が損なわれたことがわかります。
実際、冗長ディスク(ミラーやRAID-Z構成)の1つが壊れたときなどにこのようなメッセージになります。
この場合 zpool replace コマンドなどで別のディスクに取り替えればすぐ直ります。
また以下のようなコマンドを実行するとZFS用の診断モジュールが加わっていることもわかります。
#
fmstat
module
ev_recv ev_acpt wait svc_t %w %b open
solve memsz bufsz
USII-io-diagnosis
0 0 0.0
0.3 0 0
0 0
0 0
cpumem-retire
0 0 0.0
0.4 0 0
0 0
0 0
eft
0 0 0.0
0.3 0 0
0 0
713K 0
fmd-self-diagnosis
0 0 0.0
0.2 0 0
0 0
0 0
io-retire
0 0 0.0
0.3 0 0
0 0
0 0
snmp-trapgen
1 0 0.0
104.0 0 0
0 0
32b 0
sysevent-transport
0 0 0.0 3681.0
0 0 0
0 0 0
syslog-msgs
1 0 0.0
62.1 0 0
0 0
0 0
zfs-diagnosis
345 2 0.0
3.1 0 0
1 1 64b 40b
fmd がハンドリングした障害があると以下のようにfmdumpコマンドで情報を確認できます。
#
fmdump
TIME
UUID
SUNW-MSG-ID
Sep 28 11:23:11.8262 73de322d-782f-62b4-c717-9151fb9e5c5b ZFS-8000-D3
各UUID毎に詳細情報を見る場合には以下のように実行します。
#
fmdump -v -u
73de322d-782f-62b4-c717-9151fb9e5c5b
TIME
UUID
SUNW-MSG-ID
Sep 28 11:23:11.8262 73de322d-782f-62b4-c717-9151fb9e5c5b ZFS-8000-D3
100% fault.fs.zfs.device
Problem in:
zfs://pool=e000712c9989e4ee/vdev=3b453cf7bd4d7243
Affects:
zfs://pool=e000712c9989e4ee/vdev=3b453cf7bd4d7243
FRU: -
障害ディスクを特定するには以下のようにエラーレポートを見て、エラーの発生源を見たほうがわかりやすい場合もあります。
#
fmdump -e
TIME
CLASS
Sep 28 11:23:08.5357 ereport.fs.zfs.io
Sep 28 11:23:08.5360 ereport.fs.zfs.io
Sep 28 11:23:08.5360 ereport.fs.zfs.io
Sep 28 11:23:11.5616 ereport.fs.zfs.vdev.open_failed
#
fmdump -eV
...
...
Sep 28 2006 11:23:11.561634578 ereport.fs.zfs.vdev.open_failed
nvlist version: 0
class =
ereport.fs.zfs.vdev.open_failed
ena = 0x73053e6d45f00401
detector = (embedded nvlist)
nvlist version: 0
version = 0x0
scheme = zfs
pool = 0xe000712c9989e4ee
vdev = 0x3b453cf7bd4d7243
(end detector)
pool = rzpool
pool_guid =
0xe000712c9989e4ee
pool_context = 0
vdev_guid =
0x3b453cf7bd4d7243
vdev_type = disk
vdev_path = /dev/dsk/c2t74d0s0
vdev_devid =
id1,ssd@n2000002037a63d93/a
parent_guid =
0x9ce799f4b4b5c027
parent_type = raidz
prev_state = 0x1
__ttl = 0x1
__tod = 0x451b320f 0x2179dd12
上記の例では c2t74d0 のディスクで障害があったことがわかります。
オラクルユニバーシティSolaris系技術トレーニング一覧
Solarisお勧め書籍
Solaris 11.2 システムハンドブック
|
Oracle Solaris 11 試験対策本(OCA)
|