サーバー運用備忘録

Solaris 10

Solaris 10 インストール後にGUIログインになってしまう。
これを止める方法

1.dtloginを停止

# /etc/init.d/dtlogin stop

2.dtloginを起動しないようにする

# /usr/dt/bin/dtconfig -d

3.リブート

# sync;sync;sync;shutdown -y -g0 -i6

あとはrootのホームを/から/rootに変更とかユーザ追加。
セキュリティ設定してあげます。
Recommended_Patchもお忘れなく!!

ALOMにおけるSC用ユーザーの確認とパスワード変更

SC用ユーザーの確認
scadmコマンドに「usershow」オプションを指定します。

# /usr/platform/`uname -i`/sbin/scadm usershow
 username       permissions    password
 --------       -----------    --------
 admin          cuar           Assigned

パスワードの変更
SC用ユーザーのパスワードを設定する場合は、scadmコマンドに「userpassword」オプションを指定します。
scadm userpassword <ユーザー名>

次のように実行します。

# /usr/platform/`uname -i`/sbin/scadm userpassword admin
Password: ← 新しいパスワードを入力
Re-enter Password: ← 再度入力

パスワードとして有効なのは、6~8文字のアルファベットと数字を含んだものになります。

Solaris(Sparc)のディスクミラー障害検出

Sunより提供されているcron ジョブによる Solaris ボリュームマネージャの監視をサーバにセットアップしておくと

件名:Solaris Volume Manager Problem: metacheck.HOSTNAME
本文
Solaris Volume Manager: HOSTNAME: metacheck: Report: Fri Oct  2 01:15:00 JST 2009
--------------------------------------------------------------
metacheck: metadb problem, for more detail run:
     /usr/sbin/metadb -i
metacheck: metadevice problem, for more detail run:
     /usr/sbin/metastat d30
     /var mounted on d30

というメールが飛んできます。
ミラーディスクに障害が発生したことを伝えるものです。
早々ログインして確認してみると、

# metastat
d10: Mirror
    Submirror 0: d11
      State: Okay
    Submirror 1: d12
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 2101552 blocks

d11: Submirror of d10
    State: Okay
    Size: 2101552 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t0d0s0                   0     No    Okay

d12: Submirror of d10
    State: Okay
    Size: 2101552 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t1d0s0                   0     No    Okay

d20: Mirror
    Submirror 0: d21
      State: Okay
    Submirror 1: d22
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 2101552 blocks

d21: Submirror of d20
    State: Okay
    Size: 2101552 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t0d0s1                   0     No    Okay

d22: Submirror of d20
    State: Okay
    Size: 2101552 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t1d0s1                   0     No    Okay

d30: Mirror
    Submirror 0: d31
      State: Okay
    Submirror 1: d32
      State: Needs maintenance
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 8392072 blocks

d31: Submirror of d30
    State: Okay
    Size: 8392072 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t0d0s3                   0     No    Okay

d32: Submirror of d30
    State: Needs maintenance
    Invoke: metareplace d30 c0t1d0s3 <new device>
    Size: 8392072 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t1d0s3                   0     No    Maintenance

d40: Mirror
    Submirror 0: d41
      State: Okay
    Submirror 1: d42
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 8392072 blocks

d41: Submirror of d40
    State: Okay
    Size: 8392072 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t0d0s4                   0     No    Okay

d42: Submirror of d40
    State: Okay
    Size: 8392072 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t1d0s4                   0     No    Okay

d50: Mirror
    Submirror 0: d51
      State: Okay
    Submirror 1: d52
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 8392072 blocks

d51: Submirror of d50
    State: Okay
    Size: 8392072 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t0d0s5                   0     No    Okay

d52: Submirror of d50
    State: Okay
    Size: 8392072 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t1d0s5                   0     No    Okay

d60: Mirror
    Submirror 0: d61
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 5946544 blocks

d61: Submirror of d60
    State: Okay
    Size: 5946544 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t0d0s6                   0     No    Okay

d62: Concat/Stripe
    Size: 5946544 blocks
    Stripe 0:
        Device              Start Block  Dbase
        c0t1d0s6                   0     No

となっており、

d30: Mirror
    Submirror 0: d31
      State: Okay
    Submirror 1: d32
      State: Needs maintenance
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 8392072 blocks

d31: Submirror of d30
    State: Okay
    Size: 8392072 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t0d0s3                   0     No    Okay

d32: Submirror of d30
    State: Needs maintenance
    Invoke: metareplace d30 c0t1d0s3 <new device>
    Size: 8392072 blocks
    Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        c0t1d0s3                   0     No    Maintenance

からd30のスライス中にエラーが発生していることがわかります。

#dmesg

してみたら書き込みエラーが発生していました。
稼動中のサーバなので停止せずディスク交換する方法をさがしてみると
結構紹介されていました。
ちなみに参考にさせていただいたのは、
Solarisでいきましょか? -SDS OSミラー回復手順-です。
筆者に感謝いたします。

上記のリンク先を参考に実際に障害を復旧した事例を紹介いたします。

  • Solaris(Sparc)のディスクミラー復旧手順

(1)状態をチェック
まず、metastatコマンドでDISKの状態確認します。
前述を参照
(2)メタDBの状態をチェックし、削除する
交換するDISK側のメタDBをmetadbコマンドで削除する。

# metadb -i
        flags           first blk       block count
     a m  p  luo        16              1034            /dev/dsk/c0t0d0s7
     a    p  luo        1050            1034            /dev/dsk/c0t0d0s7
      W   p  l          16              1034            /dev/dsk/c0t1d0s7
     a    p  luo        1050            1034            /dev/dsk/c0t1d0s7
 o - replica active prior to last mddb configuration change
 u - replica is up to date
 l - locator for this replica was read successfully
 c - replica's location was in /etc/lvm/mddb.cf
 p - replica's location was patched in kernel
 m - replica is master, this is replica selected as input
 W - replica has device write errors
 a - replica is active, commits are occurring to this replica
 M - replica had problem with master blocks
 D - replica had problem with data blocks
 F - replica had format problems
 S - replica is too small to hold current data base
 R - replica had device read errors
#
*英字の大文字になっていると壊れていることを意味します。
今回は(W)なので書き込みエラーと分ります。
# metadb -d c0t1d0s7

(3)SVM上で、ボリュームの削除

# metadetach -f d10 d12
d10: サブミラー d12 は切断中
# metadetach -f d20 d22
d20: サブミラー d22 は切断中
# metadetach -f d30 d32
d30: サブミラー d32 は切断中
# metadetach -f d40 d42
d40: サブミラー d42 は切断中
# metadetach -f d50 d52
d50: サブミラー d52 は切断中
# metadetach -f d60 d62
d60: サブミラー d62 は切断中

# metaclear d12
d12: 連結/ストライプがクリアされます
# metaclear d22
d22: 連結/ストライプがクリアされます
# metaclear d32
d32: 連結/ストライプがクリアされます
# metaclear d42
d42: 連結/ストライプがクリアされます
# metaclear d52
d52: 連結/ストライプがクリアされます
# metaclear d62
d62: 連結/ストライプがクリアされます

(4)DISKを交換する
OS稼動中にDISKを交換する場合は、SCSIの場合cfgadmコマンドで切り離しをします。

# cfgadm -al
Ap_Id                          Type         Receptacle   Occupant     Condition
c0                             scsi-bus     connected    configured   unknown
c0::dsk/c0t0d0                 disk         connected    configured   unknown
c0::dsk/c0t1d0                 disk         connected    configured   unknown
c1                             scsi-bus     connected    configured   unknown
c1::dsk/c1t2d0                 CD-ROM       connected    configured   unknown
c2                             scsi-bus     connected    unconfigured unknown

# cfgadm -c unconfigure c0::dsk/c0t1d0
# cfgadm -al
Ap_Id                          Type         Receptacle   Occupant     Condition
c0                             scsi-bus     connected    configured   unknown
c0::dsk/c0t0d0                 disk         connected    configured   unknown
c1                             scsi-bus     connected    configured   unknown
c1::dsk/c1t2d0                 CD-ROM       connected    configured   unknown
c2                             scsi-bus     connected    unconfigured unknown
# format
Searching for disks...done


AVAILABLE DISK SELECTIONS:
      0. c0t0d0 <SUN18G cyl 7506 alt 2 hd 19 sec 248>
         /pci@1f,0/pci@1,1/scsi@2/sd@0,0
Specify disk (enter its number): ^D

ここでDISKを交換します(DISKを抜いて、新しいDISKを挿入)。

(5)DISKをOSへ認識させる

# cfgadm -c configure c0::dsk/c0t1d0
# cfgadm -al
 Ap_Id                          Type         Receptacle   Occupant     Condition
 c0                             scsi-bus     connected    configured   unknown
 c0::dsk/c0t0d0                 disk         connected    configured   unknown
 c0::dsk/c0t1d0                 disk         connected    configured   unknown
 c1                             scsi-bus     connected    configured   unknown
 c1::dsk/c1t2d0                 CD-ROM       connected    configured   unknown
 c2                             scsi-bus     connected    unconfigured unknown
# format
Searching for disks...done


AVAILABLE DISK SELECTIONS:
      0. c0t0d0 <SUN18G cyl 7506 alt 2 hd 19 sec 248>
         /pci@1f,0/pci@1,1/scsi@2/sd@0,0
      1. c0t1d0 <SUN18G cyl 7506 alt 2 hd 19 sec 248>
         /pci@1f,0/pci@1,1/scsi@2/sd@1,0
Specify disk (enter its number):

(6)ミラーの再設定と同期
交換したディスクに同じジオメトリを持たせる。

# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2

メタDBの追加

# metadb -f -a -c 3 c0t1d0s7

ミラーの再同期
metareplace -e d30 c0t1d0s3
サブミラーが無いとしかられます。以下のように訂正します。

ミラーの再同期

# metainit -f d12 1 1 c0t1d0s0
# metainit -f d22 1 1 c0t1d0s1
# metainit -f d32 1 1 c0t1d0s3
# metainit -f d42 1 1 c0t1d0s4
# metainit -f d52 1 1 c0t1d0s5
# metainit -f d62 1 1 c0t1d0s7
# metattach d10
# metattach d20
# metattach d30
# metattach d40
# metattach d50
# metattach d60

(7)SVM上のDISK構成情報の更新

# metadevadm -u c0t1d0
Solaris ボリュームマネージャ内で c0t1d0 に関するデバイス再配置情報を更新しています
古いデバイス再配置情報:
  id1,sd@SSEAGATE_ST318404LSUN18G_3BT265P30000XXXX
新しいデバイス再配置情報:
  id1,sd@SSEAGATE_ST318404LSUN18G_3BT265P30000XXXX

(8)ミラー状況の確認

# LANG=C metastat | grep progre

   Resync in progress: 0 % done
   Resync in progress: 6 % done
   Resync in progress: 7 % done

Progressがなくなり全てのStatusが「Ok」になれば終了です。

# LANG=C metastat |grep "State:"

思いついたら、どんどん書き足していきます。