Linux 開発者の Blog
諸事情により今回のエントリが最後になってしまいました。
私がたまに見ている Blog を挙げておきます。
ここから Alan Cox, Deve Miller, Greg Kroah-Hartman などの Linux カーネル開発者の Blog をたどることができます。
http://udrepper.livejournal.com/
glibc のメンテナー Ulrich Drepper の Blog です。
![]() |
|
コアテクノロジー部所属。
Asianuxの開発で北京に来ています。
kernelパッケージのメンテナンスをしています。
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 |
諸事情により今回のエントリが最後になってしまいました。
私がたまに見ている Blog を挙げておきます。
ここから Alan Cox, Deve Miller, Greg Kroah-Hartman などの Linux カーネル開発者の Blog をたどることができます。
http://udrepper.livejournal.com/
glibc のメンテナー Ulrich Drepper の Blog です。
ファイヤーウォールやプライベートネットワークのなかのマシンを NFS マウントしたいときもあると思います。SSH ポートフォワーディングができて NFS v4 が利用できるなら、以下のように三つのことだけやればできると思います。想定しているネットワークは下の方の図を参照してください。
1. insecure エキスポートオプション
NFS v4 サーバーでファイルシステムを insecure オプションをつけてエキスポートします。
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
/opt *(rw,fsid=0,insecure)
2. SSH ポートフォワーディング
NFS サーバのポート番号 2049 と NFS クライアントのローカルの適当なポート番号 (例えば 12049) を SSH サーバ経由でポートフォワーディングします。
root@nfsv4client # ssh -f -N -C mita@sshd.example.com -L 12049:nfs4d.example.com:2049
3. port= マウントオプション
ローカルホストのポートフォワーディングしたポート (ここでは 12049) に対して port= マウントオプションを指定してマウントします。
root@nfsv4client # mount -t nfs4 -o port=12049 localhost:/ /mnt/nfs
また /etc/fstab に以下のようなエントリを追加しておいてもいいと思います。
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
...
localhost:/ /mnt/nfs nfs4 noauto,port=12049 1 0
簡単にするため NFS v4 の基本的な設定については省略してしまいましたが Projects: NFS Version 4 Open Source Reference Implementation: などが参考になると思います。
256MB のメモリをはずしてもやはりへんな動作をすることがあったので、もう一度 memtest86+ を実行してみたところ、512MB のメモリのほうも一箇所壊れていました。
Tst Pass Failing Address Good Bad Err-Bits Count Chan
--- ---- --------------------- -------- -------- --------- ----- ----
4 0 00016caf4f0 - 364.9MB 5611fbfd 5611fb7d 000000080 431
一時間ほど流して 364.9MB の辺りの一箇所で 431 回もエラーを検出していました。このまま使いつづけるとファイルシステムまで壊してしまう恐れがあるので、メモリを取り換えるまで起動するのはよくないのですが、つぎのようなブートオプションを指定すれば、しばらくしのぐことができるかもしれません。
1. mem=360M
mem= ブートオプションを与えてメモリエラーのある箇所を使わないようにします。ただし、 360MB 以上のアドレスは全部つかえないのはもったいないかもしれません。また、もしメモリエラーがもっと低位のアドレスに起こっていたら、もっと少ないメモリしか使えません。
2. crashkernel=10M@360M
CONFIG_KEXEC を有効にしてカーネルをビルドすると crashkernel= ブートオプションが使えます。本来はクラッシュがおこったときに起動するカーネルを配置するアドレスを指定するためのものなのですが、このようにして 360MB-370MB の部分を予約して使われないようにします。
3. memmap=exactmap memmap=359M@1M memmap=141M@370M
memmap ブートオプションで利用するメモリマップを明示的に指定して 360MB-370MB を使わないようにします。ちょっとうまく説明できないので説明を省略しますが、 grub に次のようなオプションを追加しておかないと initrd の読み込みに失敗しました。
uppermem 500000
最近、北京では夕方から夜にかけて大雨になるという日が続くというへんな天気になっています。それと関係あるのかどうか分かりませんが、アパートのオートロックが壊れたり、洗面所の排水口が壊れたり、いろいろものが壊れていたのですが、自分のノートパソコンのメモリも壊れてしまいました。
いつも起動していたカーネルなのに、いろいろなプログラムが起動しなくなって、しばらくするとフリーズしました。とりあえず必要なデータのバックアップだけしようと再度起動しようとしても起動の途中のランダムなタイミングでパニックするようになりました。 そのうち起動時の BIOS のスプラッシュ画面すら出てこなくなってしまいました。
何十回に一回か起動することがあるのでそのタイミングで memtest86+ を実行したらいっぱいエラーがでてしまいました。
エラーのパターンを見ると、 single bit flip detector. に書かれているように 1bit だけ間違っているというものが多かったです。
とりあえず、このノートパソコンには 256MB と 512MB のメモリモジュールがついていたので 256MB の方をはずしたところ、うまく起動するようになりました。
日本にいるときに会社で Mac mini を使っていたのですが、むだに電源がはいっていたり、ダンボールのなかにしまってあるよりはましだと思って中国にもってきました。
ネットワークの設定をせずにもってきたのと、モニターを持っていないため、しばらくログインすることさえできませんでした。
先日、とりあえずダウンスキャンコンバータというものを買ってテレビをモニター代りにすることにしたのですが、テレビだと細かい文字が読みづらくて途中であきらめてしまいました。
TV の置いてあるところからルータの設置してあるところまで届く Ethernet ケーブルがなかったので、FireWire ケーブルで Mac mini と ThinkPad を接続して両方で eth1394 (IPv4 over IEEE 1394) モジュールをロードして直接ネットワーク接続して、ThinkPad からログインしてセットアップの続きをしました。
Linux カーネルに標準で備わっているドライバで動く無線 LAN カードわりと少ないようです。いろいろ検索して動作実績があるカードでも既に生産中止になっていたということも多いと思います。
BUFFALO の WLI-CB-G54S という無線 LAN カードはいまのところビックカメラなどどこでも売っていて Linux v2.6.17 から追加された bcm43xx というドライバで動作しました。
ファームウェアは bcm43xx ドライバの開発サイトで公開されている bcm43xx-fwcutter というツールで、Windows とか Mac OS 用のドライバの配布物から取り出す必要があるようです。また、ファームウェアをアップデートしたいときにも役立つかもしれないので手順を書いておきます。
まず、ファームウェアの元になる Windows とか Mac OS 用のドライバの配布物を見つける必要があります。bcm43xx-fwcutter の README にいろいろダウンロード可能な URL が載っているのでそこからダウンロードすることもできますが、ここでは BUFFALO WLI-CB-G54S 付属の CD-ROM のなかに入っているものを使うことにしました。
bcm43xx-fwcutter が対応しているファイル名と MD5SUM は -l オプションで表示されます。
# bcm43xx-fwcutter -l
...
その出力から付属の CD-ROM のなかの bcmwl5.sys が対応しているようでした。念のため -i オプションで確認します。
# bcm43xx-fwcutter -i /mnt/cdrom/driver/CBG54/WIN2000/bcmwl5.sys
bcm43xx-fwcutter can cut the firmware out of /mnt/cdrom/driver/CBG54/WIN2000/bcmwl5.sys
filename : bcmwl5.sys
version : 3.104.64.52
MD5 : 3ccb53e4f0f5e9f4ae270cb2924cb941
ファームウェアを抽出して、所定のディレクトリに保存します。
# bcm43xx-fwcutter -w /lib/firmware/ /mnt/cdrom/driver/CBG54/WIN2000/bcmwl5.sys
サーバセレクトという雑誌の六月号のボツになった記事のつづきです。
カーネルに組み込んでビルドされたモジュールのモジュールパラメータを設定したい場合は、カーネルのブートオプションとして設定する必要があります。
例えば e100 ネットワークドライバをカーネルに組み込んでビルドし、そのモジュールパラメータ debug を 1 に設定したい場合は e1000.debug=1 というブートオプションを与えます。
つまり、以下のようにブートオプションを設定します。
<モジュール名>.<モジュールパラメータ名>=<モジュールパラメータ値>
またカーネルに組み込まれたモジュールについての情報は modinfo コマンドで表示することはできません。ただし、カーネルイメージ vmlinux があれば、つぎのようにして組み込みモジュールパラメータの一覧を知ることができます。
$ nm -n vmlinux | grep __param_str_ | \
awk '{ print "p (char *) 0x" $1}' > list-param.cmd
$ gdb -batch -x list-param.cmd vmlinux | awk '{print $4}'
サーバセレクトという雑誌の六月号のボツになった記事の抜粋のつづきです。
モジュールについての情報を得るには modinfo コマンドを利用します。設定可能なモジュールパラメータの説明だけ表示したい場合はつぎのようにします。
# modinfo -p <モジュール名>
モジュールをロードしたあとに動的に変更できるものや、設定値を参照する価値のあるモジュールパラメータは sysfs ファイルシステムの以下のファイルから読み書きできるようになっています。
/sys/module/<モジュール名>/parameters/<パラメータ名>
サーバセレクトという雑誌の六月号ボツになった記事の抜粋のつづきです
Documentation/kernel-parameters にブートオプションの一覧や解説が書かれています。ただし、カーネルコンフィギュレーションによっては無効のものもありますし、このファイルには記述されていないものもあります。
もし利用しているカーネルイメージ vmlinux があればつぎのようにしてブートオプションの一覧を得ることができます。
$ nm -n vmlinux | grep __setup_str_[a-zA-Z_] | \
awk '{ print "p (char *) 0x" $1}' > list-setup.cmd
$ gdb -batch -x list-setup.cmd vmlinux | awk '{print $4}'
ただし、vga ブートオプションや parse_cmdline_early() (arch/i386/setup.c) のなかで設定されているような一部のブートオプションは表示されません。
会社の業務の一環でサーバセレクトという雑誌の六月号に 4 ページ記事を書きました、 いま日本にもどっているので、ちょっと気になって確認してみたところページの都合上いくつかボツになっている部分があったので、それを抜粋して紹介します。
kernel.panic と kernel.panic_on_oops カーネルパラメータと同じ設定をするブートオプションです。
なぜ同じような設定がカーネルパラメータとブートオプションの両方にあるかという理由は、カーネルパラメータは通常 /etc/sysctl.conf の設定ファイルに記述されたものがシステムの起動スクリプト実行中に設定されます。それ以前に パニックや Oops が起こる場合に備えて、デフォルト値 (panic=0, panic_on_oops=0) 以外に設定したい場合に利用します。
ログバッファの値をバイト単位で指定します。 SysRq-t などで大量のカーネルログを出力させたとき、ログバッファが溢れてしまう場合にはこのオプションでログバッファのサイズを大きくすることができます。ログを dmesg コマンドで見る場合には -s オプションで充分大きな値を指定する必要があるかもしれません。
以下の二つのブートオプションは起動時のトラブルに役立ちます。
カーネルの各初期化関数または、カーネルに組み込んでビルドしたモジュールの初期化関数を実行する前にその関数名を表示します。
Calling initcall 0xc03bc72c: init_mbcache+0x0/0x16()
Calling initcall 0xc03bc742: dquot_init+0x0/0xd3()
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
Calling initcall 0xc03bc815: dnotify_init+0x0/0x22()
...
printk() の出力を画面に表示するため機能が初期化される前の可能な限り早い段階でカーネルログが画面に表示できるようになります。ブートローダがカーネルイメージを読み込んだあと画面になにも表示されないままになってしまう場合は、これを試してみる価値があります。
NMI ウォッチドッグ機能によってローカルタイマー割り込みが長時間発生していないことを検知して Oops メッセージを出力させます。コールトレースを調べれば、どこでロックアップしたか分かります。(Documentation/nmi_watchdog.txt)
最近のコメント