連載
» 2008年09月30日 00時00分 UPDATE

実践でも役立つLPICドリル(6):Linuxシステムの起動と停止の手順 (1/4)

本連載は、Linux 認定試験 LPICに対応しています。一般的なLinuxユーザーレベルのトピックは省略し、システム管理とサーバ管理の内容を取り上げています。また、LPIC対策だけでなく、関連するトピックについて系統的な理解を問う問題も出題しています。連載の特徴は、対象となるプログラムのバージョンを可能な限り明記していること、比較的新しくまとまった解説がまだ少ないトピック、重要だが理解しにくいトピックを優先して取り上げていることです。問題を解き、その解説を読むことにより実践でLinuxを活用できる力を身に付けます。

[大竹龍史,ナレッジデザイン]

今回のディストリビューション:CentOS 4.4

問題を解く鍵 【1】【2】【3】

 このトピックに関連した設定や試験問題を解く際には、以下の項目がポイントになります。

【1】システムの起動シーケンスの概要を把握しておく

 システムの起動シーケンスを把握するとLinuxの仕組みや設定方法が分かり、システムトラブルへの対処もできるようになります。

 以下は一般的なLinuxの起動シーケンスです。

電源投入
 
 
BIOS
BIOSがディスクの先頭ブロック(MBR)に書き込まれたブートローダをメモリにロードする
 
ブートローダ
ブートローダがカーネル(vmlinuz)とイニシャルRAMディスク(initrd)をメモリにロードする。Linuxの代表的なブートローダにはLILOとGRUBがある
 
カーネル
カーネルは自身の初期化シーケンスを実行し、メモリにロードされている小さなファイルシステムinitrdをマウントする
 
initrd
カーネルはinitrdを利用してルートファイルシステムをマウントする(一般的にはinitrdを使用しますが、使用しない設定もある)
 
init
カーネルは自身の初期化の最終段階で1番目のユーザープロセスであるinit(プロセスIDは1)を生成する。起動時のカーネルオプションの指定により、init以外のプロセス(例えば/bin/bash)を生成することもできる。
 
/etc/inittab
initは起動すると/etc/inittabを読む。/etc/inittabにはシステムのランレベルと、initが起動するプログラムが記述されている
 
rcスクリプト
initは/etc/inittabに指定されている、rcスクリプト(Run Control Script)である/etc/rc.sysinit、/etc/rcを実行する


【2】代表的なブートローダ GRUBとLILOの仕組みを把握しておく

 ブートローダはディスクの先頭ブロック(MBR:Master Boot Record)に書き込まれています。PCのマザーボード上のICに書き込まれたプログラムBIOS(Basic Input Output System)から呼び出されて実行され、カーネルをメモリにロードするプログラムです。Linuxの代表的なブートローダにはLILO(LInux LOader)とGRUB(GRand Unified Bootloader)があります。

LILOについて

 LILOはGRUBが開発される前まで、Linuxの標準のブートローダとして使用されてきました。設定ファイル/etc/lilo.confにカーネルとinitrdのファイル名、カーネルオプションなどを記述し、/sbin/liloコマンドにより設定を行います。

/etc/lilo.confの例
prompt 
timeout=200 
default=CentOS 
boot=/dev/hda 
map=/boot/map 
install=/boot/boot.b 
message=/boot/message 
lba32 
image=/boot/vmlinuz-2.6.9-67.EL
       label=CentOS
       initrd=/boot/initrd-2.6.9-67.EL.img
       read-only
       append="rhgb quiet root=/dev/hda1"


図1 LILO によるブート 図1 LILO によるブート

 設定ファイル/etc/lilo/confで指定したカーネルとinitrdの位置情報は、/boot/mapにディスクのセクタ番号で記録されます。カーネルとinitrdを再構成した場合は、たとえファイル名に変更がなくても、/sin/liloコマンドを実行して/boot/mapファイルの情報を更新する必要があります。

GRUBについて

 GRUBはGNUによって開発された高機能なブートローダです。現在は多くのLinuxディストリビューションでGRUBが使用されています。設定ファイル/boot/grub/grub.conf(CentOS 4.4の場合/boot/grub/menu.lstはgrub.confへのシンボリックリンク)にカーネルとinitrdのファイル名、カーネルオプションなどを記述し、/sbin/grubコマンドあるいはシェルスクリプト/sbin/grub-installにより設定を行います。

/boot/grub/grub.conf の例
default=0 
timeout=5 
splashimage=(hd0,0)/boot/grub/splash.xpm.gz 
hiddenmenu 
title CentOS-4 i386 (2.6.9-42.EL) 
        root (hd0,0) 
        kernel /boot/vmlinuz-2.6.9-42.EL ro root=LABEL=/ rhgb quiet 
        initrd /boot/initrd-2.6.9-42.EL.img


図2 GRUBによるブート 図2 GRUBによるブート

 ブートローダによってカーネルや、カーネルを経由してinitに渡すオプションを指定できます。

 CentOS 4.4のgrub.confでは次のオプションが指定されています。

rhgb Red Hat Graphical Boot。システムのブートプロセスをグラフィカルに表示するオプションです。カーネルを経由してinitに渡され、シェルスクリプト/etc/rc.sysinitの中で実行されます
quiet ほとんどのカーネルメッセージを抑制し、表示を行わないオプションです

 また、次のようなオプション指定もできます。

init=/bin/bash カーネルが生成する1番目のプロセスをinitではなくbashに設定します。/etc/inittabの記述ミスでシステムが立ち上がらないときなど、この方法で立ち上げ、シェルから回復作業ができます

 現在立ち上がっているカーネルにどのようなオプションが指定されているかは/proc/cmdlineファイルで確認できます。

# cat /proc/cmdline
ro root=LABEL=/1 rhgb quiet


【3】initrdの役割と仕組みを把握しておく

 initrd(initial ram disk)はブートローダによってメモリにロードされる小さなルートファイルシステムです。カーネルは起動時にこのinitrdをマウントし、initrdの中のプログラムやモジュールを利用してディスク上の本来のルートファイルシステムをマウントします。

 initrdの中にはext2ファイルシステムモジュールext3.ko、Journaling Block Deviceモジュールjbd.koが含まれていて、インタプリタnashがinitスクリプトを実行することにより本来のルートファイルシステムがマウントされます。initrdの中のローダブルモジュールのバージョンはカーネルバージョンと同一である必要があるので、カーネルを再構築したときはmkinitrdコマンドによりinitrdを作り直す必要があります。

(実行例)
# mkinitrd /boot/initrd-2.6.9-42.EL.img `uname -r`


 initrdにはcpio形式とファイルシステム形式があります。CentOS 4.4ではcpio形式です。gzipで圧縮されたinitrdを解凍した後、それぞれのinitrdに次のようにしてアクセスします。

 cpio形式のinitrdを展開する

# cpio -iI initrd


 ファイルシステム形式のinitrdをマウントする

# mount -o loop initrd /mnt


       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。