Hitachi

高信頼化システム監視機能 HAモニタ AIX(R)編


7.5.8 共有ディスクの障害に対処する

共有リソースの設定や操作を誤ると,ゴーストディスクが作成されてvaryonvgコマンドが失敗します。この場合,ゴーストディスクを削除し,元のディスクを再構成します。ゴーストディスクを見つけるには,検索するためのシェルを作成しておく方法や,OSのコマンドを使用してディスクの一覧を表示する方法があります。

ここでは,ゴーストディスクが作成された場合の対処方法,およびゴーストディスクの判別方法について説明します。

〈この項の構成〉

(1) ゴーストディスクが作成された場合の対処方法

ゴーストディスクが見つかった系を自系,それ以外の系を他系とし,作成された場合の対処方法を説明します。

なお,共有リソースを操作するときの注意については,「7.2.3 共有リソースをメンテナンスするときの注意事項」を参照してください。これらの注意に従わないと,共有リソースが破壊されたり,系切り替えができなかったりするおそれがあります。

  1. オンライン状態のボリュームグループを,他系でオフライン化する。

    varyoffvgコマンドを使用してオフライン化します。

  2. 自系でゴーストディスクを削除する。

    ゴーストディスクは,シェルなどで検索して判別し,削除してください。

    ゴーストディスクを判別する方法については「(2) ゴーストディスクの判別方法」を参照してください。

  3. 自系で元のディスクの再構成をする。

    以前使用していたディスクを使用できるようにします。

(2) ゴーストディスクの判別方法

検索したゴーストディスクの判別方法は,対応するSCSI規格によって異なります。対応する規格がSCSI-3およびSCSI-2の場合の,ゴーストディスクの判別方法を次に示します。

表7‒8 ゴーストディスクの判別方法

SCSI規格

判別方法

SCSI-3

次の項目が同じデバイスがゴーストディスクとなります。

  • ロケーション

  • 親デバイス

  • SCSI ID

  • LUN ID

  • WWW NAME

SCSI-2

次の項目が同じデバイスがゴーストディスクとなります。

  • ロケーション

  • 親デバイス

SCSI-3規格対応の場合のゴーストディスクを検索するシェルの例を次に示します。

########################################################################
#                                                                      #
# P-1M2C-1111 AIX HAmonitor                                            #
#    This is a sample of Retrieval of ghost disk                       #
# All Rights Reserved. Copyright (C) 2007, Hitachi, Ltd.               #
#                                                                      #
# Usage:find_ghost.sh PV_name                                         #
#          PV_name:Disk for ghost disk retrieval                       #
#                                                                      #
# function:Retrieval of ghost disk for SCSI-3                         #
#                                                                      #
########################################################################
 
#!/usr/bin/ksh
 
IFS='
'
 
disk=$1     # Disk for ghost disk retrieval
 
status=`lsdev -C -l $disk -F status`            # status
location=`lsdev -C -l $disk -F location`        # location code
parent=`lsdev -C -l $disk -F parent`            # parent device
lun_id=`lsattr -F value -l $disk -a lun_id`     # LUN ID
scsi_id=`lsattr -F value -l $disk -a scsi_id`   # SCSI ID
ww_name=`lsattr -F value -l $disk -a ww_name`   # WW name
pvid=`getlvodm -p $disk`                        # get PVID
if [ "$pvid" = "00000000000000000000000000000000" ]; then  #PVID=0?
        pvid="None"                             # Doubt of ghost disk
fi
echo $disk
echo "status   = $status"
echo "PVID     = $pvid"
echo "location = $location"
echo "parent   = $parent"
echo "scsi_id  = $scsi_id"
echo "lun_id   = $lun_id"
echo "ww_name  = $ww_name"
echo ""
 
# Variable for ghost disk retrieval
g_disk=
g_status=
g_location=
g_parent=
g_lun_id=
g_scsi_id=
g_ww_name=
g_pvid=
 
find_ghost=0         #Ghost disk retrieval flag
##################### Retrieval of ghost disk #####################
# Retrieval from the one with the same location code
 
for g_disk in `lsdev -C -c disk | grep $location | awk '{print $1}'`
do
   if [ "$disk" = "$g_disk" ]; then
            continue
   fi
   # It checks whether LUN ID is corresponding. 
   g_lun_id=`lsattr -F value -l $g_disk -a lun_id`
   if [ "$lun_id" = "$g_lun_id" ]; then
      # It checks whether other parameters are corresponding
      # when LUN ID is corresponding everything. 
 
       g_parent=`lsdev -C -l $g_disk -F parent`   # get parent device
       g_scsi_id=`lsattr -F value -l $g_disk -a scsi_id`  # get SCSI ID
          g_ww_name=`lsattr -F value -l $g_disk -a ww_name`  # get WW name
 
           # Each value of the disk where the disk for the retrieval
           # and LUN ID are the same is compared. 
           # For SCSI-3 If all the following are the same, either is ghost disks.
 
           if [ "$parent" = "$g_parent" ] && \   # Parents device agreement
             [ "$scsi_id" = "$g_scsi_id" ] && \  # SCSI ID agreement
             [ "$ww_name" = "$g_ww_name" ]; then  # WW name agreement
                ###### Find the ghost disk ######
                  find_ghost=1
                  g_location=`lsdev -C -l $g_disk -F location`
                  g_status=`lsdev -C -l $g_disk -F status`
                  g_pvid=`getlvodm -p $g_disk`
                   if [ "$g_pvid" = "00000000000000000000000000000000" ]; then
                              g_pvid="None"        # ghost disk
                     fi                            # if pvid!=0 then 
                     # the retrieval object is a ghost disk.
                       echo $g_disk
                       echo "status   = $g_status"
                       echo "PVID     = $g_pvid"
                       echo "location = $g_location"
                       echo "parent   = $g_parent"
                       echo "scsi_id  = $g_scsi_id"
                       echo "lun_id   = $g_lun_id"
                       echo "ww_name  = $g_ww_name"
                       echo ""
               fi
       fi
done
 
if [ $find_ghost -eq 0 ]; then
      echo "The ghost to $disk was not found."
fi