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

第 11 章 実行レベルとブートファイル (手順)

この章では、実行レベルとブートファイルに関する概要と手順について説明します。

この章で説明する手順は次のとおりです。

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

実行レベル

システムの「実行レベル」 (「init 状態」ともいう) は、ユーザーが使用できるサービスとリソースを定義します。システムが 1 度に持つことのできる実行レベルは 1 つだけです。

Solaris 環境には 8 つの実行レベルがあります (次の表を参照)。デフォルトの実行レベル 3 は、/etc/inittab ファイルに指定されています。

表 11–1 Solaris 実行レベル

実行レベル 

init 状態 

種類 

目的 

電源切断状態 

電源切断 

 

オペレーティングシステムをシャットダウンしてシステムの電源を安全に落とせるようにする。

s または S

シングルユーザー状態

シングルユーザー 

一部のファイルシステムがマウントされ使用可能な状態で、シングルユーザーとして動作する。 

システム管理状態 

シングルユーザー 

すべての使用可能なファイルシステムにアクセスする。ユーザーログインは使用不可である。

マルチユーザー状態 

マルチユーザー 

通常の運用に使用する。複数のユーザーがシステムとすべてのファイルシステムにアクセスできる。NFS サーバーデーモンを除く、すべてのデーモンが動作する。

NFS リソースを共有したマルチユーザーレベル

マルチユーザー 

NFS リソースを共有する通常の運用に使用する。Solaris 環境におけるデフォルトの実行レベル。

マルチユーザー状態 (予備) 

 

現在は使用できない。 

電源切断状態 

電源切断 

オペレーティングシステムをシャットダウンしてシステムの電源を安全に落とせるようにする。可能であれば、この機能をサポートしているシステムでは電源を自動的に切断する。 

リブート状態 

リブート 

システムをシャットダウンして実行レベル 0 にした後、NFS リソースを共有するマルチユーザーレベル (または、inittabファイルに指定されたデフォルト のレベル) でリブートする。

システムの実行レベルを確認する方法

who -r コマンドを使用すると、実行レベルに関する情報が表示されます。


$ who -r

who -r コマンドを使用して、システムの現在の実行レベルを調べます (ただし、実行レベル 0 を除く)。

例 — システムの実行レベルを確認する

次の例では、システムの現在の実行レベルと以前の実行レベルに関する情報を表示します。


$ who -r
 .    run-level 31  Dec 13 10:102   33   04 S5
$
  1. 現在の実行レベル

  2. 実行レベルが最後に変更された日時

  3. 現在の実行レベル

  4. 最後にリブートしてからシステムがこの実行レベルになった回数

  5. 以前の実行レベル

/etc/inittab ファイル

init または shutdown コマンドを使用してシステムをブートしたり実行レベルを変更したりすると、init デーモンは、/etc/inittab ファイルから情報を読み取ってプロセスを起動します。/etc/inittab ファイルには、init プロセスにとって重要な 3 つの情報が定義されています。

/etc/inittab ファイル内の各エントリは、次のフィールドからなります。

id:rstate :action :process

次の表に、inittab エントリの各フィールドを要約します。

表 11–2 inittab ファイルのフィールドの説明

フィールド 

説明 

id

エントリに固有の (一意の) 識別子。 

rstate

このエントリが適用される実行レベルのリスト。 

action

プロセスフィールドに指定されたプロセスの実行方法。指定できる値は、initdefaultsysinitbootbootwaitwait、および respawn

initdefault はデフォルトの実行レベル。他の action キーワードについては、inittab(4) のマニュアルページを参照。

process

実行するコマンドまたはスクリプトを定義する。 

例 — デフォルトの inittab ファイル

次の例では、Solaris リリースでインストールされるデフォルトの inittab ファイルを注釈付きで示します。


 

1 ap::sysinit:/sbin/autopush -f /etc/iu.ap
2 ap::sysinit:/sbin/soconfig -f /etc/sock2path
3 fs::sysinit:/sbin/rcS sysinit    >/dev/msglog 2<>/dev/msglog </dev/console
4 is:3:initdefault:
5 p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0>/dev/msglog 2<>/dev/...
6 sS:s:wait:/sbin/rcS              >/dev/msglog 2<>/dev/msglog </dev/console
7 s0:0:wait:/sbin/rc0              >/dev/msglog 2<>/dev/msglog </dev/console
8 s1:1:respawn:/sbin/rc1           >/dev/msglog 2<>/dev/msglog </dev/console
9 s2:23:wait:/sbin/rc2             >/dev/msglog 2<>/dev/msglog </dev/console
10 s3:3:wait:/sbin/rc3             >/dev/msglog 2<>/dev/msglog </dev/console
11 s5:5:wait:/sbin/rc5             >/dev/msglog 2<>/dev/msglog </dev/console
12 s6:6:wait:/sbin/rc6             >/dev/msglog 2<>/dev/msglog </dev/console
13 fw:0:wait:/sbin/uadmin 2 0      >/dev/msglog 2<>/dev/msglog </dev/console
14 of:5:wait:/sbin/uadmin 2 6      >/dev/msglog 2<>/dev/msglog </dev/console
15 rb:6:wait:/sbin/uadmin 2 1      >/dev/msglog 2<>/dev/msglog </dev/console
16 sc:234:respawn:/usr/lib/saf/sac -t 300
17 co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " 
   -T terminal-type -d /dev/console -l console
-m ldterm,ttcompat  
  1. STREAMS モジュールを初期化します。

  2. ソケット転送プロバイダを構成します。

  3. ファイルシステムを初期化します。

  4. デフォルトの実行レベルを定義します。

  5. 電源障害の場合のシャットダウンを指定します。

  6. シングルユーザーレベルを定義します。

  7. 実行レベル 0 を定義します。

  8. 実行レベル 1 を定義します。

  9. 実行レベル 2 を定義します。

  10. 実行レベル 3 を定義します。

  11. 実行レベル 5 を定義します。

  12. 実行レベル 6 を定義します。

  13. 未使用レベル firmware を定義します。

  14. 未使用レベル off を定義します。

  15. 未使用レベル reboot を定義します。

  16. サービスアクセスコントローラを初期化します。

  17. コンソールを初期化し、端末のタイプを識別します。

システムが実行レベル 3 になると実行される処理

  1. init プロセスが起動されます。init プロセスは、/etc/default/init ファイルを読み取って環境変数を設定します。デフォルトでは、TIMEZONE 変数だけが設定されます。

  2. initinittab ファイルを読み取り、次の処理を行います。

    1. デフォルトの実行レベル 3 を定義する initdefault エントリを識別します。

    2. action フィールドが sysinit になっているすべてのプロセスエントリを実行して、ユーザーがログインする前に特別な初期設定処理がすべて行われるようにします。

    3. rstate フィールドが 3 になっている (デフォルトの実行レベル 3 と一致する) プロセスエントリを実行します。

      init プロセスが inittab ファイルを使用する方法の詳細は、init(1M) のマニュアルページを参照してください。

次の表に、実行レベル 3 の action フィールドに使用するキーワードの説明を示します。

表 11–3 実行レベル 3 の action キーワードの説明

キーワード 

説明 

powerfail

init プロセスが電源切断シグナルを受信したときにだけプロセスを起動する。

respawn

プロセスを起動し、そのプロセスが終了したら再起動する。 

wait

プロセスを起動し、そのプロセスが終了するまで待ってから、この実行レベルの次のエントリに進む。 

次の表に、実行レベル 3 で実行されるプロセス (またはコマンド) の説明を示します。

表 11–4 実行レベル 3 のコマンドの説明

コマンドまたはスクリプト名 

説明 

/usr/sbin/shutdown

システムをシャットダウンする。init プロセスは、システムが電源切断シグナルを受信した場合にのみ shutdown コマンドを実行する。

/sbin/rcS

ルート ( /)、/usr/tmp/var/var/adm、および /var/run ファイルシステムをチェックし、マウントする。

/sbin/rc2

標準のシステムプロセスを起動して、システムを実行レベル 2 (マルチユーザーレベル) に移行する。 

/sbin/rc3

実行レベル 3 で使用される NFS リソース共有を開始する。 

/usr/lib/saf/sac -t 30

ポートモニターを起動する。このプロセスは失敗すると再起動される。 

/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T terminal_type -d /dev/console -l console

コンソールでのログイン要求を監視する ttymon プロセスを起動する。このプロセスは失敗すると再起動される。

SPARC システムの terminal_typesun である。

x86 システムの terminal_typeAT386 である。

実行制御スクリプト

Solaris ソフトウェア環境では、一連の詳細な実行制御 (rc) スクリプトを使用して実行レベルの移行を制御しています。各実行レベルには次の rc スクリプトが対応しています。このスクリプトは、/sbin ディレクトリにあります。

/sbin ディレクトリ内の各 rc スクリプトには /etc/rcn.d という名前のディレクトリが対応しており、その中にはその実行レベルのさまざまな処理を実行するスクリプトがあります。たとえば、/etc/rc2.d には、実行レベル 2 のプロセスを起動および停止するためのファイル (スクリプト) があります。


# ls /etc/rc2.d
K03samba*          S20sysetup*        S72slpd*            S88utmpd*
K06mipagent*       S21perf*           S73cachefs.daemon*  S89PRESERVE*
K07dmi*            S30sysid.net*      S73nfs.client*      S89bdconfig@
K07snmpdx*         S40llc2*           S74autofs*          S90wbem*
K16apache*         S42ncakmod*        S74syslog*          S91afbinit*
K21dhcp*           S47pppd*           S74xntpd*           S91gfbinit*
K26sshd*           S69inet*           S75cron*            S91ifbinit*
K27boot.server*    S70sckm*           S75flashprom*       S92volmgt*
K28kdc*            S70uucp*           S75savecore*        S93cacheos.finish*
K28kdc.master*     S71ldap.client*    S76nscd*            S94ncalogd*
K28nfs.server*     S71rpc*            S77sf880dr*         S95IIim*
README             S71sysid.sys*      S80lp*              S95svm.sync*
S01MOUNTFSYS*      S72autoinstall*    S80spc*             S98efcode*
S05RMTMPFILES*     S72directory@      S85power*           S99audit*
S10lu*             S72inetsvc*        S88sendmail*        S99dtlogin*

/etc/rcn.d 内のスクリプトは常に、スクリプト名を ASCII 文字列としてソートした順に実行されます。スクリプト名の形式は次のとおりです。

[KS][0-9][0-9]*

名前が K で始まるスクリプトを実行すると、システムサービスが停止 (kill) します。名前が S で始まるスクリプトを実行すると、システムサービスが起動します。

実行制御スクリプトは、/etc/init.d ディレクトリにもあります。これらのファイルは、/etc/rcn.d ディレクトリ内の対応する実行制御スクリプトにリンクされています。

各実行制御スクリプトの処理については、次の節で要約します。

実行制御スクリプトのまとめ

以降の節に、実行レベルを変更したときにシステムサービスを起動および停止するための実行制御スクリプトをまとめてあります。

/sbin/rc0 スクリプト

/sbin/rc0 スクリプトは、/etc/rc0.d スクリプトを実行して次の作業を行います。

/sbin/rc1 スクリプト

/sbin/rc1 スクリプトは、/etc/rc1.d スクリプトを実行して次の作業を行います。

/sbin/rc2 スクリプト

/sbin/rc2 スクリプトは、/etc/rc2.d スクリプトを実行して、機能別にグループ化された次の作業を行います。

ローカルシステム関連の作業

ネットワークサービスまたはセキュリティ関連の作業

インストール関連の作業

ハードウェア関連の作業

実行レベルを変更したときは、次のサービスを移行します。


注 –

実行レベル 2 で起動されるシステムサービスとアプリケーションの多くは、システム上にインストールされているソフトウェアによって決まります。


/sbin/rc3 スクリプト

/sbin/rc3 スクリプトは、/etc/rc3.d スクリプトを実行して次の作業を行います。

/sbin/rc5 および /sbin/rc6 スクリプト

/sbin/rc5 および /sbin/rc6 スクリプトは、/etc/rc0.d/K* スクリプトを実行して、次の作業を行います。

/sbin/rcS スクリプト

/sbin/rcS スクリプトは、/etc/rcS.d スクリプトを実行して、システムを実行レベル S に移行します。これらのスクリプトによって次の作業が行われます。

実行制御スクリプトを使用してサービスを起動または停止する

実行レベルごとに対応するスクリプトを持つことの利点は、/etc/init.d ディレクトリ内の個々のスクリプトを実行することによって、システムの実行レベルを変更しないで (現在の実行レベルの) システムサービスを停止できる点です。

実行制御スクリプトを使用してサービスを起動または停止する方法

  1. スーパーユーザーになります。

  2. システムサービスを停止します。


    # /etc/init.d/filename stop
    
  3. システムサービスを再開します。


    # /etc/init.d/filename start
    
  4. サービスが停止または起動していることを確認します。


    # pgrep -f service
    

例 — 実行制御スクリプトを使用してサービスを起動または停止する

NFS サーバーデーモンを停止するには、次のように入力します。


# /etc/init.d/nfs.server stop
# pgrep -f nfs
#

そして、NFS サーバーデーモンを再開するには、次のように入力します。


# /etc/init.d/nfs.server start
# pgrep -f nfs 
341
343
347
345
# pgrep -f nfs -d, | xargs ps -fp
 UID   PID  PPID  C    STIME TTY      TIME CMD
  daemon   341     1  0   Aug 21 ?        0:00 /usr/lib/nfs/statd
    root   343     1  0   Aug 21 ?        0:00 /usr/lib/nfs/lockd
    root   347     1  0   Aug 21 ?        0:41 /usr/lib/nfs/nfsd
    root   345     1  0   Aug 21 ?        0:02 /usr/lib/nfs/mountd

実行制御スクリプトを追加する

サービスを起動または停止するための実行制御スクリプトを追加するには、そのスクリプトを/etc/init.d ディレクトリにコピーします。次に、サービスを起動または停止する rcn.d ディレクトリ内にリンクを作成します。

実行制御スクリプトの命名法についての詳細は、/etc/rcn.d ディレクトリ内の README ファイルを参照してください。次に、実行制御スクリプトを追加する方法について説明します。

実行制御スクリプトを追加する方法

  1. スーパーユーザーになります。

  2. スクリプトを /etc/init.d ディレクトリにコピーします。


    # cp filename /etc/init.d
    # chmod 0744 /etc/init.d/filename
    # chown root:sys /etc/init.d/filename
    
  3. 適切な rcn.d ディレクトリへのリンクを作成します。


    # cd /etc/init.d
    # ln filename /etc/rc2.d/Snnfilename
    # ln filename /etc/rcn.d/Knnfilename
    
  4. スクリプトのリンクが指定のディレクトリ内にあることを確認します。


    # ls /etc/init.d/ /etc/rc2.d/ /etc/rcn.d/
    

例 — 実行制御スクリプトを追加する

次の例は、xyz サービスの実行制御スクリプトを追加する方法を示しています。


# cp xyz /etc/init.d
# chmod 0744 /etc/init.d/xyz
# chown root:sys /etc/init.d/xyz
# cd /etc/init.d
# ln xyz /etc/rc2.d/S100xyz
# ln xyz /etc/rc0.d/K100xyz
# ls /etc/init.d /etc/rc2.d /etc/rc0.d

実行制御スクリプトを無効にする

実行制御スクリプトを無効にするには、ファイル名の先頭に下線 (_) を付けてファイル名を変更します。下線またはドット (.) で始まるファイルは実行されません。接尾辞を追加してファイルをコピーすると、両方のファイルが実行されます。

実行制御スクリプトを無効にする方法

  1. スーパーユーザーになります。

  2. スクリプト名の先頭に下線 (_) を付けて、スクリプト名を変更します。


    # cd /etc/rcn.d
    # mv filename _filename
    
  3. スクリプト名が変更されたことを確認します。


    # ls _*
    # _filename
    

例 — 実行制御スクリプトを無効にする

次の例は、S100datainit スクリプトの名前を変更する方法を示しています。


# cd /etc/rc2.d
# mv S100datainit _S100datainit
# ls _*
# _S100datainit

x86: ブートファイル

これまでに説明した実行制御スクリプトおよびブートファイル以外にも、Solaris x86 システムのブートに使用する追加ブートファイルがあります。

表 11–5 x86: ブートファイル

ファイル 

説明 

/etc/bootrc

Solaris リリースのブートに使用するメニューとオプションを含む 

/boot

システムをブートするために必要なファイルとディレクトリを含む 

mdboot

第 1 レベルのブートストラッププログラム (strap.com) をディスクからメモリーにロードする DOS 実行可能ファイル

mdbootbp

第 1 レベルのブートストラッププログラム (strap.com) をフロッピーディスクからメモリーにロードする DOS 実行可能ファイル

rc.d

インストールスクリプトを含むディレクトリ。内容の変更はできない 

solaris

ブートサブシステムの項目を含むディレクトリ 

solaris/boot.bin

Solaris カーネルまたはスタンドアロンの kadb をロードする。この実行可能ファイルは、ブートファームウェアサービスも提供する

solaris/boot.rc

Solaris x86 版を識別し、DOS エミュレーションモードで Device Configuration Assistant (デバイス構成用補助) を実行する 

solaris/bootconf.exe

Device Configuration Assistant (デバイス構成用補助) の DOS 実行可能ファイル 

solaris/bootconf.txt

Device Configuration Assistant (デバイス構成用補助) の国際化されたメッセージを含むテキストファイル (bootconf.exe)

solaris/bootenv.rc

ブート環境の設定用変数を含む 

solaris/devicedb

master ファイル (リアルモードドライバでサポートされるすべての有効なデバイスのデータベース) を含むディレクトリ

solaris/drivers

リアルモードドライバを含むディレクトリ 

solaris/itup2.exe

インストール時更新 (ITU) プロセスで実行される DOS 実行可能ファイル 

solaris/machines

以前は使用されていたが、現在はもう使用されていないディレクトリ 

solaris/nbp

ネットワークブート関連ファイル 

solaris/strap.rc

どのロードモジュールをロードするか、メモリー内のどこにロードするかの指示を含むファイル 

strap.com

第 2 レベルのブートストラッププログラムをメモリーにロードする DOS 実行可能ファイル