LCATを利用したKNOPPIXの高速化
2006/03/10
サイオンコミュニケーションズ株式会社
山城 潤(yamajun@syon.co.jp)
はじめに
2006年2月28日に(株)アルファシステムズさんからLinux Live CD高速化ツールキットLCATがリリースされました。
今回は、LCATを利用してKNOPPIXの高速化を試みます。
詳しい内容については、SourceForgeのLCATプロジェクトページにあるLCATのマニュアル(lcat_1.0.0_manual.pdf)を参照してください。
以下の作業はこのマニュアルを参考にして行いました。
作業の流れ
↓
KNOPPIX CD-ROMの内容をコピー
↓
cloopドライバー、高速起動に必要なツールのインストール
↓
プロファイリングモードでCD起動
↓
再編集
↓
高速化済みKNOPPIX CDの作成
作業の準備
| 今回利用した環境 | |
|---|---|
| 機種名 | ThinkPad R50e Type 1834-63J(一部部品を追加・交換) |
| OS | KNOPPIX 4.0.2 日本語版 |
| CPU | Celeron M 1.3GHz |
| メモリー | 768MB |
| HDD | 12GB |
LCATのソースコード(lcat_1.0.tar.bz2)をSourceForgeのプロジェクトページから入手します。また、LCATのマニュアル(lcat_1.0.0_manual.pdf)も同じサイトから入手できます。
今回作業を行った KNOPPIX 4.0.2 日本語版には、GTK+2.xの開発パッケージ(*-dev)が入っていないのでそのままではコンパイルできません。事前に開発パッケージのインストールを行います。
(以下の作業はKNOPPIX 4.0.2 日本語版で必要な作業です。 お使いのディストリビューションに合わせて読み替えてください) $ su Password: # apt-get update # apt-get install libgtk2.0-dev (上記コマンドを実行することでlibgtk2.0-devに関連するパッケージが 大量にアップデートされます。今回の作業ではこのアップデートのみで十分です)
LCATのコンパイルとインストールを行います。
$ tar xjf lcat_1.0.tar.bz2 $ cd lcat_1.0 $ ./configure $ make $ sudo make install
KNOPPIXのチューニング
KNOPPIXのCDを挿入した後、CDの内容をハードディスクにコピーします。
$ su # mkdir -p /KNOPPIX/master # cp -pR /mnt/cdrom/* /KNOPPIX/master
マニュアルではKNOPPIX CDに含まれるディスクイメージファイルminirt.gzに必要なファイルをコピーするように説明されていますが、マニュアル通りに作業を進めるとディスクイメージの容量が不足するので(KNOPPIX 4.0.2日本語版付属のminirt.gzの場合)、先に大きめに確保したminirootを作成します。
(元のminirt.gz をバックアップ) # mv /KNOPPIX/master/boot/isolinux/minirt.gz /KNOPPIX/master/boot/isolinux/minirt.gz.orig (新しいイメージファイルを作成し、ext2ファイルシステムを構築する) # dd if=/dev/zero of=miniroot bs=1024 count=4500 # mke2fs miniroot Proceed anyway? (y,n) y # fsck.ext2 miniroot (元のminirt.gzを展開) # gunzip -c /KNOPPIX/master/boot/isolinux/minirt.gz.orig > miniroot.orig (ディスクイメージをマウントし、その中身を新しいイメージファイルにコピー) # mkdir /mnt/test2 # mount -t ext2 -o loop miniroot.orig /mnt/test2 # mount -t ext2 -o loop miniroot /mnt/test # cp -Rp /mnt/test2/* /mnt/test
minirootイメージファイルに高速起動に必要なファイルをコピーします。
ここではlinuxrcスクリプトを改変する必要があります。
LCATマニュアルの通りに改変したlinuxrcスクリプトをここに置いておきます。
(linuxrcスクリプトを改変する) # vi linuxrc (LCAT付属のカーネルモジュールcloop.koをコピー) # cp /home/knoppix/lcat_1.0/cloop-2.02-opt/cloop.ko /mnt/test/modules/ (改変したlinuxrcスクリプト・プログラムをコピー) # cp linuxrc /mnt/test/linuxrc # mkdir /mnt/test/accel # cp /home/knoppix/lcat_1.0/util/cloopreadahead /mnt/test/accel (ディスクイメージのアンマウントと新ディスクイメージの圧縮) # umount /mnt/test2 # umount /mnt/test # gzip -c ./miniroot > /KNOPPIX/master/boot/isolinux/minirt.gz
ISO9660ディスクイメージを作成します。
# mkisofs -l -r -J -V "KNOPPIX_PROF" -hide-rr-moved -v -b boot/isolinux/isolinux.bin
-c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table
-o ./knoppix_prof.iso /KNOPPIX/master
イメージ作成後、k3bなどのCD-R書き込みソフトでCD-R/CD-RWにイメージを書き込みます。
(一度しか利用しないCDなので、上書きができるCD-RWを使うのがよいです)
プロファイリング用CD-R/RWをCDドライブに挿入し、起動直後に表示されるboot: プロンプトに以下のパラメーターを入力します。
boot: knoppix chkblk=10000 nocbr
KNOPPIX起動後にコンソールに以下のコマンドを入力して、ハードディスクにプロファイリングの結果を保存できるようにします。
$ su # mount /mnt/hda1 # cd /mnt/hda1/KNOPPIX
KNOPPIX起動時のディスクアクセス状況を調査するために、プロファイリングを行います。
# cat /proc/cloop/read_blocks > /mnt/hda1/KNOPPIX/boot.read_blocks
Konqueror, Firefox, OpenOffice.orgなど、実行頻度が高かったり、起動に時間がかかるアプリケーションのディスクアクセス状況のプロファイリングを行うことで、動作を改善することができます。
(アプリケーション実行前に、起動時のログを消去する) # echo 1 > /proc/cloop/reset_read_blocks (各種アプリケーションを実行・終了した後に以下のコマンドを実行する) # cat /proc/cloop/read_blocks > /mnt/hda1/KNOPPIX/apps.read_blocks
システムのイメージファイルに対するチューニング作業を行います。
$su # cd /KNOPPIX (システムイメージのバックアップ) # mv /KNOPPIX/master/KNOPPIX/KNOPPIX ./master.KNOPPIX.KNOPPIX.orig (システムイメージの最適化) # cloopoptimizer master.KNOPPIX.KNOPPIX.orig boot.read_blocks apps.read_blocks > /KNOPPIX/master/KNOPPIX/KNOPPIX (先読み指定ブロックリストの作成) # rblk2bl boot.read_blocks > /KNOPPIX/master/KNOPPIX/KNOPPIX.boot.lst
最適化済みのCDを作成します。
# mkisofs -l -r -J -V "KNOPPIX_OPT" -hide-rr-moved -v -b boot/isolinux/isolinux.bin
-c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table
-o ./knoppix_opt.iso /KNOPPIX/master
チューニングの成果
KNOPPIX 4.0.2日本語版とそれをベースに(株)アルファシステムズさんが高速化したAccelerated-KNOPPIX、そしてKNOPPIX 4.0.2日本語版をベースに独自にカスタマイズした自家製KNOPPIXで高速化の比較を行いました。
| KNOPPIXの種類 | 起動にかかる時間 |
|---|---|
| KNOPPIX 4.0.2 日本語版 | 2分12秒 |
| 自家製KNOPPIX | 2分20秒 |
| Accelerated-KNOPPIX | 1分04秒 |
| 高速化した自家製KNOPPIX | 1分17秒 |
自家製KNOPPIXの起動時間が1分以上短縮されることが確認されました。しかし、高速化した自家製KNOPPIXでは、起動時に表示されるboot: プロンプトにknoppix chkblk=10000を入力しないと、
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,3)
とエラーが出て起動が停止してしまいます。このエラーはKNOPPIX 4.0.2 日本語版をそのまま高速化した時にも発生しました。
マニュアルの記述のみでは完全なCDを作るところまで行けずに終わってしまいましたが、LCATの効果を確認することができました。今後、きちんと起動するCDを作成するところまでレポートしたいと考えています。
KNOPPIX日本語版5.0.1ベースでの最適化作業(2006年7月31日追記)
KNOPPIX日本語版バージョン5.0.1では最初からLCATによる高速化が組み込まれているので、プロファイリングと最適化作業だけでディスクを高速化できます。
- CDを作成します。起動スクリプトの書き換えは不要です(linuxrc等)。
(編集作業後、CDイメージを作成する) # mkisofs -l -r -J -V "MY_KNOPPIX" -hide-rr-moved -v -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ./knoppix_prof.iso /KNOPPIX/master - 新しいCDをPCに挿入し、”profile”モードで起動します
(boot: プロンプトに"profile"を入力する) boot: profile
- 起動後、コンソールからプロファイリングを行います
(作業結果をハードディスクかUSBメモリーなどに保存して下さい)
(作業結果をハードディスクに保存できるようにしておく) $ su # mount /mnt/hda1 # cd /mnt/hda1/KNOPPIX (OS起動のプロファイル結果を取得する) # cat /proc/cloop/read_blocks > /mnt/hda1/KNOPPIX/boot.read_blocks (アプリケーション実行前に、起動時のログを消去する) # echo 1 > /proc/cloop/reset_read_blocks (各種アプリケーションを実行・終了した後に以下のコマンドを実行する) # cat /proc/cloop/read_blocks > /mnt/hda1/KNOPPIX/apps.read_blocks
- Linux PC上でディスクイメージの最適化作業を行います
(あらかじめlcatのツールをインストールしたLinux PCが必要です。
本作業例では、/KNOPPIX 上で編集作業を行っているものとします)(システムイメージのバックアップ) # mv /KNOPPIX/master/KNOPPIX/KNOPPIX ./master.KNOPPIX.KNOPPIX.orig (システムイメージの最適化) # cloopoptimizer master.KNOPPIX.KNOPPIX.orig boot.read_blocks apps.read_blocks > /KNOPPIX/master/KNOPPIX/KNOPPIX (先読み指定ブロックリストの作成) # rblk2bl boot.read_blocks > /KNOPPIX/master/KNOPPIX/KNOPPIX.boot.lst (高速化済みKNOPPIX CDを作成) # mkisofs -l -r -J -V "MY_KNOPPIX" -hide-rr-moved -v -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ./knoppix_prof.iso /KNOPPIX/master
この手順に沿って作業を行えば、自家製KNOPPIXの起動を高速化できます。
私が作ったCDの場合には、KNOPPIX日本語版とほぼ同じ起動時間(それぞれ約1分30秒)を達成しました。また、起動時に特別なオプションを入力する必要はありません。























