ソースコード・リテラシーのススメ

第16回 トラブルの状況を読む

この記事を読むのに必要な時間:およそ 4.5 分

過去数回に渡って最近のLinux起動の仕組みを解説し,その際に実行されるスクリプトや参照される設定ファイルなどを眺めてきました。実のところ,このあたりのシステムの基盤部分に関する設定は,ヘタにいじるとシステムが正しく起動しなくなることもあるため,一般ユーザはおろかシステム管理者でも通常は気にする必要のない部分だったりします。

しかしながら,筆者のようにディストリビューションの開発にたずさわっていると,このような基盤部分のトラブルにもしばしば直面します。

基盤部分のトラブルは,ディストリビューションの設計方針などとも関係するため,Google等で調べても直接解決することは少なく,付属ドキュメントや設定ファイル,ソースコードなどを総合的に検討する必要があります。

今回は,トラブル時の調査や分析の一例として,Plamo-4.5にext4ファイルシステムを組み込む際に遭遇したトラブルを用いて,それらトラブルの原因をどのように調べ,解決したかの例を紹介してみようと思います。

e2fsprogs-1.41 の導入

筆者がとりまとめ役をしているPlamo Linuxでは,ルートパーティションのファイルシステム(fs)として ext2/ext3/reiser の3種を使えるようにしていましたが,最近ではreiser fsの将来性が怪しくなると共に,ext4 fsも実用レベルになってきたようなので,ext4 fsに対応するための作業を始めました。

ext4 fsとはext2/ext3 fsの開発者たちが開発している新しいファイルシステムで,少々時代遅れの感のある ext2 の基本設計に, extentsやブロック番号の48ビット化,ディレクトリインデックスのハッシュテーブル化,タイムスタンプの高精度化など,さまざまな新機能を追加したファイルシステムです。

まず,ext4 fsを作成するためのツールであるe2fsprogsの最新版である1.41をビルドし,インストーラに組み込みました。また,インストール用のスクリプトでもext4をファイルシステムとして選択できるように修正しました。

この状態でテストしてみると,mkfs.ext4コマンドは正しく実行されるものの,パッケージをインストールしている途中で OOM killer が発生して,異常終了してしまいます。

図1 OOM killerが発生!

図1 OOM killerが発生!

“OOM(Out Of Memmory) killerとは,カーネルが使用可能なメモリを使い尽してしまい,動作中のプロセスをランダムに終了させる現象です。OOM killerは本来起きてはならない現象で,プロセス管理やメモリ管理が見直された最近のLinuxではまず発生しないはずです。

当初は「使っているカーネルにext4の機能を組み込み忘れたのが敗因だろう」と考えて,カーネルを最新版に更新してext4の機能を組み込むことにしました。Plamo-4.22で使っていたカーネルは2.6.24系でしたが,最近では2.6.26系が公開されているので,その最新バージョンである 2.6.26.1 を採用し,make menuconfig のファイルシステムの設定で Ext4dev/ext4 を有効にしたカーネルを作成,パッケージ化すると共に,インストーラのカーネルも更新しました。

再度テストしたところ,やはりパッケージをインストールする段階でOOM Killerが発生します。「これはおかしい」と,インストーラの各段階ごとにファイルシステムの状況やプロセス,メモリの使用状況などを確認しながら進めたところ,ext4 形式で作成したルートパーティションがマウントできていないようです。

インストーラのシェルを使って対話的に操作してもやはりエラーになってマウントできません。

# mkfs.ext4 /dev/sda1
mke2fs 1.41.0 (10-Jul-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
...
Thie filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

# mount /dev/sda1 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sda1,
       missing codepage or other error
       In some cases useful info is found in syslog - try
       dmesg | tail or so

エラーメッセージにあるようにdmesgの内容を調べてみたところ,unsupported optional featuresなるエラーが報告されています。

# dmesg | tail
....
Unikey successfully installed.
Ext3-fs: sda1: couldn't mount because of unsupported optional features (240).

「あれれ,なぜExt3-fsのエラーなんだろう?」と思って,カーネルがサポートしているファイルシステムの一覧を確認するために/proc/filesystemsを調べました。

# cat /proc/filesystems
nodev   sysfs
nodev   rootfs
...
nodev   devpts
        reiserfs
        ext3
        ext4dev
        ext2
nodev   ramfs
...

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたのが,いつの間にかミイラ取りがミイラになってOSSを仕事にするようになってしまいました。最近はスペシャリスト養成を目的とした専門職大学院で教壇に立ったりもしています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入