去年末に Intel Core i7 8700K が出たタイミングでこれまで使用していたサーバーをリプレースしたのですが、ネットワーク周りのトラブルがずっと続いていてホトホト困っているので対応の履歴を残してみます。
起こっている現象
ある日突然(数時間おきの場合もあれば一週間以上大丈夫な場合もある)社内ネットワークが落ちてしまい、外部接続はおろか内部も接続が切れてしまう。
調べてみると HUB が死んでいるようで、その HUB に繋がっている計算機が接続できなくなっている。
さらに調べてみると、ファイルサーバーや Web サーバーなどを兼務している計算機で NIC が死んでいることがわかった。この計算機の OS は下記のような感じ。Ubuntu 16.04。
neo@matrix2:~$ uname -a
Linux matrix2.XXXX.co.jp 4.13.0-32-generic #35~16.04.1-Ubuntu SMP Thu Jan 25 10:13:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
neo@matrix2:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION=”Ubuntu 16.04.3 LTS”
neo@matrix2:~$
ログを確認すると NIC がリセットされていることがわかる
Feb 6 13:13:11 matrix2 kernel: [80014.946129] e1000e 0000:00:1f.6 enp0s31f6: Reset adapter unexpectedly
Feb 6 13:13:11 matrix2 kernel: [80014.946287] br0: port 1(enp0s31f6) entered disabled state
Feb 6 13:13:15 matrix2 kernel: [80018.988532] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Feb 6 13:13:15 matrix2 kernel: [80018.988605] br0: port 1(enp0s31f6) entered blocking state
Feb 6 13:13:15 matrix2 kernel: [80018.988614] br0: port 1(enp0s31f6) entered forwarding state
Feb 6 13:13:52 matrix2 kernel: [80055.906251] e1000e 0000:00:1f.6 enp0s31f6: Reset adapter unexpectedly
Feb 6 13:13:52 matrix2 kernel: [80055.906522] br0: port 1(enp0s31f6) entered disabled state
Feb 6 13:13:56 matrix2 kernel: [80059.956583] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Feb 6 13:13:56 matrix2 kernel: [80059.956662] br0: port 1(enp0s31f6) entered blocking state
Feb 6 13:13:56 matrix2 kernel: [80059.956670] br0: port 1(enp0s31f6) entered forwarding state
Feb 6 13:14:46 matrix2 kernel: [80109.922310] e1000e 0000:00:1f.6 enp0s31f6: Reset adapter unexpectedly
Feb 6 13:14:46 matrix2 kernel: [80109.922620] br0: port 1(enp0s31f6) entered disabled state
Feb 6 13:14:50 matrix2 kernel: [80113.984597] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Feb 6 13:14:50 matrix2 kernel: [80113.984657] br0: port 1(enp0s31f6) entered blocking state
Feb 6 13:14:50 matrix2 kernel: [80113.984660] br0: port 1(enp0s31f6) entered forwarding state
こういった内容が延々続いている。また、ルーターと ping で疎通確認をすると、最初に Reset adapter unexpectedly が起きた時点で接続が切れているらしいことがわかる。
現時点での解決策
以下の手順を踏むと、しばらくの間症状が出なくなる
- 問題が起きている PC の電源を完全に落とし、電源ケーブルも抜いて数十秒待った後に起動
- HUB の電源も一度切って入れなおす
HUB の電源オンオフやマシンの再起動でも一時的には治るが、大抵すぐに同じ問題が起きる。
これは到底解決策とは言えないので、根本的な原因の調査と対応をおこなう必要がある。
調査内容
まずは HUB, NIC, ネットワークケーブルそれぞれの不調を疑ったので、ひとつづつ交換してみる。
- HUB → 別のメーカー・型番のものに交換しても同じ症状が起きる
- ネットワークケーブル → 交換しても同じ症状が起きる
- NIC はオンボードなので、BIOS で殺したうえで USB 接続タイプの NIC を使用してみる → 同じ症状が起きる
次に、マザーボードの不調を疑ったので新たに別のメーカー、型番のものを調達して交換したものの症状は変わらず。
GRUB での ASPM 無効化
カーネルオプションで ASPM を無効化するとよいという内容が見つかったので、GRUB で ASPM を無効化
/etc/default/grub で設定
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash pcie_aspm=off”
→ 解決せず。
BIOS での ASPM 無効化
BIOS で ASPM を無効化
→ 解決せず。
TSO 無効化
Reset adapter unexpectedly で Google 先生に聞いてみるといくつかのサイトが引っかかる。
TSO 無効化をするとなおると書いているので試す。
/sbin/ethtool -K enp0s31f6 gso off gro off tso off
起動時に毎回実行する必要があるので、/etc/rc.local にも記述しておく。
→ 解決せず。
NIC のドライバの更新
NIC のドライバを更新してみる。
更新後の環境は以下の通り
neo@matrix2:~/tmp$ ethtool -i enp0s31f6
driver: e1000e
version: 3.2.6-k
firmware-version: 0.2-4
expansion-rom-version:
bus-info: 0000:00:1f.6
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
neo@matrix2:~/tmp$
→ 解決せず。ただ、ドライバが最新になっていないかも?要確認。
(ToDo)disabling enhanced C1 power saving state (C1E) in the BIOS settings
https://superuser.com/questions/1270723/how-to-fix-eth0-detected-hardware-unit-hang-in-debian-9
(ToDo)Update Firmware
neo@matrix2:~/tmp$ lspci -nn -s 00:1f.6 -v
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-V [8086:15b8]
Subsystem: ASUSTeK Computer Inc. Ethernet Connection (2) I219-V [1043:8672]
Flags: bus master, fast devsel, latency 0, IRQ 134
Memory at df300000 (32-bit, non-prefetchable) [size=128K]
Capabilities:
Kernel driver in use: e1000e
Kernel modules: e1000e
neo@matrix2:~/tmp$
もしかして解決?
再度問題が発生し、サーバーを再起動するとシステムディスクにエラーが発生して正常に起動できない。
コンソールに以下のようなメッセージが延々と出力される。EXT4-fs error ということなのでファイルシステムがおかしいようだが、fsck をしても正常だと言われてしまう。
結局いろいろ試してもこの問題は解決しなかった。ただ、このままだとサーバーが止まったままになってしまうので手持ちの HDD に dd でイメージをコピーしてそちらから起動したところ、何の問題もなく動作するようになった。
システムディスクに使用していた SSD が壊れていたのかもしれないが、ストレージの問題ならイメージのコピー中にエラーが出たりコピーしたイメージが壊れるなど何か問題が起きるような気がするのだがそんな様子もない。(dd の場合、エラーも含めてコピーしてしまうという話はありそう。。。)
この SSD はサーバーリプレース時に新規購入したものなのでまさかこれが壊れるとは思っていなかった。心当たりとしては、システム更新時に最初に使用していたマザーボードを電源周りのトラブル(煙を吹いた!)で交換しているので、その時に SSD にまで何か影響を及ぼしたのかもしれない。
いろいろと釈然としない部分はあるが、ひとまず現在の環境で様子見をしてみる。