我正在尝试在 Arch Linux 主机上为 libvirt 设置一个没有 DHCP 的虚拟 NAT 网络设备。
我尝试过的:
# virsh net-define network.xml
Network default defined from network.xml
Run Code Online (Sandbox Code Playgroud)
[ network.xml]:
<network>
<name>default</name>
<bridge name="maas0" />
<forward mode="nat" />
<ip address="10.137.0.1" netmask="255.255.255.0" />
</network>
Run Code Online (Sandbox Code Playgroud)
我的笔记本电脑在启动时输出以下内容:
# virsh net-start default
error: Failed to start network default
error: internal error: Failed to initialize a valid firewall backend
Run Code Online (Sandbox Code Playgroud)
与此主题相关的所有其他线程都在谈论升级软件——我使用的是最新版本:
$ pacman -Q ebtables dnsmasq libvirt iptables
ebtables 2.0.10_4-5
dnsmasq 2.75-1
libvirt 1.3.3-1
iptables 1.4.21-3
Run Code Online (Sandbox Code Playgroud)
这可能是什么原因,internal error我可以做什么?
我已经设置了一个很好用的虚拟机,除了似乎不一致的自动调整大小功能。我让它随机工作了几次,但它也随机停止工作。它目前无法正常工作,我不确定我需要做什么才能让它可靠地工作(例如 VirtualBox 自动调整大小)。请参阅下面的我的配置。
设置
Host: Ubuntu 16.10
Guest: Ubuntu 16.04.2, et. al (I've tried with other Linux distros with similar results)
Guest: created using virt-manager
Guest: installed spice-vdagent
Guest: virt-manager > View > Scale Display > Auto resize VM with window (checked)
Run Code Online (Sandbox Code Playgroud)
香料
user@ubuntu:~$ ps aux | grep spice
root 805 0.0 0.0 30568 260 ? Ss 08:59 0:00 /usr/sbin/spice-vdagentd
user 1365 0.0 0.0 35124 2360 ? Ss 08:59 0:00 /usr/bin/spice-vdagent
user 1933 0.0 0.0 21292 1020 pts/17 S+ 09:00 …Run Code Online (Sandbox Code Playgroud) 我调查了这个话题,这是我的结论(但我仍然有问题,如果我的结论有任何错误,请纠正我):
虚拟机:
VMWare 于 1999 年开发了其 VM Hypervisor SW,但它是专有的。
动车组:
在 VMWare 之后 4 年后,法国开发商 Fabrice Bellard 于 2003 年开发了 QEMU(快速仿真器)Hyporvisor 并使其免费和开源。经过多年的社区发展,QEMU 然后成为“完全虚拟化”的 2 类管理程序。
QEMU 无需任何其他 VM SW 即可独立运行。
硬件虚拟化:
英特尔和 AMD 都在 2006 年推出了他们的硬件虚拟化技术(VT-x 和 AMD-V)。
KVM:
2006 年,一家小公司(两年后于 2008 年被 Red Hat 收购)为 Linux 开发了一个名为“KVM”的可加载内核模块,它能够使用前面提到的硬件虚拟化技术创建 VM。然后在 2007 年正式合并到 Linux 内核中。
我一直在尝试在当前的 Arch Linux (5.13.12-arch1-1) 主机系统中设置 Windows 10 VM。我使用 libvirt 设置虚拟机,并使用 virt-manager 作为 GUI 设置 KVM/QEMU。
NIC 卡已设置为“虚拟网络‘默认’NAT”并使用“virtio”设置。然而,即使在 Windows 上更新驱动程序后,它也无法连接到互联网并显示“无法识别的网络 - 无法访问互联网”。
ip linkArch的输出
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
altname wlp0s20f3
10: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode …Run Code Online (Sandbox Code Playgroud) QEMU 是否支持像VMware 的“链接克隆”这样的功能?
我想要完成的工作:我正在使用一些几乎相同的虚拟机设置一个测试环境。但是,全新的 Windows 安装需要超过 20 GiB,每个 VM 都会重复。
在 VMware 中,人们会创建一个“链接克隆”,它很可能是原始磁盘映像之上的写时复制层。
我们可以用 QEMU 做到这一点吗?我专门尝试使用virt-manager(libvirt)来完成此操作。
有关的:
我正在尝试创建可以看到彼此和主机的虚拟机。它们由 qemu/kvm 托管并通过 libvirt 进行管理。VM 的网络适配器使用 macvtap(VEPA 模式)创建以提高性能。
启用hairpinover switch后,无论是在VM之间还是在VM与Host之间,单播流都可以。
但是,当谈到多播时,我遇到了问题。我发现主机无法 ping6 每个虚拟机。使用 tcpdump,我观察到ff02::1:ff00:212从主机发送到多播地址的 Neighbor Solicitation 数据包没有被我的 VM 收到,其 ipv6 地址是2001:da8:a0:600::212/64. 显然,这个多播数据包应该已经通过 macvtap 传递给 VM。
由于组播问题,所有 ipv6 数据包丢失,邻居发现无法正常工作。
我确定交换机没有任何问题,因为当我通过物理网络适配器运行 tcpdump 时,我可以每秒看到两次 Neighbor Solicitation,一次出,一次进。
在我将主机上的 macvtap 接口设置为混杂模式后,VM 获得 Neighbor Solicitation 数据包以及其他一些应由 macvtap 过滤的多播数据包,但没有到其他 VM 的单播数据包,即使我 ping6 其他 VM 上的同时主持。
所以我认为在所有 macvtap 接口上启用混杂模式是一种可以接受的解决方法,但并不优雅。
我所有的主机和 VM 都是 CentOS 7.0。我已经尝试在我的主机上从 elrepo 安装 kernel-ml(linux 4.1.3) 但它没有区别。
所以:
请参阅下面的更新,了解我发现的有关此问题的更一般性质的内容。
我有一个运行 OVMF 固件的 Windows VM,带有 VFIO 直通功能,用于在 Arch Linux 主机上运行的显卡。我正在尝试在所述 VM 中启用 Windows Sandbox。Microsoft 文档表明在 L1 VM 中运行 Sandbox 应该是可能的,尽管他们的文档是为 Hyper-V 管理程序编写的。
当我在我的 VM 中启用 Windows Sandbox 并作为其安装过程的一部分重新启动时,VM 在启动过程中大约半秒失败。它会这样做两次,然后尝试启动修复。这是一个显示发生了什么的视频(对质量表示歉意)。该视频结束后,自动修复告诉我我的电脑无法正常启动。
如果我从那个环境进入恢复命令行并运行dism /image:D:\ /disable-feature /featurename:containers-disposableclientvm(即禁用 Windows Sandbox),我就可以很好地启动到我的系统中。在我的系统上,此问题始终可重现。
文档表明,如果计算机配置不支持 Windows 沙盒,则它不会成为 Windows 功能对话框中的启用选项,并且如果我设置了主机内核参数,kvm_intel.nested=0它确实会变灰。
此问题最初出现在 Windows 10 Pro 版本 1909 上,但更新到版本 2004(内部版本 19041.388)后问题仍然存在。
那么,我的问题是:我怎样才能得到错误消息而不是无消息崩溃,和/或我怎样才能让它不崩溃?我发现在没有错误消息或有用的日志条目的情况下很难在这种情况下进行谷歌搜索,而且我不知道从哪里开始。
我尝试过的事情:
我已经安装libvirt-daemon在完全更新的Ubuntu Server 18.04.1 LTS. 当尝试执行时libvirtd --listen,出现以下错误:
2018-08-24 21:03:18.641+0000: 2855: error : virFileReadAll:1420 : Failed to open file '/sys/kernel/security/apparmor/profiles': Permission denied
2018-08-24 21:03:18.641+0000: 2855: error : profile_status:100 : Failed to read AppArmor profiles list '/sys/kernel/security/apparmor/profiles': Permission denied
Run Code Online (Sandbox Code Playgroud)
的输出sudo ls -l /sys/kernel/security/apparmor/profiles是:
-r--r--r-- 1 root root 0 Aug 24 13:21 /sys/kernel/security/apparmor/profiles
Run Code Online (Sandbox Code Playgroud)
我的怀疑是 的权限/sys/kernel/security/apparmor/profiles应该是555. 这些错误似乎完全是由于权限配置错误造成的,因为sudo libvirtd --listen运行时没有错误。但是,我不想libvirtd在我的系统上以 root 权限运行。禁用apparmor也可能会消除该错误,但我也不想这样做。
那么我的问题是,这是配置错误吗?如果是,是配置错误libvirt还是配置错误apparmor?如果不是,这些错误的原因是什么?
我正在设置一个新的家庭服务器,以边缘偏执的安全为目标。
因此,所有可以进入虚拟机的开放端口都拥有自己的虚拟机。我使用 Ubuntu Server 作为主机,因为我喜欢免费的无需重新启动的内核修补。
我已经设置了四个 Debian VM,连接到默认的虚拟桥接口。我现在可以看到并访问应该从主机打开的端口,但是当我尝试从网络访问它们时,我失败了。当使用 nmap 查看它们时,它们显示为“已过滤”。
如何使这些端口可以从更广泛的网络访问?我可以将端口从物理接口转发到网桥上的子网吗?还是让访客使用我的实际路由器(而不是 KVM 内置的路由器)作为网关会更好?
使用 libvirt & 设置网络时virt-manager,在将流量转发到物理网络时,可以选择“开放网络”作为“网络模式”。
“开放网络”是什么意思/做什么?我认为它可能与隔离网络相同,但显然这没有多大意义,因为有一个单独的选项。
请参阅下面的示例屏幕截图...
我在 Linux Mint 17.1、内核 3.16.0-31-generic 上运行 KVM。唯一的访客是 Windows 8.1 虚拟机。我注意到,如果我在来宾运行时重新启动主机,则在主机重新启动后我无法恢复来宾。Virt-manager 仅将虚拟机显示为“已暂停”,没有可用的电源或恢复选项。virsh当我尝试恢复它时也会出现错误:
zach@koln ~ $ virsh list
Id Name State
----------------------------------------------------
2 windows8 pmsuspended
~ $ virsh resume 2
error: Failed to resume domain 2
error: Requested operation is not valid: domain is pmsuspended
Run Code Online (Sandbox Code Playgroud)
我找到的唯一解决方案是终止 qemu 进程,这不太理想。我不在乎重新启动主机时虚拟机状态是否被丢弃,我只是希望它自动启动备份。
有什么建议么?
尝试启动我们的 kvm 虚拟机并在重新启动物理主机后出现此错误。
Error starting domain: unsupported configuration: Unable to find security driver for model selinux
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 88, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 124, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/libvirtobject.py", line 83, in newfn
ret = fn(self, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/domain.py", line 1479, in startup
self._backend.create()
File "/usr/lib/python2.7/site-packages/libvirt.py", line 1062, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: unsupported configuration: Unable to find security driver for …Run Code Online (Sandbox Code Playgroud) 假设我有 floppy.vfd 映像。
我应该如何填写 xml 文件才能附加软盘映像?我有类似的模板
<disk type='*' device='*'>
<device name='*' type='*'/>
<target dev='*' bus='*'/>
</disk>
Run Code Online (Sandbox Code Playgroud)
是的,我在网上搜索了有关附加软盘的信息,但没有找到,甚至在 libvirt.org 上也是如此
libvirt ×13
linux-kvm ×9
qemu ×7
virt-manager ×4
linux ×3
networking ×3
app-armor ×1
arch-linux ×1
centos-7 ×1
floppy ×1
hyper-v ×1
iptables ×1
permissions ×1
ubuntu ×1
ubuntu-18.04 ×1
virsh ×1
virtual-host ×1