Linuxでネットワークリンクがダウン・アップを繰り返したりして安定しない場合に、リンクに関する設定を手動で行い暫定対処する方法です。
例えば、syslogで次のようにリンクアップ・ダウンが記録されている場合に対処します。
[ 663.280761] r8169 0000:02:00.0 eth0: link up [ 663.755513] r8169 0000:02:00.0 eth0: link down [ 667.422364] r8169 0000:02:00.0 eth0: link up [ 667.944179] r8169 0000:02:00.0 eth0: link down
次の記事で紹介した ethtool を使用します。
Linux でネットワークのリンク速度やケーブル断線を検出する パソコン鳥のブログ
今回の例では、実行の結果、下記の赤字の箇所のように Link detected: no となっており、リンクがダウンしています。
また Speed: 10Mb/s でリンク速度が 10M になっていました。
このPCでは、本来は 1000M になっているはずです。
同様に Duplex: Half となっていますが、ここも本来は Duplex: Full のはずです。
# ethtool eth0 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Advertised pause frame use: Symmetric Receive-only Advertised auto-negotiation: Yes Speed: 10Mb/s Duplex: Half Port: MII PHYAD: 0 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000033 (51) drv probe ifdown ifup Link detected: no
Speed や Duplex の値は、ネットワークカードとハブとのオートネゴシエーション機能によって設定されますが、ハブとの相性問題か、適切に設定できていませんでした。
そこで、手動でこれらの値を設定してみます。
root で実行します。
まず、オートネゴシエーションをオフにします。
# ethtool -s eth0 autoneg off
Cannot set new settings: Invalid argument not setting autoneg
と出てエラーになった場合は、次のように一旦 on して off します。
# ethtool -s eth0 autoneg on # ethtool -s eth0 autoneg off
リンク速度を 100M/Full に設定してみます。
オートネゴシエーションがオフの場合、1000M には出来ないので、100M にします。
# ethtool -s eth0 duplex full # ethtool -s eth0 speed 100
実行で、次のようなエラーが出た場合、オートネゴシエーションがオフになっていません。
前述の手順でオフにしておいて下さい。
Cannot advertise speed 100 Cannot advertise duplex full
リンク速度を 100M/Full に設定後、再度 ethtool で確認してみると、Link detected: yes でリンクアップしました。
# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000033 (51)
drv probe ifdown ifup
<strong> Link detected: yes</strong>
これで、とりあえずは通信できるようになりました。
以上、ネットワークリンクの設定を手動で行い暫定対処する方法でした。