CentOSでRealTekRTL8111bにr8168ドライバを適用する方法
2年ぐらい前のネタだが今でも解決してないので、時期を外しても何ともないぜ。
RealTekのRTL8111bという2年程前(LGA775世代)から広く使われているNICがあります。こいつのドライバはr8168が正しいのですが、CentOS5系で自動認識させるとr8169がロードされてしまうという問題があります。
r8169でも動いたりするのですが、ifconfigなどで見るとdroppedが増えていたりして危険なことがあります。一時的には動いても、ある日突然転送エラーを吐き始めて、ついには疎通しなくなったりすることも経験しています。数ヶ月の安定運用の後いきなり止まったりすることもあるので、油断出来ません。
この問題の詳細については、CentOS Wikiから参照出来ます。CentOS5.2から発生した問題のようですが、CentOS5.5でも相変わらずなのが困りもの。
■NICの型番とドライバの確認
RTL8111bが使われているかは、例えば以下のようにして確認できます。
$ /sbin/lspci |grep -i realtek 01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
こういうのが引っかかってきたらドライバを確認します。
$ /sbin/lsmod|grep r81
これでr8169が出てきたら気をつけた方がいいかもしれません。
■r8169の導入
ドライバを入れる方法はいろいろありますが、ELRepoからkmod-r8168を入れるのが便利です。
1. ELRepoを有効に
$ sudo rpm -Uvh http://elrepo.org/elrepo-release-0.1-1.el5.elrepo.noarch.rpm
2. ELRepoから上記のkmod-r8168をインストール。
$ sudo yum --enablerepo=elrepo install kmod-r8168
中身を少し見てみましょう。
$ rpm -ql kmod-r8168 /etc/depmod.d/r8168.conf /etc/modprobe.d/blacklist-r8169.conf /lib/modules/2.6.18-128.el5 /lib/modules/2.6.18-128.el5/extra /lib/modules/2.6.18-128.el5/extra/r8168 /lib/modules/2.6.18-128.el5/extra/r8168/r8168.ko /usr/share/doc/r8168-8.019.00_NAPI /usr/share/doc/r8168-8.019.00_NAPI/GPL-v2.0.txt /usr/share/doc/r8168-8.019.00_NAPI/README $ cat /etc/depmod.d/r8168.conf override r8168 * weak-updates/r8168
これで/lib/modules/2.6.XX-XXX.X.X.el5/weak-updates/r8168にsymlinkを貼って読ませるようです。kernelをアップデートしてもドライバを引き回せて非常に安心感があります。r8169をブラックリスト登録してくれるのも気が利いてますね。
3. /etc/modprobe.confのeth0(適宜読み替えのこと)の設定を以下に。
alias eth0 r8168
4. モジュールの入れ替え
1コマンドずつ入力していると、rmmodした時点でネットワークが切断されてコンソールが必要になってしまいます。
一発実行してしまえばネットワーク越しに入れ替えが出来るのでお勧め。
$ sudo /sbin/rmmod r8169 && sudo /sbin/depmod -a && sudo /sbin/modprobe r8168 && sudo /sbin/service network restart
これで作業は完了です。最初のように、
$ /sbin/lsmod|grep r81
として、r8168がロードされていることを確認しましょぅ。