Posted by & filed under server, unix.


更新と言うより、再設定と言った方が最適か。

現在サーバー機に使っているマザーボード、Intel社のD945GCLF2には、オンボードのGigabit LANチップがついている。

なるべく余計な物はつけない構成で稼働させているので、もちろんインターネットへの接続はこのオンボードのLANを使用している。

このサーバーを導入した当初から見られた挙動として、Sambaの不安定さがあった。

小さなファイルなら問題は無いが、大きなファイルになると、転送途中に必ずといって良いほど接続が途切れてしまう。何度も何度も再挑戦してやっと転送できる。といった感じ。

今までログもろくに見ないで、Sambaが悪い!と決めつけて、その都度Sambaの再起動をしてみたり設定を見直したりしてきたが、一向に改善しなかった。

Sambaのログを見てみると、丁度接続が切れたぐらいのタイミングで、Connection Timeoutと出ている。接続が切れたからと言ってSambaデーモンが終了してしまっているわけではない。

となると、ネットワークが怪しいとみてdmesgを見てみると、案の定、eth0が何度もlink downとlink upを繰り返しているのが確認できた。

ネットでこれらの状況で検索をかけてみると、どうも問題はkernelがNICを誤認識して、ドライバとして”r8168″を充てないといけないところを、”r8169″を充ててしまっている事が原因とのことだった。

そこで、きちんとNICに”r8168″ドライバを充ててやる為にドライバの再インストールを行った。

.

ドライバは、ネットからダウンロードしてくる。RealtekのHPが何故か閲覧不可だったので、アーカイブサイトからダウンロードしてきた。

RealTek RTL8111C drivers for Linux

ダウンロードしてきたらアーカイブを展開。

# tar xjvf r8168-8.008.00.tar.bz2
# cd r8168-8.008.00

中に入っている “readme” に詳しい方法が書いてあるのでその通りに行っていく。

まずは既存のドライバの削除。…の前にドライバ構築に必要なパッケージ(kernel-devel)がインストールされているか確認する。ドライバを削除するとNICが認識しなくなるので、別のパソコンでパッケージをダウンロードしなければならなくなる。非常に面倒なので、ドライバを消す前にダウンロードする。

パッケージをインストールしたら、”r8169″があるかチェックして、あるようなら削除。

# lsmod | grep r8169
r8169                  40836  0
mii                    13312  1 r8169
# rmmod r8169

削除が終わったら新しいドライバをmakeする。

# make clean modules
make -C src/ clean
make[1]: ディレクトリ `/root/src/r8168-8.008.00/src' に入ります
rm -rf *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags .tmp_versions Module.symvers Modules.symvers *.order
make[1]: ディレクトリ `/root/src/r8168-8.008.00/src' から出ます
make -C src/ modules
make[1]: ディレクトリ `/root/src/r8168-8.008.00/src' に入ります
make -C /lib/modules/2.x.xx-generic/build SUBDIRS=/root/src/r8168-8.008.00/src modules
make[2]: ディレクトリ `/usr/src/linux-headers-2.x.xx-generic' に入ります
  CC [M]  /root/src/r8168-8.008.00/src/r8168_n.o
/root/src/r8168-8.008.00/src/r8168_n.c: In function ‘rtl8168_down’:
/root/src/r8168-8.008.00/src/r8168_n.c:4494: 警告: unused variable ‘poll_locked’
/root/src/r8168-8.008.00/src/r8168_n.c: トップレベル:
/root/src/r8168-8.008.00/src/r8168_n.c:2420: 警告: ‘rtl8168_phy_power_down’ defined but not used
/root/src/r8168-8.008.00/src/r8168_n.c:3834: 警告: ‘rtl8168_reinit_task’ defined but not used
  LD [M]  /root/src/r8168-8.008.00/src/r8168.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/src/r8168-8.008.00/src/r8168.mod.o
  LD [M]  /root/src/r8168-8.008.00/src/r8168.ko
make[2]: ディレクトリ `/usr/src/linux-headers-2.x.xx-generic' から出ます
strip --strip-debug r8168.ko
make[1]: ディレクトリ `/root/src/r8168-8.008.00/src' から出ます

Errorが出なければ成功。続いてインストール。

# make install
make -C src/ install
make[1]: ディレクトリ `/root/src/r8168-8.008.00/src' に入ります
install -m 744 -c r8168.ko /lib/modules/2.x.xx-generic/kernel/drivers/net/
make[1]: ディレクトリ `/root/src/r8168-8.008.00/src' から出ます
# depmod -a
# insmod ./src/r8168.ko

最後にきちんとドライバが当たっているか確認。

# lsmod | grep r8168
r8168                  40592  0
# ifconfig -a
eth0      Link encap:イーサネット  ハードウェアアドレス 00:xx:xx:xx:xx:xx
          inetアドレス:10.0.0.10  ブロードキャスト:10.0.0.255  マスク:255.255.255.0
          inet6アドレス: fe80::21c:c0ff:feb4:cb26/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:279 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:252 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:199323 (199.3 KB)  TXバイト:52104 (52.1 KB)
          割り込み:252 

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:1485341 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1485341 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:853725539 (853.7 MB)  TXバイト:853725539 (853.7 MB)
# dmesg | tail
[2902334.084090] r8169 0000:01:00.0: PCI INT A disabled
[2902583.202193] [drm:i915_getparam] *ERROR* Unknown parameter 6
[2903055.279270] r8168 Gigabit Ethernet driver 8.008.00-NAPI loaded
[2903055.279334] r8168 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[2903055.279377] r8168 0000:01:00.0: setting latency timer to 64
[2903055.280426] r8168 0000:01:00.0: irq 2300 for MSI/MSI-X
[2903055.282482] r8168: This product is covered by one or more of the following patents: US5,307,459, US5,434,872, US5,732,094, US6,570,884, US6,115,776, and US6,327,625.
[2903055.282533] eth0: Identified chip type is 'RTL8168C/8111C'.
[2903055.282545] eth0: RTL8168B/8111B at 0xf8610000, 00:xx:xx:xx:xx:xx, IRQ 2300
[2903059.208342] r8168: eth0: link up
[2903069.856018] eth0: no IPv6 routers present