だめねこ飼育日誌 By suteneko
リネ2関連で検索して来たかたはこっちのwikiのほうがいいかも // プロフィール


2004-09-16 (Thu) 寝たのが5時半なんで非常に眠いですー (TT_TT)

[サーバ] はっはっは。鯖おちた〜〜〜

あははははっ (乾いた笑い)



FreeBSD 5 使ってるんですが、update 時のチェック漏れで、再起動後に帰ってきませんでした。既に復旧済みです。緊急避難的に mixi 日記を状況報告スレ化していたんですが、結局は私のミスでした m(_o_)m

(注:時間軸で書いているので、途中経過には間違った原因も書いてあります。原因だけ知りたい方は次の項目へ)

mixi 日記は閉じるのでこちらに転記しておきます。






(19:xx頃)

いつもどおりに update を行う。(リモートに置いてあるサーバなので single user にはなれない。なので、ちょっと危険だけどこれがいつもの手順)

# cvsup CVS-SUPFILE.src
# cvsup CVS-SUPFILE.ports
# make buildworld
# make buildkernel
# make buildkernel KERNCONF=MINAWA
# make installkernel
# pushd /boot ; mv kernel kernel.GENERIC ; popd
# make installkernel KERNCONF=MINAWA
# mergemaster -p
# make installworld

ここで敗因。/usr/src/UPDATING を読んでいない。

別のサーバで正常に update / reboot ができているたので、こっちも大丈夫だろう、と油断していました。






(21:25頃)

build が終わる。

手元のWindows

C:\Documents and Settings\someusername> ping -t minawa.punimoe.jp

リモート

# /sbin/shutdown -r now






(21:27頃)

本人青くなる。

このサーバ、以前に badsector を検出したディスクが繋がったままです。root partition がこの怪しいディスク。前にも書いたとおりリモートに置いてあるサーバなので、物理的な作業が発生するメンテナンスはできません。そのため、起動時に必要な部分最小限(/ /boot /etc /bin /sbin /lib /root)だけ残して運用してます。起動時に必要ないものは mount と symlink を駆使して生きているディスクに何とか移動してあります。

とりあえずこれを疑い始めました…。






(21:28頃)

本人真っ白になる






(21:29頃)

本人吊ってくる






(21:29頃)

アイキャンフラーイ






(21:31頃)

とりあえずtiarraを経由せずIRCに繋げてみる。

サーバ置かせてもらってる友達が居るかなーと期待したのだが、おらず。






(21:39頃)

irc上のrobot経由で携帯宛にメール送信。連絡待ちに入る。

いつ連絡があるか判らないし、連絡あったときに電車内だと何も手が動かせなくなるので、仕事をしながら待つことにする。






(22:00頃)

まだ連絡なし。連絡ページがわりに mixi 日記に書き込み開始。






(22:19頃)

電話キタ━━━━ヽ(゜∀゜ )ノ━━━━!!!!

吊ってたのからやっと解放されるか?






(22:25頃)

single user mode に落ちていたとのこと。"Enter shell name or return to /bin/sh" のメッセージで止まってました。(←メッセージうろ覚え)

リモートの友達は FreeBSD 使いじゃないので (ペンギン使い)、メッセージがわからないらしい。とりあえず fsck -y / をやってもらう。

OS何種類も使ってる人って珍しいんでしょうかね? (現役で使ってるOSが、FreeBSD,Debian(sarge),RedHat(7),Solaris8(sparc),WinXP)






(22:32頃)

fsck は一瞬で終わったらしい。exit で single user を抜けてもらうが、また "Enter shell name or return to /bin/sh" に戻ってしまうらしい。

メッセージを聞いてみたところ、fstab を処理するところで linprocfs (Linux 互換の procfs) のマウントに失敗してる?






(22:35頃)

カンで fstab から linprocfs を消したら、とりあえず起動。ssh で入れる状態に。






(22:59頃)

/etc/rc.d/* の、どこで失敗してるかをチェックしていく。

# /etc/rc.d/abi start
Additional ABI support: linuxELF binary type "3" not known.
/compat/linux/sbin/ldconfig: 1: Syntax error: "(" unexpected

なんじゃこりゃ。






(23:09頃)

/etc/rc.d/abi の内容を手動でやってみる。

# kldload /boot/kernel/linux.ko
# /compat/linux/sbin/ldconfig

うまくいった。

# kldload /boot/kernel/linprocfs.ko
# mount -t linprocfs linprocfs /compat/linux/proc/

これもOK。

これで、fstab で linprocfs を mount できなかった原因が /etc/rc.d/abi だと判明。

しかし、なぜだ……??






(23:21頃)

# kldstat
Id Refs Address Size Name
1 1 0xc0400000 2b3ea4 kernel

なんじゃこりゃ

他の正常なホスト

# kldstat
Id Refs Address Size Name
1 4 0xc0400000 2e60b4 kernel
2 14 0xc06e7000 536fc acpi.ko
3 1 0xc115c000 9000 ipfw.ko






(23:22頃)

原因の予想をたててみる。

(1) / がとらぶった
(2) single user に落ちてた ← 確認してもらったのがこの状態
(3) ↑のため、kernel module の読み込みができない
(4) / は、fsck かけてもらったので何とか復帰
(5) kernel module が読まれていないので linprocfs の mount に失敗する
(6) 2度目の single user mode






(23:45頃)

kernel を再インストールしても変わらず。/ に fsck がかかってる形跡は無いので disk trouble の線は無し。

アイキャンフラーイ (2度目)






(00:02頃)

# sysctl -a | grep boot

kern.module_path: /boot/modules

という行がある。kernel module は正しくは /boot/kernel にあるのであって、こんな場所にはないのに。

# kldconfig -r -v
/boot/modules

うーん。

正常なホストではどちらも出ない。なんで?






(00:05頃)

終電が近づくので焦り始める。15分くらいには出ないと間に合わない

(00:07頃)

ものは試し。

# cd /boot; ln -s /boot/kernel modules

これで reboot すると

# kldstat
Id Refs Address Size Name
1 5 0xc0400000 2b3ea4 kernel
2 1 0xc187f000 17000 linux.ko

こうなった。linux.ko があるだけ改善だが、まだおかしい。ipfw が無い。

そもそも、これでは /boot の下に置いてある kernel (kernel.GENERIC とか kernel.old とかがある) を切り替えられないではないか。






(00:12頃)

ここで初めて /usr/src/UPDATING を読んでみる (← 遅すぎだってば)

敗因。別のサーバでうまくいってたんで、こっちのサーバでもうまくいく、と思いこんでいました。UPDATING の確認を怠ってましたね。

読んで見たら、こんなの出てきました。ipfw が動かないのはこのせいっぽい。

20040817:
IPFW has been converted to use PFIL_HOOKS. This change is transparent to userland and preserves the ipfw ABI. The ipfw core packet inspection and filtering functions have not been changed, only how ipfw is invoked is different. Note that "option PFIL_HOOKS" is required to use IPFIREWALL compiled into the kernel or as KLD.

そして kernel module (この時点ではこれが原因かどうかは確信が持てず)

20040806:
Module loading has been fixed. Some older installations will drop proper module_path initialization and modules will fail to load properly. If you have a line in /boot/loader.rc that says: "initialize drop", do (i386 only):
cp /usr/src/sys/boot/i386/loader/loader.rc /boot/loader.rc
chown root:wheel /boot/loader.rc
chmod 444 /boot/loader.rc






(00:18頃)

loader.conf には。initialize drop のラインがありました。

orz






(00:20頃)

とりあえず↑の両方の対策やってみることにする。kernel 再構築かける。

んで、終電逃しました (T_T) ダッシュしても間に合いません。

深夜バス… (TT_TT)






(00:32頃)

うごいたーーーっ☆

fstab, /boot/modules を戻して、もいっかいリブートテスト






(00:35頃)

ディスクトラブルのため無くなっていた swap を、vnode を使って復活させる。swap 512M 確保。

# dd if=/dev/zero of=/home/swap bs=16M count=32
# mdconfig -a -t vnode -f /home/swap
# swapon /dev/md0
# swapinfo
Device 1K-blocks Used Avail Capacity
/dev/md0 524288 0 524288 0%






(00:38頃)

光の速さで明日へバス停へダッシュさー






(00:55)

バス間に合いました。51分と思いこんでいたのでダッシュしましたが55分でした (;_;) 走ったせいでおなかがいたい… (;_;)






(01:30頃)

帰宅

# /usr/local/sbin/portupgrade -arR

やってみる。

がんがれみなわちゃん。ミルクと牛乳どっちがいいですか?






(01:40頃)

メールチェックしたら、MRTG からのエラーメールが山ほど来ていた。

# /usr/local/etc/rc.d/snmpd start

起動せず。/var/log/messages にも何も出力なし。

もしかしたら、新しい kernel のもとで作り直さなきゃならないのかなーと思い、portupgrade の完了を待つ。






(02:00頃)

さっき買ってきたプリン食べる〜。ぷりん〜〜〜っ☆

デザートって食べると幸せになれるよね♪






(03:00頃)

chat したり、PSX で毎週録画とかなってる番組を消費したりしながら portupgrade 完了を待つ。

ねもい…

たまに意識が飛ぶ…






(03:30頃)

apache2 の build がエラーで落ちてた。ports にセキュリティ上の問題があるから update してもう一回、ってメッセージが出てる。

ふーん。こんなメッセージ出るんだ。

cvsup やって、もいっかい portupgarade

Java が OpenMotif 要求して、OpenMotif が imake6 を要求する。X なんて build されたらかなわないので、portupgrade に -O オプション追加。






(05:01)

portupgrade 完了。ねむい…

reboot






(05:06頃)

やっぱりsnmpdが動いていない。

マニュアル読むと、でふぉるとで log 出力先が syslog に向いていないみたい。オプションつけて再起動してみると

Sep 16 05:06:23 minawa snmpd[991]: init_kmem: kvm_openfiles failed: /dev/mem: No such file or directory

Σ(‾x‾) ぐへっ






(05:11頃)

これも /usr/src/updating に記述がありますた。

20040801:
The /dev/mem, /dev/io /dev/(null/zero) devices are now modules, so you may wish to add them to your kernel config file. See GENERIC for examples.

これやな。

kernel 再構築はもうやりたくなかった。眠いし。mem と io を kldload することでとりあえず解決。

(snmpd 起動だけなら mem だけで足りるのだけど、マザーボード上のセンサーからいろいろ取るためには io が必要だった)






まとめは次の項目にて。

[サーバ] はっはっは。鯖おちた〜〜〜(2) [13:16]

原因のまとめ。

●古いバージョンの /boot/loader.rc では、間違った記述があって kernel module が読めなくなる。このため、/etc/fstab に kernel module が必要なファイルシステムが書いてあると、boot してこなくなる。また、(ipfw.ko が読めないので) ipfw が死ぬので危険だろう。

この現象はどうも、最初に FreeBSD を入れたのがいつか、に依存しそうだ。minawa (最初が 5.1?) では引っかかって、別のサーバ (最初が 5.2.1) では正常だった。

●昔の kernel では options PFIL_HOOKS が無くても ipfw が動いたが、今は駄目になってる。これが無いと ipfw が動かないだけで、とりあえず boot はしてくるようだ。だが firewall が無い状態になるので当然危険。

●/dev/mem が kernel module にうつってるので、snmpd が動かない。device mem をつけて kernel を再構築すると以前と同じ状態に。

●snmpd のログはデフォルトでは syslog を向いてない。/var/log/snmpd.log のようだ。




なんで1日でこんなにいくつもハマってるんだろう… (;_;)




とりあえず /usr/src/UPDATING はちゃんと指さし確認しましょう… =□○_

本日のツッコミ