我正在尝试使用libvirt使用以下命令创建虚拟机:
virsh create file
Run Code Online (Sandbox Code Playgroud)
内容"file":
<domain type='qemu' id='3'>
<name>testvm</name>
<memory>100</memory>
<vcpu>1</vcpu>
<os>
<type arch='i686'>hvm</type>
</os>
<devices>
<disk type='file' device='disk'>
<source file='/libtmp/VM-linux.0.2.img'/>
<target dev='hdc'/>
</disk>
</devices>
<on_reboot>restart</on_reboot>
<on_poweroff>preserve</on_poweroff>
<on_crash>restart</on_crash>
</domain>
Run Code Online (Sandbox Code Playgroud)
这是发生的错误。
error: Failed to create domain from file
error: internal error cannot load AppArmor profile 'libvirt-9cb01efc-ed3b-ff8e-4de5-7227d311dd15'
Run Code Online (Sandbox Code Playgroud)
我无需加载映像文件即可创建虚拟机。
每次配置文件名称不断更改。我试图停止它并创建虚拟机,但出现了同样的错误。
任何指针将非常有帮助。
我有一个 QEMU 映像,其中存储了快照。现在我正在使用 libvirt 来启动它。
但是,我希望能够从同一图像/快照运行多个实例。
我想我可以通过克隆 virtual-hd 并安装/创建一个新域(virsh)然后运行从快照恢复来做到这一点。但我希望能够在从我决定需要运行图像 X 的另一个实例到该实例从存储的快照运行的时间之间以尽可能短的延迟“即时”完成此操作。
有人做过类似的事吗?我开始思考也许 libvirt 的级别还不够低?
[编辑:抱歉,如果这还不清楚 - 我正在谈论 RAM+HD 快照,而不仅仅是 HD 快照,我已经知道如何创建...]
谢谢
我很难将此 QEMU 命令转换为 libvirt 域 XML:
qemu-system-x86_64 -enable-kvm \
-m 3072 \
-cpu core2duo \
-machine q35 \
-smp 2 \
-usbdevice keyboard \
-usbdevice mouse \
-vga std \
-device isa-applesmc,osk="${osx_osk_key}" \
-kernel "${chameleon_file_path}" \
-device ide-drive,bus=ide.2,drive=MacHDD \
-drive id=MacHDD,if=none,cache=none,file="${vm_hdd_img_file_path}"
-netdev user,id=hub0port0 \
-device virtio-net,netdev=hub0port0,id=eth0
Run Code Online (Sandbox Code Playgroud)
如果我从终端(Ubuntu 14.10)调用它,它会完美运行,但virsh domxml-from-native qemu-argvMacHDD 设备会失败并出现以下错误:
error: internal error: missing index/unit/bus parameter in drive 'id=MacHDD,if=none,cache=none,file="${vm_hdd_img_file_path}"'
Run Code Online (Sandbox Code Playgroud)
(注意:当然,我尝试用实际路径代替变量,同样的错误 - 如果我删除最后两个参数,即使包含变量,它也会将其转换为域 XML)
我该如何解决这个问题?或者域 xml 中最后两个参数的等价物是什么?(尝试了很多不同的组合,但无法使其与 libvirt/virsh 一起工作)
编辑
根据记录,这是我在没有 -device -drive 的情况下运行 virsh 的 domain-from-native 命令得到的结果 …
是否可以让 virt-viewer 以 2 个显示器启动?
背景:我们有一个基于 Linux 的零售系统,通常在具有多个显示器的终端上运行。基本上,当 X 启动时,我们会检测连接了多少个显示器,并据此配置我们的系统(即,我们有一个始终显示的主显示器,以及一个可选的辅助显示器,在具有 2 个屏幕的系统上显示)。为了进行测试,我们在虚拟机(基于 libvirt SPICE/QEMU)中使用 SPICE-VDAGENT 运行该系统,允许我们使用 virt-viewer 打开 2 个显示器,从而模拟与真实终端相同的设置。
问题是 virt-viewer 似乎无法启动 2 个显示器,一旦 X 启动,我总是必须使用“视图”->“显示器”菜单打开第二个显示器。这会导致问题,因为此时已经进行了屏幕检测和配置(并且由于仅打开了 1 个显示器,因此系统仅检测到 1 个屏幕)。
到目前为止,我发现的唯一解决方法是打开第二个显示器,然后重新启动 X 强制重新配置,但是我确实需要从一开始就打开第二个显示器,这样我们就可以获得双屏幕系统,而无需任何手动干预。
这可以做到吗?一个问题是第二个显示器只能在 SPICE-VDAGENT 启动后打开,并且只有 X 启动后才能启动。
请在下面找到我的 dom xml 示例。我正在运行命令 virsh create 并收到此错误:
Unable to open file <json file located inside install_dir>
Run Code Online (Sandbox Code Playgroud)
这个文件的权限都很好。
标签下的参数是否需要特殊权限qemu:commandline?无论我在本节中提到什么参数和文件,我都会收到错误。
<domain type='qemu' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<name>my_instance</name>
<uuid>35615c44-b004-4b3f-9f42-da182b9662ee</uuid>
<memory unit='KiB'>786432</memory>
<currentMemory unit='KiB'>786432</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='armv7l' machine='my_machine'>hvm</type>
<kernel>/home/user/KernelPath/zImage</kernel>
<dtb>/home/user/DTPPath/emmc.dtb</dtb>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-arm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/home/user/Install_Dir/emmc.dat'/>
<target dev='sd' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0'/>
<controller type='scsi' index='0'/>
<serial type='pty'>
<target port='0'/>
</serial>
<serial type='pty'>
<target port='1'/>
</serial>
<serial …Run Code Online (Sandbox Code Playgroud) 我在运行时遇到以下错误vagrant plugin install vagrant-libvirt
安装自制程序
\n/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"\nRun Code Online (Sandbox Code Playgroud)\n在自制软件中安装
\nbrew install --cask vagrant && \\\nbrew install make gcc qemu libiconv libvirt\nRun Code Online (Sandbox Code Playgroud)\n仔细检查 libvirt 路径
\n\xe2\x9e\x9c ~ brew --prefix libvirt\n/opt/homebrew/opt/libvirt\nRun Code Online (Sandbox Code Playgroud)\nHOMEBREW_HOME="/opt/homebrew/opt"\nLIBICONV_HOME="$HOMEBREW_HOME/libiconv"\n\nexport PATH="$LIBICONV_HOME/bin:$PATH"\nexport PATH="$HOMEBREW_HOME/make/libexec/gnubin:$PATH"\nexport LDFLAGS="-L$LIBICONV_HOME/lib"\nexport CPPFLAGS="-I$LIBICONV_HOME/include"\nexport CONFIGURE_ARGS="with-libvirt-lib=$(brew --prefix libvirt)/lib with-libvirt-include=$(brew --prefix libvirt)/include"\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x9e\x9c ~ vagrant plugin install vagrant-libvirt\n\nInstalling the \'vagrant-libvirt\' plugin. This can take a few minutes...\nFetching formatador-1.1.0.gem\nFetching fog-core-2.3.0.gem\nFetching fog-json-1.2.0.gem\nFetching …Run Code Online (Sandbox Code Playgroud) 我以前在 Virtualbox 中使用过 Vagrant,但 VB 不能在这台计算机上运行,所以我想我会尝试不同的方法,但我不太理解这个软件集群,它们的用途是单独和相互依赖的......我知道 Vagrant 机器可以有 QEMU 或 Libvirt(或 KVM?)提供程序,还有 qemu、qemu-kvm 和 vagrant-libvirt,我只是无法将它们全部划分开来以及它们的互连。我想在我的主机上运行带有同步文件夹的虚拟机。所有这些都是必需的,如何?如果不是,为什么以及如何一起使用?这样我才能更好地理解。在 Debian 10 上
我想使用自定义版本的qemu运行libvirt.但是,在我安装了我的qemu版本并重新启动后,我在dmesg中收到以下消息
type = 1400 audit(1338385059.381:51):apparmor ="DENIED"operation ="exec"parent = 1700 profile ="/ usr/sbin/libvirtd"name ="/ usr/local/bin/qemu-system-x86_64"pid = 1746 comm ="libvirtd"requested_mask ="x"denied_mask ="x"fsuid = 0 ouid = 0
我尝试编辑/etc/apparmor.d/abstractions/libvirt-qemu并添加以下行并重新启动
/ usr/local/bin/qemu-system-x86_64 rmix,
但问题仍然存在.我真的很新apparmor,事实上我没有读太多,直到我发现这个错误.任何帮助将不胜感激.
我对 KVM 和桥接完全陌生,需要你的帮助。我有一个带有 QEMU/KVM 的远程服务器,并且只能使用 SSH 连接。主机操作系统是 RHEL 7。来宾必须连接到网桥(ovs),他们可以看到对方并且无法访问外部网络。主机必须能够对访客执行 ping 操作。不得使用物理 NIC 接口,因为我可能会失去连接。所以这就像主机看到访客的每个虚拟接口并可以访问它们,并且访客通过桥接器看到彼此。我使用 libvirt 尝试按照How to Use Open vSwitch with Libvirt 的说明来配置它。请帮帮我。
首先我需要的是创建桥梁:
sudo ovs-vsctl add-br ovsbr
Run Code Online (Sandbox Code Playgroud)
然后我使用 virsh 配置域 XML 文件,如下所示:
<interface type='bridge'>
<mac address='52:54:00:71:b1:b6'/>
<source bridge='ovsbr'/>
<virtualport type='openvswitch'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Run Code Online (Sandbox Code Playgroud)
重新启动后,域桥已连接 vnet0 接口,该接口是来宾接口。在这种情况下如何提供寻址?我可以通过主机向访客提供静态地址吗?
我有两个节点和两个虚拟机
kvm01
-nic1 123.123.123.1
VM1
-vnet1 123.123.123.2 (public) -vnet2 10.0.0.1 (private)
kvm02
-nic1 123.123.123.2
VM2
-vnet1 123.123.123.4 (public) -vnet2 10.0.0.2 (private)
Run Code Online (Sandbox Code Playgroud)
如何设置 openvswitch 网络,以便 VM1 和 VM2 位于专用网络上,但主机位于两个不同的位置?
编辑:
运行此命令:
# ovs-vsctl add-port br-private vxlan1 -- \
set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.2
Run Code Online (Sandbox Code Playgroud)
导致此 OVS 配置:
root@backup01:~# ovs-vsctl show
6276bd0a-920b-469d-a4e0-90d990dd8f94
Bridge "br-private1"
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_host="107.150.29.72"}
Port "br-private1"
Interface "br-private1"
type: internal
ovs_version: "2.3.0"
root@kvmssd01:~# ovs-vsctl show
da6399d4-1435-437d-90d7-3e75c443389b
Bridge br-private
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: …Run Code Online (Sandbox Code Playgroud)