QEMU 网络通信损坏

QEMU 网络通信损坏

pacman使用虚拟机内的包管理器( )会随机给我损坏的包,如下所示:

error: <package>: signature from "<whomever>" is invalid
:: File /mnt/var/cache/pacman/pkg/<package>.pkg.tar.xz is corrupted (invalid or corrupted packgage (PGP signature))

我有以下设置:

  • Arch Linux 主机(内核5.3.11.1
  • 然后使用 UFW 防火墙 ( 0.36)
  • 然后将其配置为仅允许通过tun0OpenVPN ( ) 创建的网络接口进行连接2.4.8

网络连接在主机上的各个方面都正常工作至少五年了。我尝试设置一个来宾,它也是一个使用 QEMU ( 4.1.0) 的 Arch Linux,具有以下选项:

qemu-system-x86_64 \
    -name 'Arch Linux' \
    -display vnc=:0 \
    -m size=8G \
    -enable-kvm \
    -cpu host \
    -smp cores=2,threads=2 \
    -k en-us \
    -boot order=d \
    -cdrom "<iso>" \
    -drive "if=pflash,format=raw,readonly,file=<file>" \
    -drive "if=pflash,format=raw,file=<file>" \
    -drive "if=virtio,format=qcow2,file=<file>"

-nic user我的理解是,如果我没有为其指定任何额外的内容并且客人确实有互联网连接,那么它默认使用。

我尝试在不同的物理位置(SSD、HDD)上重新安装整个系统一百万次,希望是虚拟硬盘导致问题——但当然它没有解决任何问题。为了完整起见,虚拟驱动器创建如下:

qemu-img create -f qcow2 "<file>" 16G

有时,当我尝试足够多次并且很幸运时,我最终docker在来宾内安装了一个工作安装,并docker在下载容器时给我带来了有关损坏数据的相同随机错误 - 这让我相信它是一个网络配置相关错误。我尝试在 QEMU 之上使用libvirt(virshvirt-manager) 希望只有我配置错误,但我再次遇到了同样的问题。

有一次我的设置使用如下所示的网络配置:

# ...
-net "user,hostfwd=tcp::2222-:22,hostfwd=tcp::8000-:8000,hostfwd=tcp::4200-:4200,hostfwd=tcp::9222-:9222,smb=<path>" \
-net nic,model=virtio \
# ...

但这也不再起作用了。此时我对我做错了什么感到非常困惑......

答案1

同时我无法告诉你到底是什么原因导致了这个问题,我可以给你一些故障排除的想法建议:

如果您怀疑网络有问题,可以查看/proc/net/snmp。原版有点混乱,这就是我建议的原因</proc/net/snmp column -t | less -S。查看名称包含 的列CsumErrors

如果您怀疑损坏发生在磁盘级别(这正是我所怀疑的),请在那里使用 Btrfs,这将使您能够确定地找到它,因为它是 Linux 上唯一大量使用校验和的轻量级通用 FS。

— 当使用来宾虚拟机时fstrim,我发现 Qcow2 存在一些问题,尤其是 Btrfs 时。 ;-)

答案2

您是否使用 KVM 虚拟机管理器来启动 VM .. 如果是,您可以转到 GUI 中的设备配置文件并检查并将 nic 更改为 virtio.. 删除其他 nic 条目(如果有)

相关内容