Solaris のシステム管理 (基本編)
  Search only this book
View this book in:
Download this book in PDF (3233 KB)

第 14 章 Solaris ブートアーカイブの管理 (手順)

この章では、Solaris OS でのブートアーカイブの管理について説明します。bootadm コマンドの詳細な使用手順も説明します。

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

ブートプロセスの概要については、第 9 章システムのシャットダウンとブート (概要)を参照してください。システムのブート手順については、第 12 章Solaris システムのブート (手順)を参照してください。

Solaris ブートアーカイブの管理 (作業マップ)

表 14–1 Solaris ブートアーカイブの管理: 作業マップ

作業 

説明 

参照先 

boot-archive サービスを管理します。

boot-archive サービスは、サービス管理機能 (SMF) によって制御されます。サービスを有効/無効にするには、svcadm コマンドを使用します。boot-archive サービスが実行されているかどうかを確認するには、svcs コマンドを使用します。

boot-archive サービスの管理」

boot-archive サービスをクリアーします。

この手順は、フェイルセーフアーカイブのブートに代わる方法として使用します。boot-archive サービスがクリアーされたあとで、bootadm コマンドが暗黙のうちに実行されてブートアーカイブが更新されます。

boot-archive サービスをクリアーして矛盾したブートアーカイブを更新する方法」

bootadm コマンドを使用してブートアーカイブを更新します。

ブートアーカイブを手動で更新する場合は、bootadm update-archive コマンドを使用します。

「ブートアーカイブを手動で更新する方法」

ミラー化ルート (/) パーティションのブートアーカイブを手動で更新します。

ルート (/) パーティションにメタデバイスミラーを使用するシステムでは、フェイルセーフアーカイブをブートし、bootadm update-archive コマンドを実行してブートアーカイブを手動更新すると失敗します。この問題は、ミラーがメタデバイスであるために発生します。そのため、ブートアーカイブは手動で更新してください。

「RAID-1 (ミラー) ボリューム上のブートアーカイブを手動で更新する方法」

bootadm コマンドを使用してブートアーカイブの内容を一覧表示します。

ブートアーカイブの内容を一覧表示する場合は、bootadm list-archive コマンドを使用します。

「ブートアーカイブの内容を一覧表示する方法」

x86 のみ: bootadm コマンドを使用してアクティブな GRUB メニューを検出します。

アクティブな GRUB メニューの場所を調べる場合は、bootadm list-menu コマンドを使用します。

「x86: アクティブな GRUB メニューを検出し、現在のメニューエントリを一覧表示する方法」

x86 のみ: bootadm コマンドを使用して GRUB メニューのデフォルトのブートエントリを設定します。

GRUB メニューのデフォルトのブートエントリを設定する場合は、bootadm set-menu コマンドを使用します。

「x86: アクティブな GRUB メニューのデフォルトのブートエントリを設定する方法」

Solaris ブートアーカイブの説明

Solaris OS をシステムにインストールすると、bootadm コマンドによって一次ブートアーカイブとフェイルセーフアーカイブが 1 つずつ作成されます。

「一次ブートアーカイブ」は、ルート (/) ファイルシステムのサブセットです。このブートアーカイブには、すべてのカーネルモジュール、driver.conf ファイル、およびいくつかの構成ファイルが含まれています。これらのファイルは、/etc ディレクトリにあります。ブートアーカイブ内のファイルは、ルート (/) ファイルシステムがマウントされる前に、カーネルによって読み取られます。ルート (/) ファイルシステムがマウントされると、ブートアーカイブはカーネルによってメモリーから破棄されます。次に、ファイル I/O がルートデバイスに実行されます。

SPARC ブートアーカイブを構成するファイルは、/platform ディレクトリにあります。

このディレクトリの内容は、3 つのグループのファイルに分けられます。

  • sun4u ブートアーカイブに必要なファイル

  • sun4v ブートアーカイブに必要なファイル

  • sun4us ブートアーカイブに必要なファイル

x86 ブートアーカイブを構成するファイルは、/platform/i86pc ディレクトリにあります。

ブートアーカイブに含まれるファイルとディレクトリを一覧表示するには、bootadm list-archive コマンドを使用します。

アーカイブ内のファイルが更新された場合は、ブートアーカイブを再構築する必要があります。変更を有効にするには、次にシステムがリブートする前にアーカイブを再構築する必要があります。

「フェイルセーフ」ブートアーカイブは、Solaris OS のインストール時に作成される 2 番目の種類のアーカイブです。

フェイルセーフブートアーカイブには、次のような利点と特徴があります。

  • 独立したブートアーカイブである

  • ブートアーカイブ自体でブートできる

  • デフォルトでは OS のインストール中に作成される

  • 保守の必要がない

フェイルセーフモードでのシステムのブートの詳細については、「SPARC システムでフェイルセーフアーカイブをブートする」および 「x86 システムでフェイルセーフアーカイブをブートする」を参照してください。

boot-archive サービスの管理

boot-archive サービスは、サービス管理機能 (SMF) によって制御されます。boot-archive サービスインスタンスは、svc:/system/boot-archive:default です。サービスを有効/無効にするには、svcadm コマンドを使用します。

boot-archive サービスが実行されているかどうかを確認するには、svcs コマンドを使用します。

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

Procedureboot-archive サービスを有効または無効にする方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

  2. boot-archive サービスを有効または無効にするには、次のように入力します。


    # svcadm enable | disable system/boot-archive
    
  3. boot-archive サービスの状態を確認するには、次のように入力します。


    % svcs boot-archive
    

    サービスが実行されている場合は、オンラインサービスの状態が表示されます。


    STATE          STIME    FMRI
    online          9:02:38 svc:/system/boot-archive:default

    サービスが実行されていない場合は、サービスがオフラインになっていることが表示されます。

注意事項

boot-archive サービスをクリアーしてブートアーカイブを更新する方法については、boot-archive サービスをクリアーして矛盾したブートアーカイブを更新する方法」を参照してください。

Procedureboot-archive サービスをクリアーして矛盾したブートアーカイブを更新する方法

boot-archive サービス svc:/system/boot-archive は SMF によって管理されます。次の手順では、ブートプロセス中に矛盾したアーカイブが検出されたときにブートアーカイブを更新する方法を示します。このサービスをクリアーすることは、boot -F failsafe コマンドを実行するのと同じ効果があります。この方法でブートアーカイブを更新すると、フェイルセーフアーカイブをブートしたり、bootadm update-archive コマンドを実行したりする必要がありません。 このコマンドは、boot-archive サービスがクリアーされたあとで暗黙のうちに実行されます。


注意 – 注意 –

矛盾したブートアーカイブを修正する場合は、フェイルセーフモードでシステムをブートすることをお勧めします。フェイルセーフアーカイブをブートする方法については、次の情報を参照してください。

SPARC システムの場合は、「SPARC システムをネットワークからブートする」を参照してください。

x86 システムの場合は、「x86 システムでフェイルセーフアーカイブをブートする」を参照してください。


  1. システムのブートプロセス中に、次のような警告が表示された場合は、その警告を無視します。


    WARNING: The following files in / differ from the boot archive:
    
        changed file-name
    

    システムがシステム保守モードに入ります。

  2. 次のコマンドを入力して、boot-archive サービスをクリアーします。


    # svcadm clear system/boot-archive
    

    このコマンドが実行されたあとで、bootadm update-archive コマンドが暗黙のうちに実行されます。ブートアーカイブが正常に更新されると、システムがリブートします。

  3. サービスが実行されていることを確認します。


    # svcs boot-archive
    STATE          STIME    FMRI
    online          9:02:38 svc:/system/boot-archive:default

例 14–1 SPARC: boot-archive サービスをクリアーして矛盾したブートアーカイブを更新する


screen not found.
Can't open input device.
Keyboard not present.  Using ttya for input and output.

Sun Enterprise 220R (2 X UltraSPARC-II 450MHz), No Keyboard
OpenBoot 3.23, 1024 MB memory installed, Serial #13116682.
Ethernet address 8:0:20:c8:25:a, Host ID: 80c8250a.



Rebooting with command: boot                                          
Boot device: /pci@1f,4000/scsi@3/disk@1,0:a  File and args: 
SunOS Release 5.10 64-bit
Copyright 1983-2007 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
DEBUG enabled
misc/forthdebug (507204 bytes) loaded
Hostname: marnie

WARNING: The following files in / differ from the boot archive:

    changed /kernel/drv/sd.conf

The recommended action is to reboot to the failsafe archive to correct
the above inconsistency. To accomplish this, on a GRUB-based platform,
reboot and select the "Solaris failsafe" option from the boot menu.
On an OBP-based platform, reboot then type "boot -F failsafe". Then
follow the prompts to update the boot archive. Alternately, to continue
booting at your own risk, you may clear the service by running:
"svcadm clear system/boot-archive"

Nov 21 15:47:20 svc.startd[100004]: svc:/system/boot-archive:default: Method 
"/lib/svc/method/boot-archive" failed with exit status 95.
Nov 21 15:47:20 svc.startd[100004]: system/boot-archive:default failed fatally: 
transitioned to maintenance (see 'svcs -xv' for details)
Requesting System Maintenance Mode
(See /lib/svc/share/README for more information.)
Console login service(s) cannot run

Root password for system maintenance (control-d to bypass): 
single-user privilege assigned to /dev/console.
Entering System Maintenance Mode

Nov 21 15:48:36 su: 'su root' succeeded for root on /dev/console
Sun Microsystems Inc.   SunOS 5.10, 
2007
.
.
.# 
# 
# svcadm clear system/boot-archive
# 
# NIS domain name is mpklab.sfbay.sun.com
/dev/rdsk/c0t1d0s5 is clean
Reading ZFS config: done.
#
# bootadm update-archive
# svcs boot-archive
STATE          STIME    FMRI
online          9:02:38 svc:/system/boot-archive:default

bootadm コマンドを使用してブートアーカイブを管理する

/sbin/bootadm コマンドを使用すると、次の作業を行えます。

  • システム上の現在のブートアーカイブを手動で更新する。

  • システム上のブートアーカイブに含まれるファイルとディレクトリを一覧表示する。

  • x86 のみ: GRUB メニューを保守する。

  • x86 のみ: アクティブな GRUB メニューと現在の GRUB メニューエントリを検出する。

このコマンドの構文は次のとおりです。


/sbin/bootadm [subcommand] [-option] [-R altroot]

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

Procedureブートアーカイブを手動で更新する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 現在のブートアーカイブを更新するには、次のように入力します。


    # bootadm update-archive
    
    bootadm

    システム上のブートアーカイブを管理します。

    update-archive

    必要に応じて、現在のブートアーカイブを更新します。SPARC と x86 の両方のシステムに適用されます。

    • 代替ルートのブートアーカイブを更新するには、次のように入力します。


      # bootadm update-archive -R /a
      
      -R altroot

      update-archive サブコマンドに適用する代替ルートパスを指定します。


      注 –

      -R オプションを使用して非大域ゾーンのルート (/) ファイルシステムを参照してはいけません。そのようにすると、大域ゾーンのファイルシステムが損傷したり、大域ゾーンのセキュリティーが低下したり、非大域ゾーンのファイルシステムが損傷したりする場合があります。zones(5) のマニュアルページを参照してください。


ProcedureRAID-1 (ミラー) ボリューム上のブートアーカイブを手動で更新する方法


注 –

ここで示す手順は、Solaris ボリュームマネージャー (SVM) を使用して作成および管理している RAID-1 (ミラー) ボリューム上での、ブートアーカイブの更新に適用されます。


ブートアーカイブとルート (/) ファイルシステムが矛盾した状態になると、システムのブート時にエラーメッセージが表示されます。通常は、システムをフェイルセーフモードでブートしてから、bootadm update-archive コマンドを実行して、ブートアーカイブを更新するという操作をお勧めします。ただし、ルート (/) ファイルシステムがミラー化メタデバイス (RAID-1 ボリューム) の場合は、この方法でブートアーカイブを正常に更新することはできません。

システムをフェイルセーフモードでブートすると、次のようなメッセージが表示されます。


Searching for installed OS instances...
/dev/dsk/c0t0d0s0 is under md control, skipping.
/dev/dsk/c1t3d0s0 is under md control, skipping.
No installed OS instance found.

このメッセージは、メタデバイスがスキップされたことを示します。ブートアーカイブを手動で更新するには、以下に説明している手順に従います。

  1. 矛盾するブートアーカイブのあるシステム上で、スーパーユーザーになるか、同等の役割を引き受けます。

  2. フェイルセーフアーカイブをブートします。

    システムがフェイルセーフモードでブートし、インストールされている OS のインスタンスを検索したあと、前に説明した“No installed OS instance found”というメッセージが返されます。ブートシーケンスが完了すると、コマンドプロンプトが表示されます。

  3. 一次サブミラーをマウントします。

    次に例を示します。


    # mount /dev/dsk/c0t0d0s0 /a
    

    注 –

    システムがフェイルセーフモードでブートされる場合は、metastat -p コマンドを使用して一次サブミラーを判断できません。どのスライスが一次サブミラーかについての情報は、フェイルセーフブートプロセス時にコンソールに出力されます。代わりにこの方法を使用して、一次サブミラーを判断できます。


  4. 単一のルート (/) パーティションを使用するように、/etc/vfstab ファイルを一時的に更新します。

    1. 元の vfstab ファイルのコピーを作成します。


      # cp /a/etc/vfstab /a/etc/vfstab.orig
      
    2. テキストエディタを使用して、vfstab ファイルを次のように編集します。

      1. ルート (/) ミラーメタデバイスの行をコメントアウトします。


        #device        device        mount        FS    fsck    mount    mount
        #to mount	to fsck        point        type    pass    at boot    options
        #
        .
        .
        .
        #/dev/md/dsk/d10    	/dev/md/rdsk/d10    /     ufs    1    no    -

        前の例では、/dev/md/dsk/d10 の行がコメントアウトされました。

      2. 一次サブミラーのディスクデバイス用の新しい行を追加します。


        #device        device        mount        FS    fsck    mount    mount
        #to mount	to fsck        point        type    pass    at boot    options
        #
        .
        .
        .
        #/dev/md/dsk/d10	/dev/md/rdsk/d10    /     ufs    1    no    -
        /dev/dsk/c0t0d0s0	/dev/rdsk/c0t0d0s0  /     ufs    1    no    -
        .
        .
        .

        前の例では、一次サブミラーのディスクデバイス用の新しい行として /dev/dsk/c0t0d0s0 が追加されました。

    3. 変更を保存します。

  5. システムがメタデバイスからのブートを試行しないように、/etc/system ファイルを次のように一時的に更新します。

    1. 元の /etc/system ファイルのコピーを作成します。


      # cp /a/etc/system /a/etc/system.orig
      
    2. テキストエディタを使用して /etc/system ファイルを編集し、rootdev 行をコメントアウトします。この行は、Begin MDD root 行と End MDD root 行の間にあります。


      * Begin MDD root info (do not edit)
      # rootdev:/pseudo/md@0:0,0,blk
      * End MDD root info (do not edit)
    3. 変更を保存します。

  6. 次のコマンドを実行して、ブートアーカイブを更新します。


    # bootadm update-archive -R /a
    
  7. 一次サブミラーのマウントを解除してから、システムをリブートします。


    # umount /a
    
    • それでもシステムが正常にブートしない場合は、フェイルセーフアーカイブをリブートし、/etc/vfstab ファイルと /etc/system ファイルの情報が正しいことを確認してください。

  8. システムのリブートに成功したら、メタデバイスを再構築します。

    1. vfstab ファイルからルート (/) ミラーメタデバイスの名前を取得します。

      メタデバイスの名前は、手順 5 でコメントアウトした行です。

    2. metastat コマンドを使用して、ミラーのコンポーネントを表示します。

      次に例を示します。


      # metastat -p
      d10 -m d0 d1 1
      d0 1 1 c0t0d0s0
      d1 1 1 c1t3d0s0
    3. 障害の発生したサブミラーを切り離します。


      # metadetach mirror submirror
      

      次に例を示します。


      # metadetach d10 d1
      
    4. 既存の /etc/vfstab ファイルのコピーを元のファイルで置き換えます。


      # cp /etc/vfstab.orig /etc/vfstab
      
    5. 既存の /etc/system ファイルのコピーを元のファイルで置き換えます。


      # cp /etc/system.orig /etc/system
      
    6. システムを再起動します。


      # shutdown -i 6
      

    システムのリブート後、ミラー化ルート (/) パーティションがメタデバイス上に復元されます。

  9. 前の手順で切り離したサブミラーを再接続します。


    # metattach mirror submirror
    

    次に例を示します。


    # metattach d10 d1
    

    ミラーの再同期が始まります。

  10. 再同期処理の状態を確認するには、metastat コマンドを使用します。


    # metastat | grep `Resync in progress'
    

    何の出力も返されない場合、プロセスは完了しています。


例 14–2 SPARC: RAID-1 (ミラー) ボリューム上のブートアーカイブの手動更新

この例では、SVM ルート (/) のミラー化メタデバイスのあるシステム上のブートアーカイブを手動で更新する手順を示します。この例で使用したシステムは、Solaris 10 10/08 リリースが稼動している SPARC システムです。


SunOS Release 5.10 Version Generic_137137-09 64-bit
Copyright 1983-2008 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
WARNING: Unexpected EOF on line 14 of /kernel/drv/md.conf
Hostname: pilgrim1

WARNING: The following files in / differ from the boot archive:

    changed /kernel/drv/md.conf

The recommended action is to reboot to the failsafe archive to correct
the above inconsistency. To accomplish this, on a GRUB-based platform,
reboot and select the "Solaris failsafe" option from the boot menu.
On an OBP-based platform, reboot then type "boot -F failsafe". Then
follow the prompts to update the boot archive. Alternately, to continue
booting at your own risk, you may clear the service by running:
"svcadm clear system/boot-archive"

Sep 18 15:22:06 svc.startd[7]: svc:/system/boot-archive:default: 
Method "/lib/svc/method/boot-archive" failed with exit status 95.
Sep 18 15:22:06 svc.startd[7]: system/boot-archive:default
failed fatally: transitioned to maintenance (see 'svcs -xv' for details)
Requesting System Maintenance Mode
(See /lib/svc/share/README for more information.)
Console login service(s) cannot run

Root password for system maintenance (control-d to bypass):
single-user privilege assigned to /dev/console.
Entering System Maintenance Mode

Sep 18 15:22:18 su: 'su root' succeeded for root on /dev/console
Sun Microsystems Inc.    SunOS 5.10  Generic  January 2005
# reboot -- "-F failsafe"
syncing file systems... done
rebooting...
Resetting ...
Rebooting with command: boot -F failsafe
Boot device: /pci@1f,4000/scsi@3/disk@0,0:a  File and args: -F failsafe
SunOS Release 5.10 Version Generic_137137-08	 64-bit
Copyright 1983-2008 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Configuring devices.
Searching for installed OS instances...
/dev/dsk/c0t0d0s0 is under md control, skipping.
/dev/dsk/c1t3d0s0 is under md control, skipping.
No installed OS instance found.

Starting shell.

# mount /dev/dsk/c0t0d0s0 /a
# cp /a/etc/vfstab /a/etc/vfstab.orig
# vi /a/etc/vfstab

<< input changes to vfstab file, then save changes >>

# cp /a/etc/system /a/etc/system.orig
# vi /a/etc/system

<< input changes to /etc/system file, then save changes >>

# bootadm update-archive -R /a
Creating boot_archive for /a
updating /a/platform/sun4u/boot_archive
15+0 records in
15+0 records out
# umount /a
# shutdown -i 6

<< reboot the system >>

Rebooting with command: boot
Boot device: /pci@1f,4000/scsi@3/disk@0,0:a  File and args:
SunOS Release 5.10 Version Generic_137137-08  64-bit
Copyright 1983-2008 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
[...]
# metastat -p d10
# metadetach d10 d1
# cp /etc/vfstab.orig /etc/vfstab
# cp //etc/system.orig /etc/system
# shutdown -i 6

<< reboot the system >>

Rebooting with command: boot
Boot device: /pci@1f,4000/scsi@3/disk@0,0:a  File and args:
SunOS Release 5.10 Version Generic_137137-08 64-bit
Copyright 1983-2008 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
[...]
# metattach d10 d1
# metastat | grep 'Resync in progress'
    Resync in progress: 4 % done
# metastat | grep 'Resync in progress'

Procedureブートアーカイブの内容を一覧表示する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. ブートアーカイブに含まれるファイルとディレクトリを一覧表示するには、次のように入力します。


    # bootadm list-archive
    
    list-archive

    ブートアーカイブに含まれるファイルとディレクトリを一覧表示します。SPARC と x86 の両方のシステムに適用されます。

Procedurex86: アクティブな GRUB メニューを検出し、現在のメニューエントリを一覧表示する方法

次の手順に従って、アクティブな GRUB メニューの場所を調べ、現在の GRUB メニューエントリを一覧表示します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. アクティブな GRUB メニューの場所と現在の GRUB メニューエントリを一覧表示するには、次のように入力します。


    # bootadm list-menu
    
    list-menu

    アクティブな GRUB メニューの場所と現在の GRUB メニューエントリを一覧表示します。autoboot-timeout、デフォルトのエントリ番号、および各エントリのタイトルに関する情報がこのリストに表示されます。x86 システムだけに適用されます。


例 14–3 アクティブな GRUB メニューの場所と現在の GRUB メニューエントリを一覧表示する


# bootadm list-menu
The location for the active GRUB menu is: /stubboot/boot/grub/menu.lst
default=0
timeout=10
(0) Solaris10
(1) Solaris10 Failsafe
(2) Linux

Procedurex86: アクティブな GRUB メニューのデフォルトのブートエントリを設定する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. アクティブな GRUB メニューのデフォルトのブートエントリを設定するには、次のように入力します。


    # bootadm set-menu menu-entry
    
    set-menu

    GRUB メニューを保守します。アクティブな GRUB メニューの場所は boot/grub/menu.lst です。x86 システムだけに適用されます。

    menu-entry

    デフォルトとして設定する GRUB メニューエントリを指定します。

  3. デフォルトのメニューエントリが変更されていることを確認するには、次のように入力します。


    # bootadm list-menu
    

    新しいデフォルトのメニューエントリが表示されるはずです。


例 14–4 GRUB のデフォルトのメニューエントリを切り替える

次の例は、デフォルトの GRUB メニューを、前の例に表示されているメニューエントリのいずれかに切り替える方法を示しています。選択したメニューエントリは、Linux (メニューエントリ 2) です。


# bootadm set-menu default=2

参照

それぞれの GRUB 実装における menu.lst ファイルについては、「x86: サポートされている GRUB 実装」を参照してください。