イーサネットは断続的に起動しません。

イーサネットは断続的に起動しません。

組み込みの Debian システムを使用していますが、イーサネットを一貫して動作させることはできません。 eth0が5〜10回起動され、失敗するたびにSSHを介して接続できず、pingに応答しません。回避策は、再起動するか、シリアルコンソールでログインしてeth0を終了して再起動することです。ifconfig eth0 down && ifconfig eth0 upデバイスが応答を停止するまで繰り返し再起動するか、繰り返し発行して問題を再現できます。

私の/etc/network/interfacesは次のようになります。

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
  address 192.168.1.122
  gateway 192.168.1.1
  netmask 255.255.255.0

ネットワークが機能すると、dmesg次のように表示されます。

[ 2612.775183] PHY found at addr 7
[ 2612.776944] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 2614.414704] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

言わないときdmesg

[ 2617.224970] PHY found at addr 7
[ 2617.227005] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready

ネットワークが動作している場合、ifconfig出力は次のようになります。

eth0      Link encap:Ethernet  HWaddr 00:d0:69:46:d9:08  
          inet addr:192.168.1.122  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::2d0:69ff:fe46:d908/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1528  Metric:1
          RX packets:3242 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1382 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:300701 (293.6 KiB)  TX bytes:132344 (129.2 KiB)
          Interrupt:22

出力されない場合はifconfig次のとおりです。

eth0      Link encap:Ethernet  HWaddr 00:d0:69:46:d9:08  
          inet addr:192.168.1.122  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1536  Metric:1
          RX packets:3355 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1430 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:310120 (302.8 KiB)  TX bytes:136800 (133.5 KiB)
          Interrupt:22

ネットワークが動作している場合、ip link show eth0出力は次のようになります。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1528 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:d0:69:46:d9:08 brd ff:ff:ff:ff:ff:ff

何かがうまくいかないときにip link show eth0与えられます:

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1536 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 00:d0:69:46:d9:08 brd ff:ff:ff:ff:ff:ff

私の現在の解決策は、スクリプトがeth0の出力を解析しip link show eth0、eth0が表示されるまで再起動することです。しかし、これはハッキングされているようです。

何が問題なのか、どこを見なければならないのかご存知ですか?

ethtool eth0編集:問題がなければ出力:

Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                             100baseT/Half 100baseT/Full 
        Link partner advertised pause frame use: Symmetric
        Link partner advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 7
        Transceiver: internal
        Auto-negotiation: on
        Link detected: yes

ethtool eth0存在しない場合の出力:

Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 10Mb/s
        Duplex: Half
        Port: MII
        PHYAD: 7
        Transceiver: internal
        Auto-negotiation: on
        Link detected: no

また、使用していたシステムをイメージし、2番目の同じシステムでテストしましたが、ケーブルとルーターは異なりますが、同じ動作を確認しました。

編集2:ttsiodrasの観察に基づいていくつかのMTUテストを行いました。デバイスが起動すると、MTUは最初1508であることがわかりました。 eth0を終了して再起動するたびに、MTUは4ずつ増加し、最大1540に達した後も同じままです。残念ながら、MTUとネットワーク接続が失われたときの間には何の関係もないようです。私はMTUを1508から1540のさまざまな値に手動で設定してみましたが、手動のMTU設定に関係なく、まだネットワークに問題が発生します。

答え1

これは、以前のバージョンとの互換性のためにわずかにシステム化されたDebianパッチに関連している可能性があります。しかし、これは回避策ですが、いくつかの問題があります。全体の内容は以下で確認できます。トピックに関する Debian Wiki ページ。私たちの目標は、rcSinitスクリプトを含むパッケージにsystemd固有のコードを追加して、Stretch(次のDebianバージョン)の問題を解決することです。ほとんどの作業は完了しましたが、一部しか残っていません。

この問題を解決する方法:

  • rc.localあなたの場合に最も重要なスクリプトが正常に実行されていることを確認するスクリプトを追加し、そうでrcSない場合は問題を解決してください(実行するのに役立ちsystemctl status foo.serviceます)
  • ネットワークスクリプト用のシステムユニットを作成または拡張してインポートします(一部のテストが必要)
  • systemdシステムで次のように交換しますsysvinit(少し過剰になる可能性があります)。
  • システムログを調べて、どのサービス(ネットワークを除く)が依存関係サイクルに含まれているかを確認し、そのうちの1つ以上をシステムから削除します。
  • Network Managerをインストールして代わりに使用してくださいifupdown

関連情報