如何使用 ethtool 命令管理乙太網卡

2020-06-06 22:34:00

ethtool 用於檢視和修改網路裝置(尤其是有線乙太網裝置)的驅動引數和硬體設定。你可以根據需要更改乙太網卡的引數,包括自動協商、速度、雙工和區域網喚醒等引數。通過對乙太網卡的設定,你的計算機可以通過網路有效地進行通訊。該工具提供了許多關於接駁到你的 Linux 系統的乙太網裝置的資訊。

在這篇文章中,我們將告訴你如何更改以下的引數以及如何檢視這些引數。這篇文章將幫助你在 Linux 系統中排除與乙太網卡相關的問題。

下面的資訊將幫助你了解乙太網卡的工作原理。

  • 半雙工:半雙工模式允許裝置一次只能傳送或接收封包。
  • 全雙工:全雙工模式允許裝置可以同時傳送和接收封包。
  • 自動協商:自動協商是一種機制,允許裝置自動選擇最佳網速和工作模式(全雙工或半雙工模式)。
  • 速度:預設情況下,它會使用最大速度,你可以根據自己的需要改變它。
  • 連結檢測:連結檢測可以顯示網絡卡的狀態。如果顯示為 no,請嘗試重新啟動網絡卡。如果鏈路檢測仍顯示 no,則檢查交換機與系統之間連線的線纜是否有問題。

如何在 Linux 上安裝 ethtool

預設情況下,大多數系統上應該已經安裝了 ethtool。如果沒有,你可以從發行版的官方版本庫中安裝。

對於 RHEL/CentOS 6/7 系統,請使用 yum 命令 安裝 ethtool

$ sudo yum install -y ethtool

對於 RHEL/CentOS 8 和 Fedora 系統,請使用 dnf 命令 安裝 ethtool

$ sudo yum install -y ethtool

對於基於 Debian 的系統,請使用 apt 命令apt-get 命令 安裝 ethtool

$ sudo apt-get install ethtool

對於 openSUSE 系統,使用 zypper 命令 安裝 ethtool

$ sudo zypper install -y ethtool

對於 Arch Linux 系統,使用 pacman 命令 安裝 ethtool

$ sudo pacman -S ethtool

如何檢查 Linux 上的可用網路介面

你可以使用 ip 命令ifconfig 命令(在現代發行版中已被淘汰)來驗證可用的、活動的網絡卡的名稱和其他細節:

# ip a或# ifconfig1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000    link/ether 00:10:22:35:23:sf brd ff:ff:ff:ff:ff:ff    inet 192.164.23.100/24 brd 192.164.23.255 scope global eth0       valid_lft forever preferred_lft forever

如何檢查 Linux 上的網絡卡(NIC)資訊

掌握了乙太網卡名稱後,就可以使用 ethtool 命令輕鬆檢視其詳細資訊,如下所示。

在 Linux 系統中,每個網絡卡(NIC)都被分配了唯一的名稱,如 ethX、enpXXX 等。

  • 舊的 Linux 發行版使用的是 eth[X] 格式。例如,RHEL 6 和它們的舊版本。
  • 現代的 Linux 發行版使用 enp[XXX]ens[XXX] 格式。例如,大多數現代 Linux 發行版都使用這種格式,包括 RHEL 7、Debian 10、Ubuntu 16.04 LTS。
# ethtool eth0Settings for eth0:        Supported ports: [ TP ]        Supported link modes: 1000baseT/Full                              10000baseT/Full        Supported pause frame use: No        Supports auto-negotiation: No        Supported FEC modes: Not reported        Advertised link modes: Not reported        Advertised pause frame use: No        Advertised auto-negotiation: No        Advertised FEC modes: Not reported        Speed: 10000Mb/s        Duplex: Full        Port: Twisted Pair        PHYAD: 0        Transceiver: internal        Auto-negotiation: off        MDI-X: Unknown        Supports Wake-on: uag        Wake-on: d        Link detected: yes

如何檢查乙太網卡的驅動程式和韌體版本

你可以使用 ethtool 命令的 -i 選項檢查驅動程式版本、韌體版本和匯流排的詳細資訊,如下所示:

# ethtool -i eth0driver: vmxnet3version: 1.4.16.0-k-NAPIfirmware-version:expansion-rom-version:bus-info: 0000:0b:00.0supports-statistics: yessupports-test: nosupports-eeprom-access: nosupports-register-dump: yessupports-priv-flags: no

如何檢查網路使用情況統計

你可以使用 ethtool 命令中的 -S 選項來檢視網路使用情況統計。它可以顯示傳輸的位元組數、接收的位元組數、錯誤數等。

# ethtool -S eth0NIC statistics:     Tx Queue#: 0       TSO pkts tx: 2053       TSO bytes tx: 7167572       ucast pkts tx: 4028081       ucast bytes tx: 399093197       mcast pkts tx: 0       mcast bytes tx: 0       bcast pkts tx: 0       bcast bytes tx: 0       pkts tx err: 0       pkts tx discard: 0       drv dropped tx total: 0          too many frags: 0          giant hdr: 0          hdr err: 0          tso: 0       ring full: 0       pkts linearized: 0       hdr cloned: 0       giant hdr: 0     Tx Queue#: 1       TSO pkts tx: 1955       TSO bytes tx: 6536945       ucast pkts tx: 3711838       ucast bytes tx: 346309662       mcast pkts tx: 0       mcast bytes tx: 0       bcast pkts tx: 1186       bcast bytes tx: 49812       pkts tx err: 0       pkts tx discard: 0       drv dropped tx total: 0          too many frags: 0          giant hdr: 0          hdr err: 0          tso: 0       ring full: 0       pkts linearized: 0       hdr cloned: 0       giant hdr: 0     Rx Queue#: 0       LRO pkts rx: 0       LRO byte rx: 0       ucast pkts rx: 5084776       ucast bytes rx: 4673133395       mcast pkts rx: 0       mcast bytes rx: 0       bcast pkts rx: 154143       bcast bytes rx: 45415676       pkts rx OOB: 0       pkts rx err: 0       drv dropped rx total: 0          err: 0          fcs: 0       rx buf alloc fail: 0     Rx Queue#: 1       LRO pkts rx: 0       LRO byte rx: 0       ucast pkts rx: 6346769       ucast bytes rx: 4835534292       mcast pkts rx: 0       mcast bytes rx: 0       bcast pkts rx: 3464       bcast bytes rx: 714646       pkts rx OOB: 0       pkts rx err: 0       drv dropped rx total: 0          err: 0          fcs: 0       rx buf alloc fail: 0     tx timeout count: 0

如何改變乙太網裝置的速度

你可以根據需要改變乙太網的速度。當你進行此更改時,網絡卡將自動掉線,你需要使用 ifup 命令ip 命令或 nmcli 命令將其重新上。

# ethtool -s eth0 speed 100# ip link set eth0 up

如何在 Linux 上啟用/禁用乙太網卡的自動協商?

你可以使用 ethtool 命令中的 autoneg 選項啟用或禁用自動協商,如下圖所示:

# ethtool -s eth0 autoneg off# ethtool -s eth0 autoneg on

如何同時更改多個引數

如果你想使用 ethtool 命令同時更改乙太網卡的多個引數,請使用下面的格式:

Syntax:ethtool –s [device_name] speed [10/100/1000] duplex [half/full] autoneg [on/off]
# ethtool –s eth0 speed 1000 duplex full autoneg off

如何檢查特定網絡卡的自動協商、RX 和 TX

要檢視關於特定乙太網裝置的自動協商等詳細資訊,請使用以下格式:

# ethtool -a eth0

如何從多個裝置中識別出特定的網絡卡(閃爍網絡卡上的 LED)

如果你想識別一個特定的物理介面,這個選項非常有用。下面的 ethtool 命令會使 eth0 埠的 LED 燈閃爍:

# ethtool -p eth0

如何在 Linux 中永久設定這些引數

在系統重新啟動後,你使用 ethtool 所做的更改將被預設恢復。

要使自定義設定永久化,你需要更新網路組態檔中的值。根據你的 Linux 發行版,你可能需要將此值更新到正確的檔案中。

對於基於 RHEL 的系統。你必須使用 ETHTOOL_OPTS 變數:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0ETHTOOL_OPTS="speed 1000 duplex full autoneg off"

對於基於 Debian 的系統:

# vi /etc/network/interfacespost-up ethtool -s eth0 speed 1000 duplex full autoneg off