Linuxでネットワークリンクが安定しない場合に手動で設定してみる

ALL
スポンサーリンク

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>

これで、とりあえずは通信できるようになりました。

以上、ネットワークリンクの設定を手動で行い暫定対処する方法でした。