![Hyper-V Ubuntu 网络问题复制大量数据](https://linux22.com/image/556179/Hyper-V%20Ubuntu%20%E7%BD%91%E7%BB%9C%E9%97%AE%E9%A2%98%E5%A4%8D%E5%88%B6%E5%A4%A7%E9%87%8F%E6%95%B0%E6%8D%AE.png)
我正在尝试通过网络将大量数据(约 50 GB)从运行 Ubuntu 11.04(Natty Narwhal)的 Hyper-V 托管虚拟机复制到另一台(非虚拟)Ubuntu 主机,我计划使用该主机测试我们的某个 Web 应用程序的升级。我遇到的问题与虚拟机有关,我将在下文中将其称为“source.host”。此计算机运行 64 位 Ubuntu Server,其中加载了 2.6.38-8-server 内核和 Microsoft Linux Integration Components for Hyper-V 内核模块(hv_utils、hv_timesource、hv_netvsc、hv_blkvsc、hv_storvsc 和 hv_vmbus)。它使用 Hyper-V“合成网络适配器”作为其网络接口。
为了进行复制,我登录到具有数据的机器并运行以下命令(将远程机器称为“destination.host”)。:
$ cd /path/to/data
$ tar -cvf - datafolder/ | ssh [email protected] "cat > ~/data.tar"
这个过程运行了一段时间,然后在传输了 2-6 GB 的数据后突然停止。source.host 机器上的终端显示错误Write failed: broken pipe
。奇怪的是:发生这种情况后,“source.host”机器不再能够与网络的其余部分通信。我无法从“source.host”机器 ping 网络上的任何其他主机,也无法从网络上的任何其他主机 ping“source.host”机器。我同样无法访问“source.host”上托管的任何 Web 服务。
在“source.host”上运行ifconfig
显示网络适配器正常运行,具有正确的 IP 地址和一切。我尝试使用以下方法重新启动网络服务:
$ /etc/init.d/networking restart
但问题并没有消失。重新启动计算机使其能够再次与网络通信 - 它可以 ping 通并被其他主机 ping 通,并且 Web 服务也可以正常访问和使用 - 但再次尝试复制操作会导致相同的失败,需要再次重新启动。
作为一个实验,我尝试用直线替换上面的tar
--管道:ssh
scp
$ scp -r datafolder/ [email protected]:~
但无济于事
我认为问题可能与内核数据包发送缓冲区已满有关,因此我尝试将缓冲区大小增加到 12 MB(默认值为 128 KB),
# echo 12582911 > /proc/sys/net/core/wmem_max
但这也没有效果。
我现在猜测这可能是 Microsoft 合成网络驱动程序的问题,但我真的不知道。有人有什么建议吗?
提前非常感谢您!
答案1
如果在 Hyper-V 网络连接上启用了 Broadcom 组合,您是否尝试过禁用它?
我们必须将其设置为主动/被动,因为 broadcom 驱动程序 + linux vm 导致了 mac 地址混淆,并最终导致 Linux 客户机失去所有网络连接,直到重新启动/实时迁移或虚拟网络重新连接。
答案2
您对 hv_netvsc 模块的看法完全正确。此驱动程序的一些显著变化(包括 hv_vmbus)只出现在 2.6.39 和 3.0 中,这两个版本更加稳定。我看到使用这些驱动程序的任何 Ubuntu 和 Debian VM 上经常出现网络停滞或随机崩溃的情况
至少到 2.6.38 为止,我经常看到随机网络丢失,之后它变得更加稳定 - 但仍然不完美。