Linux

Dualboot:Windows 啟動後其他作業系統無法獲得 DHCP 租約

  • September 20, 2021

我在我的機器上雙重引導 Windows 和 Linux 大約 2 年了,從來沒有遇到過 dhcp 衝突的問題。

在最近的 Windows 20H2 更新之後,如果之前啟動過 Windows,我突然無法在 Linux 上執行 dhcp。

這似乎不是時間問題,因為我等了幾天后得到了相同的結果。我使用 AVM Fritz Box 作為我的路由器/dhcp 伺服器,讓 dhcp 在 Linux 上工作的唯一方法是重置 Fritz Box,然後它立即工作。

我之前使用了更廣泛的術語“Linux”,因為我使用各種發行版(Arch、Gentoo、Ubuntu)對其進行了測試,但沒有一個可以讓他們各自的 dhcp 客戶端與我的 Fritz Box 一起工作。我什至嘗試使用 FreeBSD 來排除 Linux 的問題。他們都列印了某種形式的“DHCP租約到期無法獲得IP”。

在重置我的路由器並再次獲得 dhcp 租約後,我啟動了 Windows,然後嘗試再次啟動 *nix 並遇到了同樣的問題。

老實說,我不知道這可能是什麼原因,因為正如我之前所說,在將我的 Windows 10 升級到最新版本之前它可以工作,而且我的 dhcp 伺服器在回答 dhcp 後突然拒絕工作對我來說沒有意義請求 Windows 10。

**編輯:**我的主機板是帶有 Intel Intel I217-V NIC 的 ASUS Sabertooth Z87。正如使用者 AB 正確懷疑的那樣,問題不在於獲得 DHCP 租約,而在於關閉 Windows 後 I217-V NIC 的狀態問題。有關解決方案,請參閱此文章:https ://unix.stackexchange.com/a/620766/442856

據華碩稱OP 的 SABERTOOTH Z87包含一個 Intel I217-V NIC。這讓我在 ArchLinux 論壇上描述了這個問題:

$$ SOLVED $$啟動 Windows 後的乙太網問題(Intel I217-V (e1000e))

如果這兩個註釋中的方法(其中三個導致第一個解決方法)糾正了 NIC 在 Linux 中的行為,您應該在您的系統上進行測試:

我們有一個贏家!

關閉所有電源管理功能確實可以解決問題。關閉它們,像往常一樣啟動 linux,沒有發現任何問題。然後回到 Windows,重新打開功能,打開 linux,壞了。所以我認為這些證據足以宣布這個問題已經解決(儘管犧牲了 WoL,我一點也不介意)

  • 實際的解決方案是重置 PCI 設備,這樣它就會回到冷啟動狀態,這是通用 e1000e驅動程序所期望的狀態,它可能無法正確處理這個特定的 NIC。

我的解決方案很簡單:在啟動網路介面之前重置 PCI 設備

您可能需要根據相同的註釋調整(並稍微清理一下)下面的腳本,尤其是在您擁有多個 NIC 的情況下。以root使用者身份執行。

#!/bin/bash

#Get the PCI-Address of network card (Caution: This works ONLY with ONE NIC)
PCI=`/usr/bin/lspci | /bin/egrep -i 'network|ethernet' | /usr/bin/cut -d' ' -f1`
PCIPATH=`/usr/bin/find /sys -name *\${PCI} | /bin/egrep -i *pci0000*`

#echo "PCI    =$PCI"
#echo "PCIPATH=$PCIPATH"
#ls -la $PCIPATH

/usr/bin/logger -t "ResetNIC" "Resetting PCI NIC ${PCIPATH}"

#Reset the PCI Device completely (like Power-ON/Off)
echo 1 >${PCIPATH}/reset

我希望這能解決你的問題。然後,您應該讓它在每次啟動時自動執行。

引用自:https://unix.stackexchange.com/questions/620658