Dualboot:Windows 启动后其他操作系统无法获得 DHCP 租用

Dualboot:Windows 启动后其他操作系统无法获得 DHCP 租用

我在我的机器上双启动 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 发出请求。

编辑:我的主板是华硕 Sabertooth Z87,配有 Intel Intel I217-V NIC。由于用户 AB 正确地怀疑问题与获取 DHCP 租用无关,而是关闭 Windows 后 I217-V NIC 的状态问题。解决方法请看这个帖子:https://unix.stackexchange.com/a/620766/442856

答案1

据华硕称,OP 的 SABERTOOTH Z87包括 Intel I217-V NIC。这让我在 ArchLinux 论坛上找到了对该问题的描述:

[已解决] 启动 Windows 后的以太网问题(Intel I217-V (e1000e))

您应该在您的系统上测试这两个注释中的方法(以及三个)这个导致第一个解决方法)更正 Linux 中的 NIC 行为:

  • 基于 Windows 的解决方法

    我们有一个赢家!
    关闭所有电源管理功能确实可以解决问题。关闭它们,像往常一样启动 linux,没有发现任何问题。然后回到 Windows,功能恢复,Linux 开启,坏了。所以我认为这些证据足以宣告这个问题已经解决(尽管牺牲了 WoL,我一点也不介意)

  • 实际解决方案是重置 PCI 设备,因此它将回到冷启动状态,这是预期的状态通用e1000e驱动程序可能无法正确处理此特定的 NIC。

    我的解决方案非常简单:在启动网络接口之前重置 PCI 设备

    您可能需要根据同一注释改编(并稍微清理一下)下面的脚本,特别是如果您有多个 NIC。运行为用户。

    #!/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
    

我希望这能解决您的问题。然后您应该让它在每次启动时自动运行。

答案2

不同的流程 - 有一个项目使用没有init.d/networking.

查看 sys 目录找到数据后,过程很简单。似乎很多设备都有重置选项,因此搜索了具有重置选项的设备max_link_speed。在我的系统上,这只是有线以太网和无线。然后通过替换 info 的开头和结尾,将要重置的行写入到文件 call out2 中。

cd /sys

find . | grep max_link_speed | sed 's_./dev_echo 1> /sys/dev_g;s/max_link_speed/reset/g' > /out2

sh ./out2

但 Windows 10 也遇到了同样的问题,搞乱了dhcpd.谢谢。由于第二行换行,因此在上面添加空行。

答案3

更简单的修复…启动 Linux 后只需运行 /etc/init.d/networkingforce-reload

这解决了我的问题。虽然每次从Windows切换到Linux时都需要运行它

相关内容