InitNG で高速ブートを実現しよう †InitNG って? †InitNG は /sbin/init に替わり高速で各種デーモンの起動やシステムのセットアップを行うツールです。通常のブート手順を踏まないため、高速な起動が出来ます。起動時だけではなく、ついでに再起動や電源停止時も非常に速くなるのが特徴的です。 ちなみに私の環境 Fedora Core 4(Linux 2.6.12-1.1398_FC4)、CPU は Celeron 2.66GHz、HDD は ATA 100 です。システム構成は"ワークステーション"でインストールした直後の状態です。導入前は起動にちょうど1分かかっていたものが、導入後は15秒まで短縮されました。4倍高速化されたことになります。 bootchart というブート時のシステム状況をグラフ化するツールを使った比較した画像をアップしてみました。
どうでしょう? 起動手順がスッキリして高速化されていることが分かります。(ただし、初期状態の InitING インストール直後は必要最低限のサービスしか起動されず、その分が速いといえば当然ですが、それでもネットワークや X も起動しますし、rc.sysinit を経由しない高速起動は目を見張るものがあります。一度、実際に目で見て感じてください) システム必要条件 †基本的に Linux 系で動作するようです。ただし、ハードディスク内の構成が論理ボリュームだと動作しません。必ず df で見たとき、以下のような物理ボリュームでなくてはいけません。 $ df -Th Filesystem Type サイズ 使用 残り 使用% マウント位置 /dev/hda2 ext3 10G 2.6G 6.9G 28% / /dev/hda1 ext3 99M 9.2M 85M 10% /boot /dev/shm tmpfs 110M 0 110M 0% /dev/shm Fedora Core 4 では通常、論理ボリューム(LVM)へのインストールがデフォルト(初期設定値)となっています。その場合は正常に動作できません。。もし df を実行して、中に論理ボリューム(/dev/mapper/VolGroupXX〜の記述)がある場合は残念ですが現行バージョンでは対応していません。 $ df -TH Filesystem Type Size Used Avail Use% マウント位置 /dev/mapper/VolGroup00-LogVol00 ext3 85G 4.3G 76G 6% / /dev/hda1 ext3 104M 11M 88M 11% /boot /dev/shm tmpfs 393M 0 393M 0% /dev/shm 色々試してみましたが、必ずシングル・ユーザ・モードになってしまって通常のサーバとしては機能をなしません。。。以下のようなエラーを吐いてシングル・ユーザ・モードに移行してしまいます。 ** "initing_main.c", ready_to_quit(): ********* No more services! ************ -- line:76 WARN Sending all processes the TERM signal, and 2 sec... -- line:79 WARN Sending all processes the KILL signal... system is start up! Give root password for maintenance (or type Control-D to continue): ここで root パスワードを入れないと Kernel Panic を起こしてリセットボタンを押すはめになってしまいます……。 今後の InitNG バージョンアップ時の対応に期待しましょう。 また、ここでは Fedora Core 4 での検証方法を紹介します。ディストリビューション毎に注意事項があるようです。詳しい個別情報がフォーラム(英語)に公開されてます。記述があるのは Debian, Fedora Core, Gentoo, Ubuntu についてです。 あわせて、本当に高速化されているかどうか目で確認できるように、予め bootchart というブート時のシステム状況をグラフ化するツールをセットアップされた状態を想定しています。 なお、SELinux が有効な場合 Targeted では動作するようです。strict モードで動作させるには別途パッチが必要になるようです。 ライセンス †GNU Public License (GPL) version 2 ということで、無料で利用できます。作者さんに感謝ですね! 英語情報 †
InitNG のセットアップ †ここでは以下の条件下でのセットアップ情報を掲載しています。もし他の環境でうまく動作できましたら、私のページからリンクをはりますので、どうかお知らせ下さい。 セットアップ条件 †
セットアップ手順 †まずは、アーカイブの取得と展開。ここのあたりはお約束ですね。 $ cd /usr/local/src $ wget http://initng.thinktux.net/download/initng-0.1.6.tar.gz $ tar xfz initng-0.1.6.tar.gz $ cd initng-0.1.6 次に configure です。KERNEL-OS の指定をしないとエラーになるので、必ずづけてから make します。 $ ./configure KERNEL-OS=linux-gnu $ make $ make check 特にエラーが出なければ問題ありません。 # make install 問題が無ければ、次のような表示が出ます。 Initng is installed. Add init=/sbin/initng in your bootloader configuration eg. at the end of the kernel line in /boot/grub/grub.conf Have a lot of fun! ./gen_system_runlevel.sh Automatically generating system,runlevel,default.runlevel and up.i Adding daemon/sshd to default.runlevel Adding daemon/acpid to default.runlevel Done generating files. 次にブート時に bootchart がデータを収集する bootchartd の記述を変更します。 # cat /sbin/bootchartd | sed 's:/sbin/init:/sbin/initng:g' > /sbin/bootchartdng # chmod a+x /sbin/bootchartdng ちゃんと実行属性(x)がついているか念のために確認しておきます。 # ls -al /sbin/bootchartd -rwxr-xr-x 1 root root 5835 7月 30 21:49 /sbin/bootchartd このようになっていれば問題ありません。 最後にブートローダーの設定変更を行います。 # vi /etc/grub.conf title Bootchart logging root (hd0,0) kernel /vmlinuz-2.6.12-1.1398_FC4 ro root=LABEL=/ rhgb quiet init=/sbin/bootchartd initrd /initrd-2.6.12-1.1398_FC4.img この中の【 init=/sbin/bootchartd 】の記述を【 init=/sbin/bootchartdng 】と書き換えます(書き換えるのは bootchart に関する grub.conf の行だけで、間違えて InitNG ではない元々の記述を書き換えないように注意)。 title Bootchart logging root (hd0,0) kernel /vmlinuz-2.6.12-1.1398_FC4 ro root=LABEL=/ rhgb quiet init=/sbin/bootchartdng initrd /initrd-2.6.12-1.1398_FC4.img 次に InitNG の設定ファイルを変更します(Fedora Core 専用設定です)。 # vi /etc/initng/system.runlevel ファイルを開いたら、14行目 system/coldplug こちらをコメントします #system/coldplug 次にもう1つの設定ファイルを開きます。 # vi /etc/initng/default.runlevel ファイルの末尾に以下の行を追加します。 daemon/xfs daemon/gdm daemon/hald system/alsasound ファイルを保存したあとは、サーバの再起動をしてテストします。 あとは通常通りブートしたら設定成功です。 この設定では bootchart 用のデータが /var/log/bootchart.tgz に保存されています。このデータを元に画像を作成すると、設定前と後の起動時間の違いがはっきりします 今後 IntNG を使って常にブートさせたい場合は /etc/grub.conf を再度書き換えます。 default=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Bootchart logging root (hd0,0) kernel /vmlinuz-2.6.12-1.1398_FC4 ro root=LABEL=/ rhgb quiet init=/sbin/bootchartdng initrd /initrd-2.6.12-1.1398_FC4.img おそらく通常では【 default=1 】(上から2番目の通常の起動手順)が指定されていますが、これを1番上にするため【 default=0 】とします。 また kernel 行の "init" も【 /sbin/bootchartdng 】から【 /sbin/initng 】に書き換えて起動時のログを取らなくします(必要であれば取るままにしておいても問題ありません) default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Bootchart logging root (hd0,0) kernel /vmlinuz-2.6.12-1.1398_FC4 ro root=LABEL=/ rhgb quiet init=/sbin/initng initrd /initrd-2.6.12-1.1398_FC4.img その他は必要に応じて /etc/initng/ 内のファイルの編集を行うことで、より細かな動作制御が出来るようです。詳しくはドキュメントをご覧下さい。 InitNG の日本語情報 †日本語訳の情報を掲載します(の予定です)。 ※出典がないとの指摘がありますが、 私は README 等オリジナルの一次情報を参照しています。特定の URL を参照している場合は書いています。あと、ここは wiki で凍結してない箇所ですので、気に入らなければどうぞご自由にお書き換えいただいて結構です。 |