openSUSEの起動を高速化

openSUSEを使用していると、なにげに起動時間が遅いことが気になります。
openSUSEはLinuxの中では起動が速い部類に入るそうですが、やはり起動やその他のレスポンスの遅さは気になります。
満足できるレベルではありません。

というわけで起動高速化を試みてみましょう。
OSが起動してからデスクトップが利用できるようになるまで、さまざまな処理が行われています。中でも無駄な処理を省くことで高速化します。

まずは起動時間の測定には、起動プロセスのボトルネックを調査する「bootchart」を使用します。

bootchartのインストール

bootchartはyastからインストールできます。Packmanなどリポジトリを追加しておきましょう。


画像生成にJavaが必要なので、併せてインストールします。
open-Javaではなくsun-Java環境のほうなので、sun-Javaをインストールします。


[YaST]-[システム]-[ブートローダ]から、ブートコンフィグを変更します。
コマンドラインパラメータに「init=/sbin/bootchartd」を追加します。

bootchartではなく、bootchartdなのに気をつけましょう。

まずはbootchartでデフォルトの起動時間を計測します。
再起動したあと、bootchartコマンドを実行します。

#bootchart

バージョンによってはコマンドが見つからない場合、/var/log/bootchart.pngにすでにグラフが生成されていることもあります。

コマンドを実行したカレントディレクトリにpng形式でグラフが生成されます。
画像を見ると、計測プロセスの様子が表示されます。横軸が時間です。

起動時間は45秒となっています。

ここから起動プロセスをチューニングします。
(openSUSEを高速起動にしたsuperSUSEの話は最近耳にしませんね)
Linuxでは起動速度を早くする手はいくつかあります。いくつかあるのですが、その作業は簡単で気軽でGUIでなくてはなりません。
信念です。

IPアドレスをスタティックに

まずはNICはDHCPアドレスを使用せず、静的に設定します。DHCPは起動時にわずかながら待機が発生します。
簡単なので画像は示しません。
とりあえずDHCPアドレスをスタティックに変更したら、起動時間が1秒縮まりました。
焼け石に水です。
他のも試してみましょう。

サービスの停止

次に他に考えられるのはサービスの停止です。OS起動時に無駄なサービスが起動しないようにします。
サービスの停止は[YaST]-[システム]-[サービス]から、有効無効を変更します。熟練者モードを選択しましょう。


インストール環境にもよるでしょうが、標準で起動しているサービスの中で停止してもよさそうなものをピックアップしてみました。よく分からないなら、無効にしないほうがいいでしょう。
bluetooth bluetoshのプロトコル。bluetoothデバイスを使用していなければ必要ありません
earlysyslog システムスタート時のsyslog
joystick ジョイスティックのドライバです。下部の「セット/リセット」から無効化します
klogd カーネルログ出力。自分でカーネルのトラブルシュートしないと誓えば必要ありません
openct スマートカードの読み込みドライバ。下部の「セット/リセット」から無効化します
portmap DARPAをRPCポートにマッピングします。NFSなどで使います。我が家ではまず必要ありません
postfix メール送信システム。メールソフトの送信とは関係ありません
sshd SSHデーモン。遠隔からシェルに入らないと分かっていれば止めてもかまいません
smartd HDDのS.M.A.R.Tモニタリングデーモン。温度や回転数を監視しなければ必要ありません
splash splashデーモン。ディスプレイセットアップを提供します
splash_early splashデーモン。ネットワーク起動のアニメーションを提供します

さらにファイアウォールを止める

セキュリティ意識の低い人はセキュリティを止めることで高速化しましょう。
というわけでFireWallを無効化します。
[YaST]-[セキュリティとユーザ]-[ファイアウォール]で設定します。


次にセキュリティ機能であるAppArmorを停止します。
[YaST]-[Novell AppArmor]-[AppArmorコントロールパネル]


この時点で再起動してみました。


起動時間が15秒近く縮まりました。
シャットダウンの時間も短縮され、だいぶ快適になりました。
起動プログレスバーの非表示
Fedoraでは起動時のプログレスバー表示rhgbを無効にすれば起動が大幅に高速になるそうです。
というわけでopenSESEも起動時のプログレスバー表示を止めて、伝統的な起動プロンプトに変えてみました。
パラメータはブートローダの「splash=silent」を編集します。


結果 : 起動が5秒ほど遅くなりました。

駄目じゃないか。
どうやら起動プロセスは表示せず、デフォルトのまま隠蔽しておくほうが起動が速いようです。
ちなみにsplashの設定パラメータは
splash=silent 起動プロセスの代わりにプログレスバーを表示する(画像上)
splash=verbose openSUSEのロゴつきで起動プロセスを表示する(画像中)
splas=native Linuxの伝統的な起動プロセスの表示(画像下)



起動プログレスバーの非表示
次にスプラッシュスクリーンをオフにしてみましょう。
スプラッシュスクリーンはデスクトップが現れる前のイメージ画面のことです。


設定はスタートメニューの[デスクトップの設定(コントロールセンター)]-[外観&テーマ]-[スプラッシュスクリーン]から、顔像を「なし」を選択します。


そして再起動して計測すると、さらに3秒縮みました。いえ、他にも計測すると時間が長くなったり…。
どうやら安定しないようです。でも短縮される場合もあります。

他に起動速度アップするには、Initrdのドライバ読み込みの変更や、きわどいサービスの停止、カーネルチューニングをすれば高速化できますが、利便性や管理性を損なう恐れがあります。
なにより手間です。
カーネルチューニングは気が向いたときに試すとしましょう。

prev.gif