I218-V、I219-V 系列網卡在 Linux 下突然關閉的解法
前情提要
在今天下午上傳一個檔案的過程中,突然發現傳輸過程斷斷續續的,接著就徹底連不上了,進到 pve 的後台查看,網卡和 IP 都還在,但就是無法連線上另一端。
症狀
使用dmesg
查看 kernel log 後發現出現了一堆 err 等級的 log
1 |
|
1 |
|
類似這樣的 log 在傳輸的過程中會不斷出現,一開始也許重開後還可以連線,但到後來就會直接徹底斷線,無法傳輸。
發生原因
把這些 log 貼到 google 上做簡單的查詢後就會發現這是一個存在 Intel I218-V、I219-V 系列網卡上很久的 bug 了,在使用 e1000e driver 時,如果有大流量通過就有可能觸發。
這個錯誤我查到最早的記錄在2011年就有了[1],我猜測可能是我更新後導致這個問題出現( 目前版本: PVE Version8、Kernel Version 6.8.8 )?不然實在沒有道理之前正常使用,突然就出問題。
根據這幾篇文章[2][3][4]的解釋,問題都指向了網卡開啟的 feature。
最有可能造成問題的可能是 tso( tcp-segmentation-offload ),其次可能是 gso( generic-segmentation-offload )
可以使用ethtool -k <network interface> | grep ' on'
來檢視網卡開啟了哪些功能。
使用ethtool -K <network interface> tso off
來將網卡的 tso 功能關閉,如果網卡關閉後仍然有問題,可以嘗試繼續關閉 gso 或其他功能,透過測試來判斷到底使哪個功能引起錯誤,只需要關閉對應的功能即可。
解法
找到引起錯誤的功能後就需要將設定自動在開機時應用,這一步有很多方法可以用,像是寫一個 systemd service,或是其他在開機時執行的方法皆可,不過我習慣將網路設置的部分集中在一起放到/etc/network/interface
舉例來說 eno1 是有問題的網卡,在他底下加上這行up ethtool -K eno1 tso off
即可在網卡開啟時自動關閉對應的 feature
1 |
|