Solaris のシステム管理 (基本編)

第 14 章 Oracle Solaris システムのブートのトラブルシューティング (手順)

この章では、SPARC システムおよび x86 システムで Oracle Solaris をブートする手順について説明します。

この章の内容は次のとおりです。

SPARC プラットフォームのブートのトラブルシューティング (作業マップ)

作業 

説明 

参照先 

復旧を目的としてシステムを停止します。  

破損したファイルによってシステムのブートが正常に行えない場合は、最初にシステムを停止して復旧を試みます。 

「SPARC: 復旧を目的としてシステムを停止する方法」

強制的にシステムのクラッシュダンプを実行し、システムをリブートします。 

トラブルシューティング手段としてシステムのクラッシュダンプとリブートを強制的に実行できます。 

「SPARC: クラッシュダンプを強制してシステムをリブートする方法」

復旧を目的として SPARC システムをブートします。 

システムをブートして、システムの正常なブートを妨げている重要なシステムファイルを修復します。 

「SPARC: 復旧を目的としてシステムをブートする方法」

Oracle Solaris ZFS ルートの存在する SPARC システムを、復旧目的でブートします。 

システムをブートして、Oracle Solaris ZFS ルート環境への正常なログインを妨げている root パスワードまたは類似の問題から復旧します。エラーの重大度に応じて、フェイルセーフモードでブートするか、代替メディアからブートする必要があります。

「SPARC: ZFS ルート環境をブートして、パスワード消失または類似の問題から復旧する方法」

カーネルデバッガを使ってシステムをブートします。 

カーネルデバッガを使ってシステムをブートして、ブート問題のトラブルシューティングを実行できます。システムのブートには kmdb コマンドを使用します。

「SPARC: カーネルデバッガ (kmdb) を使ってシステムをブートする方法」

システムの正常なブートを妨げている問題のトラブルシューティングには、次の方法が 1 つ以上必要になることがあります。

ProcedureSPARC: 復旧を目的としてシステムを停止する方法

  1. システムの アボートキーシーケンスを入力します。

    モニターに、ok PROM プロンプトが表示されます。


    ok

    アボートキーシーケンスは、キーボードのタイプによって異なります。たとえば、Stop + A または L1 + A キーを押します。端末では、Break キーを押します。

  2. ファイルシステムを同期させます。


    ok sync
    
  3. syncing file systems... というメッセージが表示されたら、アボートキーシーケンスをもう一度入力します。

  4. 該当する boot コマンドを入力して、ブートプロセスを起動します。

    詳細は、boot(1M) のマニュアルページを参照してください。

  5. システムが指定した実行レベルになっていることを確認します。


    # who -r
     .       run-level s  May  2 07:39     3      0  S

例 14–1 SPARC: 復旧を目的としてシステムを停止する


Press Stop-A
ok sync
syncing file systems...
Press Stop-A
ok boot

SPARC: クラッシュダンプを強制してシステムをリブートする

場合によっては、トラブルシューティングの目的でクラッシュダンプを強制実行し、システムをリブートする必要があります。デフォルトでは、savecore 機能を使用できます。

システムのクラッシュダンプについては、『Solaris のシステム管理 (上級編)』の第 17 章「システムクラッシュ情報の管理 (手順)」を参照してください。

ProcedureSPARC: クラッシュダンプを強制してシステムをリブートする方法

システムのクラッシュダンプを強制実行するには、次の手順を実行します。この手順のあとに紹介する例は、halt -d コマンドを使用してシステムのクラッシュダンプを強制実行する方法を示しています。このコマンドの実行後は、手動でシステムをリブートする必要があります。

  1. システムのアボートキーシーケンスを入力します。

    アボートキーシーケンスは、キーボードのタイプによって異なります。たとえば、Stop + A または L1 + A キーを押します。端末では、Break キーを押します。

    ok PROM プロンプトが表示されます。

  2. ファイルシステムを同期させ、クラッシュダンプを書き出します。


    > n
    ok sync
    

    クラッシュダンプがディスクに書き出されると、システムはそのままリブートします。

  3. システムが実行レベル 3 になっていることを確認します。

    ブートプロセスが正常に終了すると、ログイン画面かログインプロンプトが表示されます。


    hostname console login:

例 14–2 SPARC: halt -d コマンドを使用してシステムのクラッシュダンプとリブートを強制実行する

次の例は、halt -dboot の各コマンドを使用して、システム jupiter のクラッシュダンプとリブートを強制実行する方法を示しています。システムのクラッシュダンプとリブートを強制実行する場合は、この方法を使用してください。


# halt -d
Jul 21 14:13:37 jupiter halt: halted by root

panic[cpu0]/thread=30001193b20: forced crash dump initiated at user request

000002a1008f7860 genunix:kadmin+438 (b4, 0, 0, 0, 5, 0)
  %l0-3: 0000000000000000 0000000000000000 0000000000000004 0000000000000004
  %l4-7: 00000000000003cc 0000000000000010 0000000000000004 0000000000000004
000002a1008f7920 genunix:uadmin+110 (5, 0, 0, 6d7000, ff00, 4)
  %l0-3: 0000030002216938 0000000000000000 0000000000000001 0000004237922872
  %l4-7: 000000423791e770 0000000000004102 0000030000449308 0000000000000005

syncing file systems... 1 1 done
dumping to /dev/dsk/c0t0d0s1, offset 107413504, content: kernel
100% done: 5339 pages dumped, compression ratio 2.68, dump succeeded
Program terminated
ok boot
Resetting ... 

Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 333MHz), No Keyboard
OpenBoot 3.15, 128 MB memory installed, Serial #10933339.
Ethernet address 8:0:20:a6:d4:5b, Host ID: 80a6d45b.

Rebooting with command: boot
Boot device: /pci@1f,0/pci@1,1/ide@3/disk@0,0:a
File and args: kernel/sparcv9/unix
SunOS Release 5.10 Version s10_60 64-bit
Copyright 1983-2004 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
configuring IPv4 interfaces: hme0.
add net default: gateway 172.20.27.248
Hostname: jupiter
The system is coming up.  Please wait.
NIS domain name is example.com
.
.
.
System dump time: Wed Jul 21 14:13:41 2004
Jul 21 14:15:23 jupiter savecore: saving system crash dump
in /var/crash/jupiter/*.0
Constructing namelist /var/crash/jupiter/unix.0
Constructing corefile /var/crash/jupiter/vmcore.0
100% done: 5339 of 5339 pages saved

Starting Sun(TM) Web Console Version 2.1-dev...
.
.
.

ProcedureSPARC: 復旧を目的としてシステムをブートする方法

次の手順は、/etc/passwd などの重要なファイルに、無効なエントリがあり正常にブートできない場合に使用します。

root パスワードがわからない場合やシステムにログインできない場合は、この手順で示すアボートキーシーケンスを使用します。詳細は、「SPARC: 復旧を目的としてシステムを停止する方法」を参照してください。

次の手順で使用されている変数 device-name は、修復するファイルシステムのデバイス名に置き換えてください。システムのデバイス名を調べる場合は、『Solaris のシステム管理 (デバイスとファイルシステム)』「デバイス構成情報の表示」を参照してください。

  1. システムのアボートキーシーケンスを使用して、システムを停止します。

  2. システムをシングルユーザーモードでブートします。

    • Oracle Solaris インストールメディアからシステムをブートします。

      • Oracle Solaris インストールメディアをドライブに挿入します。

      • Solaris SOFTWARE - 1 CD または DVD から、シングルユーザーモードでブートします。


        ok boot cdrom -s
        
    • ネットワーク (インストールサーバーまたはリモート CD/DVD ドライブが使用できない場合) からシステムをブートします。


      ok boot net -s
      
  3. ファイル内に無効なエントリがあるファイルシステムをマウントします。


    # mount /dev/dsk/device-name /a
    
  4. 新しくマウントしたファイルシステムに移動します。


    # cd /a/file-system
    
  5. 端末タイプを設定します。


    # TERM=sun
    # export TERM
    
  6. エディタを使って、ファイルから無効なエントリを削除します。


    # vi filename
    
  7. ルート (/) ディレクトリに変更します。


    # cd /
    
  8. /a ディレクトリのマウントを解除します。


    # umount /a
    
  9. システムを再起動します。


    # init 6
    
  10. システムが実行レベル 3 になっていることを確認します。

    ブートプロセスが正常に終了すると、ログイン画面かログインプロンプトが表示されます。


    hostname console login:

例 14–3 SPARC: 復旧を目的としてシステムをブートする (パスワードファイルが損傷した場合)

次の例は、ローカルの CD-ROM からブートしたあとで重要なシステムファイル (この場合は /etc/passwd) を修復する方法を示しています。


ok boot cdrom -s
# mount /dev/dsk/c0t3d0s0 /a
# cd /a/etc
# TERM=vt100
# export TERM
# vi passwd
(Remove invalid entry)
# cd /
# umount /a
# init 6


例 14–4 SPARC: root パスワードを忘れた場合にシステムをブートする

次の例は、root パスワードを忘れた場合にネットワークからシステムをブートする方法を示しています。この例では、ネットワークのブートサーバーが利用可能になっていることを前提とします。システムをリブートしたあとで必ず新しい root パスワードを適用してください。


ok boot net -s
# mount /dev/dsk/c0t3d0s0 /a
# cd /a/etc
# TERM=vt100
# export TERM
# vi shadow
(Remove root's encrypted password string)
# cd /
# umount /a
# init 6

ProcedureSPARC: ZFS ルート環境をブートして、パスワード消失または類似の問題から復旧する方法

  1. システムをフェイルセーフモードでブートします。


    ok boot -F failsafe
    
  2. プロンプトが表示されたら、ZFS BE を /a にマウントします。


    .
    .
    ROOT/zfsBE was found on rpool.
    Do you wish to have it mounted read-write on /a? [y,n,?] y
    mounting rpool on /a
    Starting shell.
  3. スーパーユーザーになります。

  4. /a/etc ディレクトリに移動します。


    # cd /a/etc
    
  5. passwd または shadow ファイルを修正します。


    # vi passwd
    
  6. システムを再起動します。


    # init 6
    

ProcedureSPARC: カーネルデバッガ (kmdb) を使ってシステムをブートする方法

この手順では、カーネルデバッガ (kmdb) を読み込むための基本的な操作を示します。詳細は、『Oracle Solaris モジューラデバッガ』を参照してください。


注 –

システムを対話式でデバッグする時間がない場合は、-d オプションを指定して reboot コマンドと halt コマンドを使用します。-d オプションを指定して halt コマンドを実行するには、実行後にシステムを手動でリブートする必要があります。これに対し、reboot コマンドを使用した場合、システムは自動的にブートします。詳細は、reboot(1m) のマニュアルページを参照してください。


  1. システムを停止します。これにより、ok プロンプトが表示されます。

    システムを正常に停止するには、/usr/sbin/halt コマンドを使用します。

  2. boot kmdb または boot -k のどちらかを入力して、カーネルデバッガの読み込みを要求します。Return キーを押します。

  3. カーネルデバッガを入力します。

    デバッガを入力するための方法は、システムのアクセスに使用するコンソールのタイプによって異なります。

    • ローカル接続されたキーボードを使用している場合は、キーボードのタイプに応じて Stop + A または L1 + A キーを押してください。

    • シリアルコンソールを使用している場合は、使用中のシリアルコンソールのタイプに適した方法でブレークを送信します。

    カーネルデバッガを初めて入力したときに、ウェルカムメッセージが表示されます。


    Rebooting with command: kadb
    Boot device: /iommu/sbus/espdma@4,800000/esp@4,8800000/sd@3,0
    .
    .
    .

例 14–5 SPARC: システムをカーネルデバッガ (kmdb) でブートする


ok boot kmdb
Resetting...

Executing last command: boot kmdb -d
Boot device: /pci@1f,0/ide@d/disk@0,0:a File and args: kmdb -d
Loading kmdb...

x86 プラットフォームのブートのトラブルシューティング (作業マップ)

作業 

説明 

参照先 

復旧を目的としてシステムを停止します。  

破損したファイルによってシステムのブートが正常に行えない場合は、最初にシステムを停止して復旧を試みます。 

「x86: 復旧を目的としてシステムを停止する方法」

強制的にシステムのクラッシュダンプを実行し、システムをリブートします。 

トラブルシューティング手段としてシステムのクラッシュダンプとリブートを強制的に実行できます。 

「x86: クラッシュダンプを強制してシステムをリブートする方法」

カーネルデバッガを使ってシステムをブートします。 

カーネルデバッガを使ってシステムをブートして、ブート問題のトラブルシューティングを実行できます。システムのブートには kmdb コマンドを使用します。

「x86: GRUB ブート環境でカーネルデバッガ (kmdb) を使ってシステムをブートする方法」

Procedurex86: 復旧を目的としてシステムを停止する方法

  1. 可能であれば、次のいずれかのコマンドを使用してシステムを停止します。

    • キーボードとマウスを使用できる場合は、スーパーユーザーになります。次に、init 0 と入力してシステムを停止します。Press any key to reboot プロンプトが表示されたら、任意のキーを押してシステムをリブートします。

    • キーボードやマウスが動作する場合は、スーパーユーザーになり、init 6 と入力してシステムをリブートします。

  2. マウスまたはキーボードからの入力にシステムが応答しない場合、リセットキーがあればそのキーを押してシステムをリブートします。

    あるいは、電源スイッチを使用してシステムをリブートします。

x86: クラッシュダンプを強制してシステムをリブートする

場合によっては、トラブルシューティングの目的でクラッシュダンプを強制実行し、システムをリブートする必要があります。デフォルトでは、savecore 機能を使用できます。

システムのクラッシュダンプについては、『Solaris のシステム管理 (上級編)』の第 17 章「システムクラッシュ情報の管理 (手順)」を参照してください。

Procedurex86: クラッシュダンプを強制してシステムをリブートする方法

reboot -d コマンドまたは halt -d コマンドを使用できない場合は、カーネルデバッガ kmdb を使用してクラッシュダンプを強制的に実行できます。次の手順を実行するには、ブート時または mdb -k コマンド経由でカーネルデバッガが読み込まれている必要があります。


注 –

カーネルデバッガ (kmdb) にアクセスするにはテキストモードでなければなりません。したがって、まずウィンドウシステムを終了してください。


  1. カーネルデバッガにアクセスします。

    デバッガにアクセスするための方法は、システムへのアクセスに使用するコンソールのタイプによって異なります。

    • ローカル接続されているキーボードを使用している場合は、F1–A を押します。

    • シリアルコンソールを使用している場合は、そのシリアルコンソールタイプに適した方法で ブレークを送信します。

    kmdb プロンプトが表示されます。

  2. クラッシュを強制実行するために、systemdump マクロを使用します。


    [0]> $<systemdump
    

    パニックメッセージが表示され、クラッシュダンプが保存され、システムがリブートします。

  3. コンソールログインプロンプトでログインして、システムがリブートされていることを確認します。


例 14–6 x86: halt -d コマンドを使用してシステムのクラッシュダンプとリブートを強制実行する

この例は、halt -d コマンドと boot コマンドを使って、x86 システム neptune のクラッシュダンプとリブートを強制実行する方法を示しています。システムのクラッシュダンプを強制するには、この方法を使用してください。このあとに、システムを手動でリブートします。


# halt -d
4ay 30 15:35:15 wacked.Central.Sun.COM halt: halted by user

panic[cpu0]/thread=ffffffff83246ec0: forced crash dump initiated at user request

fffffe80006bbd60 genunix:kadmin+4c1 ()
fffffe80006bbec0 genunix:uadmin+93 ()
fffffe80006bbf10 unix:sys_syscall32+101 ()

syncing file systems... done
dumping to /dev/dsk/c1t0d0s1, offset 107675648, content: kernel
NOTICE: adpu320: bus reset
100% done: 38438 pages dumped, compression ratio 4.29, dump succeeded

Welcome to kmdb
Loaded modules: [ audiosup crypto ufs unix krtld s1394 sppp nca uhci lofs 
genunix ip usba specfs nfs md random sctp ]
[0]> 
kmdb: Do you really want to reboot? (y/n) y

Procedurex86: GRUB ブート環境でカーネルデバッガ (kmdb) を使ってシステムをブートする方法

この手順では、カーネルデバッガ ( kmdb) を読み込むための基本的な操作を示します。デフォルトでは、savecore 機能を使用できます。カーネルデバッガの使用方法の詳細については、『Solaris モジューラデバッガ』を参照してください。

  1. システムをブートします。

    システムがブートすると、GRUB メニューが表示されます。

  2. GRUB メニューが表示されたら、e と入力して GRUB 編集メニューにアクセスします。

  3. 矢印キーを使用して、kernel$ 行を選択します。

    矢印キーを使用できない場合は、^ キーを使って上方へスクロールしたり、v キーを使って下方へスクロールしたりします。

  4. e と入力して、その行を編集します。

    ブートエントリメニューが表示されます。このメニューで、kernel$ 行の末尾に追加のブート引数を指定して、ブート動作を変更できます。

  5. 行の終わりに -k と入力します。

  6. Enter キーを押して、GRUB メインメニューに戻ります。

  7. カーネルデバッガが使用可能な状態でシステムをブートするために、b と入力します。

  8. カーネルデバッガにアクセスします。

    デバッガにアクセスするための方法は、システムへのアクセスに使用するコンソールのタイプによって異なります。

    • ローカル接続されているキーボードを使用している場合は、F1–A を押します。

    • シリアルコンソールを使用している場合は、そのシリアルコンソールタイプに適した方法で ブレークを送信します。

    カーネルデバッガに初めてアクセスした場合、ウェルカムメッセージが表示されます。


例 14–7 x86: カーネルデバッガ (GRUB マルチブート実装) を使用してシステムをブートする

次の例は、64 ビット対応 x86 システムをカーネルデバッガが使用可能な状態で手動でブートする方法を示しています。


kernel$ /platform/i86pc/multiboot kernel/amd64/unix -k -B $ZFS-BOOTFS

次の例は、64 ビット対応 x86 システムをカーネルデバッガ使用可能な状態で 32 ビットモードでブートする方法を示しています。


kernel$ /platform/i86pc/multiboot kernel/unix -k -B $ZFS-BOOTFS