Intel D525MW のオンボード NIC ドライバを r8168 にする

ダッシュボードから WordPress を操作中、突然以下のようなメッセージが表示されました。
利用できないデータベーステーブルがあります。データベースの復元が必要かもしれません。うーん・・・まぁいっ、いかーん。
というわけであわてて調査を開始、MySQL Cluster を利用しているので、そう簡単にデータベースが落ちるようなことがあっては困ります。APIノードを確認すると、mysqlのプロセスは残っています。

[[email protected] ~]# ps auxf | grep mysql
root     26457  0.0  0.0  65448   828 pts/0    S+   14:14   0:00          \_ grep mysql
mysql    21926  0.0  0.5 233996 22868 ?        Sl   Sep18   1:24 mysqld –defaults-file=conf/my.cnf

しかしながら、管理ノードから状況確認すると、

[[email protected] my_cluster]$ ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)]     2 node(s)
id=1 (not connected, accepting connect from tk-oha-mysqlcn1)
id=2 (not connected, accepting connect from tk-oha-mysqlcn2)

[ndb_mgmd(MGM)] 2 node(s)
id=49   @10.1.1.41  (mysql-5.1.56 ndb-7.1.15)
id=50   @10.1.1.42  (mysql-5.1.56 ndb-7.1.15)

[mysqld(API)]   2 node(s)
id=51 (not connected, accepting connect from tk-oha-mysqlcn1)
id=52 (not connected, accepting connect from tk-oha-mysqlcn2)

[[email protected] my_cluster]$

管理ノードだけ生きてるって意味ないですね 🙂
NDB 、 API ノードに共通なのはハードウェアで、Intel の D525MW という Atom D525 CPU のマザーボードを利用していて、オンボードの NIC は Realtek の RTL8111/8168B というチップを搭載しています。以前パーツ選びしているときにどこかの掲示板で注意喚起のあった NIC ドライバの話を思い出し、 NIC を確認してみました。

[[email protected] ~]# lspci | grep Eth
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

そして、ドライバを確認してみました。

[[email protected] ~]# lsmod | grep r81
r8169                  76613  0
mii                    38849  1 r8169

そうか、CentOS 5.4 を利用しているので r8169 問題かもしれません。
パケットがドロップされていないかを確認します。

[[email protected] ~]# ifconfig -a | grep drop
RX packets:255143729 errors:0 dropped:0 overruns:0 frame:0
TX packets:203850139 errors:0 dropped:0 overruns:0 carrier:0
RX packets:58514125 errors:0 dropped:0 overruns:0 frame:0
TX packets:58514125 errors:0 dropped:0 overruns:0 carrier:0
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

幸い、パケットのドロップは発生していませんでしたが、messages でデータベースへの接続ができなくなった時間帯に NIC の link up / link down が発生しているログが確認できました。これだけで原因と断定はできませんが、再発防止も兼ねて正しいドライバを導入しておくことにします。

[[email protected] ~]# cd /usr/local/src/
[[email protected] src]# tar vjxf r8168-8.025.00.tar.bz2
r8168-8.025.00/
r8168-8.025.00/Makefile
r8168-8.025.00/src/
r8168-8.025.00/src/rtl_eeprom.h
r8168-8.025.00/src/r8168_asf.h
r8168-8.025.00/src/rtltool.h
r8168-8.025.00/src/r8168_asf.c
r8168-8.025.00/src/r8168_n.c
r8168-8.025.00/src/rtl_eeprom.c
r8168-8.025.00/src/rtltool.c
r8168-8.025.00/src/Makefile
r8168-8.025.00/src/r8168.h
r8168-8.025.00/src/Makefile_linux24x
r8168-8.025.00/README
r8168-8.025.00/autorun.sh
[[email protected] src]# cd r8168-8.025.00

Realtek社のドライバダウンロードページから r8168 v8.025.00 を入手して展開後、autorun.sh を実行します。

[[email protected] r8168-8.025.00]# ./autorun.sh

Check old driver and unload it.
rmmod r8169
Build the module and install
make: *** /lib/modules/2.6.18-274.3.1.el5/build: そのようなファイルやディレクトリはありません.  中止.
make[1]: *** [modules] エラー 2
make: *** [modules] エラー 2

kernel-devel  パッケージが無いと上記のようなエラーとなったのであらかじめインストールしておくと良いと思います。インストール後、再度 autorun.sh を実行します。このシェルスクリプトを実行すると、r8169 を rmmod して r8168 を load してくれますので、あとは /etc/modprobe.conf で r8169 を読み込んでいる箇所を r8168 に置換して再起動をかけます。

[[email protected] r8168-8.025.00]# yum install kernel-devel
[[email protected] r8168-8.025.00]# ./autorun.sh

Check old driver and unload it.
rmmod r8169
Build the module and install
~(省略)~
Backup r8169.ko
rename r8169.ko to r8169.bak
Depending module. Please wait.
load module r8168
Completed.
[[email protected] r8168-8.025.00]# lsmod | grep r81
r8168                 229964  0
r8169                  76613  0
mii                    38849  1 r8169
[[email protected] r8168-8.025.00]# sed -i ‘s/r8169/r8168/g’ /etc/modprobe.conf
[[email protected] r8168-8.025.00]# shutdown -r now

再起動後、 lsmod で r8168 がロードされていることを確認できればOKです。

[[email protected] ~]# lsmod | grep r81
r8168                 229964  0
[[email protected] ~]# ifconfig | grep drop
RX packets:3186 errors:0 dropped:0 overruns:0 frame:0
TX packets:2993 errors:0 dropped:0 overruns:0 carrier:0
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0

ちょっとこれで様子をみてみることにします。

スポンサーリンク