自宅サーバのネットワークが突如不安定になる問題の解決メモ。
samba 経由で 10GB 程度のファイルをダウンロードしていると、サーバと通信が途切れてその後まともに通信出来なくなるという現象。
上記なことをしなければまったく問題なかったので、解決まで時間がかかったかかった。
いろいろ無駄な作業もしたけど、忘れがたい経験になったのでまとめメモ。
原因追及
とりあえず情報収集。
手始めに /var/log/message を眺める。
いろいろあやしげな文字列がある中、ひときわ目立ってたのが次の1文。
$ vi /var/log/message ... NETDEV WATCHDOG: eth0: transmit timed out ...
このメッセージが出た直後から、まともに ssh すらできない状態に陥るもよう。
最初はクライアント側の Mac のせいかと思って、Windows から同じことを試したりしたけど、状況は変わらず
いま思ってみれば、サーバにエラー的なメッセージが出ている時点でほぼ原因はサーバと断定して良かったかもしれない。
とにかく原因はサーバ側にあるらしいとこまで絞り込めた。
けど、具体的な症状はこの時点で当然ながらさっぱりだったので、引き続き情報収集。
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:1C:C0:B4:F6:4A
inet addr:192.168.11.30 Bcast:192.168.11.255 Mask:255.255.255.0
...
# ethtool eth0
Settings for eth0:
...
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
...
# lspci -v
...
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
Subsystem: Intel Corporation Unknown device 0001
...いろいろコマンドの使い方は分かったものの、原因はさっぱり。
調べた情報を元に google 先生と協力しながら、
ethtool で speed を 1000 から 100 にしてみたり。
# ethtool -s eth0 speed 100
TCP Segmentation Offload をオフにしてみたり。(後でもともとオフだったことに気づいたり)
# ethtool -K eth0 tso off
けれど、解決には至らず。
検索語を変えながらさらに調べていくと、
「NIC のドライバのバージョンが違うとネットワークが不安定になるよ」という情報を発見。
どうも NIC とドライバのバージョン関係に原因がありそうということが分かった。
解決編
先人の知恵をもとに NIC のバージョンとドライバを確認。
# lspci | grep Ether 01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02) # lsmod | grep r81 ... r8169 ですよ的な表示 ...
バージョンは、RTL8111/8168B。
インストールされているドライバは、r8169。
!!
RTL8111/8168B には、r8168 がインストールされていないとだめとのこと。
ここまで来れば解決したも同然!
さっそくドライバを再インストール。
ssh 経由 だとサーバから切断されて作業が中断されること請け合いなので、直接キーボードを繋いでの作業がオススメ。
事前に ドライバ をダウンロードしてサーバに置いておく。
作業時は r8168-8.014.00.tar.bz2 を /usr/local/src に置いた。
$ su - # cd /usr/local/src # rmmod r8169 # vi /etc/modprobe.conf r8169 を r8168 に置換 ... # tar jxvf r8168-8.014.00.tar.bz2 # cd r8168-8.014.00 # vi readme ... すべき作業が書いてある... # make clean modules # make install # man depmod # depmod -a # modprobe r8168 # lsmod | grep r8168 # reboot
以上のコマンドを叩いた結果、無事に samba 経由で 10GB 程度のファイルをダウンロードすることが出来るようになった。
まさかのドライバ違いに思わぬ時間を取られてしまったけど、いい経験になったかも。






