Solstice DiskSuite 4.2.1 ユーザーズガイド

ブート障害

DiskSuite を使用すればルート (/)、swap/usr をミラー化できるため、ハードウェアのエラーやオペレータのミスによって、システムのブート時に特殊な障害が発生することがあります。この節で説明する作業は、このような潜在的な障害に対する解決法です。

これらの障害と適切な解決法について表 7-1 に示します。

表 7-1 DiskSuite の一般的なブート障害

システムがブートしない理由 

参照先 

/etc/vfstab ファイルの情報に誤りがある。

「不適切な /etc/vfstab エントリからの回復方法 (コマンド行)」

状態データベースの複製が不足している。 

「状態データベースの複製の不足からの回復方法 (コマンド行)」

ブートデバイス (ディスク) が故障した。 

「ブートデバイス障害からの回復方法 (コマンド行)」

ブートミラーが故障した。 

「SPARC: 代替デバイスからのブート方法 (コマンド行)」または

「x86: 代替デバイスからのブート方法 (コマンド行)」

ブート障害のための予備情報

不適切な /etc/vfstab エントリからの回復方法 (コマンド行)

たとえば、ルート (/) をミラー化するときなど、/etc/vfstab ファイル内に誤ったエントリを作成した場合、システムは、最初は適切にブーティングしているように見えても、障害が発生します。このような場合、シングルユーザーモードで /etc/vfstab を編集する必要があります。

不適切な /etc/vfstab ファイルのエントリから回復するための手順を次に示します。

例 - ルート (/) ミラーの回復

次の例では、ルート (/) は 2 面のミラー d0 でミラー化されます。/etc/vfstab 内のルート (/) エントリは、どういうわけかファイルシステムの元のスライスに戻りました。しかし、/etc/system 内の情報は、まだミラー d0 からのブートを示しています。通常考えられる理由としては、/etc/system/etc/vfstab の保守に metaroot(1M) コマンドが使用されなかったか、または /etc/vfstab の古いコピーが戻されたことが挙げられます。

誤った /etc/vfstab ファイルは、次のようになります。


#device        device          mount          FS      fsck   mount    mount
#to mount      to fsck         point          type    pass   at boot  options
#
/dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0  /       ufs      1     no       -
/dev/dsk/c0t3d0s1 -                   -       swap     -     no       -
/dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6  /usr    ufs      2     no       -
#
/proc             -                  /proc    proc     -     no       -
fd                -                  /dev/fd  fd       -     no       -
swap              -                  /tmp     tmpfs    -     yes      -

エラーのため、マシンがブートされると自動的にシングルユーザーモードとなります。


ok boot
...
SunOS Release 5.5 Version Generic [UNIX(R) System V Release 4.0]
Copyright (c) 1983-1995, Sun Microsystems, Inc.
configuring network interfaces: le0.
Hostname: antero
mount: /dev/dsk/c0t3d0s0 is not this fstype.
setmnt: Cannot open /etc/mnttab for writing

INIT: Cannot create /var/adm/utmp or /var/adm/utmpx

INIT: failed write of utmpx entry:"  "

INIT: failed write of utmpx entry:"  "

INIT: SINGLE USER MODE

Type Ctrl-d to proceed with normal startup,
(or give root password for system maintenance): <パスワードを入力>

この時点で、ルート (/) と /usr は読み取り専用でマウントされます。次の手順に従ってください。

  1. ルート (/) ミラー上で fsck(1M) を実行する。


    注 -

    ルートには正しいメタデバイスを使用するよう注意してください。



    # fsck /dev/md/rdsk/d0
    ** /dev/md/rdsk/d0
    ** Currently Mounted on /
    ** Phase 1 - Check Blocks and Sizes
    ** Phase 2 - Check Pathnames
    ** Phase 3 - Check Connectivity
    ** Phase 4 - Check Reference Counts
    ** Phase 5 - Check Cyl groups
    2274 files, 11815 used, 10302 free (158 frags, 1268 blocks,
    0.7% fragmentation)
  2. /etc/vfstab ファイルを編集できるよう、ルート (/) を読み書きモードでマウントする。


    # mount -o rw,remount /dev/md/dsk/d0 /
    mount: warning: cannot lock temp file </etc/.mnt.lock>
  3. metaroot(1M) コマンドを実行する。


    # metaroot d0
    

    これは /etc/system/etc/vfstab のファイルを編集して、ルート (/) ファイルシステムが現在メタデバイス d0 上にあることを指定します。

  4. /etc/vfstab ファイルに正しいメタデバイスエントリが収められていることを確認する。

    /etc/vfstab ファイル内のルート (/) エントリが次のようになっていると、ファイルシステムがミラーを正しく参照します。


    #device           device              mount    FS      fsck   mount   mount
    #to mount         to fsck             point    type    pass   at boot options
    #
    /dev/md/dsk/d0    /dev/md/rdsk/d0     /        ufs     1      no      -
    /dev/dsk/c0t3d0s1 -                   -        swap    -      no      -
    /dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6  /usr     ufs     2      no      -
    #
    /proc             -                  /proc     proc    -      no      -
    fd                -                  /dev/fd   fd      -      no      -
    swap              -                  /tmp      tmpfs   -      yes     -
  5. リブートする。

    システムは通常の動作に復帰します。

状態データベースの複製の不足からの回復方法 (コマンド行)

たとえば、ドライブの障害など、何らかの理由によって状態データベースの複製が規定数に満たない場合、システムはリブートできません。DiskSuite の用語では、これを状態データベースが「無効」になったと表現します。ここでは、その回復方法について説明します。

この作業の手順を次に示します。

例 - 無効な状態データベースの複製からの回復

次の例では、2 つの複製を含むディスクが不良となりました。システムには正常な複製が 2 つしか残されておらず、システムはリブートできません。

  1. マシンをブートして、どの状態データベースの複製が障害を受けているのかを判定する。


    ok boot
    ...
    Hostname: demo
    metainit: demo: stale databases
     
    Insufficient metadevice database replicas located.
     
    Use metadb to delete databases which are broken.
    Ignore any "Read-only file system" error messages.
    Reboot the system when finished to reload the metadevice
    database.
    After reboot, repair any broken database replicas which were
    deleted.
     
    Type Ctrl-d to proceed with normal startup,
    (or give root password for system maintenance): <パスワードを入力>
    Entering System Maintenance Mode
     
    SunOS Release 5.5 Version Generic [UNIX(R) System V Release 4.0]
  2. metadb(1M) コマンドを使用してメタデバイスの状態データベースを調べ、状態データベースの複製のうち、使用できないものを判定する。


    # metadb -i
       flags          first blk         block count
        a m  p  lu     16                1034             /dev/dsk/c0t3d0s3
        a    p  l      1050              1034             /dev/dsk/c0t3d0s3
        M    p         unknown           unknown          /dev/dsk/c1t2d0s3
        M    p         unknown           unknown          /dev/dsk/c1t2d0s3
    ...

    システムは、障害の発生したディスクに含まれるスライス /dev/dsk/c1t2d0s3 上では、もう状態データベースの複製を検出できません。metadb コマンドは、このスライス上の複製に対して、マスターブロックに障害があるというフラグを立てます。

  3. -d オプション付きの metadb(1M) コマンドを使用して、不良ディスク上の状態データベースの複製を削除する。

    この時点では、ルート (/) ファイルシステムは読み取り専用である。mddb.cf のエラーメッセージは無視できる。


    # metadb -d -f c1t2d0s3
    metadb: demo: /etc/lvm/mddb.cf.new: Read-only file
    system
  4. 複製が削除されたことを確認する。


    # metadb -i
       flags          first blk         block count
        a m  p  lu     16                1034             /dev/dsk/c0t3d0s3
        a    p  l      1050              1034             /dev/dsk/c0t3d0s3
  5. リブートする。

  6. 交換用のディスクを用意できたらシステムを停止し、故障したディスクを交換し、もう一度システムをリブートする。format(1M) コマンドまたは fmthard(1M) コマンドを使用して、ディスクを故障の前と同じようにパーティション分割する。


    # halt
    ...
    ok boot
    ...
    # format /dev/rdsk/c1t2d0s0
    ...
  7. metadb(1M) コマンドを使用して、状態データベースの複製を追加して戻し、状態データベースの複製が正常であることを確認する。


    # metadb -a -c 2 c1t2d0s3
    # metadb
       flags          first blk         block count
        a m  p  luo    16                1034             dev/dsk/c0t3d0s3
        a    p  luo    1050              1034             dev/dsk/c0t3d0s3
        a       u      16                1034             dev/dsk/c1t2d0s3
        a       u      1050              1034             dev/dsk/c1t2d0s3

    -c 2 オプション付きの metadb コマンドは、同じスライスに状態データベースの複製を 2 つ追加します。

ブートデバイス障害からの回復方法 (コマンド行)

ルート (/) ミラーがあり、ブートデバイスが故障した場合、代わりのブートデバイスを設定する必要があります。

この作業での手順を次に示します。

例 - ブートデバイス障害からの回復

次の例では、6 つの状態データベースの複製のうち 2 つと、ルート (/)、swap/usr の各サブミラーを含んだブートデバイスに障害が発生しました。

まず、ブートデバイスに障害が発生すると、次のようなメッセージが表示されます。このメッセージは、アーキテクチャによって異なります。


Rebooting with command:
Boot device: /iommu/sbus/dma@f,81000/esp@f,80000/sd@3,0   File and args: kadb
kadb: kernel/unix
The selected SCSI device is not responding
Can't open boot device
...

このメッセージが表示されたら、デバイスをメモしてから、次の手順に従います。

  1. 他のルート (/) サブミラーからブートする。

    この例では、6 つの状態データベースの複製のうち、エラーであるのは 2 つだけなので、まだブートが可能です。そうでない場合、シングルユーザーモードで無効な状態データベースの複製を削除する必要があります。この作業については、「状態データベースの複製の不足からの回復方法 (コマンド行)」を参照してください。

    ルート (/) ファイルシステム用のミラーを作成する場合、その作業の一部として、代替ブートデバイスを記録する必要があります。この例では、disk2 がその代替ブートデバイスです。


    ok boot disk2
    ...
    SunOS Release 5.5 Version Generic [UNIX(R) System V Release 4.0]
    Copyright (c) 1983-1995, Sun Microsystems, Inc.
     
    Hostname: demo
    ...
    demo console login: root
    Password: <パスワードを入力>
    Last login: Wed Dec 16 13:15:42 on console
    SunOS Release 5.1 Version Generic [UNIX(R) System V Release 4.0]
    ...
  2. metadb(1M) コマンドを使用して、2 つの状態データベースの複製が障害を受けていることを確認する。


    # metadb
       flags          first blk         block count
        M     p        unknown           unknown          /dev/dsk/c0t3d0s3
        M     p        unknown           unknown          /dev/dsk/c0t3d0s3
        a m  p  luo    16                1034             /dev/dsk/c0t2d0s3
        a    p  luo    1050              1034             /dev/dsk/c0t2d0s3
        a    p  luo    16                1034             /dev/dsk/c0t1d0s3
        a    p  luo    1050              1034             /dev/dsk/c0t1d0s3

    現在システムは、障害の発生したディスクの一部であるスライス /dev/dsk/c0t3d0s3 上の状態データベースの複製を検出することができません。

  3. metastat(1M) コマンドを使用して、ルート (/)、swap/usr の片方のミラーの半分が障害を受けていることを確認する。


    # metastat
    d0: Mirror
        Submirror 0: d10
          State: Needs maintenance
        Submirror 1: d20
          State: Okay
    ...
     
    d10: Submirror of d0
        State: Needs maintenance
        Invoke: "metareplace d0 /dev/dsk/c0t3d0s0 <new device>"
        Size: 47628 blocks
        Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        /dev/dsk/c0t3d0s0          0     No    Maintenance 
     
    d20: Submirror of d0
        State: Okay
        Size: 47628 blocks
        Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        /dev/dsk/c0t2d0s0          0     No    Okay  
     
    d1: Mirror
        Submirror 0: d11
          State: Needs maintenance
        Submirror 1: d21
          State: Okay
    ...
     
    d11: Submirror of d1
        State: Needs maintenance
        Invoke: "metareplace d1 /dev/dsk/c0t3d0s1 <new device>"
        Size: 69660 blocks
        Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        /dev/dsk/c0t3d0s1          0     No    Maintenance 
     
    d21: Submirror of d1
        State: Okay
        Size: 69660 blocks
        Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        /dev/dsk/c0t2d0s1          0     No    Okay        
     
    d2: Mirror
        Submirror 0: d12
          State: Needs maintenance
        Submirror 1: d22
          State: Okay
    ...
     
    d2: Mirror
        Submirror 0: d12
          State: Needs maintenance
        Submirror 1: d22
          State: Okay
    ...
     
    d12: Submirror of d2
        State: Needs maintenance
        Invoke: "metareplace d2 /dev/dsk/c0t3d0s6 <new device>"
        Size: 286740 blocks
        Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        /dev/dsk/c0t3d0s6          0     No    Maintenance 
     
     
    d22: Submirror of d2
        State: Okay
        Size: 286740 blocks
        Stripe 0:
        Device              Start Block  Dbase State        Hot Spare
        /dev/dsk/c0t2d0s6          0     No    Okay  

    この例では、metastat は、次のサブミラーに保守が必要なことを示します。

    • サブミラー d10、デバイス c0t3d0s0

    • サブミラー d11、デバイス c0t3d0s1

    • サブミラー d12、デバイス c0t3d0s6

  4. システムを停止し、ディスクを修復し、format(1M) コマンドまたは fmthard(1M) コマンドを使用して、ディスクを障害を受ける前と同じようにパーティション分割する。


    # halt
    ...
    Halted
    ...
    ok boot
    ...
    # format /dev/rdsk/c0t3d0s0
    
  5. リブートする。

    なお、ルート (/) ミラーの残った片方からリブートしなければなりません。ミラーを作成する際に、代替ブートデバイスを記録しておいてください。


    # halt
    ...
    ok boot disk2
    
  6. metadb(1M) コマンドを使用し、故障した状態データベースの複製を削除してから、追加して戻す。


    # metadb
       flags          first blk         block count
        M     p        unknown           unknown          /dev/dsk/c0t3d0s3
        M     p        unknown           unknown          /dev/dsk/c0t3d0s3
        a m  p  luo    16                1034             /dev/dsk/c0t2d0s3
        a    p  luo    1050              1034             /dev/dsk/c0t2d0s3
        a    p  luo    16                1034             /dev/dsk/c0t1d0s3
        a    p  luo    1050              1034             /dev/dsk/c0t1d0s3
    # metadb -d c0t3d0s3
    # metadb -c 2 -a c0t3d0s3
    # metadb
       flags          first blk         block count
        a m  p  luo    16               1034              /dev/dsk/c0t2d0s3
        a    p  luo    1050             1034              /dev/dsk/c0t2d0s3
        a    p  luo    16               1034              /dev/dsk/c0t1d0s3
        a    p  luo    1050             1034              /dev/dsk/c0t1d0s3
        a        u     16               1034              /dev/dsk/c0t3d0s3
        a        u     1050             1034              /dev/dsk/c0t3d0s3
  7. metareplace(1M) コマンドを使用して、サブミラーを再び有効にする。


    # metareplace -e d0 c0t3d0s0
    Device /dev/dsk/c0t3d0s0 is enabled
     
    # metareplace -e d1 c0t3d0s1
    Device /dev/dsk/c0t3d0s1 is enabled
     
    # metareplace -e d2 c0t3d0s6
    Device /dev/dsk/c0t3d0s6 is enabled

    しばらくすると、再同期が終了します。これで元のデバイスからブートできるようになります。

代替ブートデバイスへのパスを記録する方法 (コマンド行)

ルート (/) をミラー化するとき、後で一次デバイスが障害を受けた場合に、代替ブートデバイスへのパスが必要になることがあります。

例 - SPARC: 代替ブートデバイスパスの記録

この例では、ルート (/) ミラーに 2 番目のサブミラーとして接続されているスライス上で ls -l コマンドを使用することによって、代替ブートデバイスへのパスを調べます。


# ls -l /dev/rdsk/c1t3d0s0
lrwxrwxrwx 1  root root  55 Mar 5 12:54  /dev/rdsk/c1t3d0s0 -> ../.
./devices/sbus@1,f8000000/esp@1,200000/sd@3,0:a

ここでは、/devices ディレクトリに続く文字列を記録します。 /sbus@1,f8000000/esp@1,200000/sd@3,0:a

一部の新しい Sun ハードウェアでは、/devices ディレクトリ名を sd@ から disk@ に変更する必要があります。

OpenBoot PROM 付きのシステムを使用している DiskSuite ユーザーは、OpenBoot の nvalias コマンドを使用して、二次ルートミラー用の「バックアップルート」デバイス別名を定義できます。たとえば、


ok  nvalias backup_root /sbus@1,f8000000/esp@1,200000/sd@3,0:a

一次ルートディスクに障害が発生した場合、次のように入力します。


ok  boot backup_root

例 - x86: 代替ブートデバイスパスの記録

この例では、ルート (/) ミラーに 2 番目のサブミラーとして接続されているスライス上で ls -l コマンドを使用することによって、代替ブートデバイスへのパスを調べます。


# ls -l /dev/rdsk/c1t0d0s0
lrwxrwxrwx 1  root root  55 Mar 5 12:54  /dev/rdsk/c1t0d0s0 -> ../.
./devices/eisa/eha@1000,0/cmdk@1,0:a

ここでは、/devices ディレクトリに続く文字列を記録します。 /eisa/eha@1000,0/cmdk@1,0:a

SPARC: 代替デバイスからのブート方法 (コマンド行)

代替ブートデバイスから SPARC システムをブートするには、次のように入力します。


# boot <代替ブートデバイス>

代替ブートデバイスの確認方法については、「代替ブートデバイスへのパスを記録する方法 (コマンド行)」を参照してください。

x86: 代替デバイスからのブート方法 (コマンド行)

この作業は、代替ブートデバイスから x86 システムをブートするために使用します。

  1. マルチデバイスブート (MDB) フロッピーディスクからシステムをブートする。

    しばらくすると、次のような画面が表示されます。


    Solaris/x86 Multiple Device Boot Menu
    Code    Device    Vendor     Model/Desc          Rev
    ============================================================
     
    10      DISK      COMPAQ      C2244              0BC4
    11      DISK      SEAGATE     ST11200N SUN1.05   8808
    12      DISK      MAXTOR      LXT-213S SUN0207   4.24
    13      CD        SONY        CD-ROM CDU-8812    3.0a
    14      NET       SMC/WD      I/O=300 IRQ=5
    80      DISK      First IDE drive (Drive C:)
    81      DISK      Second IDE drive (Drive D:)
     
    Enter the boot device code:
  2. 画面に表示された選択項目の中から、代替ディスクのコードを入力する。

    次の画面が表示されます。


    Solaris 2.4 for x86                Secondary Boot Subsystem,vsn 2.11
     
                      <<<Current Boot Parameters>>>
    Boot path:/eisa/eha@1000,0/cmdk@0,0:a
    Boot args:/kernel/unix
     
    Type b[file-name] [boot-flags] <ENTER>     to boot with options
    or   i<ENTER>                              to enter boot interpreter
    or   <ENTER>                               to boot with defaults
     
                        <<<timeout in 5 seconds>>>
  3. i を入力してインタプリタを選択する。

  4. 次のコマンドを入力する。


    >setprop boot-path /eisa/eha@1000,0/cmdk@1,0:a
    >^D
    

    Control-D を入力して、インタプリタを終了します。