我试图通过运行Ubuntu 11.04(Natty Narwhal)的Hyper-V托pipe的虚拟机将大量(大约50 GB)的数据复制到我计划用于testing的另一个(非虚拟)Ubuntu主机上升级到我们的Web应用程序之一。 我遇到的问题是虚拟机,我将在后面称为“source.host”。 此机器正在运行带有2.6.38-8-server内核的64位Ubuntu服务器以及加载用于Hyper-V内核模块(hv_utils,hv_timesource,hv_netvsc,hv_blkvsc,hv_storvsc和hv_vmbus)的Microsoft Linux集成组件。 它的networking接口使用Hyper-V“合成networking适配器”。
要进行复制,我使用这些数据login到机器上并运行以下命令(调用远程机器“destination.host”。):
$ cd /path/to/data $ tar -cvf - datafolder/ | ssh [email protected] "cat > ~/data.tar"
这运行了一段时间,然后突然停止后,从2-6 GB的地方转移。 source.host机器上的terminal显示Write failed: broken pipe错误。 奇怪的是:在这之后,“source.host”机器不再能够与networking的其余部分通话。 我无法从“source.host”计算机上ping任何其他主机,也无法从networking上的任何其他主机ping“source.host”计算机。 我同样无法访问“source.host”上托pipe的任何Web服务。
在“source.host”上运行ifconfig显示networking适配器像平常一样正常运行,具有正确的IP地址和所有内容。 我试着重新启动networking服务
$ /etc/init.d/networking restart
但问题并没有消失。 重新启动机器使其能够再次与networking交谈 – 它可以ping通并被其他主机ping通,Web服务也可以正常访问和使用 – 但是再次尝试复制操作会导致相同的故障,需要另一次重启。
作为一个实验,我尝试用一个直接的scpreplace上面的tar sshpipe道:
$ scp -r datafolder/ [email protected]:~
但无济于事
考虑到这个问题可能与内核数据包发送缓冲区填满有关,我尝试将缓冲区大小增加到12 MB(从128 KB默认值)
# echo 12582911 > /proc/sys/net/core/wmem_max
但是这也没有效果。
我猜在这一点上,这可能是一个微软合成networking驱动程序的问题,但我不知道。 有没有人有什么build议?
提前非常感谢!
您是否尝试禁用broadcom团队,如果在hyper-vnetworking连接上启用?
由于broadcom drivers + linux vm导致mac地址混淆,最终导致Linux guest虚拟机在重新启动/实时迁移或虚拟networking重新连接之前丢失所有networking连接,所以我们必须将其设置为主动/被动。
你对hv_netvsc模块很对。 这个驱动程序(包括hv_vmbus)的一些显着变化只是在2.6.39和3.0时更稳定。 在我看到使用这些的任何Ubuntu和Debian虚拟机上,经常的networking延迟或随机崩溃是相当正常的
至less在2.6.38以前,我经常看到随机networking丢失,之后稳定得多,但还不完善。